From bdf28a9468454d5706afd9363eec88cfc8b98f9e Mon Sep 17 00:00:00 2001 From: cavacado Date: Tue, 17 Oct 2023 08:55:58 +0800 Subject: [PATCH 01/13] chore: ds store --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index e1632f13..f3b2bfd9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.DS_Store /node_modules /coverage .nyc_output From 07db876fc83697070810aede53f04190b6d6c6a6 Mon Sep 17 00:00:00 2001 From: cavacado Date: Thu, 12 Oct 2023 18:09:27 +0800 Subject: [PATCH 02/13] feat: init release --- package-lock.json | 2 +- package.json | 13 +++++-------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index dc421fa0..6580dca6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "@govtechsg/open-attestation", + "name": "@tradetrust/open-attestation", "version": "0.0.0-development", "lockfileVersion": 3, "requires": true, diff --git a/package.json b/package.json index ea12195c..f4365f28 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "@govtechsg/open-attestation", + "name": "@tradetrust/open-attestation", "version": "0.0.0-development", "description": "## Usage", "main": "dist/cjs/index.js", @@ -29,10 +29,7 @@ "/dist", "/scripts" ], - "author": "Raymond Yeh (http://geek.sg)", - "contributors": [ - "RJ Chow (https://about.rjchow.com)" - ], + "author": "Tradetrust team", "license": "Apache-2.0", "devDependencies": { "@commitlint/cli": "^17.6.7", @@ -90,12 +87,12 @@ }, "repository": { "type": "git", - "url": "https://github.com/Open-Attestation/open-attestation.git" + "url": "https://github.com/TradeTrust/open-attestation.git" }, "bugs": { - "url": "https://github.com/Open-Attestation/open-attestation/issues" + "url": "https://github.com/TradeTrust/open-attestation/issues" }, - "homepage": "https://github.com/Open-Attestation/open-attestation#readme", + "homepage": "https://github.com/TradeTrust/open-attestation#readme", "publishConfig": { "access": "public" }, From adb5b9fd9f8396af9a927c95b9491f7db5f1accf Mon Sep 17 00:00:00 2001 From: cavacado Date: Tue, 17 Oct 2023 11:21:11 +0800 Subject: [PATCH 03/13] chore: commit lock --- package-lock.json | 17865 +++++++++++++++----------------------------- 1 file changed, 6214 insertions(+), 11651 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6580dca6..9a86a7f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,178 +1,117 @@ { "name": "@tradetrust/open-attestation", "version": "0.0.0-development", - "lockfileVersion": 3, + "lockfileVersion": 1, "requires": true, - "packages": { - "": { - "name": "@govtechsg/open-attestation", - "version": "0.0.0-development", - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "@govtechsg/jsonld": "^0.1.0", - "ajv": "^8.6.2", - "ajv-formats": "^2.1.0", - "cross-fetch": "^3.1.5", - "debug": "^4.3.2", - "ethers": "^5.7.2", - "flatley": "^5.2.0", - "js-base64": "^3.6.1", - "js-sha3": "^0.8.0", - "lodash": "^4.17.21", - "runtypes": "^6.3.2", - "uuid": "^8.3.2", - "validator": "^13.7.0" + "dependencies": { + "@75lb/deep-merge": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@75lb/deep-merge/-/deep-merge-1.1.1.tgz", + "integrity": "sha512-xvgv6pkMGBA6GwdyJbNAnDmfAIR/DfWhrj9jgWh3TY7gRm3KO46x/GPjRg6wJ0nOepwqrNxFfojebh0Df4h4Tw==", + "dev": true, + "requires": { + "lodash.assignwith": "^4.2.0", + "typical": "^7.1.1" }, - "devDependencies": { - "@commitlint/cli": "^17.6.7", - "@commitlint/config-conventional": "^17.6.7", - "@commitlint/prompt": "^17.6.7", - "@rollup/plugin-json": "^4.1.0", - "@types/debug": "^4.1.7", - "@types/jest": "^29.5.3", - "@types/js-base64": "^3.3.1", - "@types/jsonld": "^1.5.6", - "@types/lodash": "^4.14.171", - "@types/qrcode": "^1.4.1", - "@types/uuid": "^8.3.1", - "@types/validator": "^13.6.3", - "@typescript-eslint/eslint-plugin": "^4.28.5", - "@typescript-eslint/parser": "^4.28.5", - "cbor": "^7.0.6", - "commitizen": "^4.2.5", - "eslint": "^7.32.0", - "eslint-config-airbnb-base": "^14.2.1", - "eslint-config-prettier": "^8.3.0", - "eslint-plugin-import": "^2.23.4", - "eslint-plugin-jest": "^24.4.0", - "eslint-plugin-prettier": "^3.4.0", - "git-cz": "^4.7.6", - "jest": "^29.6.2", - "jest-watch-typeahead": "^2.2.2", - "prettier": "^2.3.2", - "qrcode": "^1.5.1", - "quicktype": "^15.0.260", - "rollup": "^2.56.2", - "rollup-plugin-commonjs": "^10.1.0", - "semantic-release": "^21.1.1", - "ts-jest": "^29.1.1", - "ts-node": "^9.1.1", - "typescript": "^5.1.6" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { + "dependencies": { + "typical": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", + "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", + "dev": true + } + } + }, + "@aashutoshrathi/word-wrap": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/@ampproject/remapping": { + "@ampproject/remapping": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dev": true, - "dependencies": { + "requires": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" } }, - "node_modules/@babel/code-frame": { + "@babel/code-frame": { "version": "7.22.10", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz", "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", "dev": true, - "dependencies": { + "requires": { "@babel/highlight": "^7.22.10", "chalk": "^2.4.2" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "node_modules/@babel/compat-data": { + "@babel/compat-data": { "version": "7.22.9", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } + "dev": true }, - "node_modules/@babel/core": { + "@babel/core": { "version": "7.22.10", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.10.tgz", "integrity": "sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==", "dev": true, - "dependencies": { + "requires": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.22.10", "@babel/generator": "^7.22.10", @@ -189,530 +128,399 @@ "json5": "^2.2.2", "semver": "^6.3.1" }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/@babel/core/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": ">=6" - } - }, - "node_modules/@babel/core/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" + "dependencies": { + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } } }, - "node_modules/@babel/generator": { + "@babel/generator": { "version": "7.22.10", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", "dev": true, - "dependencies": { + "requires": { "@babel/types": "^7.22.10", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", - "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + } } }, - "node_modules/@babel/helper-compilation-targets": { + "@babel/helper-compilation-targets": { "version": "7.22.10", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", "dev": true, - "dependencies": { + "requires": { "@babel/compat-data": "^7.22.9", "@babel/helper-validator-option": "^7.22.5", "browserslist": "^4.21.9", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/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": { - "yallist": "^3.0.2" - } - }, - "node_modules/@babel/helper-compilation-targets/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" + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } } }, - "node_modules/@babel/helper-compilation-targets/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/@babel/helper-environment-visitor": { + "@babel/helper-environment-visitor": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } + "dev": true }, - "node_modules/@babel/helper-function-name": { + "@babel/helper-function-name": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", "dev": true, - "dependencies": { + "requires": { "@babel/template": "^7.22.5", "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/helper-hoist-variables": { + "@babel/helper-hoist-variables": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, - "dependencies": { + "requires": { "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/helper-module-imports": { + "@babel/helper-module-imports": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", "dev": true, - "dependencies": { + "requires": { "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/helper-module-transforms": { + "@babel/helper-module-transforms": { "version": "7.22.9", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-module-imports": "^7.22.5", "@babel/helper-simple-access": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-plugin-utils": { + "@babel/helper-plugin-utils": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } + "dev": true }, - "node_modules/@babel/helper-simple-access": { + "@babel/helper-simple-access": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, - "dependencies": { + "requires": { "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/helper-split-export-declaration": { + "@babel/helper-split-export-declaration": { "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, - "dependencies": { + "requires": { "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/helper-string-parser": { + "@babel/helper-string-parser": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } + "dev": true }, - "node_modules/@babel/helper-validator-identifier": { + "@babel/helper-validator-identifier": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } + "dev": true }, - "node_modules/@babel/helper-validator-option": { + "@babel/helper-validator-option": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } + "dev": true }, - "node_modules/@babel/helpers": { + "@babel/helpers": { "version": "7.22.10", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.10.tgz", "integrity": "sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==", "dev": true, - "dependencies": { + "requires": { "@babel/template": "^7.22.5", "@babel/traverse": "^7.22.10", "@babel/types": "^7.22.10" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/highlight": { + "@babel/highlight": { "version": "7.22.10", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz", "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-validator-identifier": "^7.22.5", "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "node_modules/@babel/parser": { + "@babel/parser": { "version": "7.22.10", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz", "integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } + "dev": true }, - "node_modules/@babel/plugin-syntax-async-generators": { + "@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-bigint": { + "@babel/plugin-syntax-bigint": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-properties": { + "@babel/plugin-syntax-class-properties": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-import-meta": { + "@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-json-strings": { + "@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-jsx": { + "@babel/plugin-syntax-jsx": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-numeric-separator": { + "@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { + "@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-optional-chaining": { + "@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-top-level-await": { + "@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-typescript": { + "@babel/plugin-syntax-typescript": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/template": { + "@babel/template": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", "dev": true, - "dependencies": { + "requires": { "@babel/code-frame": "^7.22.5", "@babel/parser": "^7.22.5", "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/traverse": { + "@babel/traverse": { "version": "7.22.10", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.10.tgz", "integrity": "sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==", "dev": true, - "dependencies": { + "requires": { "@babel/code-frame": "^7.22.10", "@babel/generator": "^7.22.10", "@babel/helper-environment-visitor": "^7.22.5", @@ -724,55 +532,45 @@ "debug": "^4.1.0", "globals": "^11.1.0" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } } }, - "node_modules/@babel/types": { + "@babel/types": { "version": "7.22.10", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz", "integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.5", "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@bcoe/v8-coverage": { + "@bcoe/v8-coverage": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "node_modules/@colors/colors": { + "@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, - "optional": true, - "engines": { - "node": ">=0.1.90" - } + "optional": true }, - "node_modules/@commitlint/cli": { + "@commitlint/cli": { "version": "17.7.1", "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.7.1.tgz", "integrity": "sha512-BCm/AT06SNCQtvFv921iNhudOHuY16LswT0R3OeolVGLk8oP+Rk9TfQfgjH7QPMjhvp76bNqGFEcpKojxUNW1g==", "dev": true, - "dependencies": { + "requires": { "@commitlint/format": "^17.4.4", "@commitlint/lint": "^17.7.0", "@commitlint/load": "^17.7.1", @@ -783,112 +581,85 @@ "resolve-from": "5.0.0", "resolve-global": "1.0.0", "yargs": "^17.0.0" - }, - "bin": { - "commitlint": "cli.js" - }, - "engines": { - "node": ">=v14" } }, - "node_modules/@commitlint/config-conventional": { + "@commitlint/config-conventional": { "version": "17.7.0", "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.7.0.tgz", "integrity": "sha512-iicqh2o6et+9kWaqsQiEYZzfLbtoWv9uZl8kbI8EGfnc0HeGafQBF7AJ0ylN9D/2kj6txltsdyQs8+2fTMwWEw==", "dev": true, - "dependencies": { + "requires": { "conventional-changelog-conventionalcommits": "^6.1.0" - }, - "engines": { - "node": ">=v14" } }, - "node_modules/@commitlint/config-validator": { + "@commitlint/config-validator": { "version": "17.6.7", "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.6.7.tgz", "integrity": "sha512-vJSncmnzwMvpr3lIcm0I8YVVDJTzyjy7NZAeXbTXy+MPUdAr9pKyyg7Tx/ebOQ9kqzE6O9WT6jg2164br5UdsQ==", "dev": true, - "dependencies": { + "requires": { "@commitlint/types": "^17.4.4", "ajv": "^8.11.0" - }, - "engines": { - "node": ">=v14" } }, - "node_modules/@commitlint/ensure": { + "@commitlint/ensure": { "version": "17.6.7", "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.6.7.tgz", "integrity": "sha512-mfDJOd1/O/eIb/h4qwXzUxkmskXDL9vNPnZ4AKYKiZALz4vHzwMxBSYtyL2mUIDeU9DRSpEUins8SeKtFkYHSw==", "dev": true, - "dependencies": { + "requires": { "@commitlint/types": "^17.4.4", "lodash.camelcase": "^4.3.0", "lodash.kebabcase": "^4.1.1", "lodash.snakecase": "^4.1.1", "lodash.startcase": "^4.4.0", "lodash.upperfirst": "^4.3.1" - }, - "engines": { - "node": ">=v14" } }, - "node_modules/@commitlint/execute-rule": { + "@commitlint/execute-rule": { "version": "17.4.0", "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz", "integrity": "sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==", - "dev": true, - "engines": { - "node": ">=v14" - } + "dev": true }, - "node_modules/@commitlint/format": { + "@commitlint/format": { "version": "17.4.4", "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-17.4.4.tgz", "integrity": "sha512-+IS7vpC4Gd/x+uyQPTAt3hXs5NxnkqAZ3aqrHd5Bx/R9skyCAWusNlNbw3InDbAK6j166D9asQM8fnmYIa+CXQ==", "dev": true, - "dependencies": { + "requires": { "@commitlint/types": "^17.4.4", "chalk": "^4.1.0" - }, - "engines": { - "node": ">=v14" } }, - "node_modules/@commitlint/is-ignored": { + "@commitlint/is-ignored": { "version": "17.7.0", "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.7.0.tgz", "integrity": "sha512-043rA7m45tyEfW7Zv2vZHF++176MLHH9h70fnPoYlB1slKBeKl8BwNIlnPg4xBdRBVNPaCqvXxWswx2GR4c9Hw==", "dev": true, - "dependencies": { + "requires": { "@commitlint/types": "^17.4.4", "semver": "7.5.4" - }, - "engines": { - "node": ">=v14" } }, - "node_modules/@commitlint/lint": { + "@commitlint/lint": { "version": "17.7.0", "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.7.0.tgz", "integrity": "sha512-TCQihm7/uszA5z1Ux1vw+Nf3yHTgicus/+9HiUQk+kRSQawByxZNESeQoX9ujfVd3r4Sa+3fn0JQAguG4xvvbA==", "dev": true, - "dependencies": { + "requires": { "@commitlint/is-ignored": "^17.7.0", "@commitlint/parse": "^17.7.0", "@commitlint/rules": "^17.7.0", "@commitlint/types": "^17.4.4" - }, - "engines": { - "node": ">=v14" } }, - "node_modules/@commitlint/load": { + "@commitlint/load": { "version": "17.7.1", "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.7.1.tgz", "integrity": "sha512-S/QSOjE1ztdogYj61p6n3UbkUvweR17FQ0zDbNtoTLc+Hz7vvfS7ehoTMQ27hPSjVBpp7SzEcOQu081RLjKHJQ==", "dev": true, - "dependencies": { + "requires": { "@commitlint/config-validator": "^17.6.7", "@commitlint/execute-rule": "^17.4.0", "@commitlint/resolve-extends": "^17.6.7", @@ -904,262 +675,184 @@ "ts-node": "^10.8.1", "typescript": "^4.6.4 || ^5.0.0" }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/load/node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true + "ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + } } } }, - "node_modules/@commitlint/message": { + "@commitlint/message": { "version": "17.4.2", "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.4.2.tgz", "integrity": "sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q==", - "dev": true, - "engines": { - "node": ">=v14" - } + "dev": true }, - "node_modules/@commitlint/parse": { + "@commitlint/parse": { "version": "17.7.0", "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.7.0.tgz", "integrity": "sha512-dIvFNUMCUHqq5Abv80mIEjLVfw8QNuA4DS7OWip4pcK/3h5wggmjVnlwGCDvDChkw2TjK1K6O+tAEV78oxjxag==", "dev": true, - "dependencies": { + "requires": { "@commitlint/types": "^17.4.4", "conventional-changelog-angular": "^6.0.0", "conventional-commits-parser": "^4.0.0" - }, - "engines": { - "node": ">=v14" } }, - "node_modules/@commitlint/prompt": { + "@commitlint/prompt": { "version": "17.7.1", "resolved": "https://registry.npmjs.org/@commitlint/prompt/-/prompt-17.7.1.tgz", "integrity": "sha512-TWPATfSarPHdUOGkE/irBtzE+ZhEuUQI8U8PMcrLYi26NtJTHmRWpwZGug5gehcmlvQuLCjoFg3naYrs1BMHEQ==", "dev": true, - "dependencies": { + "requires": { "@commitlint/ensure": "^17.6.7", "@commitlint/load": "^17.7.1", "@commitlint/types": "^17.4.4", "chalk": "^4.1.0", "inquirer": "^6.5.2" - }, - "engines": { - "node": ">=v14" } }, - "node_modules/@commitlint/read": { + "@commitlint/read": { "version": "17.5.1", "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-17.5.1.tgz", "integrity": "sha512-7IhfvEvB//p9aYW09YVclHbdf1u7g7QhxeYW9ZHSO8Huzp8Rz7m05aCO1mFG7G8M+7yfFnXB5xOmG18brqQIBg==", "dev": true, - "dependencies": { + "requires": { "@commitlint/top-level": "^17.4.0", "@commitlint/types": "^17.4.4", "fs-extra": "^11.0.0", "git-raw-commits": "^2.0.11", "minimist": "^1.2.6" - }, - "engines": { - "node": ">=v14" } }, - "node_modules/@commitlint/resolve-extends": { + "@commitlint/resolve-extends": { "version": "17.6.7", "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.6.7.tgz", "integrity": "sha512-PfeoAwLHtbOaC9bGn/FADN156CqkFz6ZKiVDMjuC2N5N0740Ke56rKU7Wxdwya8R8xzLK9vZzHgNbuGhaOVKIg==", "dev": true, - "dependencies": { + "requires": { "@commitlint/config-validator": "^17.6.7", "@commitlint/types": "^17.4.4", "import-fresh": "^3.0.0", "lodash.mergewith": "^4.6.2", "resolve-from": "^5.0.0", "resolve-global": "^1.0.0" - }, - "engines": { - "node": ">=v14" } }, - "node_modules/@commitlint/rules": { + "@commitlint/rules": { "version": "17.7.0", "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.7.0.tgz", "integrity": "sha512-J3qTh0+ilUE5folSaoK91ByOb8XeQjiGcdIdiB/8UT1/Rd1itKo0ju/eQVGyFzgTMYt8HrDJnGTmNWwcMR1rmA==", "dev": true, - "dependencies": { + "requires": { "@commitlint/ensure": "^17.6.7", "@commitlint/message": "^17.4.2", "@commitlint/to-lines": "^17.4.0", "@commitlint/types": "^17.4.4", "execa": "^5.0.0" - }, - "engines": { - "node": ">=v14" } }, - "node_modules/@commitlint/to-lines": { + "@commitlint/to-lines": { "version": "17.4.0", "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.4.0.tgz", "integrity": "sha512-LcIy/6ZZolsfwDUWfN1mJ+co09soSuNASfKEU5sCmgFCvX5iHwRYLiIuoqXzOVDYOy7E7IcHilr/KS0e5T+0Hg==", - "dev": true, - "engines": { - "node": ">=v14" - } + "dev": true }, - "node_modules/@commitlint/top-level": { + "@commitlint/top-level": { "version": "17.4.0", "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.4.0.tgz", "integrity": "sha512-/1loE/g+dTTQgHnjoCy0AexKAEFyHsR2zRB4NWrZ6lZSMIxAhBJnmCqwao7b4H8888PsfoTBCLBYIw8vGnej8g==", "dev": true, - "dependencies": { + "requires": { "find-up": "^5.0.0" }, - "engines": { - "node": ">=v14" + "dependencies": { + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + } } }, - "node_modules/@commitlint/top-level/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@commitlint/top-level/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@commitlint/top-level/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/@commitlint/top-level/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@commitlint/types": { + "@commitlint/types": { "version": "17.4.4", "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.4.4.tgz", "integrity": "sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==", "dev": true, - "dependencies": { + "requires": { "chalk": "^4.1.0" - }, - "engines": { - "node": ">=v14" } }, - "node_modules/@cspotcode/source-map-support": { + "@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, - "dependencies": { + "requires": { "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" } }, - "node_modules/@cto.af/textdecoder": { + "@cto.af/textdecoder": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/@cto.af/textdecoder/-/textdecoder-0.0.0.tgz", "integrity": "sha512-sJpx3F5xcVV/9jNYJQtvimo4Vfld/nD3ph+ZWtQzZ03Zo8rJC7QKQTRcIGS13Rcz80DwFNthCWMrd58vpY4ZAQ==", - "dev": true, - "engines": { - "node": ">=4.9.1" - } + "dev": true }, - "node_modules/@eslint/eslintrc": { + "@eslint/eslintrc": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, - "dependencies": { + "requires": { "ajv": "^6.12.4", "debug": "^4.1.1", "espree": "^7.3.0", @@ -1170,78 +863,57 @@ "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "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" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + } } }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/@ethersproject/abi": { + "@ethersproject/abi": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/address": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", @@ -1253,21 +925,11 @@ "@ethersproject/strings": "^5.7.0" } }, - "node_modules/@ethersproject/abstract-provider": { + "@ethersproject/abstract-provider": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", @@ -1277,21 +939,11 @@ "@ethersproject/web": "^5.7.0" } }, - "node_modules/@ethersproject/abstract-signer": { + "@ethersproject/abstract-signer": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", @@ -1299,21 +951,11 @@ "@ethersproject/properties": "^5.7.0" } }, - "node_modules/@ethersproject/address": { + "@ethersproject/address": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/keccak256": "^5.7.0", @@ -1321,114 +963,54 @@ "@ethersproject/rlp": "^5.7.0" } }, - "node_modules/@ethersproject/base64": { + "@ethersproject/base64": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/bytes": "^5.7.0" } }, - "node_modules/@ethersproject/basex": { + "@ethersproject/basex": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/properties": "^5.7.0" } }, - "node_modules/@ethersproject/bignumber": { + "@ethersproject/bignumber": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", "bn.js": "^5.2.1" } }, - "node_modules/@ethersproject/bytes": { + "@ethersproject/bytes": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@ethersproject/constants": { + "@ethersproject/constants": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/bignumber": "^5.7.0" } }, - "node_modules/@ethersproject/contracts": { + "@ethersproject/contracts": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/abi": "^5.7.0", "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", @@ -1441,21 +1023,11 @@ "@ethersproject/transactions": "^5.7.0" } }, - "node_modules/@ethersproject/hash": { + "@ethersproject/hash": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/address": "^5.7.0", "@ethersproject/base64": "^5.7.0", @@ -1467,21 +1039,11 @@ "@ethersproject/strings": "^5.7.0" } }, - "node_modules/@ethersproject/hdnode": { + "@ethersproject/hdnode": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/basex": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", @@ -1496,21 +1058,11 @@ "@ethersproject/wordlists": "^5.7.0" } }, - "node_modules/@ethersproject/json-wallets": { + "@ethersproject/json-wallets": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/address": "^5.7.0", "@ethersproject/bytes": "^5.7.0", @@ -1526,110 +1078,50 @@ "scrypt-js": "3.0.1" } }, - "node_modules/@ethersproject/keccak256": { + "@ethersproject/keccak256": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/bytes": "^5.7.0", "js-sha3": "0.8.0" } }, - "node_modules/@ethersproject/logger": { + "@ethersproject/logger": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ] + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==" }, - "node_modules/@ethersproject/networks": { + "@ethersproject/networks": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@ethersproject/pbkdf2": { + "@ethersproject/pbkdf2": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/sha2": "^5.7.0" } }, - "node_modules/@ethersproject/properties": { + "@ethersproject/properties": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@ethersproject/providers": { + "@ethersproject/providers": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/address": "^5.7.0", @@ -1652,79 +1144,39 @@ "ws": "7.4.6" } }, - "node_modules/@ethersproject/random": { + "@ethersproject/random": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@ethersproject/rlp": { + "@ethersproject/rlp": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@ethersproject/sha2": { + "@ethersproject/sha2": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", "hash.js": "1.1.7" } }, - "node_modules/@ethersproject/signing-key": { + "@ethersproject/signing-key": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/properties": "^5.7.0", @@ -1733,21 +1185,11 @@ "hash.js": "1.1.7" } }, - "node_modules/@ethersproject/solidity": { + "@ethersproject/solidity": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/keccak256": "^5.7.0", @@ -1756,41 +1198,21 @@ "@ethersproject/strings": "^5.7.0" } }, - "node_modules/@ethersproject/strings": { + "@ethersproject/strings": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/constants": "^5.7.0", "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@ethersproject/transactions": { + "@ethersproject/transactions": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/address": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", @@ -1802,41 +1224,21 @@ "@ethersproject/signing-key": "^5.7.0" } }, - "node_modules/@ethersproject/units": { + "@ethersproject/units": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/constants": "^5.7.0", "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@ethersproject/wallet": { + "@ethersproject/wallet": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/address": "^5.7.0", @@ -1854,21 +1256,11 @@ "@ethersproject/wordlists": "^5.7.0" } }, - "node_modules/@ethersproject/web": { + "@ethersproject/web": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/base64": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", @@ -1876,21 +1268,11 @@ "@ethersproject/strings": "^5.7.0" } }, - "node_modules/@ethersproject/wordlists": { + "@ethersproject/wordlists": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/hash": "^5.7.0", "@ethersproject/logger": "^5.7.0", @@ -1898,110 +1280,100 @@ "@ethersproject/strings": "^5.7.0" } }, - "node_modules/@govtechsg/jsonld": { + "@glideapps/ts-necessities": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@glideapps/ts-necessities/-/ts-necessities-2.1.3.tgz", + "integrity": "sha512-q9U8v/n9qbkd2zDYjuX3qtlbl+OIyI9zF+zQhZjfYOE9VMDH7tfcUSJ9p0lXoY3lxmGFne09yi4iiNeQUwV7AA==", + "dev": true + }, + "@govtechsg/jsonld": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@govtechsg/jsonld/-/jsonld-0.1.1.tgz", "integrity": "sha512-G3mz6/ryS4tIWTV7FonallTuj4Oy2JjLkBdCn7wjKShb3AG3/PY6XCpNupz8+rpvDF5BGtYvptpW9HRArnjyMQ==", - "dependencies": { + "requires": { "canonicalize": "^1.0.1", "cross-fetch": "^3.1.4", "lru-cache": "^6.0.0", "rdf-canonize": "^3.0.0" - }, - "engines": { - "node": ">=12" } }, - "node_modules/@humanwhocodes/config-array": { + "@humanwhocodes/config-array": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", "dev": true, - "dependencies": { + "requires": { "@humanwhocodes/object-schema": "^1.2.0", "debug": "^4.1.1", "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" } }, - "node_modules/@humanwhocodes/object-schema": { + "@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, - "node_modules/@istanbuljs/load-nyc-config": { + "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, - "dependencies": { + "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" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + } } }, - "node_modules/@istanbuljs/schema": { + "@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } + "dev": true }, - "node_modules/@jest/console": { + "@jest/console": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.2.tgz", "integrity": "sha512-0N0yZof5hi44HAR2pPS+ikJ3nzKNoZdVu8FffRf3wy47I7Dm7etk/3KetMdRUqzVd16V4O2m2ISpNTbnIuqy1w==", "dev": true, - "dependencies": { + "requires": { "@jest/types": "^29.6.1", "@types/node": "*", "chalk": "^4.0.0", "jest-message-util": "^29.6.2", "jest-util": "^29.6.2", "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/core": { + "@jest/core": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.2.tgz", "integrity": "sha512-Oj+5B+sDMiMWLhPFF+4/DvHOf+U10rgvCLGPHP8Xlsy/7QxS51aU/eBngudHlJXnaWD5EohAgJ4js+T6pa+zOg==", "dev": true, - "dependencies": { + "requires": { "@jest/console": "^29.6.2", "@jest/reporters": "^29.6.2", "@jest/test-result": "^29.6.2", @@ -2031,123 +1403,87 @@ "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/core/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/@jest/core/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" + "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" + } + }, + "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 + } } }, - "node_modules/@jest/environment": { + "@jest/environment": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.2.tgz", "integrity": "sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q==", "dev": true, - "dependencies": { + "requires": { "@jest/fake-timers": "^29.6.2", "@jest/types": "^29.6.1", "@types/node": "*", "jest-mock": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/expect": { + "@jest/expect": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.2.tgz", "integrity": "sha512-m6DrEJxVKjkELTVAztTLyS/7C92Y2b0VYqmDROYKLLALHn8T/04yPs70NADUYPrV3ruI+H3J0iUIuhkjp7vkfg==", "dev": true, - "dependencies": { + "requires": { "expect": "^29.6.2", "jest-snapshot": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/expect-utils": { + "@jest/expect-utils": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.2.tgz", "integrity": "sha512-6zIhM8go3RV2IG4aIZaZbxwpOzz3ZiM23oxAlkquOIole+G6TrbeXnykxWYlqF7kz2HlBjdKtca20x9atkEQYg==", "dev": true, - "dependencies": { + "requires": { "jest-get-type": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/fake-timers": { + "@jest/fake-timers": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.2.tgz", "integrity": "sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA==", "dev": true, - "dependencies": { + "requires": { "@jest/types": "^29.6.1", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", "jest-message-util": "^29.6.2", "jest-mock": "^29.6.2", "jest-util": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/globals": { + "@jest/globals": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.2.tgz", "integrity": "sha512-cjuJmNDjs6aMijCmSa1g2TNG4Lby/AeU7/02VtpW+SLcZXzOLK2GpN2nLqcFjmhy3B3AoPeQVx7BnyOf681bAw==", "dev": true, - "dependencies": { + "requires": { "@jest/environment": "^29.6.2", "@jest/expect": "^29.6.2", "@jest/types": "^29.6.1", "jest-mock": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/reporters": { + "@jest/reporters": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.2.tgz", "integrity": "sha512-sWtijrvIav8LgfJZlrGCdN0nP2EWbakglJY49J1Y5QihcQLfy7ovyxxjJBRXMNltgt4uPtEcFmIMbVshEDfFWw==", "dev": true, - "dependencies": { + "requires": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^29.6.2", "@jest/test-result": "^29.6.2", @@ -2173,100 +1509,81 @@ "strip-ansi": "^6.0.0", "v8-to-istanbul": "^9.0.1" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", - "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + } } }, - "node_modules/@jest/schemas": { + "@jest/schemas": { "version": "29.6.0", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", "dev": true, - "dependencies": { + "requires": { "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/source-map": { + "@jest/source-map": { "version": "29.6.0", "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.0.tgz", "integrity": "sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==", "dev": true, - "dependencies": { + "requires": { "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", "graceful-fs": "^4.2.9" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", - "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + } } }, - "node_modules/@jest/test-result": { + "@jest/test-result": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.2.tgz", "integrity": "sha512-3VKFXzcV42EYhMCsJQURptSqnyjqCGbtLuX5Xxb6Pm6gUf1wIRIl+mandIRGJyWKgNKYF9cnstti6Ls5ekduqw==", "dev": true, - "dependencies": { + "requires": { "@jest/console": "^29.6.2", "@jest/types": "^29.6.1", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/test-sequencer": { + "@jest/test-sequencer": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.2.tgz", "integrity": "sha512-GVYi6PfPwVejO7slw6IDO0qKVum5jtrJ3KoLGbgBWyr2qr4GaxFV6su+ZAjdTX75Sr1DkMFRk09r2ZVa+wtCGw==", "dev": true, - "dependencies": { + "requires": { "@jest/test-result": "^29.6.2", "graceful-fs": "^4.2.9", "jest-haste-map": "^29.6.2", "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/transform": { + "@jest/transform": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.2.tgz", "integrity": "sha512-ZqCqEISr58Ce3U+buNFJYUktLJZOggfyvR+bZMaiV1e8B1SIvJbwZMrYz3gx/KAPn9EXmOmN+uB08yLCjWkQQg==", "dev": true, - "dependencies": { + "requires": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.1", "@jridgewell/trace-mapping": "^0.3.18", @@ -2283,610 +1600,321 @@ "slash": "^3.0.0", "write-file-atomic": "^4.0.2" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", - "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + } } }, - "node_modules/@jest/types": { + "@jest/types": { "version": "29.6.1", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.1.tgz", "integrity": "sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==", "dev": true, - "dependencies": { + "requires": { "@jest/schemas": "^29.6.0", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", "@types/yargs": "^17.0.8", "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jridgewell/gen-mapping": { + "@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, - "dependencies": { + "requires": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" } }, - "node_modules/@jridgewell/resolve-uri": { + "@jridgewell/resolve-uri": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } + "dev": true }, - "node_modules/@jridgewell/set-array": { + "@jridgewell/set-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } + "dev": true }, - "node_modules/@jridgewell/sourcemap-codec": { + "@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, - "node_modules/@jridgewell/trace-mapping": { + "@jridgewell/trace-mapping": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, - "dependencies": { + "requires": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@mark.probst/typescript-json-schema": { - "version": "0.32.0", - "resolved": "https://registry.npmjs.org/@mark.probst/typescript-json-schema/-/typescript-json-schema-0.32.0.tgz", - "integrity": "sha512-OoD+5D7Mka80FIcmvPyuAKV7g5Of5S04R74S4DTAG8pr9REDWySUh9pOloro7SNFwWt/+2f90wyP+DtGHykVfg==", + "@mark.probst/typescript-json-schema": { + "version": "0.55.0", + "resolved": "https://registry.npmjs.org/@mark.probst/typescript-json-schema/-/typescript-json-schema-0.55.0.tgz", + "integrity": "sha512-jI48mSnRgFQxXiE/UTUCVCpX8lK3wCFKLF1Ss2aEreboKNuLQGt3e0/YFqWVHe/WENxOaqiJvwOz+L/SrN2+qQ==", "dev": true, - "dependencies": { - "glob": "~7.1.3", - "json-stable-stringify": "^1.0.1", - "typescript": "~3.2.1", - "yargs": "^12.0.5" + "requires": { + "@types/json-schema": "^7.0.9", + "@types/node": "^16.9.2", + "glob": "^7.1.7", + "path-equal": "^1.1.2", + "safe-stable-stringify": "^2.2.0", + "ts-node": "^10.9.1", + "typescript": "4.9.4", + "yargs": "^17.1.1" }, - "bin": { - "typescript-json-schema": "bin/typescript-json-schema" + "dependencies": { + "@types/node": { + "version": "16.18.59", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.59.tgz", + "integrity": "sha512-PJ1w2cNeKUEdey4LiPra0ZuxZFOGvetswE8qHRriV/sUkL5Al4tTmPV9D2+Y/TPIxTHHgxTfRjZVKWhPw/ORhQ==", + "dev": true + }, + "ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + } + }, + "typescript": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "dev": true + } } }, - "node_modules/@mark.probst/typescript-json-schema/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" } }, - "node_modules/@mark.probst/typescript-json-schema/node_modules/cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "dependencies": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true }, - "node_modules/@mark.probst/typescript-json-schema/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" } }, - "node_modules/@mark.probst/typescript-json-schema/node_modules/get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "@octokit/auth-token": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", "dev": true }, - "node_modules/@mark.probst/typescript-json-schema/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "@octokit/core": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.1.tgz", + "integrity": "sha512-lyeeeZyESFo+ffI801SaBKmCfsvarO+dgV8/0gD8u1d87clbEdWsP5yC+dSj3zLhb2eIf5SJrn6vDz9AheETHw==", "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@mark.probst/typescript-json-schema/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@mark.probst/typescript-json-schema/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@mark.probst/typescript-json-schema/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@mark.probst/typescript-json-schema/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@mark.probst/typescript-json-schema/node_modules/require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", - "dev": true - }, - "node_modules/@mark.probst/typescript-json-schema/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@mark.probst/typescript-json-schema/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@mark.probst/typescript-json-schema/node_modules/typescript": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz", - "integrity": "sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/@mark.probst/typescript-json-schema/node_modules/wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", - "dev": true, - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@mark.probst/typescript-json-schema/node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@mark.probst/typescript-json-schema/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@mark.probst/typescript-json-schema/node_modules/wrap-ansi/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@mark.probst/typescript-json-schema/node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@mark.probst/typescript-json-schema/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/@mark.probst/typescript-json-schema/node_modules/yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "dev": true, - "dependencies": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - } - }, - "node_modules/@mark.probst/typescript-json-schema/node_modules/yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/@mark.probst/unicode-properties": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@mark.probst/unicode-properties/-/unicode-properties-1.1.0.tgz", - "integrity": "sha512-7AQsO0hMmpqDledV7AhBuSYqYPFsKP9PaltMecX9nlnsyFxqtsqUg9/pvB2L/jxvskrDrNkdKYz2KTbQznCtng==", - "dev": true, - "dependencies": { - "brfs": "^1.4.0", - "unicode-trie": "^0.3.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@octokit/auth-token": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", - "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", - "dev": true, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/core": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.0.tgz", - "integrity": "sha512-YbAtMWIrbZ9FCXbLwT9wWB8TyLjq9mxpKdgB3dUNxQcIVTf9hJ70gRPwAcqGZdY6WdJPZ0I7jLaaNDCiloGN2A==", - "dev": true, - "dependencies": { + "requires": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.0.0", "@octokit/request": "^8.0.2", "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0", + "@octokit/types": "^12.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" } }, - "node_modules/@octokit/endpoint": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.0.tgz", - "integrity": "sha512-szrQhiqJ88gghWY2Htt8MqUDO6++E/EIXqJ2ZEp5ma3uGS46o7LZAzSLt49myB7rT+Hfw5Y6gO3LmOxGzHijAQ==", + "@octokit/endpoint": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.1.tgz", + "integrity": "sha512-hRlOKAovtINHQPYHZlfyFwaM8OyetxeoC81lAkBy34uLb8exrZB50SQdeW3EROqiY9G9yxQTpp5OHTV54QD+vA==", "dev": true, - "dependencies": { - "@octokit/types": "^11.0.0", + "requires": { + "@octokit/types": "^12.0.0", "is-plain-object": "^5.0.0", "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" } }, - "node_modules/@octokit/graphql": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.1.tgz", - "integrity": "sha512-T5S3oZ1JOE58gom6MIcrgwZXzTaxRnxBso58xhozxHpOqSTgDS6YNeEUvZ/kRvXgPrRz/KHnZhtb7jUMRi9E6w==", + "@octokit/graphql": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.2.tgz", + "integrity": "sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==", "dev": true, - "dependencies": { + "requires": { "@octokit/request": "^8.0.1", - "@octokit/types": "^11.0.0", + "@octokit/types": "^12.0.0", "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" } }, - "node_modules/@octokit/openapi-types": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", - "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==", + "@octokit/openapi-types": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-19.0.0.tgz", + "integrity": "sha512-PclQ6JGMTE9iUStpzMkwLCISFn/wDeRjkZFIKALpvJQNBGwDoYYi2fFvuHwssoQ1rXI5mfh6jgTgWuddeUzfWw==", "dev": true }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-8.0.0.tgz", - "integrity": "sha512-2xZ+baZWUg+qudVXnnvXz7qfrTmDeYPCzangBVq/1gXxii/OiS//4shJp9dnCCvj1x+JAm9ji1Egwm1BA47lPQ==", + "@octokit/plugin-paginate-rest": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.0.0.tgz", + "integrity": "sha512-oIJzCpttmBTlEhBmRvb+b9rlnGpmFgDtZ0bB6nq39qIod6A5DP+7RkVLMOixIgRCYSHDTeayWqmiJ2SZ6xgfdw==", "dev": true, - "dependencies": { - "@octokit/types": "^11.0.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": ">=5" + "requires": { + "@octokit/types": "^12.0.0" } }, - "node_modules/@octokit/plugin-retry": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-6.0.0.tgz", - "integrity": "sha512-a1/A4A+PB1QoAHQfLJxGHhLfSAT03bR1jJz3GgQJZvty2ozawFWs93MiBQXO7SL2YbO7CIq0Goj4qLOBj8JeMQ==", + "@octokit/plugin-retry": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-6.0.1.tgz", + "integrity": "sha512-SKs+Tz9oj0g4p28qkZwl/topGcb0k0qPNX/i7vBKmDsjoeqnVfFUquqrE/O9oJY7+oLzdCtkiWSXLpLjvl6uog==", "dev": true, - "dependencies": { + "requires": { "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0", + "@octokit/types": "^12.0.0", "bottleneck": "^2.15.3" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": ">=5" } }, - "node_modules/@octokit/plugin-throttling": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-7.0.0.tgz", - "integrity": "sha512-KL2k/d0uANc8XqP5S64YcNFCudR3F5AaKO39XWdUtlJIjT9Ni79ekWJ6Kj5xvAw87udkOMEPcVf9xEge2+ahew==", + "@octokit/plugin-throttling": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-8.0.0.tgz", + "integrity": "sha512-OkMbHYUidj81q92YRkPzWmwXkEtsI3KOcSkNm763aqUOh9IEplyX05XjKAdZFANAvaYH0Q4JBZwu4h2VnPVXZA==", "dev": true, - "dependencies": { - "@octokit/types": "^11.0.0", + "requires": { + "@octokit/types": "^12.0.0", "bottleneck": "^2.15.3" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": "^5.0.0" } }, - "node_modules/@octokit/request": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.1.tgz", - "integrity": "sha512-8N+tdUz4aCqQmXl8FpHYfKG9GelDFd7XGVzyN8rc6WxVlYcfpHECnuRkgquzz+WzvHTK62co5di8gSXnzASZPQ==", + "@octokit/request": { + "version": "8.1.4", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.4.tgz", + "integrity": "sha512-M0aaFfpGPEKrg7XoA/gwgRvc9MSXHRO2Ioki1qrPDbl1e9YhjIwVoHE7HIKmv/m3idzldj//xBujcFNqGX6ENA==", "dev": true, - "dependencies": { + "requires": { "@octokit/endpoint": "^9.0.0", "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.1.0", + "@octokit/types": "^12.0.0", "is-plain-object": "^5.0.0", "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" } }, - "node_modules/@octokit/request-error": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.0.tgz", - "integrity": "sha512-1ue0DH0Lif5iEqT52+Rf/hf0RmGO9NWFjrzmrkArpG9trFfDM/efx00BJHdLGuro4BR/gECxCU2Twf5OKrRFsQ==", + "@octokit/request-error": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.1.tgz", + "integrity": "sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==", "dev": true, - "dependencies": { - "@octokit/types": "^11.0.0", + "requires": { + "@octokit/types": "^12.0.0", "deprecation": "^2.0.0", "once": "^1.4.0" - }, - "engines": { - "node": ">= 18" } }, - "node_modules/@octokit/types": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-11.1.0.tgz", - "integrity": "sha512-Fz0+7GyLm/bHt8fwEqgvRBWwIV1S6wRRyq+V6exRKLVWaKGsuy6H9QFYeBVDV7rK6fO3XwHgQOPxv+cLj2zpXQ==", + "@octokit/types": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.0.0.tgz", + "integrity": "sha512-EzD434aHTFifGudYAygnFlS1Tl6KhbTynEWELQXIbTY8Msvb5nEqTZIm7sbPEt4mQYLZwu3zPKVdeIrw0g7ovg==", "dev": true, - "dependencies": { - "@octokit/openapi-types": "^18.0.0" + "requires": { + "@octokit/openapi-types": "^19.0.0" } }, - "node_modules/@pnpm/config.env-replace": { + "@pnpm/config.env-replace": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", - "dev": true, - "engines": { - "node": ">=12.22.0" - } + "dev": true }, - "node_modules/@pnpm/network.ca-file": { + "@pnpm/network.ca-file": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", "dev": true, - "dependencies": { + "requires": { "graceful-fs": "4.2.10" }, - "engines": { - "node": ">=12.22.0" + "dependencies": { + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + } } }, - "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/@pnpm/npm-conf": { + "@pnpm/npm-conf": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", "dev": true, - "dependencies": { + "requires": { "@pnpm/config.env-replace": "^1.1.0", "@pnpm/network.ca-file": "^1.0.1", "config-chain": "^1.1.11" - }, - "engines": { - "node": ">=12" } }, - "node_modules/@rollup/plugin-json": { + "@rollup/plugin-json": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", "dev": true, - "dependencies": { + "requires": { "@rollup/pluginutils": "^3.0.8" - }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" } }, - "node_modules/@rollup/pluginutils": { + "@rollup/pluginutils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", "dev": true, - "dependencies": { + "requires": { "@types/estree": "0.0.39", "estree-walker": "^1.0.1", "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" } }, - "node_modules/@semantic-release/commit-analyzer": { + "@semantic-release/commit-analyzer": { "version": "10.0.4", "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-10.0.4.tgz", "integrity": "sha512-pFGn99fn8w4/MHE0otb2A/l5kxgOuxaaauIh4u30ncoTJuqWj4hXTgEJ03REqjS+w1R2vPftSsO26WC61yOcpw==", "dev": true, - "dependencies": { + "requires": { "conventional-changelog-angular": "^6.0.0", "conventional-commits-filter": "^3.0.0", "conventional-commits-parser": "^5.0.0", @@ -2895,97 +1923,66 @@ "lodash-es": "^4.17.21", "micromatch": "^4.0.2" }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "semantic-release": ">=20.1.0" - } - }, - "node_modules/@semantic-release/commit-analyzer/node_modules/conventional-commits-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", - "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", - "dev": true, - "dependencies": { - "is-text-path": "^2.0.0", - "JSONStream": "^1.3.5", - "meow": "^12.0.1", - "split2": "^4.0.0" - }, - "bin": { - "conventional-commits-parser": "cli.mjs" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@semantic-release/commit-analyzer/node_modules/is-text-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", - "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", - "dev": true, "dependencies": { - "text-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/commit-analyzer/node_modules/meow": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", - "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", - "dev": true, - "engines": { - "node": ">=16.10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/commit-analyzer/node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "dev": true, - "engines": { - "node": ">= 10.x" - } - }, - "node_modules/@semantic-release/commit-analyzer/node_modules/text-extensions": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz", - "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "conventional-commits-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", + "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", + "dev": true, + "requires": { + "JSONStream": "^1.3.5", + "is-text-path": "^2.0.0", + "meow": "^12.0.1", + "split2": "^4.0.0" + } + }, + "is-text-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", + "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", + "dev": true, + "requires": { + "text-extensions": "^2.0.0" + } + }, + "meow": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", + "dev": true + }, + "split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true + }, + "text-extensions": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz", + "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", + "dev": true + } } }, - "node_modules/@semantic-release/error": { + "@semantic-release/error": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==", - "dev": true, - "engines": { - "node": ">=18" - } + "dev": true }, - "node_modules/@semantic-release/github": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-9.0.4.tgz", - "integrity": "sha512-kQCGFAsBErvCR6hzNuzu63cj4erQN2krm9zQlg8vl4j5X0mL0d/Ras0wmL5Gkr1TuSS2lweME7M4J5zvtDDDSA==", + "@semantic-release/github": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-9.2.1.tgz", + "integrity": "sha512-fEn9uOe6jwWR6ro2Wh6YNBCBuZ5lRi8Myz+1j3KDTSt8OuUGlpVM4lFac/0bDrql2NOKrIEAMGCfWb9WMIdzIg==", "dev": true, - "dependencies": { + "requires": { "@octokit/core": "^5.0.0", - "@octokit/plugin-paginate-rest": "^8.0.0", + "@octokit/plugin-paginate-rest": "^9.0.0", "@octokit/plugin-retry": "^6.0.0", - "@octokit/plugin-throttling": "^7.0.0", + "@octokit/plugin-throttling": "^8.0.0", "@semantic-release/error": "^4.0.0", - "aggregate-error": "^4.0.1", + "aggregate-error": "^5.0.0", "debug": "^4.3.4", "dir-glob": "^3.0.1", "globby": "^13.1.4", @@ -2997,52 +1994,36 @@ "p-filter": "^3.0.0", "url-join": "^5.0.0" }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "semantic-release": ">=20.1.0" - } - }, - "node_modules/@semantic-release/github/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "dev": true, "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/github/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true + } } }, - "node_modules/@semantic-release/npm": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-10.0.5.tgz", - "integrity": "sha512-cJnQ2M5pxJRwZEkb0A/+U3TG4UNmjrrLwV2PxJKljn5OPT0yJB8GzGgWbbKACayvxrT06YdTa4Amtq/piJcOIA==", + "@semantic-release/npm": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-10.0.6.tgz", + "integrity": "sha512-DyqHrGE8aUyapA277BB+4kV0C4iMHh3sHzUWdf0jTgp5NNJxVUz76W1f57FB64Ue03him3CBXxFqQD2xGabxow==", "dev": true, - "dependencies": { + "requires": { "@semantic-release/error": "^4.0.0", - "aggregate-error": "^4.0.1", + "aggregate-error": "^5.0.0", "execa": "^8.0.0", "fs-extra": "^11.0.0", "lodash-es": "^4.17.21", @@ -3055,268 +2036,170 @@ "semver": "^7.1.2", "tempy": "^3.0.0" }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "semantic-release": ">=20.1.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dev": true, "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/@semantic-release/npm/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dev": true, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + } + }, + "get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true + }, + "hosted-git-info": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", + "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", + "dev": true, + "requires": { + "lru-cache": "^10.0.1" + } + }, + "human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true + }, + "lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "dev": true + }, + "lru-cache": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", + "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "dev": true + }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true + }, + "normalize-package-data": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", + "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", + "dev": true, + "requires": { + "hosted-git-info": "^7.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + } + }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "requires": { + "path-key": "^4.0.0" + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "parse-json": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.1.0.tgz", + "integrity": "sha512-ihtdrgbqdONYD156Ap6qTcaGcGdkdAxodO1wLqQ/j7HP1u2sFYppINiq4jyC8F+Nm+4fVufylCV00QmkTHkSUg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.21.4", + "error-ex": "^1.3.2", + "json-parse-even-better-errors": "^3.0.0", + "lines-and-columns": "^2.0.3", + "type-fest": "^3.8.0" + }, + "dependencies": { + "type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "dev": true + } + } + }, + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true + }, + "read-pkg": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.1.0.tgz", + "integrity": "sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.1", + "normalize-package-data": "^6.0.0", + "parse-json": "^7.0.0", + "type-fest": "^4.2.0" + } + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true + }, + "type-fest": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.4.0.tgz", + "integrity": "sha512-HT3RRs7sTfY22KuPQJkD/XjbTbxgP2Je5HPt6H6JEGvcjHd5Lqru75EbrP3tb4FYjNJ+DjLp+MNQTFQU0mhXNw==", + "dev": true + } } }, - "node_modules/@semantic-release/npm/node_modules/hosted-git-info": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.0.tgz", - "integrity": "sha512-ICclEpTLhHj+zCuSb2/usoNXSVkxUSIopre+b1w8NDY9Dntp9LO4vLdHYI336TH8sAqwrRgnSfdkBG2/YpisHA==", + "@semantic-release/release-notes-generator": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-11.0.7.tgz", + "integrity": "sha512-T09QB9ImmNx7Q6hY6YnnEbw/rEJ6a+22LBxfZq+pSAXg/OL/k0siwEm5cK4k1f9dE2Z2mPIjJKKohzUm0jbxcQ==", "dev": true, - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true, - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/npm/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/@semantic-release/npm/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/npm/node_modules/normalize-package-data": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", - "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", - "dev": true, - "dependencies": { - "hosted-git-info": "^7.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/npm/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/npm/node_modules/parse-json": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.0.0.tgz", - "integrity": "sha512-kP+TQYAzAiVnzOlWOe0diD6L35s9bJh0SCn95PIbZFKrOYuIRQsQkeWEYxzVDuHTt9V9YqvYCJ2Qo4z9wdfZPw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.21.4", - "error-ex": "^1.3.2", - "json-parse-even-better-errors": "^3.0.0", - "lines-and-columns": "^2.0.3", - "type-fest": "^3.8.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/npm/node_modules/parse-json/node_modules/type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/npm/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/npm/node_modules/read-pkg": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.1.0.tgz", - "integrity": "sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.1", - "normalize-package-data": "^6.0.0", - "parse-json": "^7.0.0", - "type-fest": "^4.2.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/npm/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@semantic-release/npm/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/npm/node_modules/type-fest": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.3.1.tgz", - "integrity": "sha512-pphNW/msgOUSkJbH58x8sqpq8uQj6b0ZKGxEsLKMUnGorRcDjrUaLS+39+/ub41JNTwrrMyJcUB8+YZs3mbwqw==", - "dev": true, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/release-notes-generator": { - "version": "11.0.7", - "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-11.0.7.tgz", - "integrity": "sha512-T09QB9ImmNx7Q6hY6YnnEbw/rEJ6a+22LBxfZq+pSAXg/OL/k0siwEm5cK4k1f9dE2Z2mPIjJKKohzUm0jbxcQ==", - "dev": true, - "dependencies": { + "requires": { "conventional-changelog-angular": "^6.0.0", "conventional-changelog-writer": "^6.0.0", "conventional-commits-filter": "^4.0.0", @@ -3328,365 +2211,252 @@ "lodash-es": "^4.17.21", "read-pkg-up": "^10.0.0" }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "semantic-release": ">=20.1.0" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/conventional-commits-filter": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-4.0.0.tgz", - "integrity": "sha512-rnpnibcSOdFcdclpFwWa+pPlZJhXE7l+XK04zxhbWrhgpR96h33QLz8hITTXbcYICxVr3HZFtbtUAQ+4LdBo9A==", - "dev": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/conventional-commits-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", - "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", - "dev": true, - "dependencies": { - "is-text-path": "^2.0.0", - "JSONStream": "^1.3.5", - "meow": "^12.0.1", - "split2": "^4.0.0" - }, - "bin": { - "conventional-commits-parser": "cli.mjs" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/get-stream": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-7.0.1.tgz", - "integrity": "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==", - "dev": true, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/hosted-git-info": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.0.tgz", - "integrity": "sha512-ICclEpTLhHj+zCuSb2/usoNXSVkxUSIopre+b1w8NDY9Dntp9LO4vLdHYI336TH8sAqwrRgnSfdkBG2/YpisHA==", - "dev": true, - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/is-text-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", - "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", - "dev": true, - "dependencies": { - "text-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/meow": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", - "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", - "dev": true, - "engines": { - "node": ">=16.10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/normalize-package-data": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", - "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", - "dev": true, - "dependencies": { - "hosted-git-info": "^7.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/parse-json": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.0.0.tgz", - "integrity": "sha512-kP+TQYAzAiVnzOlWOe0diD6L35s9bJh0SCn95PIbZFKrOYuIRQsQkeWEYxzVDuHTt9V9YqvYCJ2Qo4z9wdfZPw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.21.4", - "error-ex": "^1.3.2", - "json-parse-even-better-errors": "^3.0.0", - "lines-and-columns": "^2.0.3", - "type-fest": "^3.8.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/parse-json/node_modules/type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/read-pkg": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.1.0.tgz", - "integrity": "sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.1", - "normalize-package-data": "^6.0.0", - "parse-json": "^7.0.0", - "type-fest": "^4.2.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/read-pkg-up": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-10.1.0.tgz", - "integrity": "sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA==", - "dev": true, "dependencies": { - "find-up": "^6.3.0", - "read-pkg": "^8.1.0", - "type-fest": "^4.2.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "dev": true, - "engines": { - "node": ">= 10.x" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/text-extensions": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz", - "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/type-fest": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.3.1.tgz", - "integrity": "sha512-pphNW/msgOUSkJbH58x8sqpq8uQj6b0ZKGxEsLKMUnGorRcDjrUaLS+39+/ub41JNTwrrMyJcUB8+YZs3mbwqw==", - "dev": true, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "conventional-commits-filter": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-4.0.0.tgz", + "integrity": "sha512-rnpnibcSOdFcdclpFwWa+pPlZJhXE7l+XK04zxhbWrhgpR96h33QLz8hITTXbcYICxVr3HZFtbtUAQ+4LdBo9A==", + "dev": true + }, + "conventional-commits-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", + "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", + "dev": true, + "requires": { + "JSONStream": "^1.3.5", + "is-text-path": "^2.0.0", + "meow": "^12.0.1", + "split2": "^4.0.0" + } + }, + "find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "requires": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + } + }, + "get-stream": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-7.0.1.tgz", + "integrity": "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==", + "dev": true + }, + "hosted-git-info": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", + "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", + "dev": true, + "requires": { + "lru-cache": "^10.0.1" + } + }, + "is-text-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", + "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", + "dev": true, + "requires": { + "text-extensions": "^2.0.0" + } + }, + "json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true + }, + "lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "dev": true + }, + "locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "requires": { + "p-locate": "^6.0.0" + } + }, + "lru-cache": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", + "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "dev": true + }, + "meow": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", + "dev": true + }, + "normalize-package-data": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", + "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", + "dev": true, + "requires": { + "hosted-git-info": "^7.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + } + }, + "p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "requires": { + "yocto-queue": "^1.0.0" + } + }, + "p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "requires": { + "p-limit": "^4.0.0" + } + }, + "parse-json": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.1.0.tgz", + "integrity": "sha512-ihtdrgbqdONYD156Ap6qTcaGcGdkdAxodO1wLqQ/j7HP1u2sFYppINiq4jyC8F+Nm+4fVufylCV00QmkTHkSUg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.21.4", + "error-ex": "^1.3.2", + "json-parse-even-better-errors": "^3.0.0", + "lines-and-columns": "^2.0.3", + "type-fest": "^3.8.0" + }, + "dependencies": { + "type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "dev": true + } + } + }, + "path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true + }, + "read-pkg": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.1.0.tgz", + "integrity": "sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.1", + "normalize-package-data": "^6.0.0", + "parse-json": "^7.0.0", + "type-fest": "^4.2.0" + } + }, + "read-pkg-up": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-10.1.0.tgz", + "integrity": "sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA==", + "dev": true, + "requires": { + "find-up": "^6.3.0", + "read-pkg": "^8.1.0", + "type-fest": "^4.2.0" + } + }, + "split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true + }, + "text-extensions": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz", + "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", + "dev": true + }, + "type-fest": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.4.0.tgz", + "integrity": "sha512-HT3RRs7sTfY22KuPQJkD/XjbTbxgP2Je5HPt6H6JEGvcjHd5Lqru75EbrP3tb4FYjNJ+DjLp+MNQTFQU0mhXNw==", + "dev": true + }, + "yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true + } } }, - "node_modules/@sinclair/typebox": { + "@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 }, - "node_modules/@sinonjs/commons": { + "@sinonjs/commons": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", "dev": true, - "dependencies": { + "requires": { "type-detect": "4.0.8" } }, - "node_modules/@sinonjs/fake-timers": { + "@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, - "dependencies": { + "requires": { "@sinonjs/commons": "^3.0.0" } }, - "node_modules/@tsconfig/node10": { + "@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", "dev": true }, - "node_modules/@tsconfig/node12": { + "@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", "dev": true }, - "node_modules/@tsconfig/node14": { + "@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", "dev": true }, - "node_modules/@tsconfig/node16": { + "@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "dev": true }, - "node_modules/@types/babel__core": { + "@types/babel__core": { "version": "7.20.1", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", "dev": true, - "dependencies": { + "requires": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", @@ -3694,198 +2464,203 @@ "@types/babel__traverse": "*" } }, - "node_modules/@types/babel__generator": { + "@types/babel__generator": { "version": "7.6.4", "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", "dev": true, - "dependencies": { + "requires": { "@babel/types": "^7.0.0" } }, - "node_modules/@types/babel__template": { + "@types/babel__template": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", "dev": true, - "dependencies": { + "requires": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, - "node_modules/@types/babel__traverse": { + "@types/babel__traverse": { "version": "7.20.1", "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", "dev": true, - "dependencies": { + "requires": { "@babel/types": "^7.20.7" } }, - "node_modules/@types/debug": { + "@types/debug": { "version": "4.1.8", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", "dev": true, - "dependencies": { + "requires": { "@types/ms": "*" } }, - "node_modules/@types/estree": { + "@types/estree": { "version": "0.0.39", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", "dev": true }, - "node_modules/@types/graceful-fs": { + "@types/graceful-fs": { "version": "4.1.6", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", "dev": true, - "dependencies": { + "requires": { "@types/node": "*" } }, - "node_modules/@types/istanbul-lib-coverage": { + "@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", "dev": true }, - "node_modules/@types/istanbul-lib-report": { + "@types/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", "dev": true, - "dependencies": { + "requires": { "@types/istanbul-lib-coverage": "*" } }, - "node_modules/@types/istanbul-reports": { + "@types/istanbul-reports": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", "dev": true, - "dependencies": { + "requires": { "@types/istanbul-lib-report": "*" } }, - "node_modules/@types/jest": { + "@types/jest": { "version": "29.5.3", "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.3.tgz", "integrity": "sha512-1Nq7YrO/vJE/FYnqYyw0FS8LdrjExSgIiHyKg7xPpn+yi8Q4huZryKnkJatN1ZRH89Kw2v33/8ZMB7DuZeSLlA==", "dev": true, - "dependencies": { + "requires": { "expect": "^29.0.0", "pretty-format": "^29.0.0" } }, - "node_modules/@types/js-base64": { + "@types/js-base64": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/@types/js-base64/-/js-base64-3.3.1.tgz", "integrity": "sha512-Zw33oQNAvDdAN9b0IE5stH0y2MylYvtU7VVTKEJPxhyM2q57CVaNJhtJW258ah24NRtaiA23tptUmVn3dmTKpw==", - "deprecated": "This is a stub types definition. js-base64 provides its own type definitions, so you do not need this installed.", "dev": true, - "dependencies": { + "requires": { "js-base64": "*" } }, - "node_modules/@types/json-schema": { + "@types/json-schema": { "version": "7.0.12", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", "dev": true }, - "node_modules/@types/json5": { + "@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, - "node_modules/@types/jsonld": { + "@types/jsonld": { "version": "1.5.9", "resolved": "https://registry.npmjs.org/@types/jsonld/-/jsonld-1.5.9.tgz", "integrity": "sha512-K76ImkErPYL2wGPZpNFSKp6wE+h/APecZLJrU7UfDaGqt/f+D9Rrg1aR7VdRrQ6k5DUNRZ2vn9yACwmpOr9QcA==", "dev": true }, - "node_modules/@types/lodash": { + "@types/lodash": { "version": "4.14.197", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.197.tgz", "integrity": "sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==", "dev": true }, - "node_modules/@types/minimist": { + "@types/minimist": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, - "node_modules/@types/ms": { + "@types/ms": { "version": "0.7.31", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", "dev": true }, - "node_modules/@types/node": { + "@types/node": { "version": "20.4.7", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.7.tgz", "integrity": "sha512-bUBrPjEry2QUTsnuEjzjbS7voGWCc30W0qzgMf90GPeDGFRakvrz47ju+oqDAKCXLUCe39u57/ORMl/O/04/9g==", "dev": true }, - "node_modules/@types/normalize-package-data": { + "@types/normalize-package-data": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, - "node_modules/@types/qrcode": { + "@types/qrcode": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/@types/qrcode/-/qrcode-1.5.1.tgz", "integrity": "sha512-HpSN675K0PmxIDRpjMI3Mc2GiKo3dNu+X/F5SoItiaDS1lVfgC6Wac1c5lQDfKWbTJUSHWiHKzpJpBZG7k9gaA==", "dev": true, - "dependencies": { + "requires": { "@types/node": "*" } }, - "node_modules/@types/stack-utils": { + "@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, - "node_modules/@types/uuid": { - "version": "8.3.4", + "@types/urijs": { + "version": "1.19.22", + "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.19.22.tgz", + "integrity": "sha512-qnYBwfN7O/+i6E1Kr8JaCKsrCLpRCiQ1XxkSxNIYuJ/5Aagt0+HlMX78DJMUrNzDULMz0eu2gcprlxJaDtACOw==", + "dev": true + }, + "@types/uuid": { + "version": "8.3.4", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", "dev": true }, - "node_modules/@types/validator": { + "@types/validator": { "version": "13.11.1", "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.1.tgz", "integrity": "sha512-d/MUkJYdOeKycmm75Arql4M5+UuXmf4cHdHKsyw1GcvnNgL6s77UkgSgJ8TE/rI5PYsnwYq5jkcWBLuN/MpQ1A==", "dev": true }, - "node_modules/@types/yargs": { + "@types/yargs": { "version": "17.0.24", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", "dev": true, - "dependencies": { + "requires": { "@types/yargs-parser": "*" } }, - "node_modules/@types/yargs-parser": { + "@types/yargs-parser": { "version": "21.0.0", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, - "node_modules/@typescript-eslint/eslint-plugin": { + "@typescript-eslint/eslint-plugin": { "version": "4.33.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", "dev": true, - "dependencies": { + "requires": { "@typescript-eslint/experimental-utils": "4.33.0", "@typescript-eslint/scope-manager": "4.33.0", "debug": "^4.3.1", @@ -3894,111 +2669,56 @@ "regexpp": "^3.1.0", "semver": "^7.3.5", "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } } }, - "node_modules/@typescript-eslint/experimental-utils": { + "@typescript-eslint/experimental-utils": { "version": "4.33.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", "dev": true, - "dependencies": { + "requires": { "@types/json-schema": "^7.0.7", "@typescript-eslint/scope-manager": "4.33.0", "@typescript-eslint/types": "4.33.0", "@typescript-eslint/typescript-estree": "4.33.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" } }, - "node_modules/@typescript-eslint/parser": { + "@typescript-eslint/parser": { "version": "4.33.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", "dev": true, - "dependencies": { + "requires": { "@typescript-eslint/scope-manager": "4.33.0", "@typescript-eslint/types": "4.33.0", "@typescript-eslint/typescript-estree": "4.33.0", "debug": "^4.3.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } } }, - "node_modules/@typescript-eslint/scope-manager": { + "@typescript-eslint/scope-manager": { "version": "4.33.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", "dev": true, - "dependencies": { + "requires": { "@typescript-eslint/types": "4.33.0", "@typescript-eslint/visitor-keys": "4.33.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/types": { + "@typescript-eslint/types": { "version": "4.33.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", - "dev": true, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } + "dev": true }, - "node_modules/@typescript-eslint/typescript-estree": { + "@typescript-eslint/typescript-estree": { "version": "4.33.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", "dev": true, - "dependencies": { + "requires": { "@typescript-eslint/types": "4.33.0", "@typescript-eslint/visitor-keys": "4.33.0", "debug": "^4.3.1", @@ -4006,401 +2726,289 @@ "is-glob": "^4.0.1", "semver": "^7.3.5", "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } } }, - "node_modules/@typescript-eslint/visitor-keys": { + "@typescript-eslint/visitor-keys": { "version": "4.33.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", "dev": true, - "dependencies": { + "requires": { "@typescript-eslint/types": "4.33.0", "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/acorn": { + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "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==", + "dev": true, + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "acorn": { "version": "8.10.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } + "dev": true }, - "node_modules/acorn-jsx": { + "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } + "dev": true }, - "node_modules/acorn-walk": { + "acorn-walk": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } + "dev": true }, - "node_modules/aes-js": { + "aes-js": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" }, - "node_modules/agent-base": { + "agent-base": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "dev": true, - "dependencies": { + "requires": { "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/aggregate-error": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", - "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", - "dev": true, - "dependencies": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/aggregate-error/node_modules/indent-string": { + "aggregate-error": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-5.0.0.tgz", + "integrity": "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==", "dev": true, - "engines": { - "node": ">=12" + "requires": { + "clean-stack": "^5.2.0", + "indent-string": "^5.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true + } } }, - "node_modules/ajv": { + "ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { + "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ajv-formats": { + "ajv-formats": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dependencies": { + "requires": { "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } } }, - "node_modules/ansi-colors": { + "ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } + "dev": true }, - "node_modules/ansi-escapes": { + "ansi-escapes": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true, - "engines": { - "node": ">=4" - } + "dev": true }, - "node_modules/ansi-regex": { + "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" - } + "dev": true }, - "node_modules/ansi-styles": { + "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": { + "requires": { "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ansicolors": { + "ansicolors": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==", "dev": true }, - "node_modules/anymatch": { + "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, - "dependencies": { + "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" } }, - "node_modules/arg": { + "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, - "node_modules/argparse": { + "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/argv-formatter": { + "argv-formatter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", "integrity": "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==", "dev": true }, - "node_modules/array-back": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", - "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", - "dev": true, - "dependencies": { - "typical": "^2.6.1" - }, - "engines": { - "node": ">=4" - } + "array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true }, - "node_modules/array-buffer-byte-length": { + "array-buffer-byte-length": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", "is-array-buffer": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-ify": { + "array-ify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", "dev": true }, - "node_modules/array-includes": { + "array-includes": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4", "get-intrinsic": "^1.1.3", "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-union": { + "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } + "dev": true }, - "node_modules/array.prototype.findlastindex": { + "array.prototype.findlastindex": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz", "integrity": "sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4", "es-shim-unscopables": "^1.0.0", "get-intrinsic": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.flat": { + "array.prototype.flat": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4", "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.flatmap": { + "array.prototype.flatmap": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4", "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/arraybuffer.prototype.slice": { + "arraybuffer.prototype.slice": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", "dev": true, - "dependencies": { + "requires": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.2", "define-properties": "^1.2.0", "get-intrinsic": "^1.2.1", "is-array-buffer": "^3.0.2", "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/arrify": { + "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/astral-regex": { + "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } + "dev": true }, - "node_modules/at-least-node": { + "at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } + "dev": true }, - "node_modules/available-typed-arrays": { + "available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "dev": true }, - "node_modules/babel-jest": { + "babel-jest": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.2.tgz", "integrity": "sha512-BYCzImLos6J3BH/+HvUCHG1dTf2MzmAB4jaVxHV+29RZLjR29XuYTmsf2sdDwkrb+FczkGo3kOhE7ga6sI0P4A==", "dev": true, - "dependencies": { + "requires": { "@jest/transform": "^29.6.2", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", @@ -4408,51 +3016,39 @@ "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" } }, - "node_modules/babel-plugin-istanbul": { + "babel-plugin-istanbul": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, - "dependencies": { + "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" - }, - "engines": { - "node": ">=8" } }, - "node_modules/babel-plugin-jest-hoist": { + "babel-plugin-jest-hoist": { "version": "29.5.0", "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", "dev": true, - "dependencies": { + "requires": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", "@types/babel__core": "^7.1.14", "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/babel-preset-current-node-syntax": { + "babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", "dev": true, - "dependencies": { + "requires": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", "@babel/plugin-syntax-class-properties": "^7.8.3", @@ -4465,681 +3061,394 @@ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, - "node_modules/babel-preset-jest": { + "babel-preset-jest": { "version": "29.5.0", "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", "dev": true, - "dependencies": { + "requires": { "babel-plugin-jest-hoist": "^29.5.0", "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, - "node_modules/balanced-match": { + "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "node_modules/base64-js": { + "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "dev": true }, - "node_modules/bech32": { + "bech32": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" }, - "node_modules/before-after-hook": { + "before-after-hook": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", "dev": true }, - "node_modules/bl": { + "bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, - "dependencies": { + "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, - "node_modules/bn.js": { + "bn.js": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, - "node_modules/bottleneck": { + "bottleneck": { "version": "2.19.5", "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", "dev": true }, - "node_modules/brace-expansion": { + "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "dependencies": { + "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "node_modules/braces": { + "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, - "dependencies": { + "requires": { "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brfs": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz", - "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==", - "dev": true, - "dependencies": { - "quote-stream": "^1.0.1", - "resolve": "^1.1.5", - "static-module": "^2.2.0", - "through2": "^2.0.0" - }, - "bin": { - "brfs": "bin/cmd.js" - } - }, - "node_modules/brfs/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/brfs/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/brfs/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/brfs/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/brfs/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" } }, - "node_modules/brorand": { + "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" }, - "node_modules/browser-or-node": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-1.3.0.tgz", - "integrity": "sha512-0F2z/VSnLbmEeBcUrSuDH5l0HxTXdQQzLjkmBR4cYfvg1zJrKSlmIZFqyFR8oX0NrwPhy3c3HQ6i3OxMbew4Tg==", + "browser-or-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-2.1.1.tgz", + "integrity": "sha512-8CVjaLJGuSKMVTxJ2DpBl5XnlNDiT4cQFeuCJJrvJmts9YrTZDizTX7PjC2s6W4x+MBGZeEY6dGMrF04/6Hgqg==", "dev": true }, - "node_modules/browserslist": { + "browserslist": { "version": "4.21.10", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", "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": { + "requires": { "caniuse-lite": "^1.0.30001517", "electron-to-chromium": "^1.4.477", "node-releases": "^2.0.13", "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/bs-logger": { + "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, - "dependencies": { + "requires": { "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" } }, - "node_modules/bser": { + "bser": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, - "dependencies": { + "requires": { "node-int64": "^0.4.0" } }, - "node_modules/buffer": { + "buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { + "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, - "node_modules/buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/buffer-from": { + "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/cachedir": { + "cachedir": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", - "dev": true, - "engines": { - "node": ">=6" - } + "dev": true }, - "node_modules/call-bind": { + "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, - "dependencies": { + "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/callsites": { + "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } + "dev": true }, - "node_modules/camelcase": { + "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } + "dev": true }, - "node_modules/camelcase-keys": { + "camelcase-keys": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, - "dependencies": { + "requires": { "camelcase": "^5.3.1", "map-obj": "^4.0.0", "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/caniuse-lite": { + "caniuse-lite": { "version": "1.0.30001522", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001522.tgz", "integrity": "sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] + "dev": true }, - "node_modules/canonicalize": { + "canonicalize": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==" }, - "node_modules/cardinal": { + "cardinal": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", "dev": true, - "dependencies": { + "requires": { "ansicolors": "~0.3.2", "redeyed": "~2.1.0" - }, - "bin": { - "cdl": "bin/cdl.js" } }, - "node_modules/cbor": { + "cbor": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cbor/-/cbor-7.0.6.tgz", "integrity": "sha512-rgt2RFogHGDLFU5r0kSfyeBc+de55DwYHP73KxKsQxsR5b0CYuQPH6AnJaXByiohpLdjQqj/K0SFcOV+dXdhSA==", "dev": true, - "dependencies": { + "requires": { "@cto.af/textdecoder": "^0.0.0", "nofilter": "^2.0.3" - }, - "engines": { - "node": ">=10.18.0" - }, - "peerDependencies": { - "bignumber.js": "^9.0.1" - }, - "peerDependenciesMeta": { - "bignumber.js": { - "optional": true - } } }, - "node_modules/chalk": { + "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": { + "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/char-regex": { + "chalk-template": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", + "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", + "dev": true, + "requires": { + "chalk": "^4.1.2" + } + }, + "char-regex": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } + "dev": true }, - "node_modules/chardet": { + "chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, - "node_modules/ci-info": { + "ci-info": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } + "dev": true }, - "node_modules/cjs-module-lexer": { + "cjs-module-lexer": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", "dev": true }, - "node_modules/clean-stack": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", - "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", + "clean-stack": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.2.0.tgz", + "integrity": "sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==", "dev": true, - "dependencies": { + "requires": { "escape-string-regexp": "5.0.0" }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true + } } }, - "node_modules/clean-stack/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-cursor": { + "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", "dev": true, - "dependencies": { + "requires": { "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" } }, - "node_modules/cli-spinners": { + "cli-spinners": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "dev": true }, - "node_modules/cli-table3": { + "cli-table3": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "dev": true, - "dependencies": { + "requires": { + "@colors/colors": "1.5.0", "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" } }, - "node_modules/cli-width": { + "cli-width": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", "dev": true }, - "node_modules/cliui": { + "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, - "dependencies": { + "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" } }, - "node_modules/clone": { + "clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "engines": { - "node": ">=0.8" - } + "dev": true }, - "node_modules/co": { + "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/collect-v8-coverage": { + "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 }, - "node_modules/collection-utils": { + "collection-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/collection-utils/-/collection-utils-1.0.1.tgz", "integrity": "sha512-LA2YTIlR7biSpXkKYwwuzGjwL5rjWEZVOSnvdUc7gObvWe4WkjxOpfrdhoP7Hs09YWDVfg0Mal9BpAqLfVEzQg==", "dev": true }, - "node_modules/color-convert": { + "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": { + "requires": { "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" } }, - "node_modules/color-name": { + "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/command-line-args": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-4.0.7.tgz", - "integrity": "sha512-aUdPvQRAyBvQd2n7jXcsMDz68ckBJELXNzBybCHOibUWEg0mWTnaYCSRU8h9R+aNRSvDihJtssSRCiDRpLaezA==", - "dev": true, - "dependencies": { - "array-back": "^2.0.0", - "find-replace": "^1.0.3", - "typical": "^2.6.1" - }, - "bin": { - "command-line-args": "bin/cli.js" - } - }, - "node_modules/command-line-usage": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.5.tgz", - "integrity": "sha512-d8NrGylA5oCXSbGoKz05FkehDAzSmIm4K03S5VDh4d5lZAtTWfc3D1RuETtuQCn8129nYfJfDdF7P/lwcz1BlA==", - "dev": true, - "dependencies": { - "array-back": "^2.0.0", - "chalk": "^2.4.1", - "table-layout": "^0.4.3", - "typical": "^2.6.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/command-line-usage/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==", + "command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "requires": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" } }, - "node_modules/command-line-usage/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==", + "command-line-usage": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.1.tgz", + "integrity": "sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "requires": { + "array-back": "^6.2.2", + "chalk-template": "^0.4.0", + "table-layout": "^3.0.0", + "typical": "^7.1.1" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/command-line-usage/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/command-line-usage/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "array-back": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", + "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", + "dev": true + }, + "typical": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", + "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", + "dev": true + } } }, - "node_modules/commitizen": { + "commitizen": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.3.0.tgz", "integrity": "sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==", "dev": true, - "dependencies": { + "requires": { "cachedir": "2.3.0", "cz-conventional-changelog": "3.3.0", "dedent": "0.7.0", @@ -5155,275 +3464,176 @@ "strip-bom": "4.0.0", "strip-json-comments": "3.1.1" }, - "bin": { - "commitizen": "bin/commitizen", - "cz": "bin/git-cz", - "git-cz": "bin/git-cz" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/commitizen/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/commitizen/node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/commitizen/node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/commitizen/node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/commitizen/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/commitizen/node_modules/inquirer": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", - "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/commitizen/node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/commitizen/node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/commitizen/node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/commitizen/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/commitizen/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/commitizen/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" + "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" + } + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "inquirer": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", + "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + } + }, + "minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } } }, - "node_modules/compare-func": { + "compare-func": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, - "dependencies": { + "requires": { "array-ify": "^1.0.0", "dot-prop": "^5.1.0" } }, - "node_modules/concat-map": { + "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/concat-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/config-chain": { + "config-chain": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", "dev": true, - "dependencies": { + "requires": { "ini": "^1.3.4", "proto-list": "~1.2.1" } }, - "node_modules/confusing-browser-globals": { + "confusing-browser-globals": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", "dev": true }, - "node_modules/conventional-changelog-angular": { + "conventional-changelog-angular": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz", "integrity": "sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==", "dev": true, - "dependencies": { + "requires": { "compare-func": "^2.0.0" - }, - "engines": { - "node": ">=14" } }, - "node_modules/conventional-changelog-conventionalcommits": { + "conventional-changelog-conventionalcommits": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-6.1.0.tgz", "integrity": "sha512-3cS3GEtR78zTfMzk0AizXKKIdN4OvSh7ibNz6/DPbhWWQu7LqE/8+/GqSodV+sywUR2gpJAdP/1JFf4XtN7Zpw==", "dev": true, - "dependencies": { + "requires": { "compare-func": "^2.0.0" - }, - "engines": { - "node": ">=14" } }, - "node_modules/conventional-changelog-writer": { + "conventional-changelog-writer": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz", "integrity": "sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ==", "dev": true, - "dependencies": { + "requires": { "conventional-commits-filter": "^3.0.0", "dateformat": "^3.0.3", "handlebars": "^4.7.7", @@ -5431,157 +3641,115 @@ "meow": "^8.1.2", "semver": "^7.0.0", "split": "^1.0.1" - }, - "bin": { - "conventional-changelog-writer": "cli.js" - }, - "engines": { - "node": ">=14" } }, - "node_modules/conventional-commit-types": { + "conventional-commit-types": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz", "integrity": "sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==", "dev": true }, - "node_modules/conventional-commits-filter": { + "conventional-commits-filter": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz", "integrity": "sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q==", "dev": true, - "dependencies": { + "requires": { "lodash.ismatch": "^4.4.0", "modify-values": "^1.0.1" - }, - "engines": { - "node": ">=14" } }, - "node_modules/conventional-commits-parser": { + "conventional-commits-parser": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz", "integrity": "sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==", "dev": true, - "dependencies": { - "is-text-path": "^1.0.1", + "requires": { "JSONStream": "^1.3.5", + "is-text-path": "^1.0.1", "meow": "^8.1.2", "split2": "^3.2.2" - }, - "bin": { - "conventional-commits-parser": "cli.js" - }, - "engines": { - "node": ">=14" } }, - "node_modules/convert-source-map": { + "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 }, - "node_modules/core-util-is": { + "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, - "node_modules/cosmiconfig": { + "cosmiconfig": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", "dev": true, - "dependencies": { + "requires": { "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "parse-json": "^5.0.0", "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" } }, - "node_modules/cosmiconfig-typescript-loader": { + "cosmiconfig-typescript-loader": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.4.0.tgz", "integrity": "sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==", - "dev": true, - "engines": { - "node": ">=v14.21.3" - }, - "peerDependencies": { - "@types/node": "*", - "cosmiconfig": ">=7", - "ts-node": ">=10", - "typescript": ">=4" - } + "dev": true }, - "node_modules/create-require": { + "create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, - "node_modules/cross-fetch": { + "cross-fetch": { "version": "3.1.8", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", - "dependencies": { + "requires": { "node-fetch": "^2.6.12" } }, - "node_modules/cross-spawn": { + "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "dependencies": { + "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" } }, - "node_modules/crypto-random-string": { + "crypto-random-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", "dev": true, - "dependencies": { + "requires": { "type-fest": "^1.0.1" }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/crypto-random-string/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true + } } }, - "node_modules/cz-conventional-changelog": { + "cz-conventional-changelog": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz", "integrity": "sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==", "dev": true, - "dependencies": { + "requires": { + "@commitlint/load": ">6.1.1", "chalk": "^2.4.1", "commitizen": "^4.0.3", "conventional-commit-types": "^3.0.0", @@ -5589,350 +3757,273 @@ "longest": "^2.0.1", "word-wrap": "^1.0.3" }, - "engines": { - "node": ">= 10" - }, - "optionalDependencies": { - "@commitlint/load": ">6.1.1" - } - }, - "node_modules/cz-conventional-changelog/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cz-conventional-changelog/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cz-conventional-changelog/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/cz-conventional-changelog/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/cz-conventional-changelog/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/cz-conventional-changelog/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "node_modules/dargs": { + "dargs": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", - "dev": true, - "engines": { - "node": ">=8" - } + "dev": true }, - "node_modules/dateformat": { + "dateformat": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true, - "engines": { - "node": "*" - } + "dev": true }, - "node_modules/debug": { + "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { + "requires": { "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } } }, - "node_modules/decamelize": { + "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/decamelize-keys": { + "decamelize-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, - "dependencies": { + "requires": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true + } } }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/dedent": { + "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, - "node_modules/deep-extend": { + "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } + "dev": true }, - "node_modules/deep-is": { + "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "node_modules/deepmerge": { + "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, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/defaults": { + "defaults": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, - "dependencies": { + "requires": { "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/define-properties": { + "define-properties": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dev": true, - "dependencies": { + "requires": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/deprecation": { + "deprecation": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", "dev": true }, - "node_modules/detect-file": { + "detect-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/detect-indent": { + "detect-indent": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true, - "engines": { - "node": ">=8" - } + "dev": true }, - "node_modules/detect-newline": { + "detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } + "dev": true }, - "node_modules/diff": { + "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } + "dev": true }, - "node_modules/diff-sequences": { + "diff-sequences": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "dev": true }, - "node_modules/dijkstrajs": { + "dijkstrajs": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==", "dev": true }, - "node_modules/dir-glob": { + "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, - "dependencies": { + "requires": { "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" } }, - "node_modules/doctrine": { + "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "dependencies": { + "requires": { "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" } }, - "node_modules/dot-prop": { + "dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, - "dependencies": { + "requires": { "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" } }, - "node_modules/duplexer2": { + "duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", "dev": true, - "dependencies": { + "requires": { "readable-stream": "^2.0.2" - } - }, - "node_modules/duplexer2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/duplexer2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/duplexer2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/duplexer2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, + }, "dependencies": { - "safe-buffer": "~5.1.0" + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, - "node_modules/electron-to-chromium": { + "electron-to-chromium": { "version": "1.4.496", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.496.tgz", "integrity": "sha512-qeXC3Zbykq44RCrBa4kr8v/dWzYJA8rAwpyh9Qd+NKWoJfjG5vvJqy9XOJ9H4P/lqulZBCgUWAYi+FeK5AuJ8g==", "dev": true }, - "node_modules/elliptic": { + "elliptic": { "version": "6.5.4", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dependencies": { + "requires": { "bn.js": "^4.11.9", "brorand": "^1.1.0", "hash.js": "^1.0.0", @@ -5940,218 +4031,135 @@ "inherits": "^2.0.4", "minimalistic-assert": "^1.0.1", "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } } }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/emittery": { + "emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } + "dev": true }, - "node_modules/emoji-regex": { + "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "node_modules/encode-utf8": { + "encode-utf8": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==", "dev": true }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "devOptional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/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==", - "devOptional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enquirer": { + "enquirer": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, - "dependencies": { + "requires": { "ansi-colors": "^4.1.1", "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" } }, - "node_modules/env-ci": { + "env-ci": { "version": "9.1.1", "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-9.1.1.tgz", "integrity": "sha512-Im2yEWeF4b2RAMAaWvGioXk6m0UNaIjD8hj28j2ij5ldnIFrDQT0+pzDvpbRkcjurhXhf/AsBKv8P2rtmGi9Aw==", "dev": true, - "dependencies": { + "requires": { "execa": "^7.0.0", "java-properties": "^1.0.2" }, - "engines": { - "node": "^16.14 || >=18" - } - }, - "node_modules/env-ci/node_modules/execa": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", - "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/env-ci/node_modules/human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", - "dev": true, - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/env-ci/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/env-ci/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/env-ci/node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/env-ci/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/env-ci/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/env-ci/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + } + }, + "human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true + }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true + }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "requires": { + "path-key": "^4.0.0" + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true + }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true + } } }, - "node_modules/error-ex": { + "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "dependencies": { + "requires": { "is-arrayish": "^0.2.1" } }, - "node_modules/es-abstract": { + "es-abstract": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", "dev": true, - "dependencies": { + "requires": { "array-buffer-byte-length": "^1.0.0", "arraybuffer.prototype.slice": "^1.0.1", "available-typed-arrays": "^1.0.5", @@ -6191,164 +4199,57 @@ "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", "which-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-set-tostringtag": { + "es-set-tostringtag": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", "dev": true, - "dependencies": { + "requires": { "get-intrinsic": "^1.1.3", "has": "^1.0.3", "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" } }, - "node_modules/es-shim-unscopables": { + "es-shim-unscopables": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", "dev": true, - "dependencies": { + "requires": { "has": "^1.0.3" } }, - "node_modules/es-to-primitive": { + "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, - "dependencies": { + "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/escalade": { + "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } + "dev": true }, - "node_modules/escape-string-regexp": { + "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", - "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", - "dev": true, - "dependencies": { - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } + "dev": true }, - "node_modules/eslint": { + "eslint": { "version": "7.32.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dev": true, - "dependencies": { + "requires": { "@babel/code-frame": "7.12.11", "@eslint/eslintrc": "^0.4.3", "@humanwhocodes/config-array": "^0.5.0", @@ -6390,98 +4291,149 @@ "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "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" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + } } }, - "node_modules/eslint-config-airbnb-base": { + "eslint-config-airbnb-base": { "version": "14.2.1", "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", "dev": true, - "dependencies": { + "requires": { "confusing-browser-globals": "^1.0.10", "object.assign": "^4.1.2", "object.entries": "^1.1.2" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0", - "eslint-plugin-import": "^2.22.1" } }, - "node_modules/eslint-config-prettier": { + "eslint-config-prettier": { "version": "8.10.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } + "dev": true }, - "node_modules/eslint-import-resolver-node": { + "eslint-import-resolver-node": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, - "dependencies": { + "requires": { "debug": "^3.2.7", "is-core-module": "^2.13.0", "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, + }, "dependencies": { - "ms": "^2.1.1" + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } } }, - "node_modules/eslint-module-utils": { + "eslint-module-utils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", "dev": true, - "dependencies": { + "requires": { "debug": "^3.2.7" }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, "dependencies": { - "ms": "^2.1.1" + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } } }, - "node_modules/eslint-plugin-import": { + "eslint-plugin-import": { "version": "2.28.1", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", "dev": true, - "dependencies": { + "requires": { "array-includes": "^3.1.6", "array.prototype.findlastindex": "^1.2.2", "array.prototype.flat": "^1.3.1", @@ -6500,352 +4452,164 @@ "semver": "^6.3.1", "tsconfig-paths": "^3.14.2" }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/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" + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } } }, - "node_modules/eslint-plugin-jest": { + "eslint-plugin-jest": { "version": "24.7.0", "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.7.0.tgz", "integrity": "sha512-wUxdF2bAZiYSKBclsUMrYHH6WxiBreNjyDxbRv345TIvPeoCEgPNEn3Sa+ZrSqsf1Dl9SqqSREXMHExlMMu1DA==", "dev": true, - "dependencies": { + "requires": { "@typescript-eslint/experimental-utils": "^4.0.1" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": ">= 4", - "eslint": ">=5" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - } } }, - "node_modules/eslint-plugin-prettier": { + "eslint-plugin-prettier": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", "dev": true, - "dependencies": { + "requires": { "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "eslint": ">=5.0.0", - "prettier": ">=1.13.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } } }, - "node_modules/eslint-scope": { + "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": { + "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" } }, - "node_modules/eslint-utils": { + "eslint-utils": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, - "dependencies": { + "requires": { "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" } }, - "node_modules/eslint-visitor-keys": { + "eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "node_modules/espree": { + "espree": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, - "dependencies": { + "requires": { "acorn": "^7.4.0", "acorn-jsx": "^5.3.1", "eslint-visitor-keys": "^1.3.0" }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/espree/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } } }, - "node_modules/esprima": { + "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } + "dev": true }, - "node_modules/esquery": { + "esquery": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, - "dependencies": { + "requires": { "estraverse": "^5.1.0" }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } } }, - "node_modules/esrecurse": { + "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": { + "requires": { "estraverse": "^5.2.0" }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } } }, - "node_modules/estraverse": { + "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } + "dev": true }, - "node_modules/estree-walker": { + "estree-walker": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", "dev": true }, - "node_modules/esutils": { + "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/ethers": { + "ethers": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "requires": { "@ethersproject/abi": "5.7.0", "@ethersproject/abstract-provider": "5.7.0", "@ethersproject/abstract-signer": "5.7.0", @@ -6878,12 +4642,24 @@ "@ethersproject/wordlists": "5.7.0" } }, - "node_modules/execa": { + "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==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, - "dependencies": { + "requires": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", @@ -6893,1115 +4669,826 @@ "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/exit": { + "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } + "dev": true }, - "node_modules/expand-tilde": { + "expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", "dev": true, - "dependencies": { + "requires": { "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" } }, - "node_modules/expect": { + "expect": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.2.tgz", "integrity": "sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA==", "dev": true, - "dependencies": { + "requires": { "@jest/expect-utils": "^29.6.2", "@types/node": "*", "jest-get-type": "^29.4.3", "jest-matcher-utils": "^29.6.2", "jest-message-util": "^29.6.2", "jest-util": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/external-editor": { + "external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, - "dependencies": { + "requires": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/falafel": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", - "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "isarray": "^2.0.1" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/falafel/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" } }, - "node_modules/fast-deep-equal": { + "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==" }, - "node_modules/fast-diff": { + "fast-diff": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true }, - "node_modules/fast-glob": { + "fast-glob": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, - "dependencies": { + "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" } }, - "node_modules/fast-json-stable-stringify": { + "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, - "node_modules/fast-levenshtein": { + "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, - "node_modules/fastq": { + "fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, - "dependencies": { + "requires": { "reusify": "^1.0.4" } }, - "node_modules/fb-watchman": { + "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, - "dependencies": { + "requires": { "bser": "2.1.1" } }, - "node_modules/figures": { + "figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", "dev": true, - "dependencies": { + "requires": { "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" } }, - "node_modules/file-entry-cache": { + "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "dependencies": { + "requires": { "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/fill-range": { + "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, - "dependencies": { + "requires": { "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" } }, - "node_modules/find-node-modules": { + "find-node-modules": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.1.3.tgz", "integrity": "sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==", "dev": true, - "dependencies": { + "requires": { "findup-sync": "^4.0.0", "merge": "^2.1.1" } }, - "node_modules/find-replace": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz", - "integrity": "sha512-KrUnjzDCD9426YnCP56zGYy/eieTnhtK6Vn++j+JJzmlsWWwEkDnsyVF575spT6HJ6Ow9tlbT3TQTDsa+O4UWA==", - "dev": true, - "dependencies": { - "array-back": "^1.0.4", - "test-value": "^2.1.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/find-replace/node_modules/array-back": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", - "integrity": "sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==", + "find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", "dev": true, - "dependencies": { - "typical": "^2.6.0" - }, - "engines": { - "node": ">=0.12.0" + "requires": { + "array-back": "^3.0.1" } }, - "node_modules/find-root": { + "find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", "dev": true }, - "node_modules/find-up": { + "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "dependencies": { + "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" } }, - "node_modules/find-versions": { + "find-versions": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", "dev": true, - "dependencies": { + "requires": { "semver-regex": "^4.0.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/findup-sync": { + "findup-sync": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", "dev": true, - "dependencies": { + "requires": { "detect-file": "^1.0.0", "is-glob": "^4.0.0", "micromatch": "^4.0.2", "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 8" } }, - "node_modules/flat-cache": { + "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, - "dependencies": { + "requires": { "flatted": "^3.1.0", "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/flatley": { + "flatley": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/flatley/-/flatley-5.2.0.tgz", "integrity": "sha512-vsb0/03uIHu7/3jRqABweblFUJMLokz1uMrcgFlvx6OAr6V3FiSic2iXeiJCj+cciTiQeumSDsIFAAnN1yvu4w==", - "dependencies": { + "requires": { "is-buffer": "^1.1.6" } }, - "node_modules/flatted": { + "flatted": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, - "node_modules/for-each": { + "for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, - "dependencies": { + "requires": { "is-callable": "^1.1.3" } }, - "node_modules/from2": { + "from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", "dev": true, - "dependencies": { + "requires": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" - } - }, - "node_modules/from2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/from2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/from2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/from2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, + }, "dependencies": { - "safe-buffer": "~5.1.0" + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, - "node_modules/fs-extra": { + "fs-extra": { "version": "11.1.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", "dev": true, - "dependencies": { + "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" } }, - "node_modules/fs.realpath": { + "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, - "node_modules/fsevents": { + "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } + "optional": true }, - "node_modules/function-bind": { + "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "node_modules/function.prototype.name": { + "function.prototype.name": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.0", "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functional-red-black-tree": { + "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", "dev": true }, - "node_modules/functions-have-names": { + "functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "dev": true }, - "node_modules/gensync": { + "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } + "dev": true }, - "node_modules/get-caller-file": { + "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } + "dev": true }, - "node_modules/get-intrinsic": { + "get-intrinsic": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dev": true, - "dependencies": { + "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", "has-proto": "^1.0.1", "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-package-type": { + "get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } + "dev": true }, - "node_modules/get-stream": { + "get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "dev": true }, - "node_modules/get-symbol-description": { + "get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/git-cz": { + "git-cz": { "version": "4.9.0", "resolved": "https://registry.npmjs.org/git-cz/-/git-cz-4.9.0.tgz", "integrity": "sha512-cSRL8IIOXU7UFLdbziCYqg8f8InwLwqHezkiRHNSph7oZqGv0togId1kMTfKil6gzK0VaSXeVBb4oDl0fQCHiw==", - "dev": true, - "bin": { - "git-cz": "bin/git-cz.js", - "gitcz": "bin/git-cz.js" - } + "dev": true }, - "node_modules/git-log-parser": { + "git-log-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.0.tgz", "integrity": "sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA==", "dev": true, - "dependencies": { + "requires": { "argv-formatter": "~1.0.0", "spawn-error-forwarder": "~1.0.0", "split2": "~1.0.0", "stream-combiner2": "~1.1.1", "through2": "~2.0.0", "traverse": "~0.6.6" - } - }, - "node_modules/git-log-parser/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/git-log-parser/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/git-log-parser/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/git-log-parser/node_modules/split2": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", - "integrity": "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==", - "dev": true, - "dependencies": { - "through2": "~2.0.0" - } - }, - "node_modules/git-log-parser/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/git-log-parser/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, + }, "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "split2": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", + "integrity": "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==", + "dev": true, + "requires": { + "through2": "~2.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + } } }, - "node_modules/git-raw-commits": { + "git-raw-commits": { "version": "2.0.11", "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", "dev": true, - "dependencies": { + "requires": { "dargs": "^7.0.0", "lodash": "^4.17.15", "meow": "^8.0.0", "split2": "^3.0.0", "through2": "^4.0.0" - }, - "bin": { - "git-raw-commits": "cli.js" - }, - "engines": { - "node": ">=10" } }, - "node_modules/glob": { + "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "dependencies": { + "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" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/glob-parent": { + "glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "dependencies": { + "requires": { "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" } }, - "node_modules/global-dirs": { + "global-dirs": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", "dev": true, - "dependencies": { + "requires": { "ini": "^1.3.4" - }, - "engines": { - "node": ">=4" } }, - "node_modules/global-modules": { + "global-modules": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, - "dependencies": { + "requires": { "global-prefix": "^1.0.1", "is-windows": "^1.0.1", "resolve-dir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" } }, - "node_modules/global-prefix": { + "global-prefix": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", "dev": true, - "dependencies": { + "requires": { "expand-tilde": "^2.0.2", "homedir-polyfill": "^1.0.1", "ini": "^1.3.4", "is-windows": "^1.0.1", "which": "^1.2.14" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, - "node_modules/globals": { + "globals": { "version": "13.21.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", "dev": true, - "dependencies": { + "requires": { "type-fest": "^0.20.2" }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } } }, - "node_modules/globals/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalthis": { + "globalthis": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, - "dependencies": { + "requires": { "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby": { + "globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, - "dependencies": { + "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gopd": { + "gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, - "dependencies": { + "requires": { "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/graceful-fs": { + "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 }, - "node_modules/graphql": { + "graphql": { "version": "0.11.7", "resolved": "https://registry.npmjs.org/graphql/-/graphql-0.11.7.tgz", "integrity": "sha512-x7uDjyz8Jx+QPbpCFCMQ8lltnQa4p4vSYHx6ADe8rVYRTdsyhCJbvSty5DAsLVmU6cGakl+r8HQYolKHxk/tiw==", "dev": true, - "dependencies": { + "requires": { "iterall": "1.1.3" } }, - "node_modules/handlebars": { + "handlebars": { "version": "4.7.8", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, - "dependencies": { + "requires": { "minimist": "^1.2.5", "neo-async": "^2.6.2", "source-map": "^0.6.1", + "uglify-js": "^3.1.4", "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" } }, - "node_modules/hard-rejection": { + "hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "engines": { - "node": ">=6" - } + "dev": true }, - "node_modules/has": { + "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, - "dependencies": { + "requires": { "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" } }, - "node_modules/has-bigints": { + "has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "dev": true }, - "node_modules/has-flag": { + "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" - } + "dev": true }, - "node_modules/has-property-descriptors": { + "has-property-descriptors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "dev": true, - "dependencies": { + "requires": { "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-proto": { + "has-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "dev": true }, - "node_modules/has-symbols": { + "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "dev": true }, - "node_modules/has-tostringtag": { + "has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, - "dependencies": { + "requires": { "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hash.js": { + "hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { + "requires": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" } }, - "node_modules/hmac-drbg": { + "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dependencies": { + "requires": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/homedir-polyfill": { + "homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dev": true, - "dependencies": { + "requires": { "parse-passwd": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" } }, - "node_modules/hook-std": { + "hook-std": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-3.0.0.tgz", "integrity": "sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "dev": true }, - "node_modules/hosted-git-info": { + "hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, - "dependencies": { + "requires": { "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" } }, - "node_modules/html-escaper": { + "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": { + "http-proxy-agent": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", "dev": true, - "dependencies": { + "requires": { "agent-base": "^7.1.0", "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" } }, - "node_modules/https-proxy-agent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz", - "integrity": "sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==", + "https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", "dev": true, - "dependencies": { + "requires": { "agent-base": "^7.0.2", "debug": "4" - }, - "engines": { - "node": ">= 14" } }, - "node_modules/human-signals": { + "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } + "dev": true }, - "node_modules/iconv-lite": { + "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, - "dependencies": { + "requires": { "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" } }, - "node_modules/ieee754": { + "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "dev": true }, - "node_modules/ignore": { + "ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } + "dev": true }, - "node_modules/import-fresh": { + "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "dependencies": { + "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } } }, - "node_modules/import-from": { + "import-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz", "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==", - "dev": true, - "engines": { - "node": ">=12.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "dev": true }, - "node_modules/import-local": { + "import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, - "dependencies": { + "requires": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/imurmurhash": { + "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } + "dev": true }, - "node_modules/indent-string": { + "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } + "dev": true }, - "node_modules/inflight": { + "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, - "dependencies": { + "requires": { "once": "^1.3.0", "wrappy": "1" } }, - "node_modules/inherits": { + "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/ini": { + "ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, - "node_modules/inquirer": { + "inquirer": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", "dev": true, - "dependencies": { + "requires": { "ansi-escapes": "^3.2.0", "chalk": "^2.4.2", "cli-cursor": "^2.1.0", @@ -8016,745 +5503,535 @@ "strip-ansi": "^5.1.0", "through": "^2.3.6" }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/inquirer/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/inquirer/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/inquirer/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/string-width/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/inquirer/node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "node_modules/internal-slot": { + "internal-slot": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, - "dependencies": { + "requires": { "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" } }, - "node_modules/into-stream": { + "into-stream": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-7.0.0.tgz", "integrity": "sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==", "dev": true, - "dependencies": { + "requires": { "from2": "^2.3.0", "p-is-promise": "^3.0.0" }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/into-stream/node_modules/p-is-promise": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", - "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "p-is-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", + "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", + "dev": true + } } }, - "node_modules/is-array-buffer": { + "is-array-buffer": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.0", "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-arrayish": { + "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, - "node_modules/is-bigint": { + "is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, - "dependencies": { + "requires": { "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-boolean-object": { + "is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-buffer": { + "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, - "node_modules/is-callable": { + "is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "dev": true }, - "node_modules/is-core-module": { + "is-core-module": { "version": "2.13.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dev": true, - "dependencies": { + "requires": { "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-date-object": { + "is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, - "dependencies": { + "requires": { "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-extglob": { + "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/is-fullwidth-code-point": { + "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } + "dev": true }, - "node_modules/is-generator-fn": { + "is-generator-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } + "dev": true }, - "node_modules/is-glob": { + "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "dependencies": { + "requires": { "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" } }, - "node_modules/is-interactive": { + "is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "engines": { - "node": ">=8" - } + "dev": true }, - "node_modules/is-negative-zero": { + "is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "dev": true }, - "node_modules/is-number": { + "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } + "dev": true }, - "node_modules/is-number-object": { + "is-number-object": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, - "dependencies": { + "requires": { "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-obj": { + "is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "engines": { - "node": ">=8" - } + "dev": true }, - "node_modules/is-plain-obj": { + "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/is-plain-object": { + "is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/is-reference": { + "is-reference": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", "dev": true, - "dependencies": { + "requires": { "@types/estree": "*" } }, - "node_modules/is-regex": { + "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-shared-array-buffer": { + "is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-stream": { + "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "dev": true }, - "node_modules/is-string": { + "is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, - "dependencies": { + "requires": { "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-symbol": { + "is-symbol": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, - "dependencies": { + "requires": { "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-text-path": { + "is-text-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", "dev": true, - "dependencies": { + "requires": { "text-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" } }, - "node_modules/is-typed-array": { + "is-typed-array": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dev": true, - "dependencies": { + "requires": { "which-typed-array": "^1.1.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-unicode-supported": { + "is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "dev": true }, - "node_modules/is-url": { + "is-url": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", "dev": true }, - "node_modules/is-utf8": { + "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", "dev": true }, - "node_modules/is-weakref": { + "is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-windows": { + "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/isarray": { + "isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, - "node_modules/isexe": { + "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, - "node_modules/isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA==", - "dev": true, - "dependencies": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, - "node_modules/isomorphic-fetch/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isomorphic-fetch/node_modules/node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dev": true, - "dependencies": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "node_modules/issue-parser": { + "issue-parser": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-6.0.0.tgz", "integrity": "sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==", "dev": true, - "dependencies": { + "requires": { "lodash.capitalize": "^4.2.1", "lodash.escaperegexp": "^4.1.2", "lodash.isplainobject": "^4.0.6", "lodash.isstring": "^4.0.1", "lodash.uniqby": "^4.7.0" - }, - "engines": { - "node": ">=10.13" } }, - "node_modules/istanbul-lib-coverage": { + "istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } + "dev": true }, - "node_modules/istanbul-lib-instrument": { + "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, - "dependencies": { + "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" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/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" + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } } }, - "node_modules/istanbul-lib-report": { + "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, - "dependencies": { + "requires": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" } }, - "node_modules/istanbul-lib-source-maps": { + "istanbul-lib-source-maps": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, - "dependencies": { + "requires": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" } }, - "node_modules/istanbul-reports": { + "istanbul-reports": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, - "dependencies": { + "requires": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" } }, - "node_modules/iterall": { + "iterall": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.1.3.tgz", "integrity": "sha512-Cu/kb+4HiNSejAPhSaN1VukdNTTi/r4/e+yykqjlG/IW+1gZH5b4+Bq3whDX4tvbYugta3r8KTMUiqT3fIGxuQ==", "dev": true }, - "node_modules/java-properties": { + "java-properties": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } + "dev": true }, - "node_modules/jest": { + "jest": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.2.tgz", "integrity": "sha512-8eQg2mqFbaP7CwfsTpCxQ+sHzw1WuNWL5UUvjnWP4hx2riGz9fPSzYOaU5q8/GqWn1TfgZIVTqYJygbGbWAANg==", "dev": true, - "dependencies": { + "requires": { "@jest/core": "^29.6.2", "@jest/types": "^29.6.1", "import-local": "^3.0.2", "jest-cli": "^29.6.2" }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true + "dependencies": { + "jest-cli": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.2.tgz", + "integrity": "sha512-TT6O247v6dCEX2UGHGyflMpxhnrL0DNqP2fRTKYm3nJJpCTfXX3GCMQPGFjXDoj0i5/Blp3jriKXFgdfmbYB6Q==", + "dev": true, + "requires": { + "@jest/core": "^29.6.2", + "@jest/test-result": "^29.6.2", + "@jest/types": "^29.6.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^29.6.2", + "jest-util": "^29.6.2", + "jest-validate": "^29.6.2", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + } } } }, - "node_modules/jest-changed-files": { + "jest-changed-files": { "version": "29.5.0", "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", "dev": true, - "dependencies": { + "requires": { "execa": "^5.0.0", "p-limit": "^3.1.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-changed-files/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" + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + } } }, - "node_modules/jest-circus": { + "jest-circus": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.2.tgz", "integrity": "sha512-G9mN+KOYIUe2sB9kpJkO9Bk18J4dTDArNFPwoZ7WKHKel55eKIS/u2bLthxgojwlf9NLCVQfgzM/WsOVvoC6Fw==", "dev": true, - "dependencies": { + "requires": { "@jest/environment": "^29.6.2", "@jest/expect": "^29.6.2", "@jest/test-result": "^29.6.2", @@ -8776,45 +6053,30 @@ "slash": "^3.0.0", "stack-utils": "^2.0.3" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus/node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", - "dev": true, - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/jest-circus/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" + "dedent": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + } } }, - "node_modules/jest-config": { + "jest-config": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.2.tgz", "integrity": "sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw==", "dev": true, - "dependencies": { + "requires": { "@babel/core": "^7.11.6", "@jest/test-sequencer": "^29.6.2", "@jest/types": "^29.6.1", @@ -8837,151 +6099,110 @@ "pretty-format": "^29.6.2", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } } }, - "node_modules/jest-diff": { + "jest-diff": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.2.tgz", "integrity": "sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA==", "dev": true, - "dependencies": { + "requires": { "chalk": "^4.0.0", "diff-sequences": "^29.4.3", "jest-get-type": "^29.4.3", "pretty-format": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-docblock": { + "jest-docblock": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", "dev": true, - "dependencies": { + "requires": { "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-each": { + "jest-each": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.2.tgz", "integrity": "sha512-MsrsqA0Ia99cIpABBc3izS1ZYoYfhIy0NNWqPSE0YXbQjwchyt6B1HD2khzyPe1WiJA7hbxXy77ZoUQxn8UlSw==", "dev": true, - "dependencies": { + "requires": { "@jest/types": "^29.6.1", "chalk": "^4.0.0", "jest-get-type": "^29.4.3", "jest-util": "^29.6.2", "pretty-format": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-environment-node": { + "jest-environment-node": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.2.tgz", "integrity": "sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ==", "dev": true, - "dependencies": { + "requires": { "@jest/environment": "^29.6.2", "@jest/fake-timers": "^29.6.2", "@jest/types": "^29.6.1", "@types/node": "*", "jest-mock": "^29.6.2", "jest-util": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-get-type": { + "jest-get-type": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "dev": true }, - "node_modules/jest-haste-map": { + "jest-haste-map": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.2.tgz", "integrity": "sha512-+51XleTDAAysvU8rT6AnS1ZJ+WHVNqhj1k6nTvN2PYP+HjU3kqlaKQ1Lnw3NYW3bm2r8vq82X0Z1nDDHZMzHVA==", "dev": true, - "dependencies": { + "requires": { "@jest/types": "^29.6.1", "@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.4.3", "jest-util": "^29.6.2", "jest-worker": "^29.6.2", "micromatch": "^4.0.4", "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" } }, - "node_modules/jest-leak-detector": { + "jest-leak-detector": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.2.tgz", "integrity": "sha512-aNqYhfp5uYEO3tdWMb2bfWv6f0b4I0LOxVRpnRLAeque2uqOVVMLh6khnTcE2qJ5wAKop0HcreM1btoysD6bPQ==", "dev": true, - "dependencies": { + "requires": { "jest-get-type": "^29.4.3", "pretty-format": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-matcher-utils": { + "jest-matcher-utils": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.2.tgz", "integrity": "sha512-4LiAk3hSSobtomeIAzFTe+N8kL6z0JtF3n6I4fg29iIW7tt99R7ZcIFW34QkX+DuVrf+CUe6wuVOpm7ZKFJzZQ==", "dev": true, - "dependencies": { + "requires": { "chalk": "^4.0.0", "jest-diff": "^29.6.2", "jest-get-type": "^29.4.3", "pretty-format": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-message-util": { + "jest-message-util": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.2.tgz", "integrity": "sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ==", "dev": true, - "dependencies": { + "requires": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.1", "@types/stack-utils": "^2.0.0", @@ -8991,57 +6212,37 @@ "pretty-format": "^29.6.2", "slash": "^3.0.0", "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-mock": { + "jest-mock": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.2.tgz", "integrity": "sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg==", "dev": true, - "dependencies": { + "requires": { "@jest/types": "^29.6.1", "@types/node": "*", "jest-util": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-pnp-resolver": { + "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, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } + "dev": true }, - "node_modules/jest-regex-util": { + "jest-regex-util": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "dev": true }, - "node_modules/jest-resolve": { + "jest-resolve": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.2.tgz", "integrity": "sha512-G/iQUvZWI5e3SMFssc4ug4dH0aZiZpsDq9o1PtXTV1210Ztyb2+w+ZgQkB3iOiC5SmAEzJBOHWz6Hvrd+QnNPw==", "dev": true, - "dependencies": { + "requires": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "jest-haste-map": "^29.6.2", @@ -9051,30 +6252,24 @@ "resolve": "^1.20.0", "resolve.exports": "^2.0.0", "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-resolve-dependencies": { + "jest-resolve-dependencies": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.2.tgz", "integrity": "sha512-LGqjDWxg2fuQQm7ypDxduLu/m4+4Lb4gczc13v51VMZbVP5tSBILqVx8qfWcsdP8f0G7aIqByIALDB0R93yL+w==", "dev": true, - "dependencies": { + "requires": { "jest-regex-util": "^29.4.3", "jest-snapshot": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-runner": { + "jest-runner": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.2.tgz", "integrity": "sha512-wXOT/a0EspYgfMiYHxwGLPCZfC0c38MivAlb2lMEAlwHINKemrttu1uSbcGbfDV31sFaPWnWJPmb2qXM8pqZ4w==", "dev": true, - "dependencies": { + "requires": { "@jest/console": "^29.6.2", "@jest/environment": "^29.6.2", "@jest/test-result": "^29.6.2", @@ -9097,31 +6292,24 @@ "p-limit": "^3.1.0", "source-map-support": "0.5.13" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner/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" + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + } } }, - "node_modules/jest-runtime": { + "jest-runtime": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.2.tgz", "integrity": "sha512-2X9dqK768KufGJyIeLmIzToDmsN0m7Iek8QNxRSI/2+iPFYHF0jTwlO3ftn7gdKd98G/VQw9XJCk77rbTGZnJg==", "dev": true, - "dependencies": { + "requires": { "@jest/environment": "^29.6.2", "@jest/fake-timers": "^29.6.2", "@jest/globals": "^29.6.2", @@ -9144,17 +6332,14 @@ "jest-util": "^29.6.2", "slash": "^3.0.0", "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-snapshot": { + "jest-snapshot": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.2.tgz", "integrity": "sha512-1OdjqvqmRdGNvWXr/YZHuyhh5DeaLp1p/F8Tht/MrMw4Kr1Uu/j4lRG+iKl1DAqUJDWxtQBMk41Lnf/JETYBRA==", "dev": true, - "dependencies": { + "requires": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", "@babel/plugin-syntax-jsx": "^7.7.2", @@ -9175,34 +6360,28 @@ "natural-compare": "^1.4.0", "pretty-format": "^29.6.2", "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-util": { + "jest-util": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.2.tgz", "integrity": "sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==", "dev": true, - "dependencies": { + "requires": { "@jest/types": "^29.6.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-validate": { + "jest-validate": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.2.tgz", "integrity": "sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg==", "dev": true, - "dependencies": { + "requires": { "@jest/types": "^29.6.1", "camelcase": "^6.2.0", "chalk": "^4.0.0", @@ -9210,28 +6389,21 @@ "leven": "^3.1.0", "pretty-format": "^29.6.2" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + } } }, - "node_modules/jest-watch-typeahead": { + "jest-watch-typeahead": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-2.2.2.tgz", "integrity": "sha512-+QgOFW4o5Xlgd6jGS5X37i08tuuXNW8X0CV9WNFi+3n8ExCIP+E1melYhvYLjv5fE6D0yyzk74vsSO8I6GqtvQ==", "dev": true, - "dependencies": { + "requires": { "ansi-escapes": "^6.0.0", "chalk": "^5.2.0", "jest-regex-util": "^29.0.0", @@ -9240,122 +6412,73 @@ "string-length": "^5.0.1", "strip-ansi": "^7.0.1" }, - "engines": { - "node": "^14.17.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "jest": "^27.0.0 || ^28.0.0 || ^29.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/ansi-escapes": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", - "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", - "dev": true, - "dependencies": { - "type-fest": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watch-typeahead/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "dev": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/char-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", - "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", - "dev": true, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/jest-watch-typeahead/node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watch-typeahead/node_modules/string-length": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", - "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", - "dev": true, - "dependencies": { - "char-regex": "^2.0.0", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watch-typeahead/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "ansi-escapes": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", + "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", + "dev": true, + "requires": { + "type-fest": "^3.0.0" + } + }, + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true + }, + "char-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", + "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", + "dev": true + }, + "slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true + }, + "string-length": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", + "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", + "dev": true, + "requires": { + "char-regex": "^2.0.0", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "dev": true + } } }, - "node_modules/jest-watcher": { + "jest-watcher": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.2.tgz", "integrity": "sha512-GZitlqkMkhkefjfN/p3SJjrDaxPflqxEAv3/ik10OirZqJGYH5rPiIsgVcfof0Tdqg3shQGdEIxDBx+B4tuLzA==", "dev": true, - "dependencies": { + "requires": { "@jest/test-result": "^29.6.2", "@jest/types": "^29.6.1", "@types/node": "*", @@ -9365,589 +6488,396 @@ "jest-util": "^29.6.2", "string-length": "^4.0.1" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-watcher/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/jest-watcher/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" + "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" + } + }, + "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 + } } }, - "node_modules/jest-worker": { + "jest-worker": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.2.tgz", "integrity": "sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==", "dev": true, - "dependencies": { + "requires": { "@types/node": "*", "jest-util": "^29.6.2", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jest/node_modules/jest-cli": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.2.tgz", - "integrity": "sha512-TT6O247v6dCEX2UGHGyflMpxhnrL0DNqP2fRTKYm3nJJpCTfXX3GCMQPGFjXDoj0i5/Blp3jriKXFgdfmbYB6Q==", - "dev": true, "dependencies": { - "@jest/core": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/types": "^29.6.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.6.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true + "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/js-base64": { + "js-base64": { "version": "3.7.5", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.5.tgz", "integrity": "sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==" }, - "node_modules/js-sha3": { + "js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" }, - "node_modules/js-tokens": { + "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": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "dependencies": { + "requires": { "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsesc": { + "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } + "dev": true }, - "node_modules/json-parse-better-errors": { + "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "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/json-schema-traverse": { + "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==" }, - "node_modules/json-stable-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz", - "integrity": "sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==", - "dev": true, - "dependencies": { - "jsonify": "^0.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/json-stable-stringify-without-jsonify": { + "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, - "node_modules/json-stringify-safe": { + "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true }, - "node_modules/json5": { + "json5": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, - "dependencies": { + "requires": { "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" } }, - "node_modules/jsonfile": { + "jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, - "dependencies": { + "requires": { + "graceful-fs": "^4.1.6", "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", - "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jsonparse": { + "jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } + "dev": true }, - "node_modules/kind-of": { + "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "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" - } - }, - "node_modules/lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "dependencies": { - "invert-kv": "^2.0.0" - }, - "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/levn": { + "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "dependencies": { + "requires": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" } }, - "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/load-json-file": { + "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, - "dependencies": { + "requires": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", "pify": "^3.0.0", "strip-bom": "^3.0.0" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/load-json-file/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/load-json-file/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + } } }, - "node_modules/locate-path": { + "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": { + "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/lodash-es": { + "lodash-es": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", "dev": true }, - "node_modules/lodash.camelcase": { + "lodash.assignwith": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz", + "integrity": "sha512-ZznplvbvtjK2gMvnQ1BR/zqPFZmS6jbK4p+6Up4xcRYA7yMIwxHCfbTcrYxXKzzqLsQ05eJPVznEW3tuwV7k1g==", + "dev": true + }, + "lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", "dev": true }, - "node_modules/lodash.capitalize": { + "lodash.capitalize": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==", "dev": true }, - "node_modules/lodash.escaperegexp": { + "lodash.escaperegexp": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", "dev": true }, - "node_modules/lodash.isfunction": { + "lodash.isfunction": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", "dev": true }, - "node_modules/lodash.ismatch": { + "lodash.ismatch": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", "dev": true }, - "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==", "dev": true }, - "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==", "dev": true }, - "node_modules/lodash.kebabcase": { + "lodash.kebabcase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", "dev": true }, - "node_modules/lodash.map": { + "lodash.map": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==", "dev": true }, - "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.merge": { + "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "node_modules/lodash.mergewith": { + "lodash.mergewith": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", "dev": true }, - "node_modules/lodash.padend": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", - "integrity": "sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw==", - "dev": true - }, - "node_modules/lodash.snakecase": { + "lodash.snakecase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", "dev": true }, - "node_modules/lodash.startcase": { + "lodash.startcase": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", "dev": true }, - "node_modules/lodash.truncate": { + "lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true }, - "node_modules/lodash.uniq": { + "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, - "node_modules/lodash.uniqby": { + "lodash.uniqby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", "dev": true }, - "node_modules/lodash.upperfirst": { + "lodash.upperfirst": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", "dev": true }, - "node_modules/log-symbols": { + "log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, - "dependencies": { + "requires": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/longest": { + "longest": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz", "integrity": "sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/lru-cache": { + "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { + "requires": { "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/magic-string": { - "version": "0.22.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", - "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", - "dev": true, - "dependencies": { - "vlq": "^0.2.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-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/map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "dependencies": { - "p-defer": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/map-obj": { + "map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "dev": true }, - "node_modules/marked": { + "marked": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/marked/-/marked-5.1.2.tgz", "integrity": "sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg==", - "dev": true, - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 16" - } + "dev": true }, - "node_modules/marked-terminal": { + "marked-terminal": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-5.2.0.tgz", "integrity": "sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA==", "dev": true, - "dependencies": { + "requires": { "ansi-escapes": "^6.2.0", "cardinal": "^2.1.1", "chalk": "^5.2.0", @@ -9955,72 +6885,36 @@ "node-emoji": "^1.11.0", "supports-hyperlinks": "^2.3.0" }, - "engines": { - "node": ">=14.13.1 || >=16.0.0" - }, - "peerDependencies": { - "marked": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" - } - }, - "node_modules/marked-terminal/node_modules/ansi-escapes": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", - "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", - "dev": true, - "dependencies": { - "type-fest": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/marked-terminal/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "dev": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/marked-terminal/node_modules/type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, "dependencies": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - }, - "engines": { - "node": ">=6" + "ansi-escapes": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", + "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", + "dev": true, + "requires": { + "type-fest": "^3.0.0" + } + }, + "chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true + }, + "type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "dev": true + } } }, - "node_modules/meow": { + "meow": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, - "dependencies": { + "requires": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", "decamelize-keys": "^1.1.0", @@ -10032,361 +6926,202 @@ "trim-newlines": "^3.0.0", "type-fest": "^0.18.0", "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/merge": { + "merge": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz", "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==", "dev": true }, - "node_modules/merge-source-map": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", - "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", - "dev": true, - "dependencies": { - "source-map": "^0.5.6" - } - }, - "node_modules/merge-source-map/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/merge-stream": { + "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, - "node_modules/merge2": { + "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } + "dev": true }, - "node_modules/micromatch": { + "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, - "dependencies": { + "requires": { "braces": "^3.0.2", "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" } }, - "node_modules/mime": { + "mime": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } + "dev": true }, - "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/min-indent": { + "min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "engines": { - "node": ">=4" - } + "dev": true }, - "node_modules/minimalistic-assert": { + "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, - "node_modules/minimalistic-crypto-utils": { + "minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" }, - "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/minimist": { + "minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "dev": true }, - "node_modules/minimist-options": { + "minimist-options": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, - "dependencies": { + "requires": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0", "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" } }, - "node_modules/modify-values": { + "modify-values": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/moment": { + "moment": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", - "dev": true, - "engines": { - "node": "*" - } + "dev": true }, - "node_modules/ms": { + "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/mute-stream": { + "mute-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", "dev": true }, - "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/neo-async": { + "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/nerf-dart": { + "nerf-dart": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==", "dev": true }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/node-emoji": { + "node-emoji": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", "dev": true, - "dependencies": { + "requires": { "lodash": "^4.17.21" } }, - "node_modules/node-fetch": { + "node-fetch": { "version": "2.6.13", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.13.tgz", "integrity": "sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==", - "dependencies": { + "requires": { "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } } }, - "node_modules/node-int64": { + "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": { + "node-releases": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, - "node_modules/nofilter": { + "nofilter": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-2.0.3.tgz", "integrity": "sha512-FbuXC+lK+GU2+63D1kC1ETiZo+Z7SIi7B+mxKTCH1byrh6WFvfBCN/wpherFz0a0bjGd7EKTst/cz0yLeNngug==", "dev": true, - "dependencies": { + "requires": { "@cto.af/textdecoder": "^0.0.0" - }, - "engines": { - "node": ">=10.18" } }, - "node_modules/normalize-package-data": { + "normalize-package-data": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, - "dependencies": { + "requires": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" } }, - "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/normalize-url": { + "normalize-url": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", + "dev": true + }, + "npm": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/npm/-/npm-9.9.0.tgz", + "integrity": "sha512-wkd7sjz4KmdmddYQcd0aTP73P1cEuPlekeulz4jTDeMVx/Zo5XZ5KQ1z3eUzV3Q/WZpEO0NJXTrD5FNFe6fhCA==", "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm": { - "version": "9.8.1", - "resolved": "https://registry.npmjs.org/npm/-/npm-9.8.1.tgz", - "integrity": "sha512-AfDvThQzsIXhYgk9zhbk5R+lh811lKkLAeQMMhSypf1BM7zUafeIIBzMzespeuVEJ0+LvY36oRQYf7IKLzU3rw==", - "bundleDependencies": [ - "@isaacs/string-locale-compare", - "@npmcli/arborist", - "@npmcli/config", - "@npmcli/fs", - "@npmcli/map-workspaces", - "@npmcli/package-json", - "@npmcli/promise-spawn", - "@npmcli/run-script", - "abbrev", - "archy", - "cacache", - "chalk", - "ci-info", - "cli-columns", - "cli-table3", - "columnify", - "fastest-levenshtein", - "fs-minipass", - "glob", - "graceful-fs", - "hosted-git-info", - "ini", - "init-package-json", - "is-cidr", - "json-parse-even-better-errors", - "libnpmaccess", - "libnpmdiff", - "libnpmexec", - "libnpmfund", - "libnpmhook", - "libnpmorg", - "libnpmpack", - "libnpmpublish", - "libnpmsearch", - "libnpmteam", - "libnpmversion", - "make-fetch-happen", - "minimatch", - "minipass", - "minipass-pipeline", - "ms", - "node-gyp", - "nopt", - "npm-audit-report", - "npm-install-checks", - "npm-package-arg", - "npm-pick-manifest", - "npm-profile", - "npm-registry-fetch", - "npm-user-validate", - "npmlog", - "p-map", - "pacote", - "parse-conflict-json", - "proc-log", - "qrcode-terminal", - "read", - "semver", - "sigstore", - "ssri", - "supports-color", - "tar", - "text-table", - "tiny-relative-date", - "treeverse", - "validate-npm-package-name", - "which", - "write-file-atomic" - ], - "dev": true, - "dependencies": { + "requires": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^6.3.0", - "@npmcli/config": "^6.2.1", + "@npmcli/arborist": "^6.5.0", + "@npmcli/config": "^6.4.0", "@npmcli/fs": "^3.1.0", "@npmcli/map-workspaces": "^3.0.4", "@npmcli/package-json": "^4.0.1", @@ -10410,12 +7145,12 @@ "is-cidr": "^4.0.2", "json-parse-even-better-errors": "^3.0.0", "libnpmaccess": "^7.0.2", - "libnpmdiff": "^5.0.19", - "libnpmexec": "^6.0.3", - "libnpmfund": "^4.0.19", + "libnpmdiff": "^5.0.20", + "libnpmexec": "^6.0.4", + "libnpmfund": "^4.2.1", "libnpmhook": "^9.0.3", "libnpmorg": "^5.0.4", - "libnpmpack": "^5.0.19", + "libnpmpack": "^5.0.20", "libnpmpublish": "^7.5.0", "libnpmsearch": "^6.0.2", "libnpmteam": "^5.0.3", @@ -10427,10 +7162,11 @@ "ms": "^2.1.2", "node-gyp": "^9.4.0", "nopt": "^7.2.0", + "normalize-package-data": "^5.0.0", "npm-audit-report": "^5.0.0", - "npm-install-checks": "^6.1.1", + "npm-install-checks": "^6.2.0", "npm-package-arg": "^10.1.0", - "npm-pick-manifest": "^8.0.1", + "npm-pick-manifest": "^8.0.2", "npm-profile": "^7.0.1", "npm-registry-fetch": "^14.0.5", "npm-user-validate": "^2.0.0", @@ -10442,7 +7178,8 @@ "qrcode-terminal": "^0.12.0", "read": "^2.1.0", "semver": "^7.5.4", - "sigstore": "^1.7.0", + "sigstore": "^1.9.0", + "spdx-expression-parse": "^3.0.1", "ssri": "^10.0.4", "supports-color": "^9.4.0", "tar": "^6.1.15", @@ -10453,3141 +7190,2228 @@ "which": "^3.0.1", "write-file-atomic": "^5.0.1" }, - "bin": { - "npm": "bin/npm-cli.js", - "npx": "bin/npx-cli.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.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/npm/node_modules/@colors/colors": { - "version": "1.5.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/npm/node_modules/@isaacs/cliui": { - "version": "8.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/npm/node_modules/@isaacs/string-locale-compare": { - "version": "1.1.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "6.3.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^3.1.0", - "@npmcli/installed-package-contents": "^2.0.2", - "@npmcli/map-workspaces": "^3.0.2", - "@npmcli/metavuln-calculator": "^5.0.0", - "@npmcli/name-from-folder": "^2.0.0", - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^4.0.0", - "@npmcli/query": "^3.0.0", - "@npmcli/run-script": "^6.0.0", - "bin-links": "^4.0.1", - "cacache": "^17.0.4", - "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^6.1.1", - "json-parse-even-better-errors": "^3.0.0", - "json-stringify-nice": "^1.1.4", - "minimatch": "^9.0.0", - "nopt": "^7.0.0", - "npm-install-checks": "^6.0.0", - "npm-package-arg": "^10.1.0", - "npm-pick-manifest": "^8.0.1", - "npm-registry-fetch": "^14.0.3", - "npmlog": "^7.0.1", - "pacote": "^15.0.8", - "parse-conflict-json": "^3.0.0", - "proc-log": "^3.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.2", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^10.0.1", - "treeverse": "^3.0.0", - "walk-up-path": "^3.0.1" - }, - "bin": { - "arborist": "bin/index.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/config": { - "version": "6.2.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/map-workspaces": "^3.0.2", - "ci-info": "^3.8.0", - "ini": "^4.1.0", - "nopt": "^7.0.0", - "proc-log": "^3.0.0", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.5", - "walk-up-path": "^3.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/disparity-colors": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "ansi-styles": "^4.3.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/fs": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/git": { - "version": "4.1.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/promise-spawn": "^6.0.0", - "lru-cache": "^7.4.4", - "npm-pick-manifest": "^8.0.0", - "proc-log": "^3.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/installed-package-contents": { - "version": "2.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "bin": { - "installed-package-contents": "lib/index.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "3.0.4", - "dev": true, - "inBundle": true, - "license": "ISC", "dependencies": { - "@npmcli/name-from-folder": "^2.0.0", - "glob": "^10.2.2", - "minimatch": "^9.0.0", - "read-package-json-fast": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "cacache": "^17.0.0", - "json-parse-even-better-errors": "^3.0.0", - "pacote": "^15.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/name-from-folder": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/node-gyp": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/package-json": { - "version": "4.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^4.1.0", - "glob": "^10.2.2", - "hosted-git-info": "^6.1.1", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "proc-log": "^3.0.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/promise-spawn": { - "version": "6.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/query": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "6.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/promise-spawn": "^6.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^3.0.0", - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/npm/node_modules/@sigstore/protobuf-specs": { - "version": "0.1.0", - "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@sigstore/tuf": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.1.0", - "tuf-js": "^1.1.7" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@tootallnate/once": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/@tufjs/canonical-json": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@tufjs/models": { - "version": "1.0.4", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@tufjs/canonical-json": "1.0.0", - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/abbrev": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/abort-controller": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/npm/node_modules/agent-base": { - "version": "6.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/npm/node_modules/agentkeepalive": { - "version": "4.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "depd": "^2.0.0", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/npm/node_modules/aggregate-error": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/npm/node_modules/aproba": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/archy": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/are-we-there-yet": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^4.1.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/base64-js": { - "version": "1.5.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" + "@colors/colors": { + "version": "1.5.0", + "bundled": true, + "dev": true, + "optional": true }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "@isaacs/cliui": { + "version": "8.0.2", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "bundled": true, + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "bundled": true, + "dev": true + }, + "string-width": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "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 + }, + "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 + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "strip-ansi": { + "version": "7.1.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + }, + "dependencies": { + "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 + } + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "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 + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + } + } }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/bin-links": { - "version": "4.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "cmd-shim": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "read-cmd-shim": "^4.0.0", - "write-file-atomic": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/binary-extensions": { - "version": "2.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/npm/node_modules/buffer": { - "version": "6.0.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" + "@isaacs/string-locale-compare": { + "version": "1.1.0", + "bundled": true, + "dev": true }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "@npmcli/arborist": { + "version": "6.5.0", + "bundled": true, + "dev": true, + "requires": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^3.1.0", + "@npmcli/installed-package-contents": "^2.0.2", + "@npmcli/map-workspaces": "^3.0.2", + "@npmcli/metavuln-calculator": "^5.0.0", + "@npmcli/name-from-folder": "^2.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^4.0.0", + "@npmcli/query": "^3.0.0", + "@npmcli/run-script": "^6.0.0", + "bin-links": "^4.0.1", + "cacache": "^17.0.4", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^6.1.1", + "json-parse-even-better-errors": "^3.0.0", + "json-stringify-nice": "^1.1.4", + "minimatch": "^9.0.0", + "nopt": "^7.0.0", + "npm-install-checks": "^6.2.0", + "npm-package-arg": "^10.1.0", + "npm-pick-manifest": "^8.0.1", + "npm-registry-fetch": "^14.0.3", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "parse-conflict-json": "^3.0.0", + "proc-log": "^3.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.2", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^10.0.1", + "treeverse": "^3.0.0", + "walk-up-path": "^3.0.1" + } }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/npm/node_modules/builtins": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/npm/node_modules/cacache": { - "version": "17.1.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/chalk": { - "version": "5.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/npm/node_modules/chownr": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/ci-info": { - "version": "3.8.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/cidr-regex": { - "version": "3.1.1", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "ip-regex": "^4.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/clean-stack": { - "version": "2.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/cli-columns": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/cli-table3": { - "version": "0.6.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/npm/node_modules/clone": { - "version": "1.0.4", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/npm/node_modules/cmd-shim": { - "version": "6.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/npm/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/color-support": { - "version": "1.1.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/npm/node_modules/columnify": { - "version": "1.6.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/npm/node_modules/common-ancestor-path": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/console-control-strings": { - "version": "1.1.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/cross-spawn": { - "version": "7.0.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/cssesc": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { + "@npmcli/config": { + "version": "6.4.0", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/map-workspaces": "^3.0.2", + "ci-info": "^3.8.0", + "ini": "^4.1.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.5", + "walk-up-path": "^3.0.1" + } + }, + "@npmcli/disparity-colors": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-styles": "^4.3.0" + } + }, + "@npmcli/fs": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "semver": "^7.3.5" + } + }, + "@npmcli/git": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + } + }, + "@npmcli/installed-package-contents": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + } + }, + "@npmcli/map-workspaces": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/name-from-folder": "^2.0.0", + "glob": "^10.2.2", + "minimatch": "^9.0.0", + "read-package-json-fast": "^3.0.0" + } + }, + "@npmcli/metavuln-calculator": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "requires": { + "cacache": "^17.0.0", + "json-parse-even-better-errors": "^3.0.0", + "pacote": "^15.0.0", + "semver": "^7.3.5" + } + }, + "@npmcli/name-from-folder": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "@npmcli/node-gyp": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "@npmcli/package-json": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/git": "^4.1.0", + "glob": "^10.2.2", + "hosted-git-info": "^6.1.1", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "proc-log": "^3.0.0", + "semver": "^7.5.3" + } + }, + "@npmcli/promise-spawn": { + "version": "6.0.2", + "bundled": true, + "dev": true, + "requires": { + "which": "^3.0.0" + } + }, + "@npmcli/query": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.10" + } + }, + "@npmcli/run-script": { + "version": "6.0.2", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + } + }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "bundled": true, + "dev": true, "optional": true - } - } - }, - "node_modules/npm/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/defaults": { - "version": "1.0.4", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/delegates": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/depd": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/npm/node_modules/diff": { - "version": "5.1.0", - "dev": true, - "inBundle": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/npm/node_modules/eastasianwidth": { - "version": "0.2.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/encoding": { - "version": "0.1.13", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/npm/node_modules/env-paths": { - "version": "2.2.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/err-code": { - "version": "2.0.3", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/event-target-shim": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/events": { - "version": "3.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/npm/node_modules/exponential-backoff": { - "version": "3.1.1", - "dev": true, - "inBundle": true, - "license": "Apache-2.0" - }, - "node_modules/npm/node_modules/fastest-levenshtein": { - "version": "1.0.16", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/npm/node_modules/foreground-child": { - "version": "3.1.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/fs-minipass": { - "version": "3.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/function-bind": { - "version": "1.1.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/gauge": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^4.0.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/glob": { - "version": "10.2.7", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/graceful-fs": { - "version": "4.2.11", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/has": { - "version": "1.0.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/npm/node_modules/has-unicode": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/hosted-git-info": { - "version": "6.1.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/http-cache-semantics": { - "version": "4.1.1", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause" - }, - "node_modules/npm/node_modules/http-proxy-agent": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/npm/node_modules/https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/npm/node_modules/humanize-ms": { - "version": "1.2.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/npm/node_modules/iconv-lite": { - "version": "0.6.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm/node_modules/ieee754": { - "version": "1.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "@sigstore/bundle": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "@sigstore/protobuf-specs": "^0.2.0" + } }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "BSD-3-Clause" - }, - "node_modules/npm/node_modules/ignore-walk": { - "version": "6.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/imurmurhash": { - "version": "0.1.4", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/npm/node_modules/indent-string": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/npm/node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/ini": { - "version": "4.1.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/init-package-json": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-package-arg": "^10.0.0", - "promzard": "^1.0.0", - "read": "^2.0.0", - "read-package-json": "^6.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/ip": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/ip-regex": { - "version": "4.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/is-cidr": { - "version": "4.0.2", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "cidr-regex": "^3.1.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/is-core-module": { - "version": "2.12.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/npm/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/is-lambda": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/jackspeak": { - "version": "2.2.1", - "dev": true, - "inBundle": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/npm/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/json-stringify-nice": { - "version": "1.1.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/jsonparse": { - "version": "1.3.1", - "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/just-diff": { - "version": "6.0.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/just-diff-apply": { - "version": "5.5.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/libnpmaccess": { - "version": "7.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-package-arg": "^10.1.0", - "npm-registry-fetch": "^14.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmdiff": { - "version": "5.0.19", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^6.3.0", - "@npmcli/disparity-colors": "^3.0.0", - "@npmcli/installed-package-contents": "^2.0.2", - "binary-extensions": "^2.2.0", - "diff": "^5.1.0", - "minimatch": "^9.0.0", - "npm-package-arg": "^10.1.0", - "pacote": "^15.0.8", - "tar": "^6.1.13" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmexec": { - "version": "6.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^6.3.0", - "@npmcli/run-script": "^6.0.0", - "ci-info": "^3.7.1", - "npm-package-arg": "^10.1.0", - "npmlog": "^7.0.1", - "pacote": "^15.0.8", - "proc-log": "^3.0.0", - "read": "^2.0.0", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.7", - "walk-up-path": "^3.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmfund": { - "version": "4.0.19", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^6.3.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmhook": { - "version": "9.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^14.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmorg": { - "version": "5.0.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^14.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmpack": { - "version": "5.0.19", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^6.3.0", - "@npmcli/run-script": "^6.0.0", - "npm-package-arg": "^10.1.0", - "pacote": "^15.0.8" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmpublish": { - "version": "7.5.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "ci-info": "^3.6.1", - "normalize-package-data": "^5.0.0", - "npm-package-arg": "^10.1.0", - "npm-registry-fetch": "^14.0.3", - "proc-log": "^3.0.0", - "semver": "^7.3.7", - "sigstore": "^1.4.0", - "ssri": "^10.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmsearch": { - "version": "6.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-registry-fetch": "^14.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmteam": { - "version": "5.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^14.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmversion": { - "version": "4.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^4.0.1", - "@npmcli/run-script": "^6.0.0", - "json-parse-even-better-errors": "^3.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.7" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/lru-cache": { - "version": "7.18.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/npm/node_modules/make-fetch-happen": { - "version": "11.1.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/minimatch": { - "version": "9.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/minipass": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-collect": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minipass-collect/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-fetch": { - "version": "3.0.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/npm/node_modules/minipass-flush": { - "version": "1.0.5", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-json-stream": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-pipeline": { - "version": "1.2.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-sized": { - "version": "1.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minizlib": { - "version": "2.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "inBundle": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/mute-stream": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/negotiator": { - "version": "0.6.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/npm/node_modules/node-gyp": { - "version": "9.4.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^11.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^12.13 || ^14.13 || >=16" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/abbrev": { - "version": "1.1.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/node-gyp/node_modules/are-we-there-yet": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/gauge": { - "version": "4.0.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/glob": { - "version": "7.2.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/nopt": { - "version": "6.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/npmlog": { - "version": "6.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/readable-stream": { - "version": "3.6.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/signal-exit": { - "version": "3.0.7", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/node-gyp/node_modules/which": { - "version": "2.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/nopt": { - "version": "7.2.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "abbrev": "^2.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/normalize-package-data": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-audit-report": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-bundled": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-install-checks": { - "version": "6.1.1", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-package-arg": { - "version": "10.1.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-packlist": { - "version": "7.0.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "ignore-walk": "^6.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-pick-manifest": { - "version": "8.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^10.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-profile": { - "version": "7.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-registry-fetch": "^14.0.0", - "proc-log": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "14.0.5", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "make-fetch-happen": "^11.0.0", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^10.0.0", - "proc-log": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-user-validate": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npmlog": { - "version": "7.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "are-we-there-yet": "^4.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^5.0.0", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/once": { - "version": "1.4.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/npm/node_modules/p-map": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/pacote": { - "version": "15.2.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^4.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/promise-spawn": "^6.0.1", - "@npmcli/run-script": "^6.0.0", - "cacache": "^17.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^5.0.0", - "npm-package-arg": "^10.0.0", - "npm-packlist": "^7.0.0", - "npm-pick-manifest": "^8.0.0", - "npm-registry-fetch": "^14.0.0", - "proc-log": "^3.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^6.0.0", - "read-package-json-fast": "^3.0.0", - "sigstore": "^1.3.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "lib/bin.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/parse-conflict-json": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "just-diff": "^6.0.0", - "just-diff-apply": "^5.2.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/path-is-absolute": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm/node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/path-scurry": { - "version": "1.9.2", - "dev": true, - "inBundle": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^9.1.1", - "minipass": "^5.0.0 || ^6.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/path-scurry/node_modules/lru-cache": { - "version": "9.1.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/npm/node_modules/postcss-selector-parser": { - "version": "6.0.13", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm/node_modules/proc-log": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/process": { - "version": "0.11.10", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/npm/node_modules/promise-all-reject-late": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/promise-call-limit": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/promise-inflight": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/promise-retry": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/promzard": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "read": "^2.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/qrcode-terminal": { - "version": "0.12.0", - "dev": true, - "inBundle": true, - "bin": { - "qrcode-terminal": "bin/qrcode-terminal.js" - } - }, - "node_modules/npm/node_modules/read": { - "version": "2.1.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "mute-stream": "~1.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/read-cmd-shim": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/read-package-json": { - "version": "6.0.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "glob": "^10.2.2", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/read-package-json-fast": { - "version": "3.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/readable-stream": { - "version": "4.4.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/retry": { - "version": "0.12.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/npm/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/npm/node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/npm/node_modules/safe-buffer": { - "version": "5.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/npm/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/set-blocking": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/signal-exit": { - "version": "4.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/sigstore": { - "version": "1.7.0", - "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.1.0", - "@sigstore/tuf": "^1.0.1", - "make-fetch-happen": "^11.0.1" - }, - "bin": { - "sigstore": "bin/sigstore.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/smart-buffer": { - "version": "4.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/npm/node_modules/socks": { - "version": "2.7.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/npm/node_modules/socks-proxy-agent": { - "version": "7.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/spdx-correct": { - "version": "3.2.0", - "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/npm/node_modules/spdx-exceptions": { - "version": "2.3.0", - "dev": true, - "inBundle": true, - "license": "CC-BY-3.0" - }, - "node_modules/npm/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.13", - "dev": true, - "inBundle": true, - "license": "CC0-1.0" - }, - "node_modules/npm/node_modules/ssri": { - "version": "10.0.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/string_decoder": { - "version": "1.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/npm/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/supports-color": { - "version": "9.4.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/npm/node_modules/tar": { - "version": "6.1.15", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/tiny-relative-date": { - "version": "1.3.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/treeverse": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/tuf-js": { - "version": "1.1.7", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@tufjs/models": "1.0.4", - "debug": "^4.3.4", - "make-fetch-happen": "^11.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/unique-filename": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/unique-slug": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/util-deprecate": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/validate-npm-package-license": { - "version": "3.0.4", - "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/npm/node_modules/validate-npm-package-name": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/walk-up-path": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/wcwidth": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/npm/node_modules/which": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/wide-align": { - "version": "1.1.5", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/npm/node_modules/wrap-ansi": { - "version": "8.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/npm/node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "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/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "9.2.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { - "version": "5.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/npm/node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/write-file-atomic": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "@sigstore/protobuf-specs": { + "version": "0.2.1", + "bundled": true, + "dev": true + }, + "@sigstore/sign": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "make-fetch-happen": "^11.0.1" + } + }, + "@sigstore/tuf": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "requires": { + "@sigstore/protobuf-specs": "^0.2.0", + "tuf-js": "^1.1.7" + } + }, + "@tootallnate/once": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "@tufjs/canonical-json": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "@tufjs/models": { + "version": "1.0.4", + "bundled": true, + "dev": true, + "requires": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + } + }, + "abbrev": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "abort-controller": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "agent-base": { + "version": "6.0.2", + "bundled": true, + "dev": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.3.0", + "bundled": true, + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ansi-regex": { + "version": "5.0.1", + "bundled": true + }, + "ansi-styles": { + "version": "4.3.0", + "bundled": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "aproba": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "archy": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "are-we-there-yet": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^4.1.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "bundled": true, + "dev": true + }, + "bin-links": { + "version": "4.0.2", + "bundled": true, + "dev": true, + "requires": { + "cmd-shim": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "read-cmd-shim": "^4.0.0", + "write-file-atomic": "^5.0.0" + } + }, + "binary-extensions": { + "version": "2.2.0", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "buffer": { + "version": "6.0.3", + "bundled": true, + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "builtins": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, + "cacache": { + "version": "17.1.3", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + } + }, + "chalk": { + "version": "5.3.0", + "bundled": true, + "dev": true + }, + "chownr": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "ci-info": { + "version": "3.8.0", + "bundled": true, + "dev": true + }, + "cidr-regex": { + "version": "3.1.1", + "bundled": true, + "dev": true, + "requires": { + "ip-regex": "^4.1.0" + } + }, + "clean-stack": { + "version": "2.2.0", + "bundled": true, + "dev": true + }, + "cli-columns": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + } + }, + "cli-table3": { + "version": "0.6.3", + "bundled": true, + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "clone": { + "version": "1.0.4", + "bundled": true, + "dev": true + }, + "cmd-shim": { + "version": "6.0.1", + "bundled": true, + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "bundled": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "bundled": true + }, + "color-support": { + "version": "1.1.3", + "bundled": true, + "dev": true + }, + "columnify": { + "version": "1.6.0", + "bundled": true, + "dev": true, + "requires": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + } + }, + "common-ancestor-path": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "bundled": true, + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "cssesc": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "debug": { + "version": "4.3.4", + "bundled": true, + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "bundled": true, + "dev": true + } + } + }, + "defaults": { + "version": "1.0.4", + "bundled": true, + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "depd": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "diff": { + "version": "5.1.0", + "bundled": true, + "dev": true + }, + "eastasianwidth": { + "version": "0.2.0", + "bundled": true, + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "bundled": true + }, + "encoding": { + "version": "0.1.13", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + } + }, + "env-paths": { + "version": "2.2.1", + "bundled": true, + "dev": true + }, + "err-code": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "event-target-shim": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "events": { + "version": "3.3.0", + "bundled": true, + "dev": true + }, + "exponential-backoff": { + "version": "3.1.1", + "bundled": true, + "dev": true + }, + "fastest-levenshtein": { + "version": "1.0.16", + "bundled": true, + "dev": true + }, + "foreground-child": { + "version": "3.1.1", + "bundled": true, + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, + "fs-minipass": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^5.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "bundled": true, + "dev": true + }, + "gauge": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^4.0.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } + }, + "glob": { + "version": "10.2.7", + "bundled": true, + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + } + }, + "graceful-fs": { + "version": "4.2.11", + "bundled": true, + "dev": true + }, + "has": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "hosted-git-info": { + "version": "6.1.1", + "bundled": true, + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + } + }, + "http-cache-semantics": { + "version": "4.1.1", + "bundled": true, + "dev": true + }, + "http-proxy-agent": { + "version": "5.0.0", + "bundled": true, + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "humanize-ms": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "ieee754": { + "version": "1.2.1", + "bundled": true, + "dev": true + }, + "ignore-walk": { + "version": "6.0.3", + "bundled": true, + "dev": true, + "requires": { + "minimatch": "^9.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "bundled": true, + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true, + "dev": true + }, + "ini": { + "version": "4.1.1", + "bundled": true, + "dev": true + }, + "init-package-json": { + "version": "5.0.0", + "bundled": true, + "dev": true, + "requires": { + "npm-package-arg": "^10.0.0", + "promzard": "^1.0.0", + "read": "^2.0.0", + "read-package-json": "^6.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^5.0.0" + } + }, + "ip": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "ip-regex": { + "version": "4.3.0", + "bundled": true, + "dev": true + }, + "is-cidr": { + "version": "4.0.2", + "bundled": true, + "dev": true, + "requires": { + "cidr-regex": "^3.1.1" + } + }, + "is-core-module": { + "version": "2.12.1", + "bundled": true, + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "bundled": true + }, + "is-lambda": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "isexe": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "jackspeak": { + "version": "2.2.1", + "bundled": true, + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "json-parse-even-better-errors": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "json-stringify-nice": { + "version": "1.1.4", + "bundled": true, + "dev": true + }, + "jsonparse": { + "version": "1.3.1", + "bundled": true, + "dev": true + }, + "just-diff": { + "version": "6.0.2", + "bundled": true, + "dev": true + }, + "just-diff-apply": { + "version": "5.5.0", + "bundled": true, + "dev": true + }, + "libnpmaccess": { + "version": "7.0.2", + "bundled": true, + "dev": true, + "requires": { + "npm-package-arg": "^10.1.0", + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmdiff": { + "version": "5.0.20", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/arborist": "^6.5.0", + "@npmcli/disparity-colors": "^3.0.0", + "@npmcli/installed-package-contents": "^2.0.2", + "binary-extensions": "^2.2.0", + "diff": "^5.1.0", + "minimatch": "^9.0.0", + "npm-package-arg": "^10.1.0", + "pacote": "^15.0.8", + "tar": "^6.1.13" + } + }, + "libnpmexec": { + "version": "6.0.4", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/arborist": "^6.5.0", + "@npmcli/run-script": "^6.0.0", + "ci-info": "^3.7.1", + "npm-package-arg": "^10.1.0", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "proc-log": "^3.0.0", + "read": "^2.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "walk-up-path": "^3.0.1" + } + }, + "libnpmfund": { + "version": "4.2.1", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/arborist": "^6.5.0" + } + }, + "libnpmhook": { + "version": "9.0.3", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmorg": { + "version": "5.0.4", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmpack": { + "version": "5.0.20", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/arborist": "^6.5.0", + "@npmcli/run-script": "^6.0.0", + "npm-package-arg": "^10.1.0", + "pacote": "^15.0.8" + } + }, + "libnpmpublish": { + "version": "7.5.0", + "bundled": true, + "dev": true, + "requires": { + "ci-info": "^3.6.1", + "normalize-package-data": "^5.0.0", + "npm-package-arg": "^10.1.0", + "npm-registry-fetch": "^14.0.3", + "proc-log": "^3.0.0", + "semver": "^7.3.7", + "sigstore": "^1.4.0", + "ssri": "^10.0.1" + } + }, + "libnpmsearch": { + "version": "6.0.2", + "bundled": true, + "dev": true, + "requires": { + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmteam": { + "version": "5.0.3", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmversion": { + "version": "4.0.2", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/git": "^4.0.1", + "@npmcli/run-script": "^6.0.0", + "json-parse-even-better-errors": "^3.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.7" + } + }, + "lru-cache": { + "version": "7.18.3", + "bundled": true, + "dev": true + }, + "make-fetch-happen": { + "version": "11.1.1", + "bundled": true, + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + } + }, + "minimatch": { + "version": "9.0.3", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "5.0.0", + "bundled": true, + "dev": true + }, + "minipass-collect": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-fetch": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + }, + "minipass-flush": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-json-stream": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-sized": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minizlib": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "mkdirp": { + "version": "1.0.4", + "bundled": true, + "dev": true + }, + "ms": { + "version": "2.1.3", + "bundled": true, + "dev": true + }, + "mute-stream": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "bundled": true, + "dev": true + }, + "node-gyp": { + "version": "9.4.0", + "bundled": true, + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^11.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true + }, + "are-we-there-yet": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "gauge": { + "version": "4.0.4", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } + }, + "glob": { + "version": "7.2.3", + "bundled": true, + "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" + } + }, + "minimatch": { + "version": "3.1.2", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "nopt": { + "version": "6.0.0", + "bundled": true, + "dev": true, + "requires": { + "abbrev": "^1.0.0" + } + }, + "npmlog": { + "version": "6.0.2", + "bundled": true, + "dev": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + } + }, + "readable-stream": { + "version": "3.6.2", + "bundled": true, + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "signal-exit": { + "version": "3.0.7", + "bundled": true, + "dev": true + }, + "which": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "nopt": { + "version": "7.2.0", + "bundled": true, + "dev": true, + "requires": { + "abbrev": "^2.0.0" + } + }, + "normalize-package-data": { + "version": "5.0.0", + "bundled": true, + "dev": true, + "requires": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + } + }, + "npm-audit-report": { + "version": "5.0.0", + "bundled": true, + "dev": true + }, + "npm-bundled": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "npm-normalize-package-bin": "^3.0.0" + } + }, + "npm-install-checks": { + "version": "6.2.0", + "bundled": true, + "dev": true, + "requires": { + "semver": "^7.1.1" + } + }, + "npm-normalize-package-bin": { + "version": "3.0.1", + "bundled": true, + "dev": true + }, + "npm-package-arg": { + "version": "10.1.0", + "bundled": true, + "dev": true, + "requires": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + } + }, + "npm-packlist": { + "version": "7.0.4", + "bundled": true, + "dev": true, + "requires": { + "ignore-walk": "^6.0.0" + } + }, + "npm-pick-manifest": { + "version": "8.0.2", + "bundled": true, + "dev": true, + "requires": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + } + }, + "npm-profile": { + "version": "7.0.1", + "bundled": true, + "dev": true, + "requires": { + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0" + } + }, + "npm-registry-fetch": { + "version": "14.0.5", + "bundled": true, + "dev": true, + "requires": { + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + } + }, + "npm-user-validate": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "npmlog": { + "version": "7.0.1", + "bundled": true, + "dev": true, + "requires": { + "are-we-there-yet": "^4.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^5.0.0", + "set-blocking": "^2.0.0" + } + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "p-map": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "pacote": { + "version": "15.2.0", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^5.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.3.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + } + }, + "parse-conflict-json": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "json-parse-even-better-errors": "^3.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "path-key": { + "version": "3.1.1", + "bundled": true, + "dev": true + }, + "path-scurry": { + "version": "1.9.2", + "bundled": true, + "dev": true, + "requires": { + "lru-cache": "^9.1.1", + "minipass": "^5.0.0 || ^6.0.2" + }, + "dependencies": { + "lru-cache": { + "version": "9.1.1", + "bundled": true, + "dev": true + } + } + }, + "postcss-selector-parser": { + "version": "6.0.13", + "bundled": true, + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "proc-log": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "process": { + "version": "0.11.10", + "bundled": true, + "dev": true + }, + "promise-all-reject-late": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "promise-call-limit": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "promise-retry": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "promzard": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "read": "^2.0.0" + } + }, + "qrcode-terminal": { + "version": "0.12.0", + "bundled": true, + "dev": true + }, + "read": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "mute-stream": "~1.0.0" + } + }, + "read-cmd-shim": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "read-package-json": { + "version": "6.0.4", + "bundled": true, + "dev": true, + "requires": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + } + }, + "read-package-json-fast": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "requires": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + } + }, + "readable-stream": { + "version": "4.4.0", + "bundled": true, + "dev": true, + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10" + } + }, + "retry": { + "version": "0.12.0", + "bundled": true, + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "7.2.3", + "bundled": true, + "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" + } + }, + "minimatch": { + "version": "3.1.2", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "safe-buffer": { + "version": "5.2.1", + "bundled": true, + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "7.5.4", + "bundled": true, + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "bundled": true, + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "signal-exit": { + "version": "4.0.2", + "bundled": true, + "dev": true + }, + "sigstore": { + "version": "1.9.0", + "bundled": true, + "dev": true, + "requires": { + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "@sigstore/sign": "^1.0.0", + "@sigstore/tuf": "^1.0.3", + "make-fetch-happen": "^11.0.1" + } + }, + "smart-buffer": { + "version": "4.2.0", + "bundled": true, + "dev": true + }, + "socks": { + "version": "2.7.1", + "bundled": true, + "dev": true, + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "7.0.0", + "bundled": true, + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + }, + "spdx-correct": { + "version": "3.2.0", + "bundled": true, + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "bundled": true, + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.13", + "bundled": true, + "dev": true + }, + "ssri": { + "version": "10.0.4", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^5.0.0" + } + }, + "string-width": { + "version": "4.2.3", + "bundled": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string-width-cjs": { + "version": "npm:string-width-cjs@4.2.3", + "bundled": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi-cjs@6.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "9.4.0", + "bundled": true, + "dev": true + }, + "tar": { + "version": "6.1.15", + "bundled": true, + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "fs-minipass": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + } + } + }, + "text-table": { + "version": "0.2.0", + "bundled": true, + "dev": true + }, + "tiny-relative-date": { + "version": "1.3.0", + "bundled": true, + "dev": true + }, + "treeverse": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "tuf-js": { + "version": "1.1.7", + "bundled": true, + "dev": true, + "requires": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" + } + }, + "unique-filename": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "unique-slug": "^4.0.0" + } + }, + "unique-slug": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "5.0.0", + "bundled": true, + "dev": true, + "requires": { + "builtins": "^5.0.0" + } + }, + "walk-up-path": { + "version": "3.0.1", + "bundled": true, + "dev": true + }, + "wcwidth": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "which": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "bundled": true, + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "bundled": true, + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "bundled": true, + "dev": true + }, + "string-width": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi-cjs@7.0.0", + "bundled": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "write-file-atomic": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + } + }, + "yallist": { + "version": "4.0.0", + "bundled": true, + "dev": true + } } }, - "node_modules/npm/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "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, - "engines": { - "node": ">=0.10.0" + "requires": { + "path-key": "^3.0.0" } }, - "node_modules/object-inspect": { + "object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "dev": true }, - "node_modules/object-keys": { + "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } + "dev": true }, - "node_modules/object.assign": { + "object.assign": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.entries": { + "object.entries": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" } }, - "node_modules/object.fromentries": { + "object.fromentries": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.groupby": { + "object.groupby": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.0.tgz", "integrity": "sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.21.2", "get-intrinsic": "^1.2.1" } }, - "node_modules/object.values": { + "object.values": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/once": { + "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/optionator": { + "optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, - "dependencies": { + "requires": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" } }, - "node_modules/ora": { + "ora": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, - "dependencies": { + "requires": { "bl": "^4.1.0", "chalk": "^4.1.0", "cli-cursor": "^3.1.0", @@ -13598,2958 +9422,1913 @@ "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "dependencies": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/os-locale/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/os-locale/node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/os-locale/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/os-locale/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-locale/node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "dev": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/os-locale/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/os-locale/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/os-locale/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-locale/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-locale/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + } } }, - "node_modules/os-tmpdir": { + "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", - "dev": true, - "engines": { - "node": ">=4" - } + "dev": true }, - "node_modules/p-each-series": { + "p-each-series": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "dev": true }, - "node_modules/p-filter": { + "p-filter": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-3.0.0.tgz", "integrity": "sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==", "dev": true, - "dependencies": { + "requires": { "p-map": "^5.1.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true, - "engines": { - "node": ">=6" } }, - "node_modules/p-limit": { + "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": { + "requires": { "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "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-map": { + "p-map": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", "dev": true, - "dependencies": { + "requires": { "aggregate-error": "^4.0.0" }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "aggregate-error": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", + "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", + "dev": true, + "requires": { + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" + } + }, + "clean-stack": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", + "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", + "dev": true, + "requires": { + "escape-string-regexp": "5.0.0" + } + }, + "escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true + }, + "indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true + } } }, - "node_modules/p-reduce": { + "p-reduce": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "dev": true }, - "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/pako": { + "pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, - "node_modules/parent-module": { + "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "dependencies": { + "requires": { "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" } }, - "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/parse-passwd": { + "parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/path-exists": { + "path-equal": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/path-equal/-/path-equal-1.2.5.tgz", + "integrity": "sha512-i73IctDr3F2W+bsOWDyyVm/lqsXO47aY9nsFZUjTT/aljSbkxHxxCoyZ9UUrM8jK0JVod+An+rl48RCsvWM+9g==", + "dev": true + }, + "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "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/path-type": { + "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } + "dev": true }, - "node_modules/picocolors": { + "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, - "node_modules/picomatch": { + "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/pify": { + "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "engines": { - "node": ">=4" - } + "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-conf": { + "pkg-conf": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", "dev": true, - "dependencies": { + "requires": { "find-up": "^2.0.0", - "load-json-file": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-conf/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-conf/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-conf/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-conf/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-conf/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-conf/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" + "load-json-file": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true + } } }, - "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/pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true, - "engines": { - "node": ">=4" - } + "pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true }, - "node_modules/pngjs": { + "pngjs": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } + "dev": true }, - "node_modules/prelude-ls": { + "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } + "dev": true }, - "node_modules/prettier": { + "prettier": { "version": "2.8.8", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } + "dev": true }, - "node_modules/prettier-linter-helpers": { + "prettier-linter-helpers": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, - "dependencies": { + "requires": { "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" } }, - "node_modules/pretty-format": { + "pretty-format": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", "dev": true, - "dependencies": { + "requires": { "@jest/schemas": "^29.6.0", "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==", + "dev": true }, - "node_modules/process-nextick-args": { + "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "node_modules/progress": { + "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } + "dev": true }, - "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/proto-list": { + "proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", "dev": true }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { + "punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "engines": { - "node": ">=6" - } + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" }, - "node_modules/pure-rand": { + "pure-rand": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] + "dev": true }, - "node_modules/qrcode": { + "qrcode": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz", "integrity": "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==", "dev": true, - "dependencies": { + "requires": { "dijkstrajs": "^1.0.1", "encode-utf8": "^1.0.3", "pngjs": "^5.0.0", "yargs": "^15.3.1" }, - "bin": { - "qrcode": "bin/qrcode" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/qrcode/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/qrcode/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/qrcode/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/qrcode/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/qrcode/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } } }, - "node_modules/queue-microtask": { + "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "dev": true }, - "node_modules/quick-lru": { + "quick-lru": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true + }, + "quicktype": { + "version": "23.0.76", + "resolved": "https://registry.npmjs.org/quicktype/-/quicktype-23.0.76.tgz", + "integrity": "sha512-ZqFhJ4Xlww+uPbO06VwaFMQDa/DoGaqeFWMY3jgnHYvXY8Zryry5AknO9Mwh7vZctHxqRBkxzxzQfUDxdKdrPw==", "dev": true, - "engines": { - "node": ">=8" + "requires": { + "@glideapps/ts-necessities": "^2.1.3", + "chalk": "^4.1.2", + "collection-utils": "^1.0.1", + "command-line-args": "^5.2.1", + "command-line-usage": "^7.0.1", + "cross-fetch": "^4.0.0", + "graphql": "^0.11.7", + "lodash": "^4.17.21", + "moment": "^2.29.4", + "quicktype-core": "23.0.76", + "quicktype-graphql-input": "23.0.76", + "quicktype-typescript-input": "23.0.76", + "readable-stream": "^4.4.2", + "stream-json": "1.8.0", + "string-to-stream": "^3.0.1", + "typescript": "4.9.5" + }, + "dependencies": { + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "cross-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "dev": true, + "requires": { + "node-fetch": "^2.6.12" + } + }, + "readable-stream": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", + "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", + "dev": true, + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + }, + "typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true + } } }, - "node_modules/quicktype": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/quicktype/-/quicktype-15.1.0.tgz", - "integrity": "sha512-hhOXV+XxOlA8UPmjRLEEjkfOcGvKiIXE5dlxv6byz+zx7BHXsYXKZGjgkDweJYf7ta0cGixKlo1qJdZSQOljiA==", + "quicktype-core": { + "version": "23.0.76", + "resolved": "https://registry.npmjs.org/quicktype-core/-/quicktype-core-23.0.76.tgz", + "integrity": "sha512-QinZRNovSTQcFuhRKxeHb22eFmyucbG96EPaQDSbz9qvIPxUhs1BZviNc8HAkHWYFqTSET/xZcEoHpm1DeDbRg==", "dev": true, - "dependencies": { - "@mark.probst/typescript-json-schema": "~0.32.0", - "@mark.probst/unicode-properties": "~1.1.0", - "browser-or-node": "^1.2.1", - "chalk": "^2.4.1", + "requires": { + "@glideapps/ts-necessities": "2.1.3", + "@types/urijs": "^1.19.19", + "browser-or-node": "^2.1.1", "collection-utils": "^1.0.1", - "command-line-args": "^4.0.6", - "command-line-usage": "^5.0.5", - "graphql": "^0.11.7", + "cross-fetch": "^4.0.0", "is-url": "^1.2.4", - "isomorphic-fetch": "^2.2.1", - "js-base64": "^2.4.3", + "js-base64": "^3.7.5", "lodash": "^4.17.21", - "moment": "^2.22.1", - "node-fetch": "^2.6.1", "pako": "^1.0.6", - "pluralize": "^7.0.0", - "readable-stream": "2.3.0", - "stream-json": "1.1.3", - "string-to-stream": "^1.1.0", - "typescript": "~3.2.1", - "urijs": "^1.19.6", - "uuid": "^3.2.1", + "pluralize": "^8.0.0", + "readable-stream": "4.4.2", + "unicode-properties": "^1.4.1", + "urijs": "^1.19.1", "wordwrap": "^1.0.0", - "yaml": "^1.5.0" - }, - "bin": { - "quicktype": "dist/cli/index.js" - } - }, - "node_modules/quicktype/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/quicktype/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/quicktype/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/quicktype/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/quicktype/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/quicktype/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/quicktype/node_modules/js-base64": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", - "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", - "dev": true - }, - "node_modules/quicktype/node_modules/process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw==", - "dev": true - }, - "node_modules/quicktype/node_modules/readable-stream": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.0.tgz", - "integrity": "sha512-c7KMXGd4b48nN3OJ1U9qOsn6pXNzf6kLd3kdZCkg2sxAcoiufInqF0XckwEnlrcwuaYwonlNK8GQUIOC/WC7sg==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "safe-buffer": "~5.1.0", - "string_decoder": "~1.0.0", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/quicktype/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/quicktype/node_modules/string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/quicktype/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/quicktype/node_modules/typescript": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz", - "integrity": "sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" + "yaml": "^2.3.1" + }, + "dependencies": { + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "cross-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "dev": true, + "requires": { + "node-fetch": "^2.6.12" + } + }, + "readable-stream": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", + "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", + "dev": true, + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + } } }, - "node_modules/quicktype/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "quicktype-graphql-input": { + "version": "23.0.76", + "resolved": "https://registry.npmjs.org/quicktype-graphql-input/-/quicktype-graphql-input-23.0.76.tgz", + "integrity": "sha512-K++ymyJLirC5jUrIaWf1JlVicdQajCGa+inZrBiU69PYOAodq9P4TxXhFRtmfx1Upp7Bl4BWNgFe5EX8uhgQaA==", "dev": true, - "bin": { - "uuid": "bin/uuid" + "requires": { + "collection-utils": "^1.0.1", + "graphql": "^0.11.7", + "quicktype-core": "23.0.76" } }, - "node_modules/quote-stream": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", - "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", + "quicktype-typescript-input": { + "version": "23.0.76", + "resolved": "https://registry.npmjs.org/quicktype-typescript-input/-/quicktype-typescript-input-23.0.76.tgz", + "integrity": "sha512-hlzig6FJpj37T9FFjM/V6W3voaQzfFIZiomnaDVQGZbZZfVCQlD4qtMIdd9f3n9WyWst6n/OmHWqMVId+JXcuQ==", "dev": true, - "dependencies": { - "buffer-equal": "0.0.1", - "minimist": "^1.1.3", - "through2": "^2.0.0" + "requires": { + "@mark.probst/typescript-json-schema": "0.55.0", + "quicktype-core": "23.0.76", + "typescript": "4.9.5" }, - "bin": { - "quote-stream": "bin/cmd.js" - } - }, - "node_modules/quote-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/quote-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/quote-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/quote-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/quote-stream/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true + } } }, - "node_modules/rc": { + "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, - "dependencies": { + "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true + } } }, - "node_modules/rdf-canonize": { + "rdf-canonize": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz", "integrity": "sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==", - "dependencies": { + "requires": { "setimmediate": "^1.0.5" - }, - "engines": { - "node": ">=12" } }, - "node_modules/react-is": { + "react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, - "node_modules/read-pkg": { + "read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, - "dependencies": { + "requires": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", "parse-json": "^5.0.0", "type-fest": "^0.6.0" }, - "engines": { - "node": ">=8" + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } } }, - "node_modules/read-pkg-up": { + "read-pkg-up": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, - "dependencies": { + "requires": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", "type-fest": "^0.8.1" }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } } }, - "node_modules/readable-stream": { + "readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "dependencies": { + "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" } }, - "node_modules/redent": { + "redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, - "dependencies": { + "requires": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" } }, - "node_modules/redeyed": { + "redeyed": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", "dev": true, - "dependencies": { + "requires": { "esprima": "~4.0.0" } }, - "node_modules/reduce-flatten": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz", - "integrity": "sha512-j5WfFJfc9CoXv/WbwVLHq74i/hdTUpy+iNC534LxczMRP67vJeK3V9JOdnL0N1cIRbn9mYhE2yVjvvKXDxvNXQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regexp.prototype.flags": { + "regexp.prototype.flags": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regexpp": { + "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } + "dev": true }, - "node_modules/registry-auth-token": { + "registry-auth-token": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", "dev": true, - "dependencies": { + "requires": { "@pnpm/npm-conf": "^2.1.0" - }, - "engines": { - "node": ">=14" } }, - "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/require-from-string": { + "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==", - "engines": { - "node": ">=0.10.0" - } + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, - "node_modules/require-main-filename": { + "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, - "node_modules/resolve": { + "resolve": { "version": "1.22.4", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "dev": true, - "dependencies": { + "requires": { "is-core-module": "^2.13.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-dir": { + "resolve-dir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", "dev": true, - "dependencies": { + "requires": { "expand-tilde": "^2.0.0", "global-modules": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" } }, - "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, - "engines": { - "node": ">=8" - } + "dev": true }, - "node_modules/resolve-global": { + "resolve-global": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", "dev": true, - "dependencies": { + "requires": { "global-dirs": "^0.1.1" - }, - "engines": { - "node": ">=8" } }, - "node_modules/resolve.exports": { + "resolve.exports": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "engines": { - "node": ">=10" - } + "dev": true }, - "node_modules/restore-cursor": { + "restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", "dev": true, - "dependencies": { + "requires": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/restore-cursor/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "dev": true, "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + } } }, - "node_modules/reusify": { + "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/rimraf": { + "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "dependencies": { + "requires": { "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rollup": { + "rollup": { "version": "2.79.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { + "requires": { "fsevents": "~2.3.2" } }, - "node_modules/rollup-plugin-commonjs": { + "rollup-plugin-commonjs": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz", "integrity": "sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-commonjs.", "dev": true, - "dependencies": { + "requires": { "estree-walker": "^0.6.1", "is-reference": "^1.1.2", "magic-string": "^0.25.2", "resolve": "^1.11.0", "rollup-pluginutils": "^2.8.1" }, - "peerDependencies": { - "rollup": ">=1.12.0" - } - }, - "node_modules/rollup-plugin-commonjs/node_modules/estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - }, - "node_modules/rollup-plugin-commonjs/node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, "dependencies": { - "sourcemap-codec": "^1.4.8" + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + } } }, - "node_modules/rollup-pluginutils": { + "rollup-pluginutils": { "version": "2.8.2", "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", "dev": true, - "dependencies": { + "requires": { "estree-walker": "^0.6.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + } } }, - "node_modules/rollup-pluginutils/node_modules/estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - }, - "node_modules/run-async": { + "run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } + "dev": true }, - "node_modules/run-parallel": { + "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { + "requires": { "queue-microtask": "^1.2.2" } }, - "node_modules/runtypes": { + "runtypes": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/runtypes/-/runtypes-6.7.0.tgz", "integrity": "sha512-3TLdfFX8YHNFOhwHrSJza6uxVBmBrEjnNQlNXvXCdItS0Pdskfg5vVXUTWIN+Y23QR09jWpSl99UHkA83m4uWA==" }, - "node_modules/rxjs": { + "rxjs": { "version": "6.6.7", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, - "dependencies": { + "requires": { "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" } }, - "node_modules/safe-array-concat": { + "safe-array-concat": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.0", "has-symbols": "^1.0.3", "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safe-buffer": { + "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==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "dev": true }, - "node_modules/safe-regex-test": { + "safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safer-buffer": { + "safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "dev": true + }, + "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "devOptional": true + "dev": true }, - "node_modules/scrypt-js": { + "scrypt-js": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" }, - "node_modules/semantic-release": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-21.1.1.tgz", - "integrity": "sha512-OCIazQnaCHdq1F6zfmKS0P7jZakYq0weiqW2mxUWo4H2CDnxelUoa/0Bs/dQatoHc6JFh6lG2HWpusdl93bFcw==", + "semantic-release": { + "version": "21.1.2", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-21.1.2.tgz", + "integrity": "sha512-kz76azHrT8+VEkQjoCBHE06JNQgTgsC4bT8XfCzb7DHcsk9vG3fqeMVik8h5rcWCYi2Fd+M3bwA7BG8Z8cRwtA==", "dev": true, - "dependencies": { + "requires": { "@semantic-release/commit-analyzer": "^10.0.0", "@semantic-release/error": "^4.0.0", "@semantic-release/github": "^9.0.0", "@semantic-release/npm": "^10.0.2", "@semantic-release/release-notes-generator": "^11.0.0", - "aggregate-error": "^4.0.1", + "aggregate-error": "^5.0.0", "cosmiconfig": "^8.0.0", - "debug": "^4.0.0", - "env-ci": "^9.0.0", - "execa": "^8.0.0", - "figures": "^5.0.0", - "find-versions": "^5.1.0", - "get-stream": "^6.0.0", - "git-log-parser": "^1.2.0", - "hook-std": "^3.0.0", - "hosted-git-info": "^7.0.0", - "lodash-es": "^4.17.21", - "marked": "^5.0.0", - "marked-terminal": "^5.1.1", - "micromatch": "^4.0.2", - "p-each-series": "^3.0.0", - "p-reduce": "^3.0.0", - "read-pkg-up": "^10.0.0", - "resolve-from": "^5.0.0", - "semver": "^7.3.2", - "semver-diff": "^4.0.0", - "signale": "^1.2.1", - "yargs": "^17.5.1" - }, - "bin": { - "semantic-release": "bin/semantic-release.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/semantic-release/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semantic-release/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/semantic-release/node_modules/execa/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dev": true, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semantic-release/node_modules/figures": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", - "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^5.0.0", - "is-unicode-supported": "^1.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semantic-release/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semantic-release/node_modules/hosted-git-info": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.0.tgz", - "integrity": "sha512-ICclEpTLhHj+zCuSb2/usoNXSVkxUSIopre+b1w8NDY9Dntp9LO4vLdHYI336TH8sAqwrRgnSfdkBG2/YpisHA==", - "dev": true, - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/semantic-release/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true, - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/semantic-release/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semantic-release/node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semantic-release/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/semantic-release/node_modules/lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/semantic-release/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semantic-release/node_modules/lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/semantic-release/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semantic-release/node_modules/normalize-package-data": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", - "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", - "dev": true, - "dependencies": { - "hosted-git-info": "^7.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/semantic-release/node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semantic-release/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semantic-release/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semantic-release/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semantic-release/node_modules/parse-json": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.0.0.tgz", - "integrity": "sha512-kP+TQYAzAiVnzOlWOe0diD6L35s9bJh0SCn95PIbZFKrOYuIRQsQkeWEYxzVDuHTt9V9YqvYCJ2Qo4z9wdfZPw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.21.4", - "error-ex": "^1.3.2", - "json-parse-even-better-errors": "^3.0.0", - "lines-and-columns": "^2.0.3", - "type-fest": "^3.8.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semantic-release/node_modules/parse-json/node_modules/type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semantic-release/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/semantic-release/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semantic-release/node_modules/read-pkg": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.1.0.tgz", - "integrity": "sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.1", - "normalize-package-data": "^6.0.0", - "parse-json": "^7.0.0", - "type-fest": "^4.2.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semantic-release/node_modules/read-pkg-up": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-10.1.0.tgz", - "integrity": "sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA==", - "dev": true, - "dependencies": { - "find-up": "^6.3.0", - "read-pkg": "^8.1.0", - "type-fest": "^4.2.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semantic-release/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/semantic-release/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semantic-release/node_modules/type-fest": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.3.1.tgz", - "integrity": "sha512-pphNW/msgOUSkJbH58x8sqpq8uQj6b0ZKGxEsLKMUnGorRcDjrUaLS+39+/ub41JNTwrrMyJcUB8+YZs3mbwqw==", - "dev": true, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semantic-release/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true, - "engines": { - "node": ">=12.20" + "debug": "^4.0.0", + "env-ci": "^9.0.0", + "execa": "^8.0.0", + "figures": "^5.0.0", + "find-versions": "^5.1.0", + "get-stream": "^6.0.0", + "git-log-parser": "^1.2.0", + "hook-std": "^3.0.0", + "hosted-git-info": "^7.0.0", + "lodash-es": "^4.17.21", + "marked": "^5.0.0", + "marked-terminal": "^5.1.1", + "micromatch": "^4.0.2", + "p-each-series": "^3.0.0", + "p-reduce": "^3.0.0", + "read-pkg-up": "^10.0.0", + "resolve-from": "^5.0.0", + "semver": "^7.3.2", + "semver-diff": "^4.0.0", + "signale": "^1.2.1", + "yargs": "^17.5.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true + }, + "execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "dependencies": { + "get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true + } + } + }, + "figures": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", + "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", + "dev": true, + "requires": { + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" + } + }, + "find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "requires": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + } + }, + "hosted-git-info": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", + "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", + "dev": true, + "requires": { + "lru-cache": "^10.0.1" + } + }, + "human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true + }, + "is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true + }, + "lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "dev": true + }, + "locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "requires": { + "p-locate": "^6.0.0" + } + }, + "lru-cache": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", + "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "dev": true + }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true + }, + "normalize-package-data": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", + "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", + "dev": true, + "requires": { + "hosted-git-info": "^7.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + } + }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "requires": { + "path-key": "^4.0.0" + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "requires": { + "yocto-queue": "^1.0.0" + } + }, + "p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "requires": { + "p-limit": "^4.0.0" + } + }, + "parse-json": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.1.0.tgz", + "integrity": "sha512-ihtdrgbqdONYD156Ap6qTcaGcGdkdAxodO1wLqQ/j7HP1u2sFYppINiq4jyC8F+Nm+4fVufylCV00QmkTHkSUg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.21.4", + "error-ex": "^1.3.2", + "json-parse-even-better-errors": "^3.0.0", + "lines-and-columns": "^2.0.3", + "type-fest": "^3.8.0" + }, + "dependencies": { + "type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "dev": true + } + } + }, + "path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true + }, + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true + }, + "read-pkg": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.1.0.tgz", + "integrity": "sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.1", + "normalize-package-data": "^6.0.0", + "parse-json": "^7.0.0", + "type-fest": "^4.2.0" + } + }, + "read-pkg-up": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-10.1.0.tgz", + "integrity": "sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA==", + "dev": true, + "requires": { + "find-up": "^6.3.0", + "read-pkg": "^8.1.0", + "type-fest": "^4.2.0" + } + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true + }, + "type-fest": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.4.0.tgz", + "integrity": "sha512-HT3RRs7sTfY22KuPQJkD/XjbTbxgP2Je5HPt6H6JEGvcjHd5Lqru75EbrP3tb4FYjNJ+DjLp+MNQTFQU0mhXNw==", + "dev": true + }, + "yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true + } } }, - "node_modules/semver": { + "semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, - "dependencies": { + "requires": { "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" } }, - "node_modules/semver-diff": { + "semver-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", "dev": true, - "dependencies": { + "requires": { "semver": "^7.3.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semver-regex": { + "semver-regex": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "dev": true }, - "node_modules/set-blocking": { + "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, - "node_modules/setimmediate": { + "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, - "node_modules/shallow-copy": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", - "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", - "dev": true - }, - "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 }, - "node_modules/side-channel": { + "side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/signal-exit": { + "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/signale": { + "signale": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", "dev": true, - "dependencies": { + "requires": { "chalk": "^2.3.2", "figures": "^2.0.0", "pkg-conf": "^2.1.0" }, - "engines": { - "node": ">=6" - } - }, - "node_modules/signale/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/signale/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/signale/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/signale/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/signale/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/signale/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "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/slice-ansi": { + "slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, - "dependencies": { + "requires": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "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/sourcemap-codec": { + "sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", "dev": true }, - "node_modules/spawn-error-forwarder": { + "spawn-error-forwarder": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", "integrity": "sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==", "dev": true }, - "node_modules/spdx-correct": { + "spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, - "dependencies": { + "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, - "node_modules/spdx-exceptions": { + "spdx-exceptions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, - "node_modules/spdx-expression-parse": { + "spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, - "dependencies": { + "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, - "node_modules/spdx-license-ids": { + "spdx-license-ids": { "version": "3.0.13", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", "dev": true }, - "node_modules/split": { + "split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, - "dependencies": { + "requires": { "through": "2" - }, - "engines": { - "node": "*" } }, - "node_modules/split2": { + "split2": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, - "dependencies": { + "requires": { "readable-stream": "^3.0.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" - } - }, - "node_modules/static-eval": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz", - "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==", - "dev": true, - "dependencies": { - "escodegen": "^1.11.1" - } - }, - "node_modules/static-eval/node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/static-eval/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/static-eval/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/static-eval/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/static-eval/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/static-module": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz", - "integrity": "sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==", - "dev": true, - "dependencies": { - "concat-stream": "~1.6.0", - "convert-source-map": "^1.5.1", - "duplexer2": "~0.1.4", - "escodegen": "~1.9.0", - "falafel": "^2.1.0", - "has": "^1.0.1", - "magic-string": "^0.22.4", - "merge-source-map": "1.0.4", - "object-inspect": "~1.4.0", - "quote-stream": "~1.0.2", - "readable-stream": "~2.3.3", - "shallow-copy": "~0.0.1", - "static-eval": "^2.0.0", - "through2": "~2.0.3" - } - }, - "node_modules/static-module/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/static-module/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/static-module/node_modules/object-inspect": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz", - "integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw==", - "dev": true - }, - "node_modules/static-module/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/static-module/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/static-module/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/static-module/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "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 + } } }, - "node_modules/stream-chain": { + "stream-chain": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz", "integrity": "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==", "dev": true }, - "node_modules/stream-combiner2": { + "stream-combiner2": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", "dev": true, - "dependencies": { + "requires": { "duplexer2": "~0.1.0", "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-combiner2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/stream-combiner2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/stream-combiner2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/stream-combiner2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, + }, "dependencies": { - "safe-buffer": "~5.1.0" + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, - "node_modules/stream-json": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/stream-json/-/stream-json-1.1.3.tgz", - "integrity": "sha512-y+ChhCov2A5nDqC2aZ6HKXs3OvDlvAp0Ps3BF1P/Iv8tUZJQQsMVaSzk0WryVTVoGITKv01UYahCXMpAs7I0lQ==", + "stream-json": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/stream-json/-/stream-json-1.8.0.tgz", + "integrity": "sha512-HZfXngYHUAr1exT4fxlbc1IOce1RYxp2ldeaf97LYCOPSoOqY/1Psp7iGvpb+6JIOgkra9zDYnPX01hGAHzEPw==", "dev": true, - "dependencies": { - "stream-chain": "^2.0.3" + "requires": { + "stream-chain": "^2.2.5" } }, - "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==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } + "stream-read-all": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/stream-read-all/-/stream-read-all-3.0.1.tgz", + "integrity": "sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A==", + "dev": true }, - "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-to-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string-to-stream/-/string-to-stream-1.1.1.tgz", - "integrity": "sha512-QySF2+3Rwq0SdO3s7BAp4x+c3qsClpPQ6abAmb0DGViiSBAkT5kL6JT2iyzEVP+T1SmzHrQD1TwlP9QAHCc+Sw==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.1.0" - } - }, - "node_modules/string-to-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/string-to-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" } }, - "node_modules/string-to-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/string-to-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "string-to-stream": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/string-to-stream/-/string-to-stream-3.0.1.tgz", + "integrity": "sha512-Hl092MV3USJuUCC6mfl9sPzGloA3K5VwdIeJjYIkXY/8K+mUvaeEabWJgArp+xXrsWxCajeT2pc4axbVhIZJyg==", "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" + "requires": { + "readable-stream": "^3.4.0" } }, - "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/string.prototype.trim": { + "string.prototype.trim": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string.prototype.trimend": { + "string.prototype.trimend": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string.prototype.trimstart": { + "string.prototype.trimstart": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/strip-ansi": { + "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==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "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" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "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-indent": { + "strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, - "dependencies": { + "requires": { "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" } }, - "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": { + "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": { + "requires": { "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" } }, - "node_modules/supports-hyperlinks": { + "supports-hyperlinks": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", "dev": true, - "dependencies": { + "requires": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" } }, - "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, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "dev": true }, - "node_modules/table": { + "table": { "version": "6.8.1", "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", "dev": true, - "dependencies": { + "requires": { "ajv": "^8.0.1", "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", "string-width": "^4.2.3", "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" } }, - "node_modules/table-layout": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.5.tgz", - "integrity": "sha512-zTvf0mcggrGeTe/2jJ6ECkJHAQPIYEwDoqsiqBjI24mvRmQbInK5jq33fyypaCBxX08hMkfmdOqj6haT33EqWw==", - "dev": true, - "dependencies": { - "array-back": "^2.0.0", - "deep-extend": "~0.6.0", - "lodash.padend": "^4.6.1", - "typical": "^2.6.1", - "wordwrapjs": "^3.0.0" - }, - "engines": { - "node": ">=4.0.0" + "table-layout": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-3.0.2.tgz", + "integrity": "sha512-rpyNZYRw+/C+dYkcQ3Pr+rLxW4CfHpXjPDnG7lYhdRoUcZTUt+KEsX+94RGp/aVp/MQU35JCITv2T/beY4m+hw==", + "dev": true, + "requires": { + "@75lb/deep-merge": "^1.1.1", + "array-back": "^6.2.2", + "command-line-args": "^5.2.1", + "command-line-usage": "^7.0.0", + "stream-read-all": "^3.0.1", + "typical": "^7.1.1", + "wordwrapjs": "^5.1.0" + }, + "dependencies": { + "array-back": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", + "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", + "dev": true + }, + "typical": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", + "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", + "dev": true + } } }, - "node_modules/temp-dir": { + "temp-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", - "dev": true, - "engines": { - "node": ">=14.16" - } + "dev": true }, - "node_modules/tempy": { + "tempy": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz", "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==", "dev": true, - "dependencies": { + "requires": { "is-stream": "^3.0.0", "temp-dir": "^3.0.0", "type-fest": "^2.12.2", "unique-string": "^3.0.0" }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true + }, + "type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true + } } }, - "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/test-value": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz", - "integrity": "sha512-+1epbAxtKeXttkGFMTX9H42oqzOTufR1ceCF+GYA5aOmvaPq9wd4PUS8329fn2RRLGNeUkgRLnVpycjx8DsO2w==", - "dev": true, - "dependencies": { - "array-back": "^1.0.3", - "typical": "^2.6.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/test-value/node_modules/array-back": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", - "integrity": "sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==", - "dev": true, - "dependencies": { - "typical": "^2.6.0" - }, - "engines": { - "node": ">=0.12.0" } }, - "node_modules/text-extensions": { + "text-extensions": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } + "dev": true }, - "node_modules/text-table": { + "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "node_modules/through": { + "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, - "node_modules/through2": { + "through2": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, - "dependencies": { + "requires": { "readable-stream": "3" } }, - "node_modules/tiny-inflate": { + "tiny-inflate": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", "dev": true }, - "node_modules/tmp": { + "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, - "dependencies": { + "requires": { "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" } }, - "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-fast-properties": { + "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } + "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/tr46": { + "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, - "node_modules/traverse": { + "traverse": { "version": "0.6.7", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "dev": true }, - "node_modules/trim-newlines": { + "trim-newlines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "engines": { - "node": ">=8" - } + "dev": true }, - "node_modules/ts-jest": { + "ts-jest": { "version": "29.1.1", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", "dev": true, - "dependencies": { + "requires": { "bs-logger": "0.x", "fast-json-stable-stringify": "2.x", "jest-util": "^29.0.0", @@ -16559,61 +11338,27 @@ "semver": "^7.5.3", "yargs-parser": "^21.0.1" }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true + "dependencies": { + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true }, - "esbuild": { - "optional": true + "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 } } }, - "node_modules/ts-jest/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": ">=6" - } - }, - "node_modules/ts-jest/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/ts-node": { + "ts-node": { "version": "9.1.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", "dev": true, - "dependencies": { + "requires": { "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", @@ -16621,617 +11366,451 @@ "source-map-support": "^0.5.17", "yn": "3.1.1" }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "typescript": ">=2.7" - } - }, - "node_modules/ts-node/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" + "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" + } + } } }, - "node_modules/tsconfig-paths": { + "tsconfig-paths": { "version": "3.14.2", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", "dev": true, - "dependencies": { + "requires": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + } } }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tslib": { + "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, - "node_modules/tsutils": { + "tsutils": { "version": "3.21.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, - "dependencies": { + "requires": { "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "node_modules/type-check": { + "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "dependencies": { + "requires": { "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" } }, - "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.18.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "dev": true }, - "node_modules/typed-array-buffer": { + "typed-array-buffer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1", "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" } }, - "node_modules/typed-array-byte-length": { + "typed-array-byte-length": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", "for-each": "^0.3.3", "has-proto": "^1.0.1", "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typed-array-byte-offset": { + "typed-array-byte-offset": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", "dev": true, - "dependencies": { + "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", "has-proto": "^1.0.1", "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typed-array-length": { + "typed-array-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", "for-each": "^0.3.3", "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "node_modules/typescript": { + "typescript": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } + "dev": true }, - "node_modules/typical": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", - "integrity": "sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==", + "typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", "dev": true }, - "node_modules/uglify-js": { + "uglify-js": { "version": "3.17.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", "dev": true, - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } + "optional": true }, - "node_modules/unbox-primitive": { + "unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/unicode-trie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz", - "integrity": "sha512-WgVuO0M2jDl7hVfbPgXv2LUrD81HM0bQj/bvLGiw6fJ4Zo8nNFnDrA0/hU2Te/wz6pjxCm5cxJwtLjo2eyV51Q==", + "unicode-properties": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", + "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", "dev": true, - "dependencies": { + "requires": { + "base64-js": "^1.3.0", + "unicode-trie": "^2.0.0" + } + }, + "unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "dev": true, + "requires": { "pako": "^0.2.5", "tiny-inflate": "^1.0.0" + }, + "dependencies": { + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "dev": true + } } }, - "node_modules/unicode-trie/node_modules/pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", - "dev": true - }, - "node_modules/unique-string": { + "unique-string": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", "dev": true, - "dependencies": { + "requires": { "crypto-random-string": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/universal-user-agent": { + "universal-user-agent": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", "dev": true }, - "node_modules/universalify": { + "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } + "dev": true }, - "node_modules/update-browserslist-db": { + "update-browserslist-db": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", "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": { + "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" } }, - "node_modules/uri-js": { + "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { + "requires": { "punycode": "^2.1.0" } }, - "node_modules/urijs": { + "urijs": { "version": "1.19.11", "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==", "dev": true }, - "node_modules/url-join": { + "url-join": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } + "dev": true }, - "node_modules/util-deprecate": { + "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "node_modules/uuid": { + "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, - "node_modules/v8-compile-cache": { + "v8-compile-cache": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", "dev": true }, - "node_modules/v8-compile-cache-lib": { + "v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true }, - "node_modules/v8-to-istanbul": { + "v8-to-istanbul": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", "dev": true, - "dependencies": { + "requires": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", "convert-source-map": "^1.6.0" }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", - "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + } } }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/validate-npm-package-license": { + "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "dependencies": { + "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, - "node_modules/validator": { + "validator": { "version": "13.11.0", "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", - "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vlq": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", - "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", - "dev": true + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==" }, - "node_modules/walker": { + "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/wcwidth": { + "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, - "dependencies": { + "requires": { "defaults": "^1.0.3" } }, - "node_modules/webidl-conversions": { + "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/whatwg-fetch": { - "version": "3.6.17", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.17.tgz", - "integrity": "sha512-c4ghIvG6th0eudYwKZY5keb81wtFz9/WeAHAoy8+r18kcWlitUIrmGFQ2rWEl4UCKUilD3zCLHOIPheHx5ypRQ==", - "dev": true - }, - "node_modules/whatwg-url": { + "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": { + "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, - "node_modules/which": { + "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/which-boxed-primitive": { + "which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, - "dependencies": { + "requires": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-module": { + "which-module": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", "dev": true }, - "node_modules/which-typed-array": { + "which-typed-array": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", "dev": true, - "dependencies": { + "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/word-wrap": { + "word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/wordwrap": { + "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": true }, - "node_modules/wordwrapjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz", - "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==", - "dev": true, - "dependencies": { - "reduce-flatten": "^1.0.1", - "typical": "^2.6.1" - }, - "engines": { - "node": ">=4.0.0" - } + "wordwrapjs": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-5.1.0.tgz", + "integrity": "sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==", + "dev": true }, - "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/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/ws": { + "ws": { "version": "7.4.6", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" }, - "node_modules/xtend": { + "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } + "dev": true }, - "node_modules/y18n": { + "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": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } + "yaml": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.3.tgz", + "integrity": "sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==", + "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", @@ -17240,48 +11819,32 @@ "y18n": "^5.0.5", "yargs-parser": "^21.1.1" }, - "engines": { - "node": ">=12" + "dependencies": { + "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 + } } }, - "node_modules/yargs-parser": { + "yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs/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" - } + "dev": true }, - "node_modules/yn": { + "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } + "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 } } } From 8f477e2fe37856b7bff805b3e54c8189768c02f2 Mon Sep 17 00:00:00 2001 From: cavacado Date: Wed, 25 Oct 2023 08:36:52 +0800 Subject: [PATCH 04/13] feat: idvc feature --- package.json | 2 +- scripts/postInstall.js | 2 +- scripts/publishSchema.sh | 13 +- src/2.0/__tests__/digest.test.ts | 6 +- src/2.0/__tests__/obfuscate.test.ts | 10 +- src/2.0/__tests__/verify.test.ts | 2 +- src/2.0/schema/schema.test.ts | 18 +- src/3.0/digest.ts | 6 +- src/3.0/schema/schema.test.ts | 18 +- src/3.0/validate/validate.ts | 26 +- src/4.0/__tests__/digest.test.ts | 114 +++-- src/4.0/__tests__/e2e.test.batch.wip | 56 +++ src/4.0/__tests__/e2e.test.ts | 207 +++++++++ src/4.0/__tests__/e2e.test.wip | 405 ------------------ .../{obfuscate.test.wip => obfuscate.test.ts} | 118 ++--- .../__tests__/{salt.test.wip => salt.test.ts} | 48 ++- .../__tests__/{sign.test.wip => sign.test.ts} | 21 +- ...{verify.test.wip => verify.test.batch.wip} | 94 +--- src/4.0/__tests__/verify.test.ts | 72 ++++ src/4.0/digest.ts | 8 +- src/4.0/obfuscate.ts | 8 +- src/4.0/schema/schema.json | 156 ++++++- src/4.0/schema/schema.test.ts | 92 +++- src/4.0/sign.ts | 4 +- src/4.0/types.ts | 16 +- src/4.0/validate/validate.ts | 23 +- src/4.0/wrap.ts | 12 +- src/index.ts | 14 +- src/shared/@types/document.ts | 27 +- src/shared/ajv.ts | 4 +- src/shared/contexts/w3c-context-examples.json | 57 +++ src/shared/contexts/w3c-data-model-v1.json | 237 ++++++++++ src/shared/utils/diagnose.ts | 4 +- src/shared/utils/guard.ts | 8 +- src/shared/utils/utils.ts | 6 +- src/shared/validate/validate.test.ts | 2 +- test/fixtures/v4/did-idvc-raw.json | 111 +++++ test/fixtures/v4/did-idvc-wrapped-signed.json | 101 +++++ test/fixtures/v4/did-idvc-wrapped.json | 99 +++++ test/fixtures/v4/did-raw.json | 82 ++-- test/fixtures/v4/did-raw2.json | 73 ++++ test/fixtures/v4/did-signed-wrapped.json | 50 --- test/fixtures/v4/did-wrapped-obfuscated.json | 60 +++ test/fixtures/v4/did-wrapped-signed.json | 63 +++ test/fixtures/v4/did-wrapped.json | 75 ++-- test/fixtures/v4/did-wrapped2.json | 61 +++ test/fixtures/v4/idvc.json | 32 ++ 47 files changed, 1888 insertions(+), 835 deletions(-) create mode 100644 src/4.0/__tests__/e2e.test.batch.wip create mode 100644 src/4.0/__tests__/e2e.test.ts delete mode 100644 src/4.0/__tests__/e2e.test.wip rename src/4.0/__tests__/{obfuscate.test.wip => obfuscate.test.ts} (70%) rename src/4.0/__tests__/{salt.test.wip => salt.test.ts} (89%) rename src/4.0/__tests__/{sign.test.wip => sign.test.ts} (75%) rename src/4.0/__tests__/{verify.test.wip => verify.test.batch.wip} (57%) create mode 100644 src/4.0/__tests__/verify.test.ts create mode 100644 src/shared/contexts/w3c-context-examples.json create mode 100644 src/shared/contexts/w3c-data-model-v1.json create mode 100644 test/fixtures/v4/did-idvc-raw.json create mode 100644 test/fixtures/v4/did-idvc-wrapped-signed.json create mode 100644 test/fixtures/v4/did-idvc-wrapped.json create mode 100644 test/fixtures/v4/did-raw2.json delete mode 100644 test/fixtures/v4/did-signed-wrapped.json create mode 100644 test/fixtures/v4/did-wrapped-obfuscated.json create mode 100644 test/fixtures/v4/did-wrapped-signed.json create mode 100644 test/fixtures/v4/did-wrapped2.json create mode 100644 test/fixtures/v4/idvc.json diff --git a/package.json b/package.json index f4365f28..e65eeccf 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "jest-watch-typeahead": "^2.2.2", "prettier": "^2.3.2", "qrcode": "^1.5.1", - "quicktype": "^15.0.260", + "quicktype": "^23.0.76", "rollup": "^2.56.2", "rollup-plugin-commonjs": "^10.1.0", "semantic-release": "^21.1.1", diff --git a/scripts/postInstall.js b/scripts/postInstall.js index d09dd7d3..55149fa4 100644 --- a/scripts/postInstall.js +++ b/scripts/postInstall.js @@ -19,7 +19,7 @@ if (fs.existsSync(quicktype) && process.env.npm_config_production !== "true") { console.log('"Creating types from src/4.0/schema/schema.json"'); execSync( quicktype + - " -s schema -o src/__generated__/schema.4.0.ts -t OpenAttestationDocument --just-types src/4.0/schema/schema.json --no-date-times" + " -s schema -o src/__generated__/schema.4.0.ts -t TradeTrustDocument --just-types src/4.0/schema/schema.json --no-date-times" ); } else { console.log("Not running quicktype"); diff --git a/scripts/publishSchema.sh b/scripts/publishSchema.sh index 6064f6c4..f7b75230 100755 --- a/scripts/publishSchema.sh +++ b/scripts/publishSchema.sh @@ -4,13 +4,18 @@ rm -rf ./public mkdir public +# For exisiting v2 and v3 schemas, do not publish, instead +# reuse the ones from OpenAttestation. Only if there is a +# base schema change for v2 and v3 then one would need to +# publish + # Copy 2.0 schema to public folder -mkdir -p public/2.0/ -cp src/2.0/schema/schema.json public/2.0/schema.json +# mkdir -p public/2.0/ +# cp src/2.0/schema/schema.json public/2.0/schema.json # Copy 3.0 schema to public folder -mkdir -p public/3.0/ -cp src/3.0/schema/schema.json public/3.0/schema.json +# mkdir -p public/3.0/ +# cp src/3.0/schema/schema.json public/3.0/schema.json # Copy 4.0 schema to public folder mkdir -p public/4.0/ diff --git a/src/2.0/__tests__/digest.test.ts b/src/2.0/__tests__/digest.test.ts index f7a14252..9da95f68 100644 --- a/src/2.0/__tests__/digest.test.ts +++ b/src/2.0/__tests__/digest.test.ts @@ -86,8 +86,8 @@ describe("digest", () => { const document: SchematisedDocument = { version: SchemaId.v2, schema: "foo", + // @ts-expect-error the data is not a schematised document data: { - // @ts-expect-error the data is not a schematised document key1: "value1", key2: { "key2-1": "value2-1", @@ -106,8 +106,8 @@ describe("digest", () => { const documentWithShadowedKey: SchematisedDocument = { version: SchemaId.v2, schema: "foo", + // @ts-expect-error the data is not a schematised document data: { - // @ts-expect-error the data is not a schematised document foo: { bar: "qux", }, @@ -124,8 +124,8 @@ describe("digest", () => { const document: SchematisedDocument = { version: SchemaId.v2, schema: "foo", + // @ts-expect-error the data is not a schematised document data: { - // @ts-expect-error the data is not a schematised document key1: "value1", key2: { "key2-1": "value2-1", diff --git a/src/2.0/__tests__/obfuscate.test.ts b/src/2.0/__tests__/obfuscate.test.ts index 25137149..cb382c45 100644 --- a/src/2.0/__tests__/obfuscate.test.ts +++ b/src/2.0/__tests__/obfuscate.test.ts @@ -132,8 +132,8 @@ describe("privacy", () => { const document: WrappedDocument = { version: SchemaId.v2, schema: "http://example.com/schema.json", + // @ts-expect-error the data is not an open attestation document data: { - // @ts-expect-error the data is not an open attestation document key1: "test", }, privacy: {}, @@ -147,8 +147,8 @@ describe("privacy", () => { const document2: WrappedDocument = { version: SchemaId.v2, schema: "http://example.com/schema.json", + // @ts-expect-error the data is not an open attestation document data: { - // @ts-expect-error the data is not an open attestation document key1: "test", }, privacy: {}, @@ -167,8 +167,8 @@ describe("privacy", () => { const document: WrappedDocument = { version: SchemaId.v2, schema: "http://example.com/schema.json", + // @ts-expect-error the data is not an open attestation document data: { - // @ts-expect-error the data is not an open attestation document key1: "item1", key2: "item4", }, @@ -193,8 +193,8 @@ describe("privacy", () => { const document: WrappedDocument = { version: SchemaId.v2, schema: "http://example.com/schema.json", + // @ts-expect-error the data is not an open attestation document data: { - // @ts-expect-error the data is not an open attestation document key1: "test", }, privacy: {}, @@ -237,8 +237,8 @@ describe("privacy", () => { privacy: { obfuscatedData: ["674afcc934fede83cbfef6361de969d520ec3f8aebacbc984b8d39b11dbdcd38"], }, + // @ts-expect-error the data is not an open attestation document data: { - // @ts-expect-error the data is not an open attestation document key1: "f9ec69be-ab21-474d-b8d7-012424813dc3:string:value1", key2: { key21: "181e6794-45e4-4ecd-ac45-4c2aed0d757f:boolean:true", diff --git a/src/2.0/__tests__/verify.test.ts b/src/2.0/__tests__/verify.test.ts index c72064c7..9e741bbc 100644 --- a/src/2.0/__tests__/verify.test.ts +++ b/src/2.0/__tests__/verify.test.ts @@ -6,8 +6,8 @@ import { SchematisedDocument } from "../../2.0/types"; const rawDocument: SchematisedDocument = { version: SchemaId.v2, schema: "foo", + //@ts-expect-error it's not an open attestation document data: { - //@ts-expect-error it's not an open attestation document key1: "value1", key2: { "key2-1": "value2-1", diff --git a/src/2.0/schema/schema.test.ts b/src/2.0/schema/schema.test.ts index 37d30779..09bfc2cf 100644 --- a/src/2.0/schema/schema.test.ts +++ b/src/2.0/schema/schema.test.ts @@ -441,13 +441,15 @@ describe("schema/2.0", () => { }); describe("template", () => { it("should be valid without $template (will use default view)", () => { - const wrappedDocument = wrapDocument(omit(cloneDeep(openAttestationDocument), "$template")); + const wrappedDocument = wrapDocument( + omit(cloneDeep(openAttestationDocument), "$template") as OpenAttestationDocument + ); expect(wrappedDocument.version).toBe(SchemaId.v2); }); it("should not be valid if $template does not have name", () => { expect.assertions(2); - const document = omit(cloneDeep(openAttestationDocument), "$template.name"); + const document = omit(cloneDeep(openAttestationDocument), "$template.name") as OpenAttestationDocument; try { wrapDocument(document); } catch (e) { @@ -471,7 +473,7 @@ describe("schema/2.0", () => { it("should not be valid if $template does not have type", () => { expect.assertions(2); - const document = omit(cloneDeep(openAttestationDocument), "$template.type"); + const document = omit(cloneDeep(openAttestationDocument), "$template.type") as OpenAttestationDocument; try { wrapDocument(document); } catch (e) { @@ -527,13 +529,15 @@ describe("schema/2.0", () => { }); describe("attachments", () => { it("should be valid without attachments", () => { - const wrappedDocument = wrapDocument(omit(cloneDeep(openAttestationDocument), "attachments")); + const wrappedDocument = wrapDocument( + omit(cloneDeep(openAttestationDocument), "attachments") as OpenAttestationDocument + ); expect(wrappedDocument.version).toBe(SchemaId.v2); }); it("should not be valid without attachments filename", () => { expect.assertions(2); - const document = omit(cloneDeep(openAttestationDocument), "attachments[0].filename"); + const document = omit(cloneDeep(openAttestationDocument), "attachments[0].filename") as OpenAttestationDocument; try { wrapDocument(document); } catch (e) { @@ -554,7 +558,7 @@ describe("schema/2.0", () => { it("should not be valid without attachments data", () => { expect.assertions(2); - const document = omit(cloneDeep(openAttestationDocument), "attachments[0].data"); + const document = omit(cloneDeep(openAttestationDocument), "attachments[0].data") as OpenAttestationDocument; try { wrapDocument(document); } catch (e) { @@ -575,7 +579,7 @@ describe("schema/2.0", () => { it("should not be valid without attachments type", () => { expect.assertions(2); - const document = omit(cloneDeep(openAttestationDocument), "attachments[0].type"); + const document = omit(cloneDeep(openAttestationDocument), "attachments[0].type") as OpenAttestationDocument; try { wrapDocument(document); } catch (e) { diff --git a/src/3.0/digest.ts b/src/3.0/digest.ts index 6e8c7de9..bebd0591 100644 --- a/src/3.0/digest.ts +++ b/src/3.0/digest.ts @@ -3,7 +3,11 @@ import { keccak256 } from "js-sha3"; import { Salt } from "./types"; import { OpenAttestationDocument } from "../__generated__/schema.3.0"; -export const digestCredential = (document: OpenAttestationDocument, salts: Salt[], obfuscatedData: string[]) => { +export const digestCredential = ( + document: Omit, + salts: Salt[], + obfuscatedData: string[] +) => { // Prepare array of hashes from visible data const hashedUnhashedDataArray = salts .filter((salt) => get(document, salt.path)) diff --git a/src/3.0/schema/schema.test.ts b/src/3.0/schema/schema.test.ts index ad539e27..6061cf46 100644 --- a/src/3.0/schema/schema.test.ts +++ b/src/3.0/schema/schema.test.ts @@ -85,7 +85,7 @@ describe("schema/3.0", () => { describe("id", () => { it("should be valid when id is missing", async () => { // id can be optional, see https://www.w3.org/TR/vc-data-model/#identifiers - const document = { ...omit(cloneDeep(sampleDoc), "id") }; + const document = { ...omit(cloneDeep(sampleDoc), "id") } as OpenAttestationDocument; const wrappedDocument = await wrapDocument(document, { externalSchemaId: $id, version: SchemaId.v3, @@ -123,7 +123,7 @@ describe("schema/3.0", () => { it("should be valid if reference is missing", async () => { // For now, reference is not compulsory expect.assertions(1); - const document = { ...omit(cloneDeep(sampleDoc), "reference") }; + const document = { ...omit(cloneDeep(sampleDoc), "reference") } as OpenAttestationDocument; const wrappedDocument = await wrapDocument(document, { externalSchemaId: $id, version: SchemaId.v3, @@ -164,7 +164,7 @@ describe("schema/3.0", () => { it("should be valid if name is missing", async () => { // For now, it's not compulsory expect.assertions(1); - const document = { ...omit(cloneDeep(sampleDoc), "name") }; + const document = { ...omit(cloneDeep(sampleDoc), "name") } as OpenAttestationDocument; const wrappedDocument = await wrapDocument(document, { externalSchemaId: $id, version: SchemaId.v3, @@ -258,7 +258,7 @@ describe("schema/3.0", () => { it("should be valid if validFrom is missing", async () => { // For now, it's not compulsory and is reserved for a later version of W3C VC Data Model, see https://www.w3.org/TR/vc-data-model/#issuance-date expect.assertions(1); - const document = { ...omit(cloneDeep(sampleDoc), "validFrom") }; + const document = { ...omit(cloneDeep(sampleDoc), "validFrom") } as OpenAttestationDocument; const wrappedDocument = await wrapDocument(document, { externalSchemaId: $id, version: SchemaId.v3, @@ -315,7 +315,7 @@ describe("schema/3.0", () => { it("should be valid when validUntil is missing", async () => { // validUntil does not exist in our sample document anyways expect.assertions(1); - const document = { ...omit(cloneDeep(sampleDoc), "validUntil") }; + const document = { ...omit(cloneDeep(sampleDoc), "validUntil") } as OpenAttestationDocument; const wrappedDocument = await wrapDocument(document, { externalSchemaId: $id, version: SchemaId.v3, @@ -407,7 +407,9 @@ describe("schema/3.0", () => { }); it("should be invalid if template.name is missing", async () => { expect.assertions(1); - const document = { ...omit(cloneDeep(sampleDoc), "openAttestationMetadata.template.name") }; + const document = { + ...omit(cloneDeep(sampleDoc), "openAttestationMetadata.template.name"), + } as OpenAttestationDocument; await expect(wrapDocument(document, { externalSchemaId: $id, version: SchemaId.v3 })).rejects.toHaveProperty( "validationErrors", [ @@ -423,7 +425,9 @@ describe("schema/3.0", () => { }); it("should be invalid if template.type is missing", async () => { expect.assertions(1); - const document = { ...omit(cloneDeep(sampleDoc), "openAttestationMetadata.template.type") }; + const document = { + ...omit(cloneDeep(sampleDoc), "openAttestationMetadata.template.type"), + } as OpenAttestationDocument; await expect(wrapDocument(document, { externalSchemaId: $id, version: SchemaId.v3 })).rejects.toHaveProperty( "validationErrors", [ diff --git a/src/3.0/validate/validate.ts b/src/3.0/validate/validate.ts index 38a46b77..a6057ee7 100644 --- a/src/3.0/validate/validate.ts +++ b/src/3.0/validate/validate.ts @@ -2,6 +2,8 @@ import { OpenAttestationDocument } from "../../__generated__/schema.3.0"; import { WrappedDocument } from "../../3.0/types"; import { documentLoaders, expand } from "@govtechsg/jsonld"; import fetch from "cross-fetch"; +import w3cContextExamples from "../../shared/contexts/w3c-context-examples.json"; +import w3cDataModel from "../../shared/contexts/w3c-data-model-v1.json" const getId = (objectOrString: string | { id: string }): string => { if (typeof objectOrString === "string") { @@ -39,9 +41,11 @@ const isValidRFC3986 = (str: any) => { return rfc3986.test(str); }; +let w3cExamplesContextUrl = "https://www.w3.org/2018/credentials/examples/v1"; +let w3cDataModelUrl = "https://www.w3.org/2018/credentials/v1"; const preloadedContextList = [ - "https://www.w3.org/2018/credentials/v1", - "https://www.w3.org/2018/credentials/examples/v1", + w3cExamplesContextUrl, + w3cDataModelUrl, "https://schemata.openattestation.com/com/openattestation/1.0/DrivingLicenceCredential.json", "https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json", "https://schemata.openattestation.com/com/openattestation/1.0/CustomContext.json", @@ -54,10 +58,20 @@ const documentLoader = async (url: string) => { if (preload) { preload = false; for (const url of preloadedContextList) { - contexts.set( - url, - fetch(url, { headers: { accept: "application/json" } }).then((res: any) => res.json()) - ); + // resolve the 2 w3c contexts (w3c data model and w3c + // context examples) to local files within the repo, + // otherwise, w3c would throttle these contexts after + // a set number of requests. + if (url === w3cExamplesContextUrl) { + contexts.set(url, Promise.resolve(w3cContextExamples)); + } else if (url === w3cDataModelUrl) { + contexts.set(url, Promise.resolve(w3cDataModel)); + } else { + contexts.set( + url, + fetch(url, { headers: { accept: "application/json" } }).then((res: any) => res.json()) + ); + } } } if (contexts.get(url)) { diff --git a/src/4.0/__tests__/digest.test.ts b/src/4.0/__tests__/digest.test.ts index 172b0fc6..f94c8e60 100644 --- a/src/4.0/__tests__/digest.test.ts +++ b/src/4.0/__tests__/digest.test.ts @@ -3,11 +3,11 @@ import { digestCredential } from "../digest"; import { WrappedDocument } from "../../4.0/types"; import { obfuscateVerifiableCredential } from "../obfuscate"; import { decodeSalt } from "../salt"; -import sample from "../../../test/fixtures/v4/did-wrapped.json"; +import sample from "../../../test/fixtures/v4/did-idvc-wrapped.json"; const verifiableCredential = sample as WrappedDocument; // Digest will change whenever sample document is regenerated -const credentialRoot = "adb16863b9b92f1f46d67f518f853092404dc1322ffb61b45a831ee113f4ea99"; +const credentialRoot = "84edabc618b2a5a7bad7eee9b58c287e9a39959d231eef3ab9270bd99922e54c"; const { proof, ...credential } = verifiableCredential; @@ -29,7 +29,7 @@ describe("digest v4.0", () => { expect(obfuscatedVerifiableCredential.proof.privacy.obfuscated).toMatchInlineSnapshot(` [ - "016c17fefa241351dc2950cfbeaef8281b0bc71e1ee445d890e9c37622fa0318", + "64f21c91615d91a7430eb834b33b409259625f33a2e3891c7f6976cc5be6ee9e", ] `); expect(obfuscatedVerifiableCredential.proof.privacy.obfuscated).toHaveLength(1); @@ -39,7 +39,7 @@ describe("digest v4.0", () => { const obfuscatedVerifiableCredential = obfuscateVerifiableCredential(verifiableCredential, [ "credentialSubject.id", "credentialSubject.name", - "credentialSubject.licenses.0.description", + "credentialSubject.billFrom.name", ]); const digest = digestCredential( obfuscatedVerifiableCredential, @@ -49,9 +49,9 @@ describe("digest v4.0", () => { expect(obfuscatedVerifiableCredential.proof.privacy.obfuscated).toMatchInlineSnapshot(` [ - "84c8662d07d3b98b7b9b58687a04fd6ff5a90e91f63e70c2399755721630b370", - "4390ee551a3ef3bebaad99c85738b3ebd96932343fb22a59865764125b79565c", - "026dbfc89aaa98005d2f25b0b274a972f1dc5c351d22270eba9d80422dd9850f", + "0c5c136c958df65ca70ea7c8a8fa2dc076bbb24d9d040e92a4c434a3d399e13b", + "3f303d3023c4f9fdaff8a930a76d7eaa9379cdb91c0a139dbcc33809da24499c", + "60dcf42761bbad28607ebee19657335c79539ebb49e905edffb69c743d878848", ] `); expect(obfuscatedVerifiableCredential.proof.privacy.obfuscated).toHaveLength(3); @@ -71,35 +71,81 @@ describe("digest v4.0", () => { expect(obfuscatedVerifiableCredential).toStrictEqual({ proof: obfuscatedVerifiableCredential.proof }); expect(obfuscatedVerifiableCredential.proof.privacy.obfuscated).toMatchInlineSnapshot(` [ - "f0798858da35807f0e5ae1a253722da6eb073abfad039151a18355d71e18f232", - "867ae2f030d04745d384969efe67b9fdfeea3236aa6b5f10d2bdbfb495a1ecb3", - "671da469c4211222ef05dcfc4fb795b6d774f5a1fc9f1397fab7ff6eba58e5db", - "b92f17321f80808f90ee5c1b089fad1b8ad2ff63e8d4d4ba923e50d0996aba75", - "21d7f40f46a97e9480b48739b560fba4cfe6d2f1b6bf14e3bdf7c9d765590a9a", - "4b13961eed15c275d3b8c11c4d40d8f956ffa8f1361b36058da28349c155d193", - "016c17fefa241351dc2950cfbeaef8281b0bc71e1ee445d890e9c37622fa0318", - "c5796036b237228ddc64bab40cd34200cb8d9dc4574c8a9a7cdda2350d77bdf9", - "b031b7f3cc154783acc36cbdc524bb7d8e4f4093785d25c1000a15c49e0ce58b", - "0913c1f68e821d8b4b07c9406419f083cd326c989bf433ccd13c242fdf834497", - "0c9bbd46994b92637562fef0df5a95eb4549a0198923c66693b547311635455a", - "5dff1a92a0cae0a5d50530968ff06c2baea9d3ac11b415268d98728ff13a4aa6", - "363e3a4656d4b586d1855a4cc22e56b4b446a357f2c76bdc777df6596d22e7e3", - "13e4d679f8cc43a69c7fbc37cd6339ee3864eeaca137687b6c7cff07309f6f98", - "5d027cec038e4f0fbb684da654f12999b973e20788801e13e063f642228d56a5", - "6d8b020b1ef826ce5e05fb034f4d2b9c4ed5bc4d4a0d697a6ec9f6c249970cb0", - "97bbd9a5415e96e1f5f61879e1bdef14db6868304ab3b681c6bbb82e0ecd21b3", - "84c8662d07d3b98b7b9b58687a04fd6ff5a90e91f63e70c2399755721630b370", - "c96b471fec27d76d3b5e1c479ccf690bca845ba78bc2b6b28abd52f9defcf491", - "4390ee551a3ef3bebaad99c85738b3ebd96932343fb22a59865764125b79565c", - "6d38b0c91fa83fd141a20098b121eca264dcf8c20e6bd97d13b9a5e8924026c2", - "026dbfc89aaa98005d2f25b0b274a972f1dc5c351d22270eba9d80422dd9850f", - "5bc0eb80d28496cfe3ed416b91fada582f097bbdaaedcff5aa5e393c8f8be726", - "6fb9f93f2b42bb70a67e6ad5cb22f72083d9d3bf98776e83a470c82800770623", - "aa4414e7a955a034998fd1221c80a2ef77c30c26a7b15fe15b7c2716811bb3d9", - "fba6d49a55387b611fb4dedf401630d3adb1d377e17ba051524a09795ee734ae", + "334773dd035f824f9f6d6c990a9352c86ca0212f1e6ab1b6830408940243633b", + "73766305cdd739bbb42392cb12c6caaa8aab04a49b1ca3fa72e635a0fd965054", + "cea40f9d495354864581b58704407bb86ea2a800ddcee4119bb6f6b464b1d08d", + "37c7347e8fbea3ddaa9b013cba3b4d168dbb5fa0eb655f93948c375b65ab0ed6", + "019361c659697addc497621f6b5379e8e25a05526d41f6b132e3327ccffcd28f", + "64f21c91615d91a7430eb834b33b409259625f33a2e3891c7f6976cc5be6ee9e", + "aed3887fb97eb2eda746589f940fcb26c7d8f838a5c8d38e717e83d070e8a9e2", + "aee7ef0d7cb1de180a885c4321511c60ffd0d12a7ac34755e8ed43ecafc44494", + "16ce1de2cb512f8b0e759e1c63de8e9108cfeec33be6125eb047d55d1a1a3b97", + "e2605099b77afbf81b696a32288bddd5bc2aee7a7cd50456ca52adb8d94e38cf", + "51842bb2f40dbd01aa58f0382789db9c3c25910651362350817a5d6a02643467", + "f704cceab35a1cca3b33731545cb70f7c9915036c4887f82eb1e3e84f839ab9d", + "861108158a9bb6649ca027369cd9f5b8fc04d99401f7b03383ac741eb823cf39", + "537d2e7d9bbbadaf5ded31b02da3b8e5f4c80684005ea8e5774cd674fbf3980f", + "b7f784b55c2e0b88bad3a8ae7844486eca1f757b6e3abd21d7ea2f677b546fe1", + "cd47120779cb2c36fa75125084dccf59b9b019db15698cd190eb8a622e0fa72e", + "44b01dfc0da17a24f22baeaeaf311bf08576b493ab20d5417996f40ca559027e", + "8ce101f5bbb344f5d0d369c879e84f7a0df2accd7b37b6440636c2077190ad68", + "6d003e734c84fc5c1742a54a37c816bffddec958b7de17a9608c57b9684d6595", + "06175801c35d7cfc2e5bfb4dc491efeeff6830259df4c5ebdc29a02c77dae1dc", + "806b2cc2ff30b4f536d3e58f3d39a0716bdc1a58920759be63c7ff8d6614293e", + "ac1984071ec67e3ea61a39539d5639860d9061475a180b1a34d291143d9e17da", + "4e840ded70d9087c8cb14ec7cf36f794399b7b3b0f58f4cff5d603f795a10026", + "0a29a1423813d456c2992d50ae1f768ea64b8919fcbd9c0f2070ca8f1dc5282c", + "6a7e73a39abcde6a61f801a44080bd008dab25eaecefd013b5638e311557afe9", + "c1fbf60a25017ee08db4d9e3fb1a35de1ed07ce31123a9d16d4f386948beb00a", + "3c71562f88dd131f8f2e87744bdd8b5dafaedc72bb5a1334f08ccc12fd1eac2a", + "c1ce27fb0c124e6a48c57a461f01ae88cd9757f32a88b1cfd72ce1b16335d195", + "271bad071400301f6a5d1b87bc57c621832fbc005ed376c0930e4e2fefb7e8a6", + "19c62aa3091996e4ad8ff87327968d8c9732b0d52fae1d7957cdca066a8dae2a", + "969a6b4fed64cc6bc03cb39e555471cbfd4c688aabd73408e1a75d10a45fe232", + "e6f1c5fecea3fd20f19cd401e32c756a70b2515296c1a84cad1241ccfbb46d9a", + "1f65a38f57c58bf97f17d1b39d1b3a5132a445e7d7a4c1382263bca4d7e2f6da", + "27079c9b4d0da7bb296b76990077a5428a1da3acab23533e33f71044cd30e4ca", + "0e264ed0ed64142ff89d1271b31c8af1089041cfe88dafd7edb8b180d61f3fac", + "473c14d6b5003ae5b90338f1e2d1a96ad74abb303ea36a9b2d0997718d4bea3a", + "e27fee4caab163c8c296cadfaa7de3d51b358c024fb841f9bba3f5fd2242120d", + "453ef4ea13d029f93384f1fb435cca0bb98f6abced0d4714fc382b6f139b1bbd", + "d53fe2271521650fa3f340d71585697a2132402fb67b1dc6bb4af600247698f9", + "3f303d3023c4f9fdaff8a930a76d7eaa9379cdb91c0a139dbcc33809da24499c", + "0c5c136c958df65ca70ea7c8a8fa2dc076bbb24d9d040e92a4c434a3d399e13b", + "9b349234d4048af5f4bfa7b49a8f538b5a871897bafe6cd5d12b892d9a8fe047", + "02c501a51a5b98ffb40c0cc49ed028830a4e51ba7ac64b069abf2504b4036a5f", + "7deecd85f4987312f1694ee04596f1925db14f24b9ef1a49d80d9b53e9a3004d", + "60dcf42761bbad28607ebee19657335c79539ebb49e905edffb69c743d878848", + "73c597d557aefe29d90e91ed173786447ca8a844a48ab9e6b7754011b9dc3d11", + "042d21eda4189c66e217843fdaa05fbeac71ca18dc8bd756c40240020b588f04", + "f274edd3f04bfbfd1ee20ea3ba7f2a77e53295647163c1484b77e490df536fb0", + "119e94cf3b6880f62a17e0a4deb4a532b8af37a9432865abc316c4b348c55970", + "d7e9d77fc4549ab28029673b2b627856036d460afe08cb0a42e399e276e6aad6", + "83a3300c5ed08e9be72f8b57d0f91b093abf86280d28cacf6418d62d35c82966", + "88b36e1a32740562ef9a5014087c4c12d9e3a2b3149fa916f6da51c720e6ac5e", + "13f5f1932d2e163ea88f610cf19184eaca0dbe9516fbb267f33f23382ebcd9b7", + "b337d898307b99a8b4594994de2a083d694c7609346103e5f320d77e92db6839", + "da9567df9b5533f5dcac74396ee921869a670d23b3216ad3360a09c0afd34391", + "420389026e9af30df94163660c52b601b2b83be2f6c1220b5eafd8a557755edd", + "00caf617c53702c65a2c86544976a65775bc28d4bc4b42d6e8b988b9093d23dc", + "d8c7fe69cbd871ef8de6d22a3f85fe1c173abd1b5421d12574d03c9c3af86523", + "3a33a800cfba77e683853342964eb974c5a94f37426c5adf815595dd4f235dcd", + "0e5437bd41ec3a59361e3933d4c3447ac052fed32cdc5e745a233f910527fad4", + "b8f3b26f2e8ed9a04c480fd02ec1c7e51857923ce6b18beb4421b70f87cfefd5", + "33b614be854ae6aa03694b4ba0a947da6a3c639be225cf0820c5f9fae241b92c", + "541f832d5844d6a69854abca2acf0bef5801a9106b586bd477c861647bdff993", + "83c4c43c35313cbc7121dc832a33ed1215f3cd38277a2c556e2698fc5e58c00b", + "5ecc72d784dfb60394e7c94b28afbb799f541a3fe3931b7b7bdb310204fd18af", + "35848fabcd2d6d2bc0ba889b5d1d25f9ec8af8c1753c0ac93f84f15269e7970d", + "47c2c8f5ec53afa14da2116874b2c67fd22608da54e5b7b50759c9778b4a15d1", + "87100106b645b241ee223fbc27689540612057bf9e9a1013acab4e6422c70b52", + "ac0ae1d4877c9399776466d34fa3d5ebe2e36535e303a458033e592641822399", + "9ec16217b63485709169d817f4fac105170440daba9aa3448589813f17b0ea72", + "52d56439e7047eaafee32002d0c16ac396a875fcbaa68503b85f8b456396933f", + "545e3d045e169b6d9514c788c6760efee7bf39689a6b3808204a53b7bbb8ebca", ] `); - expect(obfuscatedVerifiableCredential.proof.privacy.obfuscated).toHaveLength(26); + expect(obfuscatedVerifiableCredential.proof.privacy.obfuscated).toHaveLength(72); expect(digest).toBe(credentialRoot); }); }); diff --git a/src/4.0/__tests__/e2e.test.batch.wip b/src/4.0/__tests__/e2e.test.batch.wip new file mode 100644 index 00000000..7af4b265 --- /dev/null +++ b/src/4.0/__tests__/e2e.test.batch.wip @@ -0,0 +1,56 @@ +README, for now v4-alpha only supports DID issuance +and since it doesnt make sense for batching of DID issuance +since issuance of DID documents is essentially free, +these tests have not been implemented. + +describe("Issuing a batch of documents", () => { + test("fails if there is a malformed document", async () => { + const malformedDatum = [ + ...datum, + // @ts-expect-error missing properties from OpenAttestationCredential: "@context", credentialSubject, issuanceDate, issuer, and 2 more. + { + laurent: "task force, assemble!!", + } as WrappedDocument, + ]; + await expect(wrapDocuments(malformedDatum)).rejects.toThrow("Invalid document"); + }); + test("creates a batch of documents if all are in the right format", async () => { + const wrappedDocuments = await wrapDocuments(datum, { + externalSchemaId: "http://example.com/schema.json", + version: SchemaId.v3, + }); + wrappedDocuments.forEach((doc, i: number) => { + expect(doc.proof.type).toBe("TradeTrustMerkleProofSignature2018"); + expect(doc.key1).toEqual(expect.stringContaining(datum[i].key1)); + expect(doc.proof.targetHash).toBeDefined(); + expect(doc.proof.merkleRoot).toBeDefined(); + expect(doc.proof.proofs.length).toEqual(2); + }); + }); + test("checks that documents are wrapped correctly", async () => { + const wrappedDocuments = await wrapDocuments(datum, { + externalSchemaId: "http://example.com/schema.json", + version: SchemaId.v3, + }); + const verified = wrappedDocuments.reduce((prev, curr) => verifySignature(curr) && prev, true); + expect(verified).toBe(true); + }); + test("checks that documents conforms to the schema", async () => { + const wrappedDocuments = await wrapDocuments(datum, { + externalSchemaId: "http://example.com/schema.json", + version: SchemaId.v3, + }); + const validatedSchema = wrappedDocuments.reduce((prev: boolean, curr: any) => validateSchema(curr) && prev, true); + expect(validatedSchema).toBe(true); + }); + test("does not allow for same merkle root to be generated", async () => { + const wrappedDocuments = await wrapDocuments(datum, { + externalSchemaId: "http://example.com/schema.json", + version: SchemaId.v3, + }); + const newWrappedDocuments = await wrapDocuments(datum, { + version: SchemaId.v3, + }); + expect(wrappedDocuments[0].proof.merkleRoot).not.toBe(newWrappedDocuments[0].proof.merkleRoot); + }); + }); \ No newline at end of file diff --git a/src/4.0/__tests__/e2e.test.ts b/src/4.0/__tests__/e2e.test.ts new file mode 100644 index 00000000..36fd5679 --- /dev/null +++ b/src/4.0/__tests__/e2e.test.ts @@ -0,0 +1,207 @@ +import { + _unsafe_use_it_at_your_own_risk_v4_alpha_wrapDocument as wrapDocument, + obfuscate, + SchemaId, + validateSchema, + verifySignature, +} from "../.."; +import { validateSchema as validate } from "../../shared/validate"; +import { getSchema } from "../../shared/ajv"; +import { SignedWrappedDocument, WrappedDocument } from "../../4.0/types"; +import { + IdentityProofType, + TradeTrustDocument, + RenderMethodType, + CredentialStatusType, +} from "../../__generated__/schema.4.0"; +import { cloneDeep, omit } from "lodash"; +import sample from "../../../test/fixtures/v4/did-raw.json"; +import sampleWrapped from "../../../test/fixtures/v4/did-wrapped.json"; +import sampleWrappedSigned from "../../../test/fixtures/v4/did-wrapped-signed.json"; + +const documentDid = sample as TradeTrustDocument; + +const sampleTradeTrustDoc: TradeTrustDocument = { + "@context": ["https://www.w3.org/2018/credentials/v1", "http://localhost:8080/alpha-context.json"], + id: "http://example.edu/credentials/58473", + type: ["VerifiableCredential", "TradeTrustCredential", "AlumniCredential"], + issuer: { + id: "https://example.edu/issuers/14", + identityProof: { + identityProofType: IdentityProofType.DNSDid, + identifier: "example.tradetrust.io", + }, + name: "hello", + type: "TradeTrustIssuer", + }, + issuanceDate: "2010-01-01T19:23:24Z", + credentialStatus: { + type: "TradeTrustCredentialStatus", + credentialStatusType: CredentialStatusType.None, + }, + credentialSubject: { + id: "did:example:ebfeb1f712ebc6f1c276e12ec21", + alumniOf: "Example University", + }, + renderMethod: { + type: "TradeTrustRenderMethod", + renderMethodType: RenderMethodType.EmbeddedRenderer, + name: "INVOICE", + url: "https://generic-templates.tradetrust.io", + }, +}; + +const datum = [ + { + key1: "test", + ...sampleTradeTrustDoc, + }, + { + key1: "hello", + key2: "item2", + ...sampleTradeTrustDoc, + }, + { + key1: "item1", + key2: "true", + key3: 3.14159, + key4: false, + ...sampleTradeTrustDoc, + }, + { + key1: "item2", + ...sampleTradeTrustDoc, + }, +]; + +describe("4.0 E2E Test Scenarios", () => { + describe("Issuing a single document", () => { + const document = datum[0]; + + test("fails for missing data", async () => { + const missingData = { + ...omit(cloneDeep(document), "issuer"), + }; + await expect( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + wrapDocument(missingData) + ).rejects.toThrow("Invalid document"); + }); + test("creates a wrapped document", async () => { + const wrappedDocument = await wrapDocument({ + ...sampleTradeTrustDoc, + key1: "test", + }); + expect(wrappedDocument.key1).toEqual(expect.stringContaining("test")); + expect(wrappedDocument.proof.type).toBe("TradeTrustMerkleProofSignature2018"); + expect(wrappedDocument.proof.targetHash).toBeDefined(); + expect(wrappedDocument.proof.merkleRoot).toBeDefined(); + expect(wrappedDocument.proof.proofs).toEqual([]); + expect(wrappedDocument.proof.merkleRoot).toBe(wrappedDocument.proof.targetHash); + }); + test("creates a wrapped document with DNS-DID IdentityProof", async () => { + const wrappedDocumentWithDnsDID = await wrapDocument(documentDid); + expect(wrappedDocumentWithDnsDID.proof.type).toBe("TradeTrustMerkleProofSignature2018"); + expect(wrappedDocumentWithDnsDID.proof.targetHash).toBeDefined(); + expect(wrappedDocumentWithDnsDID.proof.merkleRoot).toBeDefined(); + expect(wrappedDocumentWithDnsDID.proof.proofs).toEqual([]); + expect(wrappedDocumentWithDnsDID.proof.merkleRoot).toBe(wrappedDocumentWithDnsDID.proof.targetHash); + expect(wrappedDocumentWithDnsDID.issuer.identityProof.identityProofType).toContain(IdentityProofType.DNSDid); + expect(wrappedDocumentWithDnsDID.issuer.identityProof.identifier).toContain( + documentDid.issuer.identityProof.identifier + ); + }); + test("checks that document is wrapped correctly", async () => { + const wrappedDocument = await wrapDocument(document); + const verified = verifySignature(wrappedDocument); + expect(verified).toBe(true); + }); + test("checks that document conforms to the schema", async () => { + const wrappedDocument = await wrapDocument(document); + expect(validateSchema(wrappedDocument)).toBe(true); + }); + test("does not allow for the same merkle root to be generated", async () => { + // This test takes some time to run, so we set the timeout to 14s + const wrappedDocument = await wrapDocument(document); + const newDocument = await wrapDocument(document); + expect(wrappedDocument.proof.merkleRoot).not.toBe(newDocument.proof.merkleRoot); + }, 14000); + test("obfuscate data correctly", async () => { + const newDocument = await wrapDocument(datum[2]); + const obfuscatedDocument = await obfuscate(newDocument, ["key2"]); + expect(verifySignature(obfuscatedDocument)).toBe(true); + expect(validateSchema(obfuscatedDocument)).toBe(true); + }); + test("obfuscate data transistively", async () => { + const newDocument = await wrapDocument(datum[2]); + const intermediateDocument = obfuscate(newDocument, ["key2"]); + const obfuscatedDocument = obfuscate(intermediateDocument, ["key3"]); + expect(obfuscate(newDocument, ["key2", "key3"])).toEqual(obfuscatedDocument); + }); + }); + + describe("validate", () => { + test("should return true when document is valid and version is 4.0", () => { + const credential = sample; + expect(validate(credential, getSchema(SchemaId.v4)).length).toStrictEqual(0); + }); + test("should return true when document is valid and version is 4.0 and identityProof is DNS-DID", () => { + const credential: WrappedDocument = sampleWrapped as WrappedDocument; + expect(validateSchema(credential)).toStrictEqual(true); + }); + test("should return true when signed document is valid and version is 4.0 and identityProof is DNS-DID", () => { + const credential: SignedWrappedDocument = sampleWrappedSigned as SignedWrappedDocument; + expect(validateSchema(credential)).toStrictEqual(true); + }); + test("should return false when document is invalid due to no DNS-DID identifier", () => { + const credential = cloneDeep(documentDid) as any; + delete credential.issuer; + expect(validateSchema(credential)).toStrictEqual(false); + }); + test("should default to 2.0 when document is valid and version is undefined", () => { + expect( + validateSchema({ + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore run test with version being undefined to only ignore that part + version: undefined, + data: { + issuers: [ + { + name: "issuer.name", + certificateStore: "0x9178F546D3FF57D7A6352bD61B80cCCD46199C2d", + }, + ], + }, + signature: { + merkleRoot: "0xabc", + proof: [], + targetHash: "0xabc", + type: "SHA3MerkleProof", + }, + }) + ).toStrictEqual(true); + }); + }); + + describe("unicode", () => { + test("should not corrupt unicode document", async () => { + const extraData = { + key1: "哦喷啊特特是他题哦你", + key2: "นยำืฟะะำหะฟะรนื", + key3: "おぺなってsたちおn", + key4: "خحثىشففثسفشفهخى", + }; + const document = { + ...sampleTradeTrustDoc, + ...extraData, + }; + const wrapped = await wrapDocument(document); + expect(wrapped.proof.merkleRoot).toBeTruthy(); + expect(wrapped.key1).toBe(extraData.key1); + expect(wrapped.key2).toBe(extraData.key2); + expect(wrapped.key3).toBe(extraData.key3); + expect(wrapped.key4).toBe(extraData.key4); + }); + }); +}); diff --git a/src/4.0/__tests__/e2e.test.wip b/src/4.0/__tests__/e2e.test.wip deleted file mode 100644 index a7d3b699..00000000 --- a/src/4.0/__tests__/e2e.test.wip +++ /dev/null @@ -1,405 +0,0 @@ -import { - __unsafe__use__it__at__your__own__risks__wrapDocument as wrapDocument, - __unsafe__use__it__at__your__own__risks__wrapDocuments as wrapDocuments, - obfuscate, - SchemaId, - validateSchema, - verifySignature, -} from "../.."; -import { SignedWrappedDocument, WrappedDocument } from "../../3.0/types"; -import { - IdentityProofType, - Method, - OpenAttestationDocument, - ProofType, - TemplateType, -} from "../../__generated__/schema.3.0"; -import { cloneDeep, omit } from "lodash"; -import sampleDid from "../schema/sample-credential-did.json"; - -const openAttestationDataWithDid = sampleDid as OpenAttestationDocument; - -const openAttestationData = { - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://www.w3.org/2018/credentials/examples/v1", - "https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json", - "https://schemata.openattestation.com/com/openattestation/1.0/CustomContext.json", - ], - reference: "document identifier", - validFrom: "2010-01-01T19:23:24Z", - issuanceDate: "2010-01-01T19:23:24Z", - name: "document owner name", - type: ["VerifiableCredential", "UniversityDegreeCredential", "OpenAttestationCredential"], - credentialSubject: { - id: "did:example:ebfeb1f712ebc6f1c276e12ec21", - degree: { - type: "BachelorDegree", - name: "Bachelor of Science in Mechanical Engineering", - }, - }, - openAttestationMetadata: { - template: { - name: "any", - type: TemplateType.EmbeddedRenderer, - url: "http://some.example.com", - }, - proof: { - type: ProofType.OpenAttestationProofMethod, - value: "0x9178F546D3FF57D7A6352bD61B80cCCD46199C2d", - method: Method.TokenRegistry, - }, - identityProof: { - type: IdentityProofType.DNSTxt, - identifier: "tradetrust.io", - }, - }, - issuer: { - id: "http://some.example.com", - type: "OpenAttestationIssuer", - name: "DEMO STORE", - }, -}; - -const datum = [ - { - key1: "test", - ...openAttestationData, - }, - { - key1: "hello", - key2: "item2", - ...openAttestationData, - }, - { - key1: "item1", - key2: "true", - key3: 3.14159, - key4: false, - ...openAttestationData, - }, - { - key1: "item2", - ...openAttestationData, - }, -]; - -describe("3.0 E2E Test Scenarios", () => { - describe("Issuing a single document", () => { - const document = datum[0]; - - test("fails for missing data", async () => { - const missingData = { - ...omit(cloneDeep(document), "issuer"), - }; - await expect( - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - wrapDocument(missingData, { - externalSchemaId: "http://example.com/schema.json", - version: SchemaId.v3, - }) - ).rejects.toThrow("Invalid document"); - }); - test("creates a wrapped document", async () => { - const wrappedDocument = await wrapDocument( - { - ...openAttestationData, - key1: "test", - }, - { - externalSchemaId: "http://example.com/schema.json", - version: SchemaId.v3, - } - ); - expect(wrappedDocument.schema).toBe("http://example.com/schema.json"); - expect(wrappedDocument.key1).toEqual(expect.stringContaining("test")); - expect(wrappedDocument.proof.type).toBe("OpenAttestationMerkleProofSignature2018"); - expect(wrappedDocument.proof.targetHash).toBeDefined(); - expect(wrappedDocument.proof.merkleRoot).toBeDefined(); - expect(wrappedDocument.proof.proofs).toEqual([]); - expect(wrappedDocument.proof.merkleRoot).toBe(wrappedDocument.proof.targetHash); - }); - test("creates a wrapped document with DNS-DID IdentityProof", async () => { - const wrappedDocumentWithDnsDID = await wrapDocument(openAttestationDataWithDid, { - externalSchemaId: "http://example.com/schema.json", - version: SchemaId.v3, - }); - expect(wrappedDocumentWithDnsDID.schema).toBe("http://example.com/schema.json"); - expect(wrappedDocumentWithDnsDID.proof.type).toBe("OpenAttestationMerkleProofSignature2018"); - expect(wrappedDocumentWithDnsDID.proof.targetHash).toBeDefined(); - expect(wrappedDocumentWithDnsDID.proof.merkleRoot).toBeDefined(); - expect(wrappedDocumentWithDnsDID.proof.proofs).toEqual([]); - expect(wrappedDocumentWithDnsDID.proof.merkleRoot).toBe(wrappedDocumentWithDnsDID.proof.targetHash); - expect(wrappedDocumentWithDnsDID.openAttestationMetadata.identityProof?.type).toContain(IdentityProofType.DNSDid); - expect(wrappedDocumentWithDnsDID.openAttestationMetadata.identityProof?.identifier).toContain( - openAttestationDataWithDid.openAttestationMetadata.identityProof?.identifier - ); - }); - test("checks that document is wrapped correctly", async () => { - const wrappedDocument = await wrapDocument(document, { - externalSchemaId: "http://example.com/schema.json", - version: SchemaId.v3, - }); - const verified = verifySignature(wrappedDocument); - expect(verified).toBe(true); - }); - test("checks that document conforms to the schema", async () => { - const wrappedDocument = await wrapDocument(document, { - externalSchemaId: "http://example.com/schema.json", - version: SchemaId.v3, - }); - expect(validateSchema(wrappedDocument)).toBe(true); - }); - test("does not allow for the same merkle root to be generated", async () => { - // This test takes some time to run, so we set the timeout to 14s - const wrappedDocument = await wrapDocument(document, { version: SchemaId.v3 }); - const newDocument = await wrapDocument(document, { version: SchemaId.v3 }); - expect(wrappedDocument.proof.merkleRoot).not.toBe(newDocument.proof.merkleRoot); - }, 14000); - test("obfuscate data correctly", async () => { - const newDocument = await wrapDocument(datum[2], { version: SchemaId.v3 }); - const obfuscatedDocument = await obfuscate(newDocument, ["key2"]); - expect(verifySignature(obfuscatedDocument)).toBe(true); - expect(validateSchema(obfuscatedDocument)).toBe(true); - }); - test("obfuscate data transistively", async () => { - const newDocument = await wrapDocument(datum[2], { version: SchemaId.v3 }); - const intermediateDocument = obfuscate(newDocument, ["key2"]); - const obfuscatedDocument = obfuscate(intermediateDocument, ["key3"]); - expect(obfuscate(newDocument, ["key2", "key3"])).toEqual(obfuscatedDocument); - }); - }); - - describe("Issuing a batch of documents", () => { - test("fails if there is a malformed document", async () => { - const malformedDatum = [ - ...datum, - // @ts-expect-error missing properties from OpenAttestationCredential: "@context", credentialSubject, issuanceDate, issuer, and 2 more. - { - laurent: "task force, assemble!!", - } as WrappedDocument, - ]; - await expect(wrapDocuments(malformedDatum)).rejects.toThrow("Invalid document"); - }); - test("creates a batch of documents if all are in the right format", async () => { - const wrappedDocuments = await wrapDocuments(datum, { - externalSchemaId: "http://example.com/schema.json", - version: SchemaId.v3, - }); - wrappedDocuments.forEach((doc, i: number) => { - expect(doc.schema).toBe("http://example.com/schema.json"); - expect(doc.proof.type).toBe("OpenAttestationMerkleProofSignature2018"); - expect(doc.key1).toEqual(expect.stringContaining(datum[i].key1)); - expect(doc.proof.targetHash).toBeDefined(); - expect(doc.proof.merkleRoot).toBeDefined(); - expect(doc.proof.proofs.length).toEqual(2); - }); - }); - test("checks that documents are wrapped correctly", async () => { - const wrappedDocuments = await wrapDocuments(datum, { - externalSchemaId: "http://example.com/schema.json", - version: SchemaId.v3, - }); - const verified = wrappedDocuments.reduce((prev, curr) => verifySignature(curr) && prev, true); - expect(verified).toBe(true); - }); - test("checks that documents conforms to the schema", async () => { - const wrappedDocuments = await wrapDocuments(datum, { - externalSchemaId: "http://example.com/schema.json", - version: SchemaId.v3, - }); - const validatedSchema = wrappedDocuments.reduce((prev: boolean, curr: any) => validateSchema(curr) && prev, true); - expect(validatedSchema).toBe(true); - }); - test("does not allow for same merkle root to be generated", async () => { - const wrappedDocuments = await wrapDocuments(datum, { - externalSchemaId: "http://example.com/schema.json", - version: SchemaId.v3, - }); - const newWrappedDocuments = await wrapDocuments(datum, { - version: SchemaId.v3, - }); - expect(wrappedDocuments[0].proof.merkleRoot).not.toBe(newWrappedDocuments[0].proof.merkleRoot); - }); - }); - - describe("validate", () => { - test("should return true when document is valid and version is 3.0", () => { - const credential: WrappedDocument = { - version: SchemaId.v3, - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json", - "https://schemata.openattestation.com/com/openattestation/1.0/CustomContext.json", - "https://schemata.openattestation.com/com/openattestation/1.0/DrivingLicenceCredential.json", - ], - reference: "SERIAL_NUMBER_123", - name: "Republic of Singapore Driving Licence", - issuanceDate: "2010-01-01T19:23:24Z", - validFrom: "2010-01-01T19:23:24Z", - issuer: { - id: "https://example.com", - name: "DEMO STORE", - }, - type: ["VerifiableCredential", "DrivingLicenceCredential"], - credentialSubject: { - id: "did:example:SERIAL_NUMBER_123", - class: [ - { - type: "3", - effectiveDate: "2010-01-01T19:23:24Z", - }, - { - type: "3A", - effectiveDate: "2010-01-01T19:23:24Z", - }, - ], - }, - openAttestationMetadata: { - template: { - name: "CUSTOM_TEMPLATE", - type: TemplateType.EmbeddedRenderer, - url: "https://localhost:3000/renderer", - }, - proof: { - type: ProofType.OpenAttestationProofMethod, - method: Method.DocumentStore, - value: "0x9178F546D3FF57D7A6352bD61B80cCCD46199C2d", - }, - identityProof: { - type: IdentityProofType.DNSTxt, - identifier: "tradetrust.io", - }, - }, - attachments: [ - { - fileName: "sample.pdf", - mimeType: "application/pdf", - data: "BASE64_ENCODED_FILE", - }, - ], - proof: { - proofPurpose: "assertionMethod", - salts: "", - merkleRoot: "", - privacy: { - obfuscated: [], - }, - proofs: [], - targetHash: "", - type: "OpenAttestationMerkleProofSignature2018", - }, - }; - expect(validateSchema(credential)).toStrictEqual(true); - }); - test("should return true when document is valid and version is 3.0 and identityProof is DNS-DID", () => { - const credential: WrappedDocument = { - ...openAttestationDataWithDid, - version: SchemaId.v3, - proof: { - proofPurpose: "assertionMethod", - salts: "", - merkleRoot: "", - privacy: { - obfuscated: [], - }, - proofs: [], - targetHash: "", - type: "OpenAttestationMerkleProofSignature2018", - }, - }; - expect(validateSchema(credential)).toStrictEqual(true); - }); - test("should return true when signed document is valid and version is 3.0 and identityProof is DNS-DID", () => { - const credential: SignedWrappedDocument = { - ...openAttestationDataWithDid, - version: SchemaId.v3, - proof: { - proofPurpose: "assertionMethod", - salts: "", - merkleRoot: "", - privacy: { - obfuscated: [], - }, - proofs: [], - targetHash: "", - signature: "", - key: "", - type: "OpenAttestationMerkleProofSignature2018", - }, - }; - expect(validateSchema(credential)).toStrictEqual(true); - }); - test("should return false when document is invalid due to no DNS-DID identifier", () => { - const credential: any = { - ...openAttestationDataWithDid, - openAttestationMetadata: { - ...openAttestationDataWithDid.openAttestationMetadata, - identityProof: { - identifier: "tradetrust.io", - }, - }, - version: SchemaId.v3, - proof: { - proofPurpose: "assertionMethod", - salts: "", - merkleRoot: "", - privacy: { - obfuscated: [], - }, - proofs: [], - targetHash: "", - signature: "", - key: "", - type: "OpenAttestationMerkleProofSignature2018", - }, - }; - expect(validateSchema(credential)).toStrictEqual(false); - }); - test("should default to 2.0 when document is valid and version is undefined", () => { - expect( - validateSchema({ - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore run test with version being undefined to only ignore that part - version: undefined, - data: { - issuers: [ - { - name: "issuer.name", - certificateStore: "0x9178F546D3FF57D7A6352bD61B80cCCD46199C2d", - }, - ], - }, - signature: { - merkleRoot: "0xabc", - proof: [], - targetHash: "0xabc", - type: "SHA3MerkleProof", - }, - }) - ).toStrictEqual(true); - }); - }); - - describe("unicode", () => { - test("should not corrupt unicode document", async () => { - const extraData = { - key1: "哦喷啊特特是他题哦你", - key2: "นยำืฟะะำหะฟะรนื", - key3: "おぺなってsたちおn", - key4: "خحثىشففثسفشفهخى", - }; - const document = { - ...openAttestationData, - ...extraData, - }; - const wrapped = await wrapDocument(document); - expect(wrapped.proof.merkleRoot).toBeTruthy(); - expect(wrapped.key1).toBe(extraData.key1); - expect(wrapped.key2).toBe(extraData.key2); - expect(wrapped.key3).toBe(extraData.key3); - expect(wrapped.key4).toBe(extraData.key4); - }); - }); -}); diff --git a/src/4.0/__tests__/obfuscate.test.wip b/src/4.0/__tests__/obfuscate.test.ts similarity index 70% rename from src/4.0/__tests__/obfuscate.test.wip rename to src/4.0/__tests__/obfuscate.test.ts index 91adbbcf..99c57d3c 100644 --- a/src/4.0/__tests__/obfuscate.test.wip +++ b/src/4.0/__tests__/obfuscate.test.ts @@ -1,48 +1,54 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ -import { obfuscateVerifiableCredential } from "../obfuscate"; -import { __unsafe__use__it__at__your__own__risks__wrapDocument as wrapDocument, verifySignature } from "../.."; -import { Salt, WrappedDocument } from "../../3.0/types"; import { get } from "lodash"; +import { + _unsafe_use_it_at_your_own_risk_v4_alpha_wrapDocument as wrapDocument, + verifySignature, + obfuscate, +} from "../.."; import { decodeSalt } from "../salt"; -import { SchemaId } from "../../shared/@types/document"; -import * as v3 from "../../__generated__/schema.3.0"; -import { Method, OpenAttestationDocument, ProofType } from "../../__generated__/schema.3.0"; import { toBuffer, isObfuscated, getObfuscatedData } from "../../shared/utils"; -import ObfuscatedWrapped from "../../../test/fixtures/v3/obfuscated-wrapped.json"; -import NotObfuscatedWrapped from "../../../test/fixtures/v3/not-obfuscated-wrapped.json"; +import { Salt, WrappedDocument, TradeTrustDocument, CredentialStatusType, IdentityProofType } from "../../4.0/types"; -jest.mock("../../3.0/validate"); // Skipping schema verification while wrapping +import ObfuscatedWrapped from "../../../test/fixtures/v4/did-wrapped-obfuscated.json"; +import NotObfuscatedWrapped from "../../../test/fixtures/v4/did-wrapped.json"; -const openAttestationData: OpenAttestationDocument = { +jest.mock("../../4.0/validate"); // Skipping schema verification while wrapping + +const data: TradeTrustDocument = { "@context": [ "https://www.w3.org/2018/credentials/v1", "https://www.w3.org/2018/credentials/examples/v1", - "https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json", + "http://localhost:8080/alpha-context.json", "https://schemata.openattestation.com/com/openattestation/1.0/CustomContext.json", ], issuanceDate: "2010-01-01T19:23:24Z", name: "document owner name", - type: ["VerifiableCredential", "AlumniCredential"], + type: ["VerifiableCredential", "TradeTrustCredential"], credentialSubject: { - id: "did:example:ebfeb1f712ebc6f1c276e12ec21", + name: "TradeTrust Invoice", alumniOf: "Example University", + id: "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + date: "2018-02-21", + customerId: "564", + terms: "Due Upon Receipt", array: ["one", "two", "three", "four"], arrayOfObject: [ { foo: "bar", doo: "foo" }, { foo: "baz", doo: "faz" }, ], }, - issuer: "https://example.edu/issuers/14", - openAttestationMetadata: { - proof: { - type: ProofType.OpenAttestationProofMethod, - value: "0x9178F546D3FF57D7A6352bD61B80cCCD46199C2d", - method: Method.TokenRegistry, - }, + credentialStatus: { + type: "TradeTrustCredentialStatus", + credentialStatusType: CredentialStatusType.None, + }, + issuer: { + id: "https://example.edu/issuers/14", identityProof: { - identifier: "some.example", - type: v3.IdentityProofType.DNSTxt, + identityProofType: IdentityProofType.DNSDid, + identifier: "example.tradetrust.io", }, + name: "hello", + type: "TradeTrustIssuer", }, attachments: [ { @@ -62,7 +68,7 @@ const testData = { key1: "value1", key2: "value2", keyObject: { foo: "bar", bar: "dod" }, - ...openAttestationData, + ...data, }; const findSaltByPath = (salts: string, path: string): Salt | undefined => { @@ -95,8 +101,8 @@ describe("privacy", () => { describe("obfuscateDocument", () => { test("removes one field from the root object", async () => { const field = "key1"; - const newDocument = await wrapDocument(testData, { version: SchemaId.v3 }); - const obfuscatedDocument = await obfuscateVerifiableCredential(newDocument, field); + const newDocument = await wrapDocument(testData); + const obfuscatedDocument = await obfuscate(newDocument, field); const verified = verifySignature(obfuscatedDocument); expect(verified).toBe(true); @@ -106,8 +112,8 @@ describe("privacy", () => { test("removes one object from the root object", async () => { const field = "keyObject"; const expectedFieldsToBeRemoved = ["keyObject.foo", "keyObject.bar"]; - const newDocument = await wrapDocument(testData, { version: SchemaId.v3 }); - const obfuscatedDocument = await obfuscateVerifiableCredential(newDocument, field); + const newDocument = await wrapDocument(testData); + const obfuscatedDocument = await obfuscate(newDocument, field); const verified = verifySignature(obfuscatedDocument); expect(verified).toBe(true); @@ -119,8 +125,8 @@ describe("privacy", () => { }); test("removes one key of an object from an array", async () => { const field = "credentialSubject.arrayOfObject[0].foo"; - const newDocument = await wrapDocument(testData, { version: SchemaId.v3 }); - const obfuscatedDocument = await obfuscateVerifiableCredential(newDocument, field); + const newDocument = await wrapDocument(testData); + const obfuscatedDocument = await obfuscate(newDocument, field); const verified = verifySignature(obfuscatedDocument); expect(verified).toBe(true); @@ -143,8 +149,8 @@ describe("privacy", () => { "credentialSubject.arrayOfObject[0].foo", "credentialSubject.arrayOfObject[0].doo", ]; - const newDocument = await wrapDocument(testData, { version: SchemaId.v3 }); - const obfuscatedDocument = await obfuscateVerifiableCredential(newDocument, field); + const newDocument = await wrapDocument(testData); + const obfuscatedDocument = await obfuscate(newDocument, field); const verified = verifySignature(obfuscatedDocument); expect(verified).toBe(true); @@ -176,8 +182,8 @@ describe("privacy", () => { "attachments[1].fileName", "attachments[1].data", ]; - const newDocument = await wrapDocument(testData, { version: SchemaId.v3 }); - const obfuscatedDocument = await obfuscateVerifiableCredential(newDocument, field); + const newDocument = await wrapDocument(testData); + const obfuscatedDocument = await obfuscate(newDocument, field); const verified = verifySignature(obfuscatedDocument); expect(verified).toBe(true); @@ -197,8 +203,8 @@ describe("privacy", () => { test("removes multiple fields", async () => { const fields = ["key1", "key2"]; - const newDocument = await wrapDocument(testData, { version: SchemaId.v3 }); - const obfuscatedDocument = await obfuscateVerifiableCredential(newDocument, fields); + const newDocument = await wrapDocument(testData); + const obfuscatedDocument = await obfuscate(newDocument, fields); const verified = verifySignature(obfuscatedDocument); expect(verified).toBe(true); @@ -210,8 +216,8 @@ describe("privacy", () => { test("removes values from nested object", async () => { const field = "credentialSubject.alumniOf"; - const newDocument = await wrapDocument(openAttestationData, { version: SchemaId.v3 }); - const obfuscatedDocument = await obfuscateVerifiableCredential(newDocument, field); + const newDocument = await wrapDocument(data); + const obfuscatedDocument = await obfuscate(newDocument, field); const verified = verifySignature(obfuscatedDocument); expect(verified).toBe(true); @@ -221,8 +227,8 @@ describe("privacy", () => { test("removes values from arrays", async () => { const fields = ["credentialSubject.array[2]", "credentialSubject.array[3]"]; - const newDocument = await wrapDocument(openAttestationData, { version: SchemaId.v3 }); - const obfuscatedDocument = await obfuscateVerifiableCredential(newDocument, fields); + const newDocument = await wrapDocument(data); + const obfuscatedDocument = await obfuscate(newDocument, fields); const verified = verifySignature(obfuscatedDocument); expect(verified).toBe(true); @@ -247,10 +253,10 @@ describe("privacy", () => { }); test("is transitive", async () => { - const newDocument = await wrapDocument(testData, { version: SchemaId.v3 }); - const intermediateDoc = obfuscateVerifiableCredential(newDocument, "key1"); - const finalDoc1 = obfuscateVerifiableCredential(intermediateDoc, "key2"); - const finalDoc2 = obfuscateVerifiableCredential(newDocument, ["key1", "key2"]); + const newDocument = await wrapDocument(testData); + const intermediateDoc = obfuscate(newDocument, "key1"); + const finalDoc1 = obfuscate(intermediateDoc, "key2"); + const finalDoc2 = obfuscate(newDocument, ["key1", "key2"]); expect(finalDoc1).toEqual(finalDoc2); expect(intermediateDoc).not.toHaveProperty("key1"); @@ -262,30 +268,30 @@ describe("privacy", () => { }); describe("getObfuscated", () => { - const documentObfuscatedV3 = ObfuscatedWrapped as WrappedDocument; - const documentNotObfuscatedV3 = NotObfuscatedWrapped as WrappedDocument; + const documentObfuscatedV4 = ObfuscatedWrapped as WrappedDocument; + const documentNotObfuscatedV4 = NotObfuscatedWrapped as WrappedDocument; - test("should return empty array when there is no obfuscated data in document v3", () => { - expect(getObfuscatedData(documentNotObfuscatedV3)).toHaveLength(0); + test("should return empty array when there is no obfuscated data in document v4", () => { + expect(getObfuscatedData(documentNotObfuscatedV4)).toHaveLength(0); }); - test("should return array of hashes when there is obfuscated data in document v3", () => { - const obfuscatedData = getObfuscatedData(documentObfuscatedV3); + test("should return array of hashes when there is obfuscated data in document v4", () => { + const obfuscatedData = getObfuscatedData(documentObfuscatedV4); expect(obfuscatedData.length).toBe(1); - expect(obfuscatedData?.[0]).toBe("e411260249d681968bdde76246350f7ca1c9bf1fae59b6bbf147692961b12e26"); + expect(obfuscatedData?.[0]).toBe("9e1e02a3e73cde8796839caac22c98379ed04a815ee9b80a9ee46e0ef251aa22"); }); }); describe("isObfuscated", () => { - const documentObfuscatedV3 = ObfuscatedWrapped as WrappedDocument; - const documentNotObfuscatedV3 = NotObfuscatedWrapped as WrappedDocument; + const documentObfuscatedV4 = ObfuscatedWrapped as WrappedDocument; + const documentNotObfuscatedV4 = NotObfuscatedWrapped as WrappedDocument; - test("should return false when there is no obfuscated data in document v3", () => { - expect(isObfuscated(documentNotObfuscatedV3)).toBe(false); + test("should return false when there is no obfuscated data in document v4", () => { + expect(isObfuscated(documentNotObfuscatedV4)).toBe(false); }); - test("should return true where there is obfuscated data in document v3", () => { - expect(isObfuscated(documentObfuscatedV3)).toBe(true); + test("should return true where there is obfuscated data in document v4", () => { + expect(isObfuscated(documentObfuscatedV4)).toBe(true); }); }); }); diff --git a/src/4.0/__tests__/salt.test.wip b/src/4.0/__tests__/salt.test.ts similarity index 89% rename from src/4.0/__tests__/salt.test.wip rename to src/4.0/__tests__/salt.test.ts index cf2e9a98..6fe21aee 100644 --- a/src/4.0/__tests__/salt.test.wip +++ b/src/4.0/__tests__/salt.test.ts @@ -1,38 +1,44 @@ import { cloneDeep } from "lodash"; -import { Method, ProofType, OpenAttestationDocument, TemplateType } from "../../__generated__/schema.3.0"; +import { + IdentityProofType, + TradeTrustDocument, + RenderMethodType, + CredentialStatusType, +} from "../../__generated__/schema.4.0"; import { salt, decodeSalt } from "../salt"; -import * as v3 from "../../__generated__/schema.3.0"; import { Base64 } from "js-base64"; -const sampleDoc: OpenAttestationDocument = { +const sampleDoc: TradeTrustDocument = { "@context": ["https://www.w3.org/2018/credentials/v1", "https://www.w3.org/2018/credentials/examples/v1"], id: "http://example.edu/credentials/58473", type: ["VerifiableCredential", "AlumniCredential"], - issuer: "https://example.edu/issuers/14", + issuer: { + id: "https://example.edu/issuers/14", + identityProof: { + identityProofType: IdentityProofType.DNSDid, + identifier: "example.tradetrust.io", + }, + name: "hello", + type: "TradeTrustIssuer", + }, issuanceDate: "2010-01-01T19:23:24Z", + credentialStatus: { + type: "TradeTrustCredentialStatus", + credentialStatusType: CredentialStatusType.None, + }, credentialSubject: { id: "did:example:ebfeb1f712ebc6f1c276e12ec21", alumniOf: "Example University", }, - openAttestationMetadata: { - template: { - name: "EXAMPLE_RENDERER", - type: TemplateType.EmbeddedRenderer, - url: "https://renderer.openattestation.com/", - }, - proof: { - type: ProofType.OpenAttestationProofMethod, - method: Method.DocumentStore, - value: "0xED2E50434Ac3623bAD763a35213DAD79b43208E4", - }, - identityProof: { - identifier: "some.example", - type: v3.IdentityProofType.DNSTxt, - }, - }, + renderMethod: { + type: "TradeTrustRenderMethod", + renderMethodType: RenderMethodType.EmbeddedRenderer, + name: "INVOICE", + url: "https://generic-templates.tradetrust.io", + } }; -describe("digest v3.0", () => { +describe("digest v4.0", () => { describe("salt", () => { test("handles shadowed keys correctly (type 1: root, dot notation)", () => { const document = { diff --git a/src/4.0/__tests__/sign.test.wip b/src/4.0/__tests__/sign.test.ts similarity index 75% rename from src/4.0/__tests__/sign.test.wip rename to src/4.0/__tests__/sign.test.ts index aafde700..1babdf4c 100644 --- a/src/4.0/__tests__/sign.test.wip +++ b/src/4.0/__tests__/sign.test.ts @@ -1,20 +1,21 @@ -import { signDocument, v3 } from "../../index"; +import { signDocument, v4 } from "../../index"; import { SUPPORTED_SIGNING_ALGORITHM } from "../../shared/@types/sign"; -import rawWrappedDocumentV3 from "../../../test/fixtures/v3/did-wrapped.json"; +import sample from "../../../test/fixtures/v4/did-wrapped2.json"; import { Wallet } from "ethers"; -const wrappedDocumentV3 = rawWrappedDocumentV3 as v3.WrappedDocument; +const wrappedDocumentV4 = sample as v4.WrappedDocument; -describe("v3", () => { +describe("v4", () => { it("should sign a document", async () => { - const { proof } = await signDocument(wrappedDocumentV3, SUPPORTED_SIGNING_ALGORITHM.Secp256k1VerificationKey2018, { + const { proof } = await signDocument(wrappedDocumentV4, SUPPORTED_SIGNING_ALGORITHM.Secp256k1VerificationKey2018, { public: "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller", private: "0x497c85ed89f1874ba37532d1e33519aba15bd533cdcb90774cc497bfe3cde655", }); + expect(Object.keys(proof).length).toBe(9); expect(proof.key).toBe("did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller"); expect(proof.signature).toBe( - "0x3ce62bb2d6a68f15fabe653dbb71edfaf1e2a00c71c98f71801f3a7438ae477a4cf3dbefaff9359b2d2b97473909ba4b19e9d2ac0c735cec926da0d1025af07b1c" + "0x0830cbd0a56ffea5d94f56ce3aabb9ec4de9996bad1d35f63ca4795d09fb46807d532bc730578611750092a92621f0f0a89f78dcf2f33bc06361a80b417395641c" ); }); it("should sign a document with a wallet", async () => { @@ -22,20 +23,20 @@ describe("v3", () => { "tourist quality multiply denial diary height funny calm disease buddy speed gold" ); const { proof } = await signDocument( - wrappedDocumentV3, + wrappedDocumentV4, SUPPORTED_SIGNING_ALGORITHM.Secp256k1VerificationKey2018, wallet ); expect(Object.keys(proof).length).toBe(9); expect(proof.key).toBe("did:ethr:0x906FB815De8976b1e38D9a4C1014a3acE16Ce53C#controller"); expect(proof.signature).toBe( - "0xdfb8f7b40933d90004d0a94261f0af573702c0040f727ed813273284ef7329cd4420095b28f7d768866556be9d95fd8b89e0ee2bd1f9c589464d3b16d1247d651c" + "0x3f1b55c7a822ea7bdbfb739eb818fa91e4086dc60b616dec32fd0d32b584beed504531d93e36c808941ed04c7a2c3f252795671fd8201b27fea51c2f8ea9c2f91b" ); }); it("should throw error if a document was previously signed", async () => { const signedDocument = await signDocument( - wrappedDocumentV3, + wrappedDocumentV4, SUPPORTED_SIGNING_ALGORITHM.Secp256k1VerificationKey2018, { public: "did:ethr:0xb6De3744E1259e1aB692f5a277f053B79429c5a2#controller", @@ -54,7 +55,7 @@ describe("v3", () => { it("should throw error if a key or signer is invalid", async () => { await expect( // @ts-expect-error invalid call - signDocument(wrappedDocumentV3, SUPPORTED_SIGNING_ALGORITHM.Secp256k1VerificationKey2018, {}) + signDocument(wrappedDocumentV4, SUPPORTED_SIGNING_ALGORITHM.Secp256k1VerificationKey2018, {}) ).rejects.toThrowErrorMatchingInlineSnapshot(`"Either a keypair or ethers.js Signer must be provided"`); }); }); diff --git a/src/4.0/__tests__/verify.test.wip b/src/4.0/__tests__/verify.test.batch.wip similarity index 57% rename from src/4.0/__tests__/verify.test.wip rename to src/4.0/__tests__/verify.test.batch.wip index 3e56dfe7..5e5fc136 100644 --- a/src/4.0/__tests__/verify.test.wip +++ b/src/4.0/__tests__/verify.test.batch.wip @@ -1,90 +1,12 @@ -import { verify } from "../verify"; -import sample from "../schema/sample-verifiable-credential.json"; -import batched from "../schema/batched-verifiable-credential-1.json"; -import { WrappedDocument } from "../../3.0/types"; - -// sample1: unwrapped (aka credential), sample2: only 1 doc is wrapped (aka verifiable credential/VC) -const sampleVerifiableCredential = sample as WrappedDocument; +README, for now v4-alpha only supports DID issuance +and since it doesnt make sense for batching of DID issuance +since issuance of DID documents is essentially free, +these tests have not been implemented. // sample3 & sample4: more than 1 doc wrapped (aka batched VC, where 'proofs' has values) -const sampleBatchedVC = batched as WrappedDocument; - -describe("signature", () => { - describe("verify", () => { - // Documents without proofs mean these documents are wrapped individually (i.e. targetHash == merkleRoot) - describe("documents without proofs", () => { - test("returns true for documents with unaltered data", () => { - expect(verify(sampleVerifiableCredential)).toBe(true); - }); - test("returns false for documents with altered value", () => { - const verifiableCredential = { - ...sampleVerifiableCredential, - issuer: { - id: "https://example.com", - name: "Fake Name", // Value was originally "DEMO STORE" - }, - }; - - expect(verify(verifiableCredential)).toBe(false); - }); - test("returns false for documents with altered key", () => { - const verifiableCredential = { - ...sampleVerifiableCredential, - issuer: { - id: "https://example.com", - fakename: "DEMO STORE", // Key was originally "name" - }, - }; - - expect(verify(verifiableCredential as any)).toBe(false); - }); - test("returns false for documents with additional data not part of salt", () => { - // In this test case, we added the Class 2A licence which is not found in the original salts - const verifiableCredential = { - ...sampleVerifiableCredential, - credentialSubject: { - ...sampleVerifiableCredential.credentialSubject, - class: [ - { - type: "3", - effectiveDate: "2010-01-01T19:23:24Z", - }, - { - type: "3A", - effectiveDate: "2010-01-01T19:23:24Z", - }, - { - // This was added in after it has been wrapped - type: "2A", - effectiveDate: "2020-06-05T00:00:00Z", - }, - ], - }, - }; - - expect(verify(verifiableCredential)).toBe(false); - }); - test("returns false for documents with missing data", () => { - // In this test case, we removed the Class 3A licence which is in the original salts - const verifiableCredential = { - ...sampleVerifiableCredential, - credentialSubject: { - ...sampleVerifiableCredential.credentialSubject, - class: [ - { - type: "3", - effectiveDate: "2010-01-01T19:23:24Z", - }, - // Class 3A was removed - ], - }, - }; - - expect(verify(verifiableCredential)).toBe(false); - }); - }); +// const sampleBatchedVC = batched as WrappedDocument; - // Documents with proofs mean these documents are wrapped as a batch (i.e. proofs exist, and targetHash !== merkleRoot) +// Documents with proofs mean these documents are wrapped as a batch (i.e. proofs exist, and targetHash !== merkleRoot) describe("documents with proofs", () => { test("returns true for documents with unaltered data", () => { const verifiableCredential = sampleBatchedVC; @@ -201,6 +123,4 @@ describe("signature", () => { expect(verify(verifiableCredential)).toBe(false); }); - }); - }); -}); + }); \ No newline at end of file diff --git a/src/4.0/__tests__/verify.test.ts b/src/4.0/__tests__/verify.test.ts new file mode 100644 index 00000000..9f4c711a --- /dev/null +++ b/src/4.0/__tests__/verify.test.ts @@ -0,0 +1,72 @@ +import { verify } from "../verify"; +import sample from "../../../test/fixtures/v4/did-wrapped.json"; +import { WrappedDocument } from "../../4.0/types"; + +const sampleVerifiableCredential = sample as WrappedDocument; + +describe("signature", () => { + describe("verify", () => { + // Documents without proofs mean these documents are wrapped individually (i.e. targetHash == merkleRoot) + describe("documents without proofs", () => { + test("returns true for documents with unaltered data", () => { + expect(verify(sampleVerifiableCredential)).toBe(true); + }); + test("returns false for documents with altered value", () => { + const verifiableCredential = { + ...sampleVerifiableCredential, + credentialSubject: { + id: "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + name: "newName", + }, + }; + + expect(verify(verifiableCredential)).toBe(false); + }); + test("returns false for documents with altered key", () => { + const verifiableCredential = { + ...sampleVerifiableCredential, + credentialStatus: { + type: "SomeNewCredentialStatus", + credentialStatusType: "NONE", + }, + }; + + expect(verify(verifiableCredential as any)).toBe(false); + }); + test("returns false for documents with additional data not part of salt", () => { + // In this test case, we added the Class 2A licence which is not found in the original salts + const verifiableCredential = { + ...sampleVerifiableCredential, + credentialSubject: { + ...sampleVerifiableCredential.credentialSubject, + billableItems: [ + { description: "Service Fee", quantity: "1", unitPrice: "200", amount: "200" }, + { description: "Labor: 5 hours at $75/hr", quantity: "5", unitPrice: "75", amount: "375" }, + { description: "New client discount", quantity: "1", unitPrice: "50", amount: "50" }, + // here we are adding billableItems data that + // did not belong to the original. + { description: "Another new client discount", quantity: "1", unitPrice: "60", amount: "50" }, + ], + }, + }; + + expect(verify(verifiableCredential)).toBe(false); + }); + test("returns false for documents with missing data", () => { + // In this test case, we removed the Labor item which is in the original salts + const verifiableCredential = { + ...sampleVerifiableCredential, + credentialSubject: { + ...sampleVerifiableCredential.credentialSubject, + billableItems: [ + { description: "Service Fee", quantity: "1", unitPrice: "200", amount: "200" }, + { description: "New client discount", quantity: "1", unitPrice: "50", amount: "50" }, + ], + }, + }; + + expect(verify(verifiableCredential)).toBe(false); + }); + }); + }); +}); diff --git a/src/4.0/digest.ts b/src/4.0/digest.ts index 966e959d..1f944056 100644 --- a/src/4.0/digest.ts +++ b/src/4.0/digest.ts @@ -1,9 +1,13 @@ import { get, sortBy } from "lodash"; import { keccak256 } from "js-sha3"; import { Salt } from "./types"; -import { OpenAttestationDocument } from "../__generated__/schema.4.0"; +import { TradeTrustDocument } from "../__generated__/schema.4.0"; -export const digestCredential = (document: OpenAttestationDocument, salts: Salt[], obfuscatedData: string[]) => { +export const digestCredential = ( + document: Omit, + salts: Salt[], + obfuscatedData: string[] +) => { // Prepare array of hashes from visible data const hashedUnhashedDataArray = salts .filter((salt) => get(document, salt.path)) diff --git a/src/4.0/obfuscate.ts b/src/4.0/obfuscate.ts index 423c352a..e56bc27a 100644 --- a/src/4.0/obfuscate.ts +++ b/src/4.0/obfuscate.ts @@ -1,11 +1,11 @@ -import { OpenAttestationDocument } from "../__generated__/schema.4.0"; +import { TradeTrustDocument } from "../__generated__/schema.4.0"; import { toBuffer } from "../shared/utils"; import { WrappedDocument } from "./types"; import { cloneDeep, get, unset, pick } from "lodash"; import { decodeSalt, encodeSalt } from "./salt"; import { traverseAndFlatten } from "./traverseAndFlatten"; -const obfuscate = (_data: WrappedDocument, fields: string[] | string) => { +const obfuscate = (_data: WrappedDocument, fields: string[] | string) => { const data = cloneDeep(_data); // Prevents alteration of original data const fieldsAsArray = ([] as string[]).concat(fields); @@ -38,9 +38,9 @@ const obfuscate = (_data: WrappedDocument, fields: stri }; export const obfuscateVerifiableCredential = ( - document: WrappedDocument, + document: WrappedDocument, fields: string[] | string -): WrappedDocument => { +): WrappedDocument => { const { data, obfuscatedData } = obfuscate(document, fields); const currentObfuscatedData = document.proof.privacy.obfuscated; const newObfuscatedData = currentObfuscatedData.concat(obfuscatedData); diff --git a/src/4.0/schema/schema.json b/src/4.0/schema/schema.json index 920ad9db..06a76033 100644 --- a/src/4.0/schema/schema.json +++ b/src/4.0/schema/schema.json @@ -1,6 +1,6 @@ { - "title": "OpenAttestation v4.0 Schema", - "$id": "https://schemata.openattestation.com/com/openattestation/4.0/alpha-schema.json", + "title": "Tradetrust v4.0 Schema", + "$id": "http://localhost:8080/alpha-schema.json", "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "definitions": { @@ -13,9 +13,7 @@ { "type": "string" } ], "description": "Specific verifiable credential type as explained by https://www.w3.org/TR/vc-data-model/#types" - } - }, - "properties": { + }, "@context": { "type": "array", "items": { @@ -24,6 +22,60 @@ }, "description": "List of URI to determine the terminology used in the verifiable credential as explained by https://www.w3.org/TR/vc-data-model/#contexts" }, + "credentialSubject": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uri", + "description": "An identifier related to the subject of the verifiable credential. More information in https://www.w3.org/TR/vc-data-model/#credential-subject" + }, + "type": { "$ref": "#/definitions/type" } + }, + "additionalProperties": true + }, + "identityVC": { + "type": "object", + "properties": { + "issuer": { + "oneOf": [ + { + "type": "object", + "title": "IdentityVCIssuer", + "properties": { + "id": { + "type": "string", + "format": "uri", + "description": "URI when dereferenced, results in a document containing machine-readable information about the issuer that can be used to verify the information expressed in the credential. More information in https://www.w3.org/TR/vc-data-model/#issuer" + } + } + }, + { + "type": "string", + "format": "uri", + "description": "URI when dereferenced, results in a document containing machine-readable information about the issuer that can be used to verify the information expressed in the credential. More information in https://www.w3.org/TR/vc-data-model/#issuer" + } + ] + }, + "credentialStatus": { + "title": "IdentityVCCredentialStatus", + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uri", + "description": "MUST be a URI. More information in https://www.w3.org/TR/vc-data-model/#status" + }, + "type": { + "type": "string", + "description": "type expresses the credential status type (also referred to as the credential status method). It is expected that the value will provide enough information to determine the current status of the credential and that machine readable information needs to be retrievable from the URI. For example, the object could contain a link to an external document noting whether or not the credential is suspended or revoked. More information in https://www.w3.org/TR/vc-data-model/#status" + } + } + } + } + } + }, + "properties": { "id": { "type": "string", "format": "uri", @@ -46,6 +98,7 @@ }, "issuer": { "type": "object", + "title": "Issuer", "properties": { "id": { "type": "string", @@ -62,18 +115,45 @@ "properties": { "identityProofType": { "type": "string", - "enum": ["DNS-TXT", "DNS-DID", "DID"] + "enum": ["DNS-TXT", "DNS-DID", "DID", "IDVC"] }, "identifier": { "type": "string", "description": "Identifier to be shown to end user upon verifying the identity" + }, + "identityVC": { + "type": "object", + "properties": { + "type": { "$ref": "#/definitions/type" }, + "data": { + "title": "IdentityVCData", + "type": "object", + "allOf": [ + { + "type": "object", + "properties": { + "@context": { "$ref": "#/definitions/@context" } + } + }, + { + "type": "object", + "properties": { + "credentialSubject": { "$ref": "#/definitions/credentialSubject" } + } + }, + { "$ref": "#/definitions/identityVC" } + ], + "required": ["@context", "issuer", "credentialSubject"] + } + }, + "required": ["data"] } }, "required": ["identityProofType", "identifier"], "additionalProperties": false } }, - "required": ["id", "name", "identityProof"] + "required": ["id", "identityProof"] }, "credentialStatus": { "type": "object", @@ -135,17 +215,6 @@ }, "required": ["renderMethodType", "name", "url"] }, - "credentialSubject": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uri", - "description": "An identifier related to the subject of the verifiable credential. More information in https://www.w3.org/TR/vc-data-model/#credential-subject" - }, - "type": { "$ref": "#/definitions/type" } - } - }, "proof": { "type": "object", "properties": { @@ -164,7 +233,58 @@ }, "required": ["proofPurpose", "targetHash", "proofs", "merkleRoot", "salts", "privacy"], "additionalProperties": false + }, + "attachments": { + "type": "array", + "items": { + "type": "object", + "properties": { + "fileName": { + "type": "string", + "description": "Name of this attachment, with appropriate extensions" + }, + "mimeType": { + "type": "string", + "description": "Media type (or MIME type) of this attachment" + }, + "data": { + "type": "string", + "description": "Base64 encoding of this attachment" + } + }, + "required": ["fileName", "mimeType", "data"], + "additionalProperties": false + } + }, + "network": { + "type": "object", + "properties": { + "chain": { + "type": "string", + "description": "Which blockchain being used" + }, + "chainId": { + "type": "string", + "description": "Chain ID of the network used" + } + }, + "required": ["chain"], + "additionalProperties": true } }, + "allOf": [ + { + "type": "object", + "properties": { + "@context": { "$ref": "#/definitions/@context" } + } + }, + { + "type": "object", + "properties": { + "credentialSubject": { "$ref": "#/definitions/credentialSubject" } + } + } + ], "required": ["@context", "issuer", "credentialStatus", "credentialSubject"] } diff --git a/src/4.0/schema/schema.test.ts b/src/4.0/schema/schema.test.ts index 7f097616..50a7b828 100644 --- a/src/4.0/schema/schema.test.ts +++ b/src/4.0/schema/schema.test.ts @@ -1,27 +1,30 @@ /* eslint-disable jest/no-try-expect,jest/no-conditional-expect */ import { cloneDeep } from "lodash"; -import { _unsafe_use_it_at_your_own_risk_v4_alpha_wrapDocument as wrapDocumentV4 } from "../../index"; +import { + _unsafe_use_it_at_your_own_risk_v4_alpha_wrapDocument as wrapDocumentV4, +} from "../../index"; import sample from "../../../test/fixtures/v4/did-raw.json"; +import sampleWithIDVC from "../../../test/fixtures/v4/did-idvc-raw.json"; import { ContextUrl } from "../../shared/@types/document"; -import { OpenAttestationDocument } from "../../__generated__/schema.4.0"; +import { TradeTrustDocument } from "../../__generated__/schema.4.0"; -const sampleVc = sample as OpenAttestationDocument; +const sampleVc = sample as TradeTrustDocument; // eslint-disable-next-line jest/no-disabled-tests -describe("schema/4.0", () => { +describe("schema/4.0, plain vc", () => { it("should be valid with sample document", async () => { const document = cloneDeep(sampleVc); const wrappedDocument = await wrapDocumentV4(document); - expect(wrappedDocument["type"]).toStrictEqual(["VerifiableCredential", "OpenAttestationCredential"]); - expect(wrappedDocument["proof"]["type"]).toStrictEqual("OpenAttestationMerkleProofSignature2018"); + expect(wrappedDocument["type"]).toStrictEqual(["VerifiableCredential", "TradeTrustCredential"]); + expect(wrappedDocument["proof"]["type"]).toStrictEqual("TradeTrustMerkleProofSignature2018"); }); it("should be valid when adding any additional data", async () => { const document = { ...cloneDeep(sampleVc), key1: "some" }; const wrappedDocument = await wrapDocumentV4(document); expect(wrappedDocument["key1"]).toStrictEqual("some"); - expect(wrappedDocument["type"]).toStrictEqual(["VerifiableCredential", "OpenAttestationCredential"]); - expect(wrappedDocument["proof"]["type"]).toStrictEqual("OpenAttestationMerkleProofSignature2018"); + expect(wrappedDocument["type"]).toStrictEqual(["VerifiableCredential", "TradeTrustCredential"]); + expect(wrappedDocument["proof"]["type"]).toStrictEqual("TradeTrustMerkleProofSignature2018"); }); describe("@context", () => { @@ -65,7 +68,78 @@ describe("schema/4.0", () => { { keyword: "format", instancePath: "/@context/2", - schemaPath: "#/properties/%40context/items/format", + schemaPath: "#/definitions/@context/items/format", + params: { format: "uri" }, + message: 'must match format "uri"', + }, + ]); + }); + }); +}); + +const sampleVcWithIDVC = sampleWithIDVC as TradeTrustDocument; +// eslint-disable-next-line jest/no-disabled-tests +describe("schema/4.0, vc with idvc", () => { + it("should be valid with sample document", async () => { + const document = cloneDeep(sampleVcWithIDVC); + const wrappedDocument = await wrapDocumentV4(document); + expect(wrappedDocument["type"]).toStrictEqual(["VerifiableCredential", "TradeTrustCredential"]); + expect(wrappedDocument["proof"]["type"]).toStrictEqual("TradeTrustMerkleProofSignature2018"); + }); + + it("should be valid when adding any additional data", async () => { + const document = { ...cloneDeep(sampleVcWithIDVC), key1: "some" }; + const wrappedDocument = await wrapDocumentV4(document); + expect(wrappedDocument["key1"]).toStrictEqual("some"); + expect(wrappedDocument["type"]).toStrictEqual(["VerifiableCredential", "TradeTrustCredential"]); + expect(wrappedDocument["proof"]["type"]).toStrictEqual("TradeTrustMerkleProofSignature2018"); + }); + + describe("@context", () => { + it("should self-correct when @context is a string with a valid context, appending it to the array of @context", async () => { + // @context MUST be an ordered set in W3C VC data model, see https://www.w3.org/TR/vc-data-model/#contexts + const document = { ...cloneDeep(sampleVcWithIDVC), "@context": "https://w3id.org/traceability/v1" }; + const wrappedDocument = await wrapDocumentV4(document as any); + expect(wrappedDocument["@context"]).toStrictEqual([ + "https://www.w3.org/2018/credentials/v1", + ContextUrl.v4_alpha, + "https://w3id.org/traceability/v1", + ]); + }); + it("should self-correct when @context is an array that contains a valid context but is missing the required contexts", async () => { + // This should not have AJV validation errors as it's only caught after + const document = { ...cloneDeep(sampleVcWithIDVC), "@context": ["https://w3id.org/traceability/v1"] }; + const wrappedDocument = await wrapDocumentV4(document); + expect(wrappedDocument["@context"]).toStrictEqual([ + "https://www.w3.org/2018/credentials/v1", + ContextUrl.v4_alpha, + "https://w3id.org/traceability/v1", + ]); + }); + it("should self-correct when @context is an array that contains the required context but not the right order", async () => { + // This should not have AJV validation errors as it's only caught during validateW3C + const document = { + ...cloneDeep(sampleVcWithIDVC), + "@context": ["https://w3id.org/traceability/v1", "https://www.w3.org/2018/credentials/v1"], + }; + const wrappedDocument = await wrapDocumentV4(document); + expect(wrappedDocument["@context"]).toStrictEqual([ + "https://www.w3.org/2018/credentials/v1", + ContextUrl.v4_alpha, + "https://w3id.org/traceability/v1", + ]); + }); + it("should be invalid if @context contains one invalid URI", async () => { + expect.assertions(1); + const document = { + ...cloneDeep(sampleVcWithIDVC), + "@context": ["https://www.w3.org/2018/credentials/v1", "any"], + }; + await expect(wrapDocumentV4(document)).rejects.toHaveProperty("validationErrors", [ + { + keyword: "format", + instancePath: "/@context/2", + schemaPath: "#/definitions/@context/items/format", params: { format: "uri" }, message: 'must match format "uri"', }, diff --git a/src/4.0/sign.ts b/src/4.0/sign.ts index 0519604e..cd6e4f05 100644 --- a/src/4.0/sign.ts +++ b/src/4.0/sign.ts @@ -1,10 +1,10 @@ -import { OpenAttestationDocument, WrappedDocument, SignedWrappedDocument, SignedWrappedProof } from "./types"; +import { TradeTrustDocument, WrappedDocument, SignedWrappedDocument, SignedWrappedProof } from "./types"; import { sign } from "../shared/signer"; import { SigningKey, SUPPORTED_SIGNING_ALGORITHM } from "../shared/@types/sign"; import { isSignedWrappedV4Document } from "../shared/utils"; import { ethers } from "ethers"; -export const signDocument = async ( +export const signDocument = async ( document: SignedWrappedDocument | WrappedDocument, algorithm: SUPPORTED_SIGNING_ALGORITHM, keyOrSigner: SigningKey | ethers.Signer diff --git a/src/4.0/types.ts b/src/4.0/types.ts index 424fb973..5b3e8560 100644 --- a/src/4.0/types.ts +++ b/src/4.0/types.ts @@ -1,6 +1,6 @@ // types generated by quicktype during postinstall phase -import { OpenAttestationDocument as OpenAttestationDocumentV4, ProofPurpose } from "../__generated__/schema.4.0"; -import { OpenAttestationHexString, SignatureAlgorithm } from "../shared/@types/document"; +import { TradeTrustDocument as TradeTrustDocumentV4, ProofPurpose } from "../__generated__/schema.4.0"; +import { TradeTrustHexString, TradeTrustSignatureAlgorithm as SignatureAlgorithm } from "../shared/@types/document"; import { Array, Literal, Record, Static, String, Union } from "runtypes"; export interface Salt { @@ -9,7 +9,7 @@ export interface Salt { } export const PrivacyObfuscation = Record({ - obfuscated: Array(OpenAttestationHexString), + obfuscated: Array(TradeTrustHexString), }); export type PrivacyObfuscation = Static; @@ -29,9 +29,9 @@ export type WrappedProof = Static; export const WrappedProofStrict = WrappedProof.And( Record({ - targetHash: OpenAttestationHexString, - merkleRoot: OpenAttestationHexString, - proofs: Array(OpenAttestationHexString), + targetHash: TradeTrustHexString, + merkleRoot: TradeTrustHexString, + proofs: Array(TradeTrustHexString), }) ); export type WrappedProofStrict = Static; @@ -44,11 +44,11 @@ export const SignedWrappedProof = WrappedProof.And( ); export type SignedWrappedProof = Static; -export type WrappedDocument = T & { +export type WrappedDocument = T & { proof: WrappedProof; }; -export type SignedWrappedDocument = T & { +export type SignedWrappedDocument = T & { proof: SignedWrappedProof; }; diff --git a/src/4.0/validate/validate.ts b/src/4.0/validate/validate.ts index db2a53e8..44e9e70f 100644 --- a/src/4.0/validate/validate.ts +++ b/src/4.0/validate/validate.ts @@ -1,8 +1,9 @@ -import { OpenAttestationDocument } from "../../__generated__/schema.4.0"; +import { TradeTrustDocument } from "../../__generated__/schema.4.0"; import { WrappedDocument } from "../../4.0/types"; import { ContextUrl } from "../../shared/@types/document"; import { documentLoaders, expand } from "@govtechsg/jsonld"; import fetch from "cross-fetch"; +import w3cDataModel from "../../shared/contexts/w3c-data-model-v1.json"; const getId = (objectOrString: string | { id: string }): string => { if (typeof objectOrString === "string") { @@ -40,7 +41,8 @@ const isValidRFC3986 = (str: any) => { return rfc3986.test(str); }; -const preloadedContextList = ["https://www.w3.org/2018/credentials/v1", ContextUrl.v4_alpha]; +let w3cDataModelUrl = "https://www.w3.org/2018/credentials/v1"; +const preloadedContextList = [w3cDataModelUrl, ContextUrl.v4_alpha]; const contexts: Map> = new Map(); const nodeDocumentLoader = documentLoaders.xhr ? documentLoaders.xhr() : documentLoaders.node(); let preload = true; @@ -49,10 +51,17 @@ const documentLoader = async (url: string) => { if (preload) { preload = false; for (const url of preloadedContextList) { - contexts.set( - url, - fetch(url, { headers: { accept: "application/json" } }).then((res: any) => res.json()) - ); + // resolve the w3c data model context to the local + // file within the repo, otherwise, w3c would throttle + // these contexts after a set number of requests. + if (url === w3cDataModelUrl) { + contexts.set(url, Promise.resolve(w3cDataModel)); + } else { + contexts.set( + url, + fetch(url, { headers: { accept: "application/json" } }).then((res: any) => res.json()) + ); + } } } if (contexts.get(url)) { @@ -72,7 +81,7 @@ const documentLoader = async (url: string) => { } }; -export async function validateW3C(credential: WrappedDocument): Promise { +export async function validateW3C(credential: WrappedDocument): Promise { // ensure first context is 'https://www.w3.org/2018/credentials/v1' as it's mandatory, see https://www.w3.org/TR/vc-data-model/#contexts if ( !Array.isArray(credential["@context"]) || diff --git a/src/4.0/wrap.ts b/src/4.0/wrap.ts index 61598b79..8e18d697 100644 --- a/src/4.0/wrap.ts +++ b/src/4.0/wrap.ts @@ -5,12 +5,12 @@ import { WrappedDocument } from "./types"; import { digestCredential } from "../4.0/digest"; import { validateSchema as validate } from "../shared/validate"; import { WrapDocumentOptionV4 } from "../shared/@types/wrap"; -import { OpenAttestationDocument } from "../__generated__/schema.4.0"; +import { TradeTrustDocument } from "../__generated__/schema.4.0"; import { encodeSalt, salt } from "./salt"; import { validateW3C } from "./validate"; import { getSchema } from "../shared/ajv"; -export const wrapDocument = async ( +export const wrapDocument = async ( credential: T, options: WrapDocumentOptionV4 // eslint-disable-line @typescript-eslint/no-unused-vars ): Promise> => { @@ -30,8 +30,8 @@ export const wrapDocument = async ( document["@context"] = Array.from(contexts); // 2. Ensure that required types are present and in the correct order - // type: ["VerifiableCredential", "OpenAttestationCredential", ...] - const types = new Set(["VerifiableCredential", "OpenAttestationCredential"]); + // type: ["VerifiableCredential", "TradeTrustCredential", ...] + const types = new Set(["VerifiableCredential", "TradeTrustCredential"]); if (typeof document["type"] === "string") { types.add(document["type"]); @@ -55,7 +55,7 @@ export const wrapDocument = async ( const verifiableCredential: WrappedDocument = { ...document, proof: { - type: "OpenAttestationMerkleProofSignature2018", + type: "TradeTrustMerkleProofSignature2018", proofPurpose: "assertionMethod", targetHash: digest, proofs: merkleProof, @@ -75,7 +75,7 @@ export const wrapDocument = async ( return verifiableCredential; }; -export const wrapDocuments = async ( +export const wrapDocuments = async ( documents: T[], options: WrapDocumentOptionV4 ): Promise[]> => { diff --git a/src/index.ts b/src/index.ts index 0f80d9d0..9da16ec9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -32,7 +32,7 @@ import { signDocument as signDocumentV4 } from "./4.0/sign"; import { verify as verifyV4 } from "./4.0/verify"; import { digestCredential as digestCredentialV4 } from "./4.0/digest"; import { obfuscateVerifiableCredential as obfuscateVerifiableCredentialV4 } from "./4.0/obfuscate"; -import { OpenAttestationDocument as OpenAttestationDocumentV4 } from "./__generated__/schema.4.0"; +import { TradeTrustDocument as TradeTrustDocumentV4 } from "./__generated__/schema.4.0"; export function wrapDocument( data: T, @@ -62,14 +62,14 @@ export function __unsafe__use__it__at__your__own__risks__wrapDocuments( +export function _unsafe_use_it_at_your_own_risk_v4_alpha_wrapDocument( data: T, options?: WrapDocumentOptionV4 ): Promise> { return wrapDocumentV4(data, options ?? { version: SchemaId.v4 }); } -export function _unsafe_use_it_at_your_own_risk_v4_alpha_wrapDocuments( +export function _unsafe_use_it_at_your_own_risk_v4_alpha_wrapDocuments( dataArray: T[], options?: WrapDocumentOptionV4 ): Promise[]> { @@ -97,9 +97,9 @@ export function verifySignature( document: WrappedDocument, fields: string[] | string ): WrappedDocument; -export function obfuscate( +export function obfuscate( document: WrappedDocument, fields: string[] | string ): WrappedDocument; @@ -145,7 +145,7 @@ export async function signDocument( algorithm: SUPPORTED_SIGNING_ALGORITHM, keyOrSigner: SigningKey | ethers.Signer ): Promise>; -export async function signDocument( +export async function signDocument( document: v4.SignedWrappedDocument | v4.WrappedDocument, algorithm: SUPPORTED_SIGNING_ALGORITHM, keyOrSigner: SigningKey | ethers.Signer diff --git a/src/shared/@types/document.ts b/src/shared/@types/document.ts index b9002cf6..1f749910 100644 --- a/src/shared/@types/document.ts +++ b/src/shared/@types/document.ts @@ -1,7 +1,7 @@ // types generated by quicktype during postinstall phase import { OpenAttestationDocument as OpenAttestationDocumentV2 } from "../../__generated__/schema.2.0"; import { OpenAttestationDocument as OpenAttestationDocumentV3 } from "../../__generated__/schema.3.0"; -import { OpenAttestationDocument as OpenAttestationDocumentV4 } from "../../__generated__/schema.4.0"; +import { TradeTrustDocument as TradeTrustDocumentV4 } from "../../__generated__/schema.4.0"; import { SignedWrappedDocument as SignedWrappedDocumentV2, WrappedDocument as WrappedDocumentV2, @@ -17,39 +17,54 @@ import { import { Literal, Static, String } from "runtypes"; import { ethers } from "ethers"; -export type OpenAttestationDocument = OpenAttestationDocumentV2 | OpenAttestationDocumentV3 | OpenAttestationDocumentV4; +export type OpenAttestationDocument = OpenAttestationDocumentV2 | OpenAttestationDocumentV3 | TradeTrustDocumentV4; export type WrappedDocument = T extends OpenAttestationDocumentV2 ? WrappedDocumentV2 : T extends OpenAttestationDocumentV3 ? WrappedDocumentV3 - : T extends OpenAttestationDocumentV4 + : T extends TradeTrustDocumentV4 ? WrappedDocumentV4 : unknown; export type SignedWrappedDocument = T extends OpenAttestationDocumentV2 ? SignedWrappedDocumentV2 : T extends OpenAttestationDocumentV3 ? SignedWrappedDocumentV3 - : T extends OpenAttestationDocumentV4 + : T extends TradeTrustDocumentV4 ? SignedWrappedDocumentV4 : unknown; export enum SchemaId { v2 = "https://schema.openattestation.com/2.0/schema.json", v3 = "https://schema.openattestation.com/3.0/schema.json", - v4 = "https://schemata.openattestation.com/com/openattestation/4.0/alpha-schema.json", // Note: Schema property is no longer placed in the OA v4 document + // v4 = "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-schema.json", + v4 = "http://localhost:8080/alpha-schema.json", + // Note: Schema property is no longer placed in the OA v4 + // document + // Starting from v4 onwards, Tradetrust would fork their + // behavior from OA due to the introduction of IDVC verification + // for identityProof, hence the difference in schema itself. + // } export enum ContextUrl { - v4_alpha = "https://schemata.openattestation.com/com/openattestation/4.0/alpha-context.json", + // v4_alpha = "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json", + v4_alpha = "http://localhost:8080/alpha-context.json", } export const OpenAttestationHexString = String.withConstraint( (value) => ethers.utils.isHexString(`0x${value}`, 32) || `${value} has not the expected length of 32 bytes` ); +export const TradeTrustHexString = String.withConstraint( + (value) => ethers.utils.isHexString(`0x${value}`, 32) || `${value} has not the expected length of 32 bytes` +); export const SignatureAlgorithm = Literal("OpenAttestationMerkleProofSignature2018"); export type SignatureAlgorithm = Static; export const ProofType = Literal("OpenAttestationSignature2018"); export type ProofType = Static; +export const TradeTrustSignatureAlgorithm = Literal("TradeTrustMerkleProofSignature2018"); +export type TradeTrustSignatureAlgorithm = Static; +export const TradeTrustProofType = Literal("TradeTrustSignature2018"); +export type TradeTrustProofType = Static; export const ProofPurpose = Literal("assertionMethod"); export type ProofPurpose = Static; diff --git a/src/shared/ajv.ts b/src/shared/ajv.ts index 53879c1a..94ebf88a 100644 --- a/src/shared/ajv.ts +++ b/src/shared/ajv.ts @@ -2,7 +2,7 @@ import Ajv from "ajv"; import addFormats from "ajv-formats"; import openAttestationSchemav2 from "../2.0/schema/schema.json"; import openAttestationSchemav3 from "../3.0/schema/schema.json"; -import openAttestationSchemav4 from "../4.0/schema/schema.json"; +import tradeTrustSchemav4 from "../4.0/schema/schema.json"; import { CurrentOptions } from "ajv/dist/core"; const defaultTransform = (schema: Record) => schema; @@ -17,7 +17,7 @@ export const buildAjv = ( ajv.addKeyword("deprecationMessage"); ajv.compile(transform(openAttestationSchemav2)); ajv.compile(transform(openAttestationSchemav3)); - ajv.compile(transform(openAttestationSchemav4)); + ajv.compile(transform(tradeTrustSchemav4)); return ajv; }; diff --git a/src/shared/contexts/w3c-context-examples.json b/src/shared/contexts/w3c-context-examples.json new file mode 100644 index 00000000..004e0311 --- /dev/null +++ b/src/shared/contexts/w3c-context-examples.json @@ -0,0 +1,57 @@ +{ + "@context": [ + { + "@version": 1.1 + }, + "https://www.w3.org/ns/odrl.jsonld", + { + "ex": "https://example.org/examples#", + "schema": "http://schema.org/", + "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + + "3rdPartyCorrelation": "ex:3rdPartyCorrelation", + "AllVerifiers": "ex:AllVerifiers", + "Archival": "ex:Archival", + "BachelorDegree": "ex:BachelorDegree", + "Child": "ex:Child", + "CLCredentialDefinition2019": "ex:CLCredentialDefinition2019", + "CLSignature2019": "ex:CLSignature2019", + "IssuerPolicy": "ex:IssuerPolicy", + "HolderPolicy": "ex:HolderPolicy", + "Mother": "ex:Mother", + "RelationshipCredential": "ex:RelationshipCredential", + "UniversityDegreeCredential": "ex:UniversityDegreeCredential", + "AlumniCredential": "ex:AlumniCredential", + "DisputeCredential": "ex:DisputeCredential", + "PrescriptionCredential": "ex:PrescriptionCredential", + "ZkpExampleSchema2018": "ex:ZkpExampleSchema2018", + + "issuerData": "ex:issuerData", + "attributes": "ex:attributes", + "signature": "ex:signature", + "signatureCorrectnessProof": "ex:signatureCorrectnessProof", + "primaryProof": "ex:primaryProof", + "nonRevocationProof": "ex:nonRevocationProof", + + "alumniOf": { "@id": "schema:alumniOf", "@type": "rdf:HTML" }, + "child": { "@id": "ex:child", "@type": "@id" }, + "degree": "ex:degree", + "degreeType": "ex:degreeType", + "degreeSchool": "ex:degreeSchool", + "college": "ex:college", + "name": { "@id": "schema:name", "@type": "rdf:HTML" }, + "givenName": "schema:givenName", + "familyName": "schema:familyName", + "parent": { "@id": "ex:parent", "@type": "@id" }, + "referenceId": "ex:referenceId", + "documentPresence": "ex:documentPresence", + "evidenceDocument": "ex:evidenceDocument", + "spouse": "schema:spouse", + "subjectPresence": "ex:subjectPresence", + "verifier": { "@id": "ex:verifier", "@type": "@id" }, + "currentStatus": "ex:currentStatus", + "statusReason": "ex:statusReason", + "prescription": "ex:prescription" + } + ] +} diff --git a/src/shared/contexts/w3c-data-model-v1.json b/src/shared/contexts/w3c-data-model-v1.json new file mode 100644 index 00000000..245742af --- /dev/null +++ b/src/shared/contexts/w3c-data-model-v1.json @@ -0,0 +1,237 @@ +{ + "@context": { + "@version": 1.1, + "@protected": true, + + "id": "@id", + "type": "@type", + + "VerifiableCredential": { + "@id": "https://www.w3.org/2018/credentials#VerifiableCredential", + "@context": { + "@version": 1.1, + "@protected": true, + + "id": "@id", + "type": "@type", + + "cred": "https://www.w3.org/2018/credentials#", + "sec": "https://w3id.org/security#", + "xsd": "http://www.w3.org/2001/XMLSchema#", + + "credentialSchema": { + "@id": "cred:credentialSchema", + "@type": "@id", + "@context": { + "@version": 1.1, + "@protected": true, + + "id": "@id", + "type": "@type", + + "cred": "https://www.w3.org/2018/credentials#", + + "JsonSchemaValidator2018": "cred:JsonSchemaValidator2018" + } + }, + "credentialStatus": { "@id": "cred:credentialStatus", "@type": "@id" }, + "credentialSubject": { "@id": "cred:credentialSubject", "@type": "@id" }, + "evidence": { "@id": "cred:evidence", "@type": "@id" }, + "expirationDate": { "@id": "cred:expirationDate", "@type": "xsd:dateTime" }, + "holder": { "@id": "cred:holder", "@type": "@id" }, + "issued": { "@id": "cred:issued", "@type": "xsd:dateTime" }, + "issuer": { "@id": "cred:issuer", "@type": "@id" }, + "issuanceDate": { "@id": "cred:issuanceDate", "@type": "xsd:dateTime" }, + "proof": { "@id": "sec:proof", "@type": "@id", "@container": "@graph" }, + "refreshService": { + "@id": "cred:refreshService", + "@type": "@id", + "@context": { + "@version": 1.1, + "@protected": true, + + "id": "@id", + "type": "@type", + + "cred": "https://www.w3.org/2018/credentials#", + + "ManualRefreshService2018": "cred:ManualRefreshService2018" + } + }, + "termsOfUse": { "@id": "cred:termsOfUse", "@type": "@id" }, + "validFrom": { "@id": "cred:validFrom", "@type": "xsd:dateTime" }, + "validUntil": { "@id": "cred:validUntil", "@type": "xsd:dateTime" } + } + }, + + "VerifiablePresentation": { + "@id": "https://www.w3.org/2018/credentials#VerifiablePresentation", + "@context": { + "@version": 1.1, + "@protected": true, + + "id": "@id", + "type": "@type", + + "cred": "https://www.w3.org/2018/credentials#", + "sec": "https://w3id.org/security#", + + "holder": { "@id": "cred:holder", "@type": "@id" }, + "proof": { "@id": "sec:proof", "@type": "@id", "@container": "@graph" }, + "verifiableCredential": { "@id": "cred:verifiableCredential", "@type": "@id", "@container": "@graph" } + } + }, + + "EcdsaSecp256k1Signature2019": { + "@id": "https://w3id.org/security#EcdsaSecp256k1Signature2019", + "@context": { + "@version": 1.1, + "@protected": true, + + "id": "@id", + "type": "@type", + + "sec": "https://w3id.org/security#", + "xsd": "http://www.w3.org/2001/XMLSchema#", + + "challenge": "sec:challenge", + "created": { "@id": "http://purl.org/dc/terms/created", "@type": "xsd:dateTime" }, + "domain": "sec:domain", + "expires": { "@id": "sec:expiration", "@type": "xsd:dateTime" }, + "jws": "sec:jws", + "nonce": "sec:nonce", + "proofPurpose": { + "@id": "sec:proofPurpose", + "@type": "@vocab", + "@context": { + "@version": 1.1, + "@protected": true, + + "id": "@id", + "type": "@type", + + "sec": "https://w3id.org/security#", + + "assertionMethod": { "@id": "sec:assertionMethod", "@type": "@id", "@container": "@set" }, + "authentication": { "@id": "sec:authenticationMethod", "@type": "@id", "@container": "@set" } + } + }, + "proofValue": "sec:proofValue", + "verificationMethod": { "@id": "sec:verificationMethod", "@type": "@id" } + } + }, + + "EcdsaSecp256r1Signature2019": { + "@id": "https://w3id.org/security#EcdsaSecp256r1Signature2019", + "@context": { + "@version": 1.1, + "@protected": true, + + "id": "@id", + "type": "@type", + + "sec": "https://w3id.org/security#", + "xsd": "http://www.w3.org/2001/XMLSchema#", + + "challenge": "sec:challenge", + "created": { "@id": "http://purl.org/dc/terms/created", "@type": "xsd:dateTime" }, + "domain": "sec:domain", + "expires": { "@id": "sec:expiration", "@type": "xsd:dateTime" }, + "jws": "sec:jws", + "nonce": "sec:nonce", + "proofPurpose": { + "@id": "sec:proofPurpose", + "@type": "@vocab", + "@context": { + "@version": 1.1, + "@protected": true, + + "id": "@id", + "type": "@type", + + "sec": "https://w3id.org/security#", + + "assertionMethod": { "@id": "sec:assertionMethod", "@type": "@id", "@container": "@set" }, + "authentication": { "@id": "sec:authenticationMethod", "@type": "@id", "@container": "@set" } + } + }, + "proofValue": "sec:proofValue", + "verificationMethod": { "@id": "sec:verificationMethod", "@type": "@id" } + } + }, + + "Ed25519Signature2018": { + "@id": "https://w3id.org/security#Ed25519Signature2018", + "@context": { + "@version": 1.1, + "@protected": true, + + "id": "@id", + "type": "@type", + + "sec": "https://w3id.org/security#", + "xsd": "http://www.w3.org/2001/XMLSchema#", + + "challenge": "sec:challenge", + "created": { "@id": "http://purl.org/dc/terms/created", "@type": "xsd:dateTime" }, + "domain": "sec:domain", + "expires": { "@id": "sec:expiration", "@type": "xsd:dateTime" }, + "jws": "sec:jws", + "nonce": "sec:nonce", + "proofPurpose": { + "@id": "sec:proofPurpose", + "@type": "@vocab", + "@context": { + "@version": 1.1, + "@protected": true, + + "id": "@id", + "type": "@type", + + "sec": "https://w3id.org/security#", + + "assertionMethod": { "@id": "sec:assertionMethod", "@type": "@id", "@container": "@set" }, + "authentication": { "@id": "sec:authenticationMethod", "@type": "@id", "@container": "@set" } + } + }, + "proofValue": "sec:proofValue", + "verificationMethod": { "@id": "sec:verificationMethod", "@type": "@id" } + } + }, + + "RsaSignature2018": { + "@id": "https://w3id.org/security#RsaSignature2018", + "@context": { + "@version": 1.1, + "@protected": true, + + "challenge": "sec:challenge", + "created": { "@id": "http://purl.org/dc/terms/created", "@type": "xsd:dateTime" }, + "domain": "sec:domain", + "expires": { "@id": "sec:expiration", "@type": "xsd:dateTime" }, + "jws": "sec:jws", + "nonce": "sec:nonce", + "proofPurpose": { + "@id": "sec:proofPurpose", + "@type": "@vocab", + "@context": { + "@version": 1.1, + "@protected": true, + + "id": "@id", + "type": "@type", + + "sec": "https://w3id.org/security#", + + "assertionMethod": { "@id": "sec:assertionMethod", "@type": "@id", "@container": "@set" }, + "authentication": { "@id": "sec:authenticationMethod", "@type": "@id", "@container": "@set" } + } + }, + "proofValue": "sec:proofValue", + "verificationMethod": { "@id": "sec:verificationMethod", "@type": "@id" } + } + }, + + "proof": { "@id": "https://w3id.org/security#proof", "@type": "@id", "@container": "@graph" } + } +} diff --git a/src/shared/utils/diagnose.ts b/src/shared/utils/diagnose.ts index 310c528d..51af5ab5 100644 --- a/src/shared/utils/diagnose.ts +++ b/src/shared/utils/diagnose.ts @@ -236,8 +236,8 @@ const diagnoseV4 = ({ } // 3. Ensure that required types are present - // type: ["VerifiableCredential", "OpenAttestationCredential", ...] - const types = ["VerifiableCredential", "OpenAttestationCredential"]; + // type: ["VerifiableCredential", "TradeTrustCredential", ...] + const types = ["VerifiableCredential", "TradeTrustCredential"]; if (isStringArray(document["type"])) { for (let i = 0; i < types.length; i++) { if (document["type"][i] !== types[i]) { diff --git a/src/shared/utils/guard.ts b/src/shared/utils/guard.ts index ffd0dedd..109740bd 100644 --- a/src/shared/utils/guard.ts +++ b/src/shared/utils/guard.ts @@ -8,7 +8,7 @@ import { WrappedDocument as WrappedDocumentV3, } from "../../3.0/types"; import { - OpenAttestationDocument as OpenAttestationDocumentV4, + TradeTrustDocument as TradeTrustDocumentV4, WrappedDocument as WrappedDocumentV4, } from "../../4.0/types"; import { diagnose } from "./diagnose"; @@ -46,7 +46,7 @@ export const isRawV3Document = ( export const isRawV4Document = ( document: any, { mode }: { mode: Mode } = { mode: "non-strict" } -): document is OpenAttestationDocumentV4 => { +): document is TradeTrustDocumentV4 => { return diagnose({ version: "4.0", kind: "raw", document, debug: false, mode }).length === 0; }; @@ -82,7 +82,7 @@ export const isWrappedV3Document = ( export const isWrappedV4Document = ( document: any, { mode }: { mode: Mode } = { mode: "non-strict" } -): document is WrappedDocumentV4 => { +): document is WrappedDocumentV4 => { return diagnose({ version: "4.0", kind: "wrapped", document, debug: false, mode }).length === 0; }; @@ -118,6 +118,6 @@ export const isSignedWrappedV3Document = ( export const isSignedWrappedV4Document = ( document: any, { mode }: { mode: Mode } = { mode: "non-strict" } -): document is SignedWrappedDocument => { +): document is SignedWrappedDocument => { return diagnose({ version: "4.0", kind: "signed", document, debug: false, mode }).length === 0; }; diff --git a/src/shared/utils/utils.ts b/src/shared/utils/utils.ts index e5acb85d..2aa6ea7b 100644 --- a/src/shared/utils/utils.ts +++ b/src/shared/utils/utils.ts @@ -12,7 +12,7 @@ import { OpenAttestationDocument as OpenAttestationDocumentV3 } from "../../__ge import * as v4 from "../../__generated__/schema.4.0"; import { WrappedDocument as WrappedDocumentV4 } from "../../4.0/types"; -import { OpenAttestationDocument as OpenAttestationDocumentV4 } from "../../__generated__/schema.4.0"; +import { TradeTrustDocument as TradeTrustDocumentV4DocumentV4 } from "../../__generated__/schema.4.0"; import { OpenAttestationDocument, WrappedDocument } from "../@types/document"; import { @@ -225,7 +225,7 @@ export const isObfuscated = ( document: | WrappedDocumentV2 | WrappedDocumentV3 - | WrappedDocumentV4 + | WrappedDocumentV4 ): boolean => { if (isWrappedV2Document(document)) { return !!document.privacy?.obfuscatedData?.length; @@ -244,7 +244,7 @@ export const getObfuscatedData = ( document: | WrappedDocumentV2 | WrappedDocumentV3 - | WrappedDocumentV4 + | WrappedDocumentV4 ): string[] => { if (isWrappedV2Document(document)) { return document.privacy?.obfuscatedData || []; diff --git a/src/shared/validate/validate.test.ts b/src/shared/validate/validate.test.ts index 0e349929..0e570524 100644 --- a/src/shared/validate/validate.test.ts +++ b/src/shared/validate/validate.test.ts @@ -20,8 +20,8 @@ describe("validate", () => { test("throws when the schema cannot be found/has not been added", () => { const document: SchematisedDocument = { schema: "http://example.com/schema.json", + //@ts-expect-error it's not an open attestation document data: { - //@ts-expect-error it's not an open attestation document key1: 2, }, }; diff --git a/test/fixtures/v4/did-idvc-raw.json b/test/fixtures/v4/did-idvc-raw.json new file mode 100644 index 00000000..782a31de --- /dev/null +++ b/test/fixtures/v4/did-idvc-raw.json @@ -0,0 +1,111 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "http://localhost:8080/alpha-context.json" + ], + "type": ["VerifiableCredential", "TradeTrustCredential"], + "validFrom": "2021-03-08T12:00:00+08:00", + "issuer": { + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", + "type": "TradeTrustIssuer", + "name": "My Own Company Pte Ltd", + "identityProof": { + "identityProofType": "IDVC", + "identifier": "My Own Company Pte Ltd", + "identityVC": { + "type": "TradeTrustIdentityVC", + "data": { + "@context": [ + "https://w3id.org/security/bbs/v1", + "https://www.w3.org/2018/credentials/v1", + "https://stg.issuer.myinfo.gov.sg/myinfobusiness/schema/corporatebasicdetails/v1", + "https://w3id.org/vc/status-list/2021/v1" + ], + "id": "https://sbl.alwaysdata.net/oa/credentials/123456789", + "type": ["VerifiableCredential"], + "issuer": "did:web:sbl.alwaysdata.net:oa", + "credentialSubject": { + "uen": "198801234E", + "companyname": "My Own Company Pte Ltd", + "type": ["CorporateBasicDetails"], + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C" + }, + "expirationDate": "2023-11-01T06:45:43Z", + "credentialStatus": { + "id": "https://sbl.alwaysdata.net/oa/status/1#325", + "type": "StatusList2021Entry", + "statusListIndex": 325, + "statusListCredential": "https://sbl.alwaysdata.net/oa/status/1/325" + }, + "issuanceDate": "2023-22-13T01:35:08Z", + "proof": { + "type": "BbsBlsSignature2020", + "created": "2023-10-18T07:14:46Z", + "proofPurpose": "assertionMethod", + "proofValue": "tqvUVZOPaY/A+7Wu47HZIYbboPU/MPGhb1EPLUKKPRwmRe8QJ/dzjRviQ5fAbR88TjSalqLbaBeopNocjrl7TmzCOlLQxGeNC4El1TCICu5tiX0HxGSNAPY4t5CglTLMTsdu5kg4f0a5MGQTnFgwyw==", + "verificationMethod": "did:web:sbl.alwaysdata.net:oa#didkey" + } + } + } + } + }, + "credentialStatus": { + "type": "TradeTrustCredentialStatus", + "credentialStatusType": "NONE" + }, + "renderMethod": { + "type": "TradeTrustRenderMethod", + "renderMethodType": "EMBEDDED_RENDERER", + "name": "INVOICE", + "url": "https://generic-templates.tradetrust.io" + }, + "credentialSubject": { + "name": "TradeTrust Invoice", + "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "date": "2018-02-21", + "customerId": "564", + "terms": "Due Upon Receipt", + "billFrom": { + "name": "ABC Company", + "streetAddress": "Level 1, Industry Offices", + "city": "Singapore", + "postalCode": "123456", + "phoneNumber": "60305029" + }, + "billTo": { + "company": { + "name": "DEF Company", + "streetAddress": "Level 2, Industry Offices", + "city": "Singapore", + "postalCode": "612345", + "phoneNumber": "61204028" + }, + "name": "James Lee", + "email": "def@company.com" + }, + "billableItems": [ + { + "description": "Service Fee", + "quantity": "1", + "unitPrice": "200", + "amount": "200" + }, + { + "description": "Labor: 5 hours at $75/hr", + "quantity": "5", + "unitPrice": "75", + "amount": "375" + }, + { + "description": "New client discount", + "quantity": "1", + "unitPrice": "50", + "amount": "50" + } + ], + "subtotal": "625", + "tax": "0", + "taxTotal": "0", + "total": "625" + } +} diff --git a/test/fixtures/v4/did-idvc-wrapped-signed.json b/test/fixtures/v4/did-idvc-wrapped-signed.json new file mode 100644 index 00000000..94063a27 --- /dev/null +++ b/test/fixtures/v4/did-idvc-wrapped-signed.json @@ -0,0 +1,101 @@ +{ + "@context": ["https://www.w3.org/2018/credentials/v1", "http://localhost:8080/alpha-context.json"], + "type": ["VerifiableCredential", "TradeTrustCredential"], + "validFrom": "2021-03-08T12:00:00+08:00", + "issuer": { + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", + "type": "TradeTrustIssuer", + "name": "My Own Company Pte Ltd", + "identityProof": { + "identityProofType": "IDVC", + "identifier": "My Own Company Pte Ltd", + "identityVC": { + "type": "TradeTrustIdentityVC", + "data": { + "@context": [ + "https://w3id.org/security/bbs/v1", + "https://www.w3.org/2018/credentials/v1", + "https://stg.issuer.myinfo.gov.sg/myinfobusiness/schema/corporatebasicdetails/v1", + "https://w3id.org/vc/status-list/2021/v1" + ], + "id": "https://sbl.alwaysdata.net/oa/credentials/123456789", + "type": ["VerifiableCredential"], + "issuer": "did:web:sbl.alwaysdata.net:oa", + "credentialSubject": { + "uen": "198801234E", + "companyname": "My Own Company Pte Ltd", + "type": ["CorporateBasicDetails"], + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C" + }, + "expirationDate": "2023-11-01T06:45:43Z", + "credentialStatus": { + "id": "https://sbl.alwaysdata.net/oa/status/1#325", + "type": "StatusList2021Entry", + "statusListIndex": 325, + "statusListCredential": "https://sbl.alwaysdata.net/oa/status/1/325" + }, + "issuanceDate": "2023-22-13T01:35:08Z", + "proof": { + "type": "BbsBlsSignature2020", + "created": "2023-10-18T07:14:46Z", + "proofPurpose": "assertionMethod", + "proofValue": "tqvUVZOPaY/A+7Wu47HZIYbboPU/MPGhb1EPLUKKPRwmRe8QJ/dzjRviQ5fAbR88TjSalqLbaBeopNocjrl7TmzCOlLQxGeNC4El1TCICu5tiX0HxGSNAPY4t5CglTLMTsdu5kg4f0a5MGQTnFgwyw==", + "verificationMethod": "did:web:sbl.alwaysdata.net:oa#didkey" + } + } + } + } + }, + "credentialStatus": { "type": "TradeTrustCredentialStatus", "credentialStatusType": "NONE" }, + "renderMethod": { + "type": "TradeTrustRenderMethod", + "renderMethodType": "EMBEDDED_RENDERER", + "name": "INVOICE", + "url": "https://generic-templates.tradetrust.io" + }, + "credentialSubject": { + "name": "TradeTrust Invoice", + "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "date": "2018-02-21", + "customerId": "564", + "terms": "Due Upon Receipt", + "billFrom": { + "name": "ABC Company", + "streetAddress": "Level 1, Industry Offices", + "city": "Singapore", + "postalCode": "123456", + "phoneNumber": "60305029" + }, + "billTo": { + "company": { + "name": "DEF Company", + "streetAddress": "Level 2, Industry Offices", + "city": "Singapore", + "postalCode": "612345", + "phoneNumber": "61204028" + }, + "name": "James Lee", + "email": "def@company.com" + }, + "billableItems": [ + { "description": "Service Fee", "quantity": "1", "unitPrice": "200", "amount": "200" }, + { "description": "Labor: 5 hours at $75/hr", "quantity": "5", "unitPrice": "75", "amount": "375" }, + { "description": "New client discount", "quantity": "1", "unitPrice": "50", "amount": "50" } + ], + "subtotal": "625", + "tax": "0", + "taxTotal": "0", + "total": "625" + }, + "proof": { + "type": "TradeTrustMerkleProofSignature2018", + "proofPurpose": "assertionMethod", + "targetHash": "84edabc618b2a5a7bad7eee9b58c287e9a39959d231eef3ab9270bd99922e54c", + "proofs": [], + "merkleRoot": "84edabc618b2a5a7bad7eee9b58c287e9a39959d231eef3ab9270bd99922e54c", + "salts": "W3sidmFsdWUiOiJlMTJhNTk0ZjkyYmNjZjhlYTkwOWIwZmQzZjg3NTMzOGFkOTEwNTM3YjFhMTUwOTQzZTk2MTM2MWI4MzEzMzM3IiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6ImYxMmQ0MDFjY2YyOTk4ZDQxMzBhZTc1ZWQzMWI3MjI3MjA0MTBjYzEyZTRhYWY1MjEyM2MwNzdhOWJkNmUzM2QiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiZDYwN2NhMmM2NDk1MTNjZDliNTQ2YTA1OTdiMzNkOGE4MTkzNWYxNzE1MTYzMTY0YzQ5ZGU4NTBkMDY1NTE5MCIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6ImJkMWIxYzQ1M2I5MTFiMjQ3Zjk0OGM0NmRhNDRmMjFkNjYxYzMwYWMyNTkwNzgwYTM2YjYwNmE3YjY1Y2I2ZTciLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiI0NWQyNzNiZTJlNzc5YTA0YjQxNmVkZjhjZjBhMTVlYTEyOWM1MzIyMmJmZDFjNmUzZTgyMTJkYzhjYjQxMGZiIiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiJhNzYzY2M3YjkxN2ZjODc4N2Q5ZmIzMWM4YWQ3ZjUxYmQzNTQ0OTU1ZDg3ODEyZTFmN2FiZWM5MTI0YzhjYzM0IiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiI5MWVlOGZkYTY2Y2EzMmJmNmFmY2RiMDEzMzJjMDMzNGRhN2EwODZkNTZjYzg2NzhlMTUxZDM5ZjFlNjQxYzhlIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6Ijg2NDQ1NzUzMjlhMGEwOTdmYmIzZTE1ZGEwOThjNTc2OTUyZDYzMWNhOWFhNDU4MjZkMzk1NTYzNzI3YThmN2IiLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiYTEzYmNjYTBjODZhMjljOGZjZTM2MTgzMWU0Y2Y2MWJmMzAxYTg5MTY4MGMxNzRiNjc5NTQ5NDE2MTczYjI1ZCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiI5NTU4ODY0NmUwYjBlY2Y5MzgyYjExZjEyYTI0MjdiY2M1ZDczNDQxZGExMDQ3ZTI5OGNjN2RmMDdjYzEzZjNiIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiMTQ2ODY5YTlhNGU2MDNiYjUyYTI0N2M1MzFmYWM5N2RjMDIyMmY0YmQzNjY5ZWRlZjc4NTEyOTgyY2UwYjNkZSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLnR5cGUifSx7InZhbHVlIjoiN2NiYzNiZTI4ZDkwMDc3NzIyOGNhZDVhYWYwMjc4ZTkwMzE1YTIzNTExNjdjOTgwMDExMGRhN2ViYmZkOGRmYiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMF0ifSx7InZhbHVlIjoiOWU0MjJlZWUxNTk4MDljZjcyNmQ4MzIyYmVlMDE2YWI1ZWRmZDIxM2QwZDllNWNiOGFiMDgzYWMyZjRjMjU1MiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiMjYzMjdkZjVkNmQwYjRmZWQxZjkxZWExY2U3YzZhYWU2M2ZlOGNmYjhhZjExOTg4NzA3YmFkNGNmYzE5MjVmYSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiMWE2OTI0ZDQ1ZjZhMzEyYThiMDVlYzlmZmVlMjBmMzVlODZiYWUwMmNlNjk3ZjdhZTNmOTBiYzkyMGQwNzA4YyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbM10ifSx7InZhbHVlIjoiZjEzNTJhZTIyZWVmNmI2YzhkNzM0MWRjMzNjNWMxYjIxMmE4NzEwZDU3MzM1Njg2N2YwYTQ5N2UxMzkwNGRkYiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuaWQifSx7InZhbHVlIjoiZDBkNzQ4OGY1MmFjYTRlYjc3OTQ4MTNhZThlMjYxYjBkYWQzOTBlMjgyYjUyYThjYTU4ZDViMDk0NTM5MmZmNiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEudHlwZVswXSJ9LHsidmFsdWUiOiI2YmJkYzhiNjNiYjU1ZmEyNzEzZGE5Y2IzMzcxOWNkNTZlMjgxYTE3NjE0ZmVlNTVjZTUxM2U5MzlhNjdiNzdlIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1ZXIifSx7InZhbHVlIjoiZjBmNTM1ODA4OTMzMWQwNGVkMTUxMzVlMWNkMzEwZGJlMjdmMGFiMDQ2OWNmNTY1MmQ1Yzc4ZjUwODM5Y2RiZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QudWVuIn0seyJ2YWx1ZSI6Ijc0YzczOGY1YjYyM2E2YjhmNjVlMDM3MGQ5ODBiM2YyMzU1ZTQwYjhkZjk4ODRlMzMzMGM3NTU5NmFkYjk3MTQiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LmNvbXBhbnluYW1lIn0seyJ2YWx1ZSI6ImM1ZTFhYjkzNTIwYWRlNjFkMGZmZWExMGQ2YmU0ZGY5NTVjNzc2MGY4NzdhNzMyOGY2Y2U4NzYyYzhkNWIzODQiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LnR5cGVbMF0ifSx7InZhbHVlIjoiMGYzMmZiYzE5NTRjMjVjNmUzYmY1ODg3MjVjNmQwOGQ3OGE2MGQzYzA5NWMyNjBiZTZkODRkNDc1N2YyMzc3OCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiOWJjOTk3MDFkNmRlYjM4OTY1OGE3N2Y2ZDg2ZmQzZTAzNDhmYzQ1MGZiOWM1ODA0MTJmNGRmYjVjNmYxMzBlYyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuZXhwaXJhdGlvbkRhdGUifSx7InZhbHVlIjoiNDFkMjA3ZTY3OGUwYzQ0YTRhMGU2MTgxZDFlNzg4NzY1NThhNmY3MmY2MWFjYjRmZDhiYzhhZjYzNWJiOTUzYiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5pZCJ9LHsidmFsdWUiOiI4MmY1YjM3ZjczMmQwZThkNGUyOTdiZDJjOTA4YWM3NmQzYzQ4MTg1MjBlMjJjMmIxMjMwMjk3ZTNjMDg4ZjFhIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5jcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiMDExZWE5MjA4MmJjZmMxNTM5MTU4ZGY4ZjFkZTlkMWMzMjVhNmU1NjM1YTA4NTk0NDE3MGEwNGVhNmQ1M2U1OSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0SW5kZXgifSx7InZhbHVlIjoiZGEyNjgwMjc3MmUyYTIwODMwZWYyYWNmNjU5OTI3NDcwMjhhNzlmOGE5ZDExYjAxZDlmNDVhNzdmZmQ5NDhhYiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0Q3JlZGVudGlhbCJ9LHsidmFsdWUiOiIwNjVkZTU1MTliNjZmNTBjYTc1YTNmY2RkZjRhNWM0NzRjMzhhZDM2MWIyMWU1YjI5ZWVjYzU3Y2ZiYWNlZTQ4IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1YW5jZURhdGUifSx7InZhbHVlIjoiNDJhNDU1MmRlZmIwYjI5MDcyYjE2ZWUzY2UwODA2OTJiYTMyN2QwZDQ2NDI2ZThlY2FkNTcxNzc4ZGViZGQwMCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEucHJvb2YudHlwZSJ9LHsidmFsdWUiOiI0MzJjNGE2YzExNjYwMDJjOGRiYjMzMDkyYTBmMmE4YzgxNzllMjE1MTk3ZjVlMTgzZmI1MmQ0Mzk3OTlhYTVmIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5jcmVhdGVkIn0seyJ2YWx1ZSI6ImRhZTIxYjhlODZiMGMwMmYwYjg3Y2UzMGQ4NTMxYmNiMzI4NTNhZDQ2NWY4NmYzNTliYWIzNGY2NjllNjJmYjQiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnByb29mUHVycG9zZSJ9LHsidmFsdWUiOiJlNzRkNWQ1YjFkYTdkZTQ5ZGQxZmUwMGY5MWYyMzRmN2U2ODZmYWVmNjU4MzI0MjQzNDZkMGVmYzBiYmEyMmFiIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5wcm9vZlZhbHVlIn0seyJ2YWx1ZSI6IjM4NjgxNWFiMjIyMmM2Yzg5N2JlNDRlYWRiZmUxYmE3NTkxYzdmYzkyMjJmY2ZiZDA3YTZkZTE3NzA5MTgyYTciLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnZlcmlmaWNhdGlvbk1ldGhvZCJ9LHsidmFsdWUiOiJlNTQzNDY2ZTVhNzVjN2QxMDczNjVkZThhMzcwNGM2MmIwNGVmYzliN2I5YWRiYjdiYWMwMWUwNzBiNjE0MzNkIiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMudHlwZSJ9LHsidmFsdWUiOiIwZTM5YjA5OTdhMWRiYjkyMmQ1OTBkMGIxNjVlMmUxYjQzMGJkZjYxNmIzMmUzOGVhMWE5ZmU5ZDc3MDA2YzQyIiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMuY3JlZGVudGlhbFN0YXR1c1R5cGUifSx7InZhbHVlIjoiNDNjMjFmN2I2YzdhNmUyZjA3NWIxODk5ODMzMzQ4ZmFjZjk5MWVmMjc1MzQxMTI1MzhhYWUyYzc2Yjc4N2MxZiIsInBhdGgiOiJyZW5kZXJNZXRob2QudHlwZSJ9LHsidmFsdWUiOiI5ZDliMzkxMWVkM2Q2OTU4ZDdiOWY3ZGE5Zjk0NGNmMDY1N2Q5OGE5NzVmNjgwZTU3YzJlMjQ3NjRiZWE1YTNmIiwicGF0aCI6InJlbmRlck1ldGhvZC5yZW5kZXJNZXRob2RUeXBlIn0seyJ2YWx1ZSI6IjcwMTc4ZGE4ODVkNGE4MmEyNjJhOGNlYjcyY2I1ZjA3Y2FlMzdlZDUzYzI4ZTliZWM4MTBhNzdiMzZjOWFkMzkiLCJwYXRoIjoicmVuZGVyTWV0aG9kLm5hbWUifSx7InZhbHVlIjoiMTg3Y2MwNmNkNGJmOGZjYWZhMTQyMGJmMzI5YTIzMTRjZjJmZjk1NzkzNTkzZjY2MWZjZmY3ZGMxZDA4YTNlNyIsInBhdGgiOiJyZW5kZXJNZXRob2QudXJsIn0seyJ2YWx1ZSI6IjAyMDU2ZmQyODI5ZTIxNzEwY2QyZTRlYzVmZWUxNjVmMTcyMDY1MTA0NWNlYzdhZGVjNGIwMDYyYjllYTI0MmYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QubmFtZSJ9LHsidmFsdWUiOiI5ODVlYjU0YWYwMmUwOGIyZTRkMDk0YjE2NTgwYjFmMWE5MWRkMzk5Y2JmNjZkZDIwOTI5OTMxY2ZiMDdjZDBmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmlkIn0seyJ2YWx1ZSI6ImE0NDdjODA0ZTdmZjBjMTBlYjFiN2JiMzU4ZjYwNWRmNmIzNzBlN2M3NjI1MzZhMmE0NDg2ZjUyNDVkMDk0ZmIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuZGF0ZSJ9LHsidmFsdWUiOiI5YzIzODdiNjUwNTUyYmU5MWQyYzg0ODdmZWQyYTI0MTQ0NmFkZjM2NDM3MDY4NmZjNjVjMzY0Y2ZjMGEyZDU4IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmN1c3RvbWVySWQifSx7InZhbHVlIjoiYzExYzNjNmVhODM1N2EzNTRjOTMxZDk2MzZkNWIxNTBkMmRhMzFjNDllODAxNWE2YzUyOGVhYzQwZWNjMTk4YiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50ZXJtcyJ9LHsidmFsdWUiOiJlMmFkMzg5YmE3Zjc4ZmE3YjBmNzkxOWUyYTM0NTAxODllNDlhNDI2YzU1ODFlOGVjZThhOWFhYzI1MTVmNjUyIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLm5hbWUifSx7InZhbHVlIjoiNThjMDlmMzI4MzNkOGQwYWY0YTRkZTc0OTRkYjk5NzJiZWQwNzVkOTkzMDQ0MjExMWM4ZmQ2ZTA4YTcyMzM0OSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6ImQ3MTY2YTVlODBiNzAxMjQyZTZjYWI4YTI3YzE2YjdiZTkzMGJmZTkxY2EyNGYxMTVjZTk2YjRlZjllZjE1NzEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uY2l0eSJ9LHsidmFsdWUiOiJiZmVjN2U2M2M2YWUyMTkzZGJjY2EyOWQwYTQ0Y2U1ZTk4MWNjNmFhNmM1Yjk4ZjY3NjBkMjk2MWE4ODRlYjYzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLnBvc3RhbENvZGUifSx7InZhbHVlIjoiMTBiYjFkY2FiY2YxN2EwYmFjMzg2NzdmMjNkNDU0Y2UwNDczZjUxMDYwZGZkOWQyMDVmNGUyMWU0OTA3MzJmZSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiIzNTdjZDk1ZjE3OTBkMjE0NWRhNDZlMzk1ZDI5MjcyMWQ2ZGQzZjkwMzY1ZDEyZWJhZjRhZWUxZDQzYzVjY2NjIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55Lm5hbWUifSx7InZhbHVlIjoiMDg5NDFhZGQ3YTU4MzBiOTE1MjBlYmVkNTY4YTQ2MTc5NjI5NjAzZGMzMjZkMDZiY2I0ODcxYmI2ZDVmZThhYSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6IjgzYjY5ZjEzZTQyNGY4NGY4YTAwMzBmNzljYzMxZjc0NjkwMzM2ZjhmNDllNWNhYTIxYTFmNWVlOWQ0ZjBiZWEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuY2l0eSJ9LHsidmFsdWUiOiJkMTRiODY4OTVmZTU2OGY3Yzc3NmRjOTUwMjc3NGE4OTQzYmNkODVhM2ZhNGNhOTM0NmVlMDAyNzFlMGVjOTA5IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LnBvc3RhbENvZGUifSx7InZhbHVlIjoiMDgxMjYzMjQxZDQ1YzY2NGJhMjEwZTQ0Njk1MmYyNTliNmFlMDA4NjVhZDk0YjliZGNiOTJhMmNjY2Y4ZTFhZSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiIzYmY2NDA0MjM1Y2Y5YjkxYjlhZmQ4ZjdkNTE5YzY3NWJhYzdmNTc0N2M5NTIwZWViZTYzY2VmM2VlNzZkNzQwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5uYW1lIn0seyJ2YWx1ZSI6ImExZjA0MjExM2JlMjEyZThjZTZjNTZjMDllMjkyOTk3OWMzOWRkZTk3Mzg4OTVjMDI2ODA2YjQ2MzQyNDRlNjAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmVtYWlsIn0seyJ2YWx1ZSI6IjY4MDc3M2Q1M2U5YjEyYTE1NzA5ZTM0NjYxNDY0MzlmM2FlM2Q0NGVjZTQ0YjhmZTY4MjY3MTYyYTc5ODRiYzMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiI3NjNhOTNhMTNlNmMxZmE3YWU0YzEzNzIyMTU5ZjIxMDk4YWMyODg5NGZmMWI3ODRlMTVlYzZhMjI0NDExNjAwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0ucXVhbnRpdHkifSx7InZhbHVlIjoiOTdjZGQ2MzE2NjljMjQ3ZWFiZGU2OTdiM2M5MTkwZTMxOTk5M2Y0NDU2MjFmODEwNTU2MDdhYjgwOGYyZTY4NyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiJkZjM5Mjk5YjZjMzFmYTU3YzVjOWU2OGY5NGMzNDA5OTIyOGZkZWE1M2ZhZGY5N2RiMjExYjQxMGVhMzI1MDQ1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uYW1vdW50In0seyJ2YWx1ZSI6ImRmNTZhZjU4OTRhZmI3OGY0Y2IwOTRiYzVhNWJjNmQ5Njg2MzY5YWZjYmUyYTM0NDE2YThmNWNhMmYxMjQwY2EiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiJhZTkxZTc5NTdlODNlN2M0NDgwMDU1MzEyZWU1NWYwNDcxMjQwOGY5YWVkYmNiNTBhNWRmY2NjZjFlMmYwOTMwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0ucXVhbnRpdHkifSx7InZhbHVlIjoiZWZjMzA5M2U0YmUzMTc0NzYyZmRiMGI2Y2Q0MmY5NmI2YjJlNDUyZmQxYjY2NzQxMjRjNWVhZjU5ODJiOTQ5YSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiJmMjllNjA5YTRlMjM3OTkzNWU5NmM4NTVkZDk0MjQ3YzhjMmRjMTJkMDEyYzQ1NWQwZjNhYTJkMTQyN2EyMmE2IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uYW1vdW50In0seyJ2YWx1ZSI6IjA0OTBmNjViMDdmOTRkMmFlMTUxOGIwODAyYjdjNTMyZDk1YzhmZjMxYzk4MDRjZTQ0NDJhYjM5MDJhZjcyNTciLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiI2OTU2ZjczMDhhMTFlMDVhYzBmYTYwZDFhNTMzMGYwNjZiMDQ4NjUwY2I2MWQ1YjQ1Nzg4NjE0ZjBjNWFiYTZlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0ucXVhbnRpdHkifSx7InZhbHVlIjoiYWI2MGI4MzM2MjllZjA3MGU1YzZkYzRlODNlOWRhMmJhYTU0NTg2Nzc5ZGE1ZGIyMmI0NzQ0ODhmZWNmMmJjYSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiJjNTlhOGZjMGIzMTYyZmI2ZGY5YjM0MjE5ZTQ2NmVkYTkyMWU5NjVlYzY1MzMzMGE1NDc0ZWFiODRjZTVjNjExIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uYW1vdW50In0seyJ2YWx1ZSI6IjMyMmI4YTcyZDJkNTY2YTc5NmJhZDYzNTFmZGZkN2JkOGNmZDIxYWJjNzJiZTZlZGRlNmYyZWVkNTFlN2IyNTQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Quc3VidG90YWwifSx7InZhbHVlIjoiNTE2OTJjNzc3NTFiMTljZjY4ODRlOTY1YmYxZDRlZTY4M2NkZGVkYzM5MjgyZTQ5YWE4NTZmNTkwNjA5MWI1OSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXgifSx7InZhbHVlIjoiMGFjNDQ4NmVkYzIxNzUyYjNkOGRkZDQ0MDExNWM5MDM2NmMwNjc3MDNlNDEzZjM5MTI2ZTQ0NGRmYjNkM2JmMyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXhUb3RhbCJ9LHsidmFsdWUiOiIyMzUzZDJhZGIyMDBhMTc0YjVmOTFhOTA5NWQxZWEzYmE0MGZkMzRmNzk3Nzc3NWNmNzU4NGE3YTllZDNjZTNjIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnRvdGFsIn1d", + "privacy": { "obfuscated": [] }, + "key": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C#controller", + "signature": "0x49c4ca31a127b9ff04db68e25323174b0336c0c9a53fdb24678f55e7e2ab9d9f43abd8ef98f06bd54008ec2df360a0fee71e1acf9784e209a147d471db1637451c" + } +} diff --git a/test/fixtures/v4/did-idvc-wrapped.json b/test/fixtures/v4/did-idvc-wrapped.json new file mode 100644 index 00000000..2b814075 --- /dev/null +++ b/test/fixtures/v4/did-idvc-wrapped.json @@ -0,0 +1,99 @@ +{ + "@context": ["https://www.w3.org/2018/credentials/v1", "http://localhost:8080/alpha-context.json"], + "type": ["VerifiableCredential", "TradeTrustCredential"], + "validFrom": "2021-03-08T12:00:00+08:00", + "issuer": { + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", + "type": "TradeTrustIssuer", + "name": "My Own Company Pte Ltd", + "identityProof": { + "identityProofType": "IDVC", + "identifier": "My Own Company Pte Ltd", + "identityVC": { + "type": "TradeTrustIdentityVC", + "data": { + "@context": [ + "https://w3id.org/security/bbs/v1", + "https://www.w3.org/2018/credentials/v1", + "https://stg.issuer.myinfo.gov.sg/myinfobusiness/schema/corporatebasicdetails/v1", + "https://w3id.org/vc/status-list/2021/v1" + ], + "id": "https://sbl.alwaysdata.net/oa/credentials/123456789", + "type": ["VerifiableCredential"], + "issuer": "did:web:sbl.alwaysdata.net:oa", + "credentialSubject": { + "uen": "198801234E", + "companyname": "My Own Company Pte Ltd", + "type": ["CorporateBasicDetails"], + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C" + }, + "expirationDate": "2023-11-01T06:45:43Z", + "credentialStatus": { + "id": "https://sbl.alwaysdata.net/oa/status/1#325", + "type": "StatusList2021Entry", + "statusListIndex": 325, + "statusListCredential": "https://sbl.alwaysdata.net/oa/status/1/325" + }, + "issuanceDate": "2023-22-13T01:35:08Z", + "proof": { + "type": "BbsBlsSignature2020", + "created": "2023-10-18T07:14:46Z", + "proofPurpose": "assertionMethod", + "proofValue": "tqvUVZOPaY/A+7Wu47HZIYbboPU/MPGhb1EPLUKKPRwmRe8QJ/dzjRviQ5fAbR88TjSalqLbaBeopNocjrl7TmzCOlLQxGeNC4El1TCICu5tiX0HxGSNAPY4t5CglTLMTsdu5kg4f0a5MGQTnFgwyw==", + "verificationMethod": "did:web:sbl.alwaysdata.net:oa#didkey" + } + } + } + } + }, + "credentialStatus": { "type": "TradeTrustCredentialStatus", "credentialStatusType": "NONE" }, + "renderMethod": { + "type": "TradeTrustRenderMethod", + "renderMethodType": "EMBEDDED_RENDERER", + "name": "INVOICE", + "url": "https://generic-templates.tradetrust.io" + }, + "credentialSubject": { + "name": "TradeTrust Invoice", + "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "date": "2018-02-21", + "customerId": "564", + "terms": "Due Upon Receipt", + "billFrom": { + "name": "ABC Company", + "streetAddress": "Level 1, Industry Offices", + "city": "Singapore", + "postalCode": "123456", + "phoneNumber": "60305029" + }, + "billTo": { + "company": { + "name": "DEF Company", + "streetAddress": "Level 2, Industry Offices", + "city": "Singapore", + "postalCode": "612345", + "phoneNumber": "61204028" + }, + "name": "James Lee", + "email": "def@company.com" + }, + "billableItems": [ + { "description": "Service Fee", "quantity": "1", "unitPrice": "200", "amount": "200" }, + { "description": "Labor: 5 hours at $75/hr", "quantity": "5", "unitPrice": "75", "amount": "375" }, + { "description": "New client discount", "quantity": "1", "unitPrice": "50", "amount": "50" } + ], + "subtotal": "625", + "tax": "0", + "taxTotal": "0", + "total": "625" + }, + "proof": { + "type": "TradeTrustMerkleProofSignature2018", + "proofPurpose": "assertionMethod", + "targetHash": "84edabc618b2a5a7bad7eee9b58c287e9a39959d231eef3ab9270bd99922e54c", + "proofs": [], + "merkleRoot": "84edabc618b2a5a7bad7eee9b58c287e9a39959d231eef3ab9270bd99922e54c", + "salts": "W3sidmFsdWUiOiJlMTJhNTk0ZjkyYmNjZjhlYTkwOWIwZmQzZjg3NTMzOGFkOTEwNTM3YjFhMTUwOTQzZTk2MTM2MWI4MzEzMzM3IiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6ImYxMmQ0MDFjY2YyOTk4ZDQxMzBhZTc1ZWQzMWI3MjI3MjA0MTBjYzEyZTRhYWY1MjEyM2MwNzdhOWJkNmUzM2QiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiZDYwN2NhMmM2NDk1MTNjZDliNTQ2YTA1OTdiMzNkOGE4MTkzNWYxNzE1MTYzMTY0YzQ5ZGU4NTBkMDY1NTE5MCIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6ImJkMWIxYzQ1M2I5MTFiMjQ3Zjk0OGM0NmRhNDRmMjFkNjYxYzMwYWMyNTkwNzgwYTM2YjYwNmE3YjY1Y2I2ZTciLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiI0NWQyNzNiZTJlNzc5YTA0YjQxNmVkZjhjZjBhMTVlYTEyOWM1MzIyMmJmZDFjNmUzZTgyMTJkYzhjYjQxMGZiIiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiJhNzYzY2M3YjkxN2ZjODc4N2Q5ZmIzMWM4YWQ3ZjUxYmQzNTQ0OTU1ZDg3ODEyZTFmN2FiZWM5MTI0YzhjYzM0IiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiI5MWVlOGZkYTY2Y2EzMmJmNmFmY2RiMDEzMzJjMDMzNGRhN2EwODZkNTZjYzg2NzhlMTUxZDM5ZjFlNjQxYzhlIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6Ijg2NDQ1NzUzMjlhMGEwOTdmYmIzZTE1ZGEwOThjNTc2OTUyZDYzMWNhOWFhNDU4MjZkMzk1NTYzNzI3YThmN2IiLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiYTEzYmNjYTBjODZhMjljOGZjZTM2MTgzMWU0Y2Y2MWJmMzAxYTg5MTY4MGMxNzRiNjc5NTQ5NDE2MTczYjI1ZCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiI5NTU4ODY0NmUwYjBlY2Y5MzgyYjExZjEyYTI0MjdiY2M1ZDczNDQxZGExMDQ3ZTI5OGNjN2RmMDdjYzEzZjNiIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiMTQ2ODY5YTlhNGU2MDNiYjUyYTI0N2M1MzFmYWM5N2RjMDIyMmY0YmQzNjY5ZWRlZjc4NTEyOTgyY2UwYjNkZSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLnR5cGUifSx7InZhbHVlIjoiN2NiYzNiZTI4ZDkwMDc3NzIyOGNhZDVhYWYwMjc4ZTkwMzE1YTIzNTExNjdjOTgwMDExMGRhN2ViYmZkOGRmYiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMF0ifSx7InZhbHVlIjoiOWU0MjJlZWUxNTk4MDljZjcyNmQ4MzIyYmVlMDE2YWI1ZWRmZDIxM2QwZDllNWNiOGFiMDgzYWMyZjRjMjU1MiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiMjYzMjdkZjVkNmQwYjRmZWQxZjkxZWExY2U3YzZhYWU2M2ZlOGNmYjhhZjExOTg4NzA3YmFkNGNmYzE5MjVmYSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiMWE2OTI0ZDQ1ZjZhMzEyYThiMDVlYzlmZmVlMjBmMzVlODZiYWUwMmNlNjk3ZjdhZTNmOTBiYzkyMGQwNzA4YyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbM10ifSx7InZhbHVlIjoiZjEzNTJhZTIyZWVmNmI2YzhkNzM0MWRjMzNjNWMxYjIxMmE4NzEwZDU3MzM1Njg2N2YwYTQ5N2UxMzkwNGRkYiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuaWQifSx7InZhbHVlIjoiZDBkNzQ4OGY1MmFjYTRlYjc3OTQ4MTNhZThlMjYxYjBkYWQzOTBlMjgyYjUyYThjYTU4ZDViMDk0NTM5MmZmNiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEudHlwZVswXSJ9LHsidmFsdWUiOiI2YmJkYzhiNjNiYjU1ZmEyNzEzZGE5Y2IzMzcxOWNkNTZlMjgxYTE3NjE0ZmVlNTVjZTUxM2U5MzlhNjdiNzdlIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1ZXIifSx7InZhbHVlIjoiZjBmNTM1ODA4OTMzMWQwNGVkMTUxMzVlMWNkMzEwZGJlMjdmMGFiMDQ2OWNmNTY1MmQ1Yzc4ZjUwODM5Y2RiZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QudWVuIn0seyJ2YWx1ZSI6Ijc0YzczOGY1YjYyM2E2YjhmNjVlMDM3MGQ5ODBiM2YyMzU1ZTQwYjhkZjk4ODRlMzMzMGM3NTU5NmFkYjk3MTQiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LmNvbXBhbnluYW1lIn0seyJ2YWx1ZSI6ImM1ZTFhYjkzNTIwYWRlNjFkMGZmZWExMGQ2YmU0ZGY5NTVjNzc2MGY4NzdhNzMyOGY2Y2U4NzYyYzhkNWIzODQiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LnR5cGVbMF0ifSx7InZhbHVlIjoiMGYzMmZiYzE5NTRjMjVjNmUzYmY1ODg3MjVjNmQwOGQ3OGE2MGQzYzA5NWMyNjBiZTZkODRkNDc1N2YyMzc3OCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiOWJjOTk3MDFkNmRlYjM4OTY1OGE3N2Y2ZDg2ZmQzZTAzNDhmYzQ1MGZiOWM1ODA0MTJmNGRmYjVjNmYxMzBlYyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuZXhwaXJhdGlvbkRhdGUifSx7InZhbHVlIjoiNDFkMjA3ZTY3OGUwYzQ0YTRhMGU2MTgxZDFlNzg4NzY1NThhNmY3MmY2MWFjYjRmZDhiYzhhZjYzNWJiOTUzYiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5pZCJ9LHsidmFsdWUiOiI4MmY1YjM3ZjczMmQwZThkNGUyOTdiZDJjOTA4YWM3NmQzYzQ4MTg1MjBlMjJjMmIxMjMwMjk3ZTNjMDg4ZjFhIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5jcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiMDExZWE5MjA4MmJjZmMxNTM5MTU4ZGY4ZjFkZTlkMWMzMjVhNmU1NjM1YTA4NTk0NDE3MGEwNGVhNmQ1M2U1OSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0SW5kZXgifSx7InZhbHVlIjoiZGEyNjgwMjc3MmUyYTIwODMwZWYyYWNmNjU5OTI3NDcwMjhhNzlmOGE5ZDExYjAxZDlmNDVhNzdmZmQ5NDhhYiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0Q3JlZGVudGlhbCJ9LHsidmFsdWUiOiIwNjVkZTU1MTliNjZmNTBjYTc1YTNmY2RkZjRhNWM0NzRjMzhhZDM2MWIyMWU1YjI5ZWVjYzU3Y2ZiYWNlZTQ4IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1YW5jZURhdGUifSx7InZhbHVlIjoiNDJhNDU1MmRlZmIwYjI5MDcyYjE2ZWUzY2UwODA2OTJiYTMyN2QwZDQ2NDI2ZThlY2FkNTcxNzc4ZGViZGQwMCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEucHJvb2YudHlwZSJ9LHsidmFsdWUiOiI0MzJjNGE2YzExNjYwMDJjOGRiYjMzMDkyYTBmMmE4YzgxNzllMjE1MTk3ZjVlMTgzZmI1MmQ0Mzk3OTlhYTVmIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5jcmVhdGVkIn0seyJ2YWx1ZSI6ImRhZTIxYjhlODZiMGMwMmYwYjg3Y2UzMGQ4NTMxYmNiMzI4NTNhZDQ2NWY4NmYzNTliYWIzNGY2NjllNjJmYjQiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnByb29mUHVycG9zZSJ9LHsidmFsdWUiOiJlNzRkNWQ1YjFkYTdkZTQ5ZGQxZmUwMGY5MWYyMzRmN2U2ODZmYWVmNjU4MzI0MjQzNDZkMGVmYzBiYmEyMmFiIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5wcm9vZlZhbHVlIn0seyJ2YWx1ZSI6IjM4NjgxNWFiMjIyMmM2Yzg5N2JlNDRlYWRiZmUxYmE3NTkxYzdmYzkyMjJmY2ZiZDA3YTZkZTE3NzA5MTgyYTciLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnZlcmlmaWNhdGlvbk1ldGhvZCJ9LHsidmFsdWUiOiJlNTQzNDY2ZTVhNzVjN2QxMDczNjVkZThhMzcwNGM2MmIwNGVmYzliN2I5YWRiYjdiYWMwMWUwNzBiNjE0MzNkIiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMudHlwZSJ9LHsidmFsdWUiOiIwZTM5YjA5OTdhMWRiYjkyMmQ1OTBkMGIxNjVlMmUxYjQzMGJkZjYxNmIzMmUzOGVhMWE5ZmU5ZDc3MDA2YzQyIiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMuY3JlZGVudGlhbFN0YXR1c1R5cGUifSx7InZhbHVlIjoiNDNjMjFmN2I2YzdhNmUyZjA3NWIxODk5ODMzMzQ4ZmFjZjk5MWVmMjc1MzQxMTI1MzhhYWUyYzc2Yjc4N2MxZiIsInBhdGgiOiJyZW5kZXJNZXRob2QudHlwZSJ9LHsidmFsdWUiOiI5ZDliMzkxMWVkM2Q2OTU4ZDdiOWY3ZGE5Zjk0NGNmMDY1N2Q5OGE5NzVmNjgwZTU3YzJlMjQ3NjRiZWE1YTNmIiwicGF0aCI6InJlbmRlck1ldGhvZC5yZW5kZXJNZXRob2RUeXBlIn0seyJ2YWx1ZSI6IjcwMTc4ZGE4ODVkNGE4MmEyNjJhOGNlYjcyY2I1ZjA3Y2FlMzdlZDUzYzI4ZTliZWM4MTBhNzdiMzZjOWFkMzkiLCJwYXRoIjoicmVuZGVyTWV0aG9kLm5hbWUifSx7InZhbHVlIjoiMTg3Y2MwNmNkNGJmOGZjYWZhMTQyMGJmMzI5YTIzMTRjZjJmZjk1NzkzNTkzZjY2MWZjZmY3ZGMxZDA4YTNlNyIsInBhdGgiOiJyZW5kZXJNZXRob2QudXJsIn0seyJ2YWx1ZSI6IjAyMDU2ZmQyODI5ZTIxNzEwY2QyZTRlYzVmZWUxNjVmMTcyMDY1MTA0NWNlYzdhZGVjNGIwMDYyYjllYTI0MmYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QubmFtZSJ9LHsidmFsdWUiOiI5ODVlYjU0YWYwMmUwOGIyZTRkMDk0YjE2NTgwYjFmMWE5MWRkMzk5Y2JmNjZkZDIwOTI5OTMxY2ZiMDdjZDBmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmlkIn0seyJ2YWx1ZSI6ImE0NDdjODA0ZTdmZjBjMTBlYjFiN2JiMzU4ZjYwNWRmNmIzNzBlN2M3NjI1MzZhMmE0NDg2ZjUyNDVkMDk0ZmIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuZGF0ZSJ9LHsidmFsdWUiOiI5YzIzODdiNjUwNTUyYmU5MWQyYzg0ODdmZWQyYTI0MTQ0NmFkZjM2NDM3MDY4NmZjNjVjMzY0Y2ZjMGEyZDU4IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmN1c3RvbWVySWQifSx7InZhbHVlIjoiYzExYzNjNmVhODM1N2EzNTRjOTMxZDk2MzZkNWIxNTBkMmRhMzFjNDllODAxNWE2YzUyOGVhYzQwZWNjMTk4YiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50ZXJtcyJ9LHsidmFsdWUiOiJlMmFkMzg5YmE3Zjc4ZmE3YjBmNzkxOWUyYTM0NTAxODllNDlhNDI2YzU1ODFlOGVjZThhOWFhYzI1MTVmNjUyIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLm5hbWUifSx7InZhbHVlIjoiNThjMDlmMzI4MzNkOGQwYWY0YTRkZTc0OTRkYjk5NzJiZWQwNzVkOTkzMDQ0MjExMWM4ZmQ2ZTA4YTcyMzM0OSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6ImQ3MTY2YTVlODBiNzAxMjQyZTZjYWI4YTI3YzE2YjdiZTkzMGJmZTkxY2EyNGYxMTVjZTk2YjRlZjllZjE1NzEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uY2l0eSJ9LHsidmFsdWUiOiJiZmVjN2U2M2M2YWUyMTkzZGJjY2EyOWQwYTQ0Y2U1ZTk4MWNjNmFhNmM1Yjk4ZjY3NjBkMjk2MWE4ODRlYjYzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLnBvc3RhbENvZGUifSx7InZhbHVlIjoiMTBiYjFkY2FiY2YxN2EwYmFjMzg2NzdmMjNkNDU0Y2UwNDczZjUxMDYwZGZkOWQyMDVmNGUyMWU0OTA3MzJmZSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiIzNTdjZDk1ZjE3OTBkMjE0NWRhNDZlMzk1ZDI5MjcyMWQ2ZGQzZjkwMzY1ZDEyZWJhZjRhZWUxZDQzYzVjY2NjIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55Lm5hbWUifSx7InZhbHVlIjoiMDg5NDFhZGQ3YTU4MzBiOTE1MjBlYmVkNTY4YTQ2MTc5NjI5NjAzZGMzMjZkMDZiY2I0ODcxYmI2ZDVmZThhYSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6IjgzYjY5ZjEzZTQyNGY4NGY4YTAwMzBmNzljYzMxZjc0NjkwMzM2ZjhmNDllNWNhYTIxYTFmNWVlOWQ0ZjBiZWEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuY2l0eSJ9LHsidmFsdWUiOiJkMTRiODY4OTVmZTU2OGY3Yzc3NmRjOTUwMjc3NGE4OTQzYmNkODVhM2ZhNGNhOTM0NmVlMDAyNzFlMGVjOTA5IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LnBvc3RhbENvZGUifSx7InZhbHVlIjoiMDgxMjYzMjQxZDQ1YzY2NGJhMjEwZTQ0Njk1MmYyNTliNmFlMDA4NjVhZDk0YjliZGNiOTJhMmNjY2Y4ZTFhZSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiIzYmY2NDA0MjM1Y2Y5YjkxYjlhZmQ4ZjdkNTE5YzY3NWJhYzdmNTc0N2M5NTIwZWViZTYzY2VmM2VlNzZkNzQwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5uYW1lIn0seyJ2YWx1ZSI6ImExZjA0MjExM2JlMjEyZThjZTZjNTZjMDllMjkyOTk3OWMzOWRkZTk3Mzg4OTVjMDI2ODA2YjQ2MzQyNDRlNjAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmVtYWlsIn0seyJ2YWx1ZSI6IjY4MDc3M2Q1M2U5YjEyYTE1NzA5ZTM0NjYxNDY0MzlmM2FlM2Q0NGVjZTQ0YjhmZTY4MjY3MTYyYTc5ODRiYzMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiI3NjNhOTNhMTNlNmMxZmE3YWU0YzEzNzIyMTU5ZjIxMDk4YWMyODg5NGZmMWI3ODRlMTVlYzZhMjI0NDExNjAwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0ucXVhbnRpdHkifSx7InZhbHVlIjoiOTdjZGQ2MzE2NjljMjQ3ZWFiZGU2OTdiM2M5MTkwZTMxOTk5M2Y0NDU2MjFmODEwNTU2MDdhYjgwOGYyZTY4NyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiJkZjM5Mjk5YjZjMzFmYTU3YzVjOWU2OGY5NGMzNDA5OTIyOGZkZWE1M2ZhZGY5N2RiMjExYjQxMGVhMzI1MDQ1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uYW1vdW50In0seyJ2YWx1ZSI6ImRmNTZhZjU4OTRhZmI3OGY0Y2IwOTRiYzVhNWJjNmQ5Njg2MzY5YWZjYmUyYTM0NDE2YThmNWNhMmYxMjQwY2EiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiJhZTkxZTc5NTdlODNlN2M0NDgwMDU1MzEyZWU1NWYwNDcxMjQwOGY5YWVkYmNiNTBhNWRmY2NjZjFlMmYwOTMwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0ucXVhbnRpdHkifSx7InZhbHVlIjoiZWZjMzA5M2U0YmUzMTc0NzYyZmRiMGI2Y2Q0MmY5NmI2YjJlNDUyZmQxYjY2NzQxMjRjNWVhZjU5ODJiOTQ5YSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiJmMjllNjA5YTRlMjM3OTkzNWU5NmM4NTVkZDk0MjQ3YzhjMmRjMTJkMDEyYzQ1NWQwZjNhYTJkMTQyN2EyMmE2IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uYW1vdW50In0seyJ2YWx1ZSI6IjA0OTBmNjViMDdmOTRkMmFlMTUxOGIwODAyYjdjNTMyZDk1YzhmZjMxYzk4MDRjZTQ0NDJhYjM5MDJhZjcyNTciLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiI2OTU2ZjczMDhhMTFlMDVhYzBmYTYwZDFhNTMzMGYwNjZiMDQ4NjUwY2I2MWQ1YjQ1Nzg4NjE0ZjBjNWFiYTZlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0ucXVhbnRpdHkifSx7InZhbHVlIjoiYWI2MGI4MzM2MjllZjA3MGU1YzZkYzRlODNlOWRhMmJhYTU0NTg2Nzc5ZGE1ZGIyMmI0NzQ0ODhmZWNmMmJjYSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiJjNTlhOGZjMGIzMTYyZmI2ZGY5YjM0MjE5ZTQ2NmVkYTkyMWU5NjVlYzY1MzMzMGE1NDc0ZWFiODRjZTVjNjExIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uYW1vdW50In0seyJ2YWx1ZSI6IjMyMmI4YTcyZDJkNTY2YTc5NmJhZDYzNTFmZGZkN2JkOGNmZDIxYWJjNzJiZTZlZGRlNmYyZWVkNTFlN2IyNTQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Quc3VidG90YWwifSx7InZhbHVlIjoiNTE2OTJjNzc3NTFiMTljZjY4ODRlOTY1YmYxZDRlZTY4M2NkZGVkYzM5MjgyZTQ5YWE4NTZmNTkwNjA5MWI1OSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXgifSx7InZhbHVlIjoiMGFjNDQ4NmVkYzIxNzUyYjNkOGRkZDQ0MDExNWM5MDM2NmMwNjc3MDNlNDEzZjM5MTI2ZTQ0NGRmYjNkM2JmMyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXhUb3RhbCJ9LHsidmFsdWUiOiIyMzUzZDJhZGIyMDBhMTc0YjVmOTFhOTA5NWQxZWEzYmE0MGZkMzRmNzk3Nzc3NWNmNzU4NGE3YTllZDNjZTNjIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnRvdGFsIn1d", + "privacy": { "obfuscated": [] } + } +} diff --git a/test/fixtures/v4/did-raw.json b/test/fixtures/v4/did-raw.json index 788b56a2..85de0b6d 100644 --- a/test/fixtures/v4/did-raw.json +++ b/test/fixtures/v4/did-raw.json @@ -1,39 +1,73 @@ { - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://schemata.openattestation.com/com/openattestation/4.0/alpha-context.json" - ], - "type": ["VerifiableCredential", "OpenAttestationCredential"], + "@context": ["https://www.w3.org/2018/credentials/v1", "http://localhost:8080/alpha-context.json"], + "type": ["VerifiableCredential", "TradeTrustCredential"], "validFrom": "2021-03-08T12:00:00+08:00", - "name": "Republic of Singapore Driving Licence", "issuer": { - "id": "did:ethr:0xB26B4941941C51a4885E5B7D3A1B861E54405f90", - "type": "OpenAttestationIssuer", - "name": "Government Technology Agency of Singapore (GovTech)", - "identityProof": { "identityProofType": "DNS-DID", "identifier": "example.openattestation.com" } + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", + "type": "TradeTrustIssuer", + "name": "My Own Company Pte Ltd", + "identityProof": { + "identityProofType": "DNS-DID", + "identifier": "example.tradetrust.io" + } + }, + "credentialStatus": { + "type": "TradeTrustCredentialStatus", + "credentialStatusType": "NONE" }, - "credentialStatus": { "type": "OpenAttestationCredentialStatus", "credentialStatusType": "NONE" }, "renderMethod": { - "type": "OpenAttestationRenderMethod", + "type": "TradeTrustRenderMethod", "renderMethodType": "EMBEDDED_RENDERER", - "name": "GOVTECH_DEMO", - "url": "https://demo-renderer.openattestation.com" + "name": "INVOICE", + "url": "https://generic-templates.tradetrust.io" }, "credentialSubject": { + "name": "TradeTrust Invoice", "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", - "type": ["DriversLicense"], - "name": "John Doe", - "licenses": [ + "date": "2018-02-21", + "customerId": "564", + "terms": "Due Upon Receipt", + "billFrom": { + "name": "ABC Company", + "streetAddress": "Level 1, Industry Offices", + "city": "Singapore", + "postalCode": "123456", + "phoneNumber": "60305029" + }, + "billTo": { + "company": { + "name": "DEF Company", + "streetAddress": "Level 2, Industry Offices", + "city": "Singapore", + "postalCode": "612345", + "phoneNumber": "61204028" + }, + "name": "James Lee", + "email": "def@company.com" + }, + "billableItems": [ + { + "description": "Service Fee", + "quantity": "1", + "unitPrice": "200", + "amount": "200" + }, { - "class": "3", - "description": "Motor cars with unladen weight <= 3000kg", - "effectiveDate": "2013-05-16T00:00:00+08:00" + "description": "Labor: 5 hours at $75/hr", + "quantity": "5", + "unitPrice": "75", + "amount": "375" }, { - "class": "3A", - "description": "Motor cars with unladen weight <= 3000kg", - "effectiveDate": "2013-05-16T00:00:00+08:00" + "description": "New client discount", + "quantity": "1", + "unitPrice": "50", + "amount": "50" } - ] + ], + "subtotal": "625", + "tax": "0", + "taxTotal": "0", + "total": "625" } } diff --git a/test/fixtures/v4/did-raw2.json b/test/fixtures/v4/did-raw2.json new file mode 100644 index 00000000..f2fb1681 --- /dev/null +++ b/test/fixtures/v4/did-raw2.json @@ -0,0 +1,73 @@ +{ + "@context": ["https://www.w3.org/2018/credentials/v1", "http://localhost:8080/alpha-context.json"], + "type": ["VerifiableCredential", "TradeTrustCredential"], + "validFrom": "2021-03-08T12:00:00+08:00", + "issuer": { + "id": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89", + "type": "TradeTrustIssuer", + "name": "My Own Company Pte Ltd", + "identityProof": { + "identityProofType": "DNS-DID", + "identifier": "example.tradetrust.io" + } + }, + "credentialStatus": { + "type": "TradeTrustCredentialStatus", + "credentialStatusType": "NONE" + }, + "renderMethod": { + "type": "TradeTrustRenderMethod", + "renderMethodType": "EMBEDDED_RENDERER", + "name": "INVOICE", + "url": "https://generic-templates.tradetrust.io" + }, + "credentialSubject": { + "name": "TradeTrust Invoice", + "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "date": "2018-02-21", + "customerId": "564", + "terms": "Due Upon Receipt", + "billFrom": { + "name": "ABC Company", + "streetAddress": "Level 1, Industry Offices", + "city": "Singapore", + "postalCode": "123456", + "phoneNumber": "60305029" + }, + "billTo": { + "company": { + "name": "DEF Company", + "streetAddress": "Level 2, Industry Offices", + "city": "Singapore", + "postalCode": "612345", + "phoneNumber": "61204028" + }, + "name": "James Lee", + "email": "def@company.com" + }, + "billableItems": [ + { + "description": "Service Fee", + "quantity": "1", + "unitPrice": "200", + "amount": "200" + }, + { + "description": "Labor: 5 hours at $75/hr", + "quantity": "5", + "unitPrice": "75", + "amount": "375" + }, + { + "description": "New client discount", + "quantity": "1", + "unitPrice": "50", + "amount": "50" + } + ], + "subtotal": "625", + "tax": "0", + "taxTotal": "0", + "total": "625" + } +} diff --git a/test/fixtures/v4/did-signed-wrapped.json b/test/fixtures/v4/did-signed-wrapped.json deleted file mode 100644 index f2efde6d..00000000 --- a/test/fixtures/v4/did-signed-wrapped.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://schemata.openattestation.com/com/openattestation/4.0/alpha-context.json" - ], - "type": ["VerifiableCredential", "OpenAttestationCredential"], - "validFrom": "2021-03-08T12:00:00+08:00", - "name": "Republic of Singapore Driving Licence", - "issuer": { - "id": "did:ethr:0xB26B4941941C51a4885E5B7D3A1B861E54405f90", - "type": "OpenAttestationIssuer", - "name": "Government Technology Agency of Singapore (GovTech)", - "identityProof": { "identityProofType": "DNS-DID", "identifier": "example.openattestation.com" } - }, - "credentialStatus": { "type": "OpenAttestationCredentialStatus", "credentialStatusType": "NONE" }, - "renderMethod": { - "type": "OpenAttestationRenderMethod", - "renderMethodType": "EMBEDDED_RENDERER", - "name": "GOVTECH_DEMO", - "url": "https://demo-renderer.openattestation.com" - }, - "credentialSubject": { - "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", - "type": ["DriversLicense"], - "name": "John Doe", - "licenses": [ - { - "class": "3", - "description": "Motor cars with unladen weight <= 3000kg", - "effectiveDate": "2013-05-16T00:00:00+08:00" - }, - { - "class": "3A", - "description": "Motor cars with unladen weight <= 3000kg", - "effectiveDate": "2013-05-16T00:00:00+08:00" - } - ] - }, - "proof": { - "type": "OpenAttestationMerkleProofSignature2018", - "proofPurpose": "assertionMethod", - "targetHash": "adb16863b9b92f1f46d67f518f853092404dc1322ffb61b45a831ee113f4ea99", - "proofs": [], - "merkleRoot": "adb16863b9b92f1f46d67f518f853092404dc1322ffb61b45a831ee113f4ea99", - "salts": "W3sidmFsdWUiOiJkYTlkMTE5MTMxOWRjOTM4ZTQ2ZjZhYmMzMjU1NTM5NGYwYzEzNDIyMGUwYjgyMDY0NzBhYjlmNmYxN2QyZTJlIiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6IjhhZDM5Njg2NGIwNGI5ZjYxY2I3ODNjY2M1YWEyNTYxODgxYmRiODZmZmI5ZmNjZjViYTQ1YzUyN2MwZGFmMGMiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiMjYwNDllNWExODQ4MDVlYTUxNjQ4OTM3OGI0NDZhNTdiMjdlZWU0YmFhN2VmYjBkNWM3OTcwMGMzZDI5OGM5MyIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6IjU3N2M2ZGUzMzYzZmE1ZjA2ZDc5NjQyMjAxNTk3ODkzYzdmNDg3NWZlYzFiZTYyOWIxZWRkNTdhZWFlOTE3YzkiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiI0NmMyOTY5MTVkZWVhNDMwMDNmY2ZmNjc3NzUxNTc3Zjg2MTdlODliYjBjNDhiNzIwMTdlMzRkOWNhNTM0ZGNlIiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiIwZWQ1Yzg0OTBlYjg2YWM5YmEyNGJlYzc3OTE2MThhZWZjZGE2M2M3OGNmZDJlMTdjMWNlNDRmNzVmZjU3NjljIiwicGF0aCI6Im5hbWUifSx7InZhbHVlIjoiMzEyNGUxNzc4Y2EzYTc2ZmI0MjUxNGExMmIzNDYzYmY4ZmY4NjNiNDdiZTExNDYyY2RiMGRiNzRmMzk1ZjViYiIsInBhdGgiOiJpc3N1ZXIuaWQifSx7InZhbHVlIjoiYTJmNTJhNTdmMWM5MDJhYzQ5MmJiNzc0YTQzOTIxYjk2NWJlM2VmZjRjNTBjMDhiNDhhNjJkOGZkNjNhMWQ1NCIsInBhdGgiOiJpc3N1ZXIudHlwZSJ9LHsidmFsdWUiOiI0NGZhZWFhNmIxYmZlZmI0NGM4NzJlYzI2Nzc4OWNkNzUwM2U3YTQ1YjZjMDdmMmE0MmJkMDE5OWU1NzI0ZjM1IiwicGF0aCI6Imlzc3Vlci5uYW1lIn0seyJ2YWx1ZSI6IjJjNzg1Y2NhOGMyODdhZjhmOGM1NWM4MmJkODI3ZGY4M2YyZDIxY2M4MTVhZWJlYTg5MmVjOTZmNGRmMzVkNzAiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlQcm9vZlR5cGUifSx7InZhbHVlIjoiOWM0OWNiOGQ1Njc2NjljOTEzMDEwYzE3MmI2YmM5N2Q4MTVlOWZlOGY3Mjg2ZWE0NzA3NWVhNDQxYzc4NmYwMyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGlmaWVyIn0seyJ2YWx1ZSI6IjJjZDcxMmFlZTdjZDlkZmI1NjBmYzBjNWVjZmZhY2FkYzkzYmYzZmI1MGRhYTgyYTk2ZTQzYjA5OGU2OTg4YTEiLCJwYXRoIjoiY3JlZGVudGlhbFN0YXR1cy50eXBlIn0seyJ2YWx1ZSI6ImM4MmUwNmU1NWI1YTY2YmUwNTk5NjVjZDI5YTUzZWE1ODg0YjM3NjU0NWE4ZmMwMzNiMTEwNWE0MzMyMWI5ZjAiLCJwYXRoIjoiY3JlZGVudGlhbFN0YXR1cy5jcmVkZW50aWFsU3RhdHVzVHlwZSJ9LHsidmFsdWUiOiJiNzBkMTU5MmU4ZTk3NDlkNGU5ZTEzNjg5NTgxNjhlY2MxZWQ2ODE5NWQzMmE4YmI1MDdlOTc3NGU3ZjkxMGFlIiwicGF0aCI6InJlbmRlck1ldGhvZC50eXBlIn0seyJ2YWx1ZSI6IjIxMGI0NGNjYTdmYzZkOTY4ZDk2ZmVjZWY3MGQzNTU1ZDY5MjViYWEwNjA4ZTczMDM3YjBiOGI5Njc4MTQ0ZGEiLCJwYXRoIjoicmVuZGVyTWV0aG9kLnJlbmRlck1ldGhvZFR5cGUifSx7InZhbHVlIjoiODQyZDBhZTQ1ZTI5N2U1YzgyMmJhZWVjMGMxNDg5MGYyNzkwZjNhNzY1M2JkMTAwNzI5YWJiNTM5NzAxMGY3NCIsInBhdGgiOiJyZW5kZXJNZXRob2QubmFtZSJ9LHsidmFsdWUiOiI4ZDIyYmIwMzJlMjg1N2RlYTk3NDU4ZWZmMjQ5ODgxZGZiZmE2MmUxNDU0MzBkZTdmNWIzZThkNWM5NGVjNmY4IiwicGF0aCI6InJlbmRlck1ldGhvZC51cmwifSx7InZhbHVlIjoiNGJiNWMyMzliNzBmZmI2NDkwYmY4MmQwZTBjODQ3ZWE0YWIyYTQyYWU1MmZjMDljZjA0ZjFiMTg1YjQ5ODFmMyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5pZCJ9LHsidmFsdWUiOiJkOGJmNmI3NzRlNjY0MGU2MWIwMmY4MmIzNTM5Y2RhMjdjODkyNmVlNjI0ZDE1ODZlOTZlMzhjZjNkMWQ0MjY1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnR5cGVbMF0ifSx7InZhbHVlIjoiYTViNjg5NThkOTNiZmM3Y2M0ZDYzM2IxODViZTRlZGNmMGFmZTkwOGRhYjIwOTI3N2RhOGQ3Nzg2ZTc0MjQ3ZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5uYW1lIn0seyJ2YWx1ZSI6IjNlMjUyNTkwMmI1MDY3ZjZiMjNhZGFjYmNmMzdiOTBjNTY1N2ViZWY1ZTQwZmQ2ZTNlMGM1N2QyYjBhODFlMmYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QubGljZW5zZXNbMF0uY2xhc3MifSx7InZhbHVlIjoiODViZDZjYzhkODI4OTRlNWI0OGQ2NmI5ZTM2NGU4MTRhMzIxMWM4ODI0NGVhNmFlZDhkZTYzNWQ1YmFhODljMCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5saWNlbnNlc1swXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiJiZWRlZDA0Yjk1MDEzZjBkNjgzZjZmNGI1YmI2ZDBjNjRjMDM0MjUxYjYwOWQwOTNkZGM0ZDE0Njg2MWJkMjVlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmxpY2Vuc2VzWzBdLmVmZmVjdGl2ZURhdGUifSx7InZhbHVlIjoiYzQ2ZTBhMzkyYTExMmM1NjRkNDdmODQ5NmFhMGRiYmZmZTg1NGEwNDQxODAxZmYxNzYyNzBiYmMyYmUxN2MwOSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5saWNlbnNlc1sxXS5jbGFzcyJ9LHsidmFsdWUiOiJjMGYzMWI2MGYyMjVkZTg1M2YzNzAyYzk4Y2E1OTk0Y2EzNTcyNmUwZTAyNGZkNzRkMWUwZTM1NzZiYjRhNmZlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmxpY2Vuc2VzWzFdLmRlc2NyaXB0aW9uIn0seyJ2YWx1ZSI6IjY0YTUxYjRkMmE3OWMyZTI5NTdkOTg0MDkwN2Q3MGEzMzY4NDRiN2QyYzNlNmE5NDk3NzY1NGUwM2RkMzk1ZWMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QubGljZW5zZXNbMV0uZWZmZWN0aXZlRGF0ZSJ9XQ==", - "privacy": { "obfuscated": [] }, - "key": "did:ethr:0xB26B4941941C51a4885E5B7D3A1B861E54405f90#controller", - "signature": "0xf5743ee83429b0ff71ca40d61f59b9c26f1fc220c2e9a4620bc73128acc0bb2b74764c561058327b19c6992ae6c2a543dd40c7c7e359df48a209477e3cea5bbe1c" - } -} diff --git a/test/fixtures/v4/did-wrapped-obfuscated.json b/test/fixtures/v4/did-wrapped-obfuscated.json new file mode 100644 index 00000000..f9b6ec54 --- /dev/null +++ b/test/fixtures/v4/did-wrapped-obfuscated.json @@ -0,0 +1,60 @@ +{ + "@context": ["https://www.w3.org/2018/credentials/v1", "http://localhost:8080/alpha-context.json"], + "type": ["VerifiableCredential", "TradeTrustCredential"], + "validFrom": "2021-03-08T12:00:00+08:00", + "issuer": { + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", + "type": "TradeTrustIssuer", + "name": "My Own Company Pte Ltd", + "identityProof": { "identityProofType": "DNS-DID", "identifier": "example.tradetrust.io" } + }, + "credentialStatus": { "type": "TradeTrustCredentialStatus", "credentialStatusType": "NONE" }, + "renderMethod": { + "type": "TradeTrustRenderMethod", + "renderMethodType": "EMBEDDED_RENDERER", + "name": "INVOICE", + "url": "https://generic-templates.tradetrust.io" + }, + "credentialSubject": { + "name": "TradeTrust Invoice", + "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "date": "2018-02-21", + "customerId": "564", + "billFrom": { + "name": "ABC Company", + "streetAddress": "Level 1, Industry Offices", + "city": "Singapore", + "postalCode": "123456", + "phoneNumber": "60305029" + }, + "billTo": { + "company": { + "name": "DEF Company", + "streetAddress": "Level 2, Industry Offices", + "city": "Singapore", + "postalCode": "612345", + "phoneNumber": "61204028" + }, + "name": "James Lee", + "email": "def@company.com" + }, + "billableItems": [ + { "description": "Service Fee", "quantity": "1", "unitPrice": "200", "amount": "200" }, + { "description": "Labor: 5 hours at $75/hr", "quantity": "5", "unitPrice": "75", "amount": "375" }, + { "description": "New client discount", "quantity": "1", "unitPrice": "50", "amount": "50" } + ], + "subtotal": "625", + "tax": "0", + "taxTotal": "0", + "total": "625" + }, + "proof": { + "type": "TradeTrustMerkleProofSignature2018", + "proofPurpose": "assertionMethod", + "targetHash": "ed9284455e904ef10e261a674cdcf7bf1cd14e443b98bcbebc570b553ac9a6e2", + "proofs": [], + "merkleRoot": "ed9284455e904ef10e261a674cdcf7bf1cd14e443b98bcbebc570b553ac9a6e2", + "salts": "W3sidmFsdWUiOiJjOTYzODQ2ZGRiMjFmMDU3MzRhMjMyYjhiM2U2NWJhMTA0YTRiNjU0NDc5MjJhNTUzNzU1MjJhNGQyZDBjN2QxIiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6ImRmZTYzNWZkYjRhNTRjNGQ1NzhlOTMyOWU4ZTE5YzFhNTg1YWZmOWFlYzNjMTBhYTg1YzYyZGU5ZDU5YmQ0ZjAiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiZjViOGJlOGQ0NWE0MGE4Yzk1MzUxYTVlZGZmOTBjY2VhYWU0YjNhNzdmZDRlZDBiNWUxNDUyNjk2OTliNjEyYiIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6ImYyMDk4MTczY2RkNWE3Mzk1MmFkZWNhYmZlNjEwN2MzMDAyMjM4MDM1YmJkMmRlZjNmNmYzZWU0ODRiN2MyMWIiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiI3YzcyNWQyODdhNDhkNmViYzlhZjA5NWI0ZWRkNWQyMDZkNTQ2NTNhMmRhYmM3NmZlOTM2ZDZlZWI5ZDAxYWE0IiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiJiODRlNmQxYTYyYjA1OGI0OGYwMmQzM2VhNGMxMjQzYmU4Y2ZjZWVhMzRlNjQzYWU0NjA0NTlhMjM1YWE2N2U0IiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiI2ZDk5ZmQ2OTVlYTM0NzIxMGE5YzAyOTIyODJhOTJjNGQ2MWY0OTBkNjZkMjBkOWE3NTJlMDZmMDEwOGJmNzYyIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6IjMzOTYyYmQ3Y2JhMWM4MDk4NDM4ZGJjNWQwYTRmZmYwN2NlNzYyOGVjY2JmODM4ZTA1Y2YxNjg3YmRlNjg0MzciLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiYjM5MjA2MzY1MWNiMTMwYTcyZTYyM2M3YzVmZjRkNWZlNWUzNmVmNGZhNWVjMDA0MTNhM2NiOTU5OWI1NjQwOCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiJhZmZjYzg5MjNhZTYwOWIyOTg3MDY2YmU0MjYwY2RhNTk2NTc3MzY0ZjI0MDY4YTk1ZGE1YTlhYWM0NGFjOWQ5IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiZTUwNmY4ZmQ3NDNlZWI4Yzc2ZWFlZGNkODQxM2RmYzQwNDQ1ZDk4ZDZmZWNiNGNhMmUwMzRhMDY2Y2YzNzk5MCIsInBhdGgiOiJjcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiZmRkMzczMGVmZDM2MTZiMjYyZWQ1NmU2ZWIxOWE3ZmU0MjMyZDU4NjI5NGRiZDkwOTkzY2QwMGIzYWZiNWE0OSIsInBhdGgiOiJjcmVkZW50aWFsU3RhdHVzLmNyZWRlbnRpYWxTdGF0dXNUeXBlIn0seyJ2YWx1ZSI6ImE1ZThkN2E3YTIwY2ZlYWY0ZjhkZTAyNDQ4ZWY5YTVjYTRlZDc4ZDY4MDJmOWY3NGFmY2YzNTZiMjBmMGZkMDgiLCJwYXRoIjoicmVuZGVyTWV0aG9kLnR5cGUifSx7InZhbHVlIjoiNDU1YWMzYTE1MTBjMzM5NTE4NGVjNzJlOTI5NmNlNzk5M2UwNWYwODUxYzBiYzU1YTdhNzVhY2EzMDI3NDM0NiIsInBhdGgiOiJyZW5kZXJNZXRob2QucmVuZGVyTWV0aG9kVHlwZSJ9LHsidmFsdWUiOiJmMDMyOGI5ZTE4YzY4NzM1MjI5YTZhNDgzZGRmNmNkYjllYzhmMjA3YTQ0MWYzZTM1Y2I2MGViOWJiN2Y5NjI4IiwicGF0aCI6InJlbmRlck1ldGhvZC5uYW1lIn0seyJ2YWx1ZSI6ImRiYzk4MmRhMWJhMzhjMmVjYjUzY2Y0ZTliNmM5MzRkMGYyNGFhYjZjZDAyMmQ0ZTk0NTc0NTY4OGM1NmE1ODciLCJwYXRoIjoicmVuZGVyTWV0aG9kLnVybCJ9LHsidmFsdWUiOiI3ZjczNDQyMDIzNzJlYWZlMzc5ZWRkZTY1ZGQ5Nzk1MWJmYmQ3Yjg1NTBjNjkyYmNhNTM3NzkyYzZkYjY2MGIwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0Lm5hbWUifSx7InZhbHVlIjoiYmMxYmU0NzBjODJkYzFmYjgzMGNiZmViMWQ4MmViYzA4NzZjM2NkMzM3ODIyYzk4N2Q5ZWQxZmEwYzE5OGQ4YyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5pZCJ9LHsidmFsdWUiOiIyYmVlMzk0MGU2M2FkZjQ3MzgzNzE2ZjFmODI5NDM5MGM2OTk2OTUxZTM1Mzg5NjllNmI0NTgyNmJkYzBiYTNkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmRhdGUifSx7InZhbHVlIjoiODI1YmJlOWE4NWE3YjM3ZWQ0MmUyOTdjYjZhNmUxODZhYTdmMGZlOThiODg1OGQ2NDk4MjM2NGZhY2FlMWQ5MiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jdXN0b21lcklkIn0seyJ2YWx1ZSI6IjQ0ZWQwZmNkMjhhMDY4OTgwMmY0MDcwYzI1YzAyMzIwZmYwNjUyMGIxNTcxM2FkNDVmNDk2MTViZGQxMjE3MDQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20ubmFtZSJ9LHsidmFsdWUiOiIwZDBjMzAyMzYyZjk2MTM0ODEwODJiODZhOWZkMWE4YmVmNzEyMDM4NDI1MmViMDliZmM3Y2EzM2EwMWM2ZTdhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLnN0cmVldEFkZHJlc3MifSx7InZhbHVlIjoiMGRhY2M5Njk0NDc0YWZlNjU3MjhhZDFhMjgwNjczNDY3NzA4MzIyOWI2OTA1ZDBmYzhjYTRmYmQzM2I3ZTRmMCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5jaXR5In0seyJ2YWx1ZSI6Ijg2MDU1YzExMjhiNmVhOWNmODM4MzEyYmVhMzBmYzA3YzEwYzVjMzNkZmJlZTk3YjUwY2Q0NjJkZDkwYjVkYmIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20ucG9zdGFsQ29kZSJ9LHsidmFsdWUiOiIzODQ3NWUwOTcxMjAzMzZhMzY4YzBhMTY0Yjk1MDdlN2VjZWZkNzJhMTI1ODhhOTQ1YzA0MjEzOTdhZGEyOTZjIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLnBob25lTnVtYmVyIn0seyJ2YWx1ZSI6IjU4YjU3ZDQzODgxZGMwY2M5OWUyNzUyYTdlOGFjNzUxYzJmYTNjYzI5ZTgwOGJkZTNmNDQwNWZmOWU2YWY0YjYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkubmFtZSJ9LHsidmFsdWUiOiJkNTAwZGY1ZDQ1OGVkYmMwZjM0YjQ2Njk5MjcxMmE2YjYyYTQ0Y2VhMmM4NWZlNjIyMjQwNTQ0MjU5YTRmNzRiIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LnN0cmVldEFkZHJlc3MifSx7InZhbHVlIjoiODhjZGYzNTBkZTlmMGI1MmFjYTViNjEyNGE0MTQ3ZGVhYWUzMTY1N2QyY2Q3NzMwODg3M2I1NmFhMjk2Mzc1MiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5jaXR5In0seyJ2YWx1ZSI6IjVhZjU5MGEwMzhjMTMwMzliZTU0NmMyMjM5ODIwZjc4NjFlNGI0YTAzYzI3ZmJjZTE5MDM1N2U5ODFjZGMwNWMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkucG9zdGFsQ29kZSJ9LHsidmFsdWUiOiIwNjFmNGU2MTYzMzQ5ZTcxMWEzNGRlMGVkNmIyNWE4NzJkNjQ0YmVlMGE1MTk2YjM2NDE4OWZkOGQ1ODEwYWJiIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LnBob25lTnVtYmVyIn0seyJ2YWx1ZSI6IjEzYmJiNGVmNTE4MDMwY2E1YjE2ZmU4NjY0OWQ3MmU3MWFmYWE1YzgyMDYzZDFjNjdiYzhkODVhYmNkZmQwZmYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLm5hbWUifSx7InZhbHVlIjoiZjA1NzUzZDZmOTUwZDQyMDQ4ZmMzMGE5ZGRlZTM5YTQxZmVlZjBkYWM0MDhhODliZmQ1OGUyZWVmYTQzNDU2NyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uZW1haWwifSx7InZhbHVlIjoiZTE2NzNmN2UxMjk5OGVmYjc3NmZhMzlmODQyZDVjZDNmNWFmOWJkNGMyZjcyODYzNzM3ODAxNDY4MDQwM2I1NiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLmRlc2NyaXB0aW9uIn0seyJ2YWx1ZSI6ImM5NWE2MWJmNWI1NGYyYWNlNTMyYTIyZTFlMmEwOGNmYzE5NmMxMWI4YWIxYzk4Y2Y0MjZjYzVmNjhjZWMzNmMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS5xdWFudGl0eSJ9LHsidmFsdWUiOiIxYjY3MmI4OWI4MWY5MDViN2E2YjdjYTMwOTE4MTg2ZmU3ZTZlZmYxMzhkNzI2NGZjM2NjZDhjNmNhMWI5NTViIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0udW5pdFByaWNlIn0seyJ2YWx1ZSI6ImJjODI3ZDUyZjI5MTJjOTEzYzc5NTQwYTQyMjA4NzUxN2MyMTVkMDQ3MzM2MjE5NWIxMGIzZjRhM2FiYTQzZGMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS5hbW91bnQifSx7InZhbHVlIjoiOWNmNzMxY2U4ZjI0NTVmOGViNWU3YjJmYjAyYzcwY2VjZmU2N2U4ZjVjNTI0ZDQ5NzM0ZjY3NDVhN2FlNDA0YiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLmRlc2NyaXB0aW9uIn0seyJ2YWx1ZSI6IjI3YmZmOTRkMzA3NDk1MGYxYTg2ZDU0YmMwODZkYTZmZjdhY2YyMmRlYjhlYWE1ZTllZDc1MWY4YzdhYmEwMzgiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS5xdWFudGl0eSJ9LHsidmFsdWUiOiJhYjhhYThjOTQ2NTBmN2JlZmJiYWQxNjgwMjA2ZDBmZDQwNzI5ZTc1ZDFjY2NhZmUwOTUzMzA4Mzk5OTFmZGUyIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0udW5pdFByaWNlIn0seyJ2YWx1ZSI6Ijg5MTRhODllOTEwMjFlZTU2YjU5OThmZjRlNDA1ZWFlNDk3OGZmMDQ0YzU2N2VjNGU5YzcwYTg2MmQxNDc4ZTYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS5hbW91bnQifSx7InZhbHVlIjoiN2FiMTdhMjE2MTczMjZiNDNjNjc5YmQ3NTBmMDY4NmNhYTZhYWJjNWMzMzRhNjMxNjY3Mzg3NGJkODRkNzM1ZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLmRlc2NyaXB0aW9uIn0seyJ2YWx1ZSI6IjllNDZlNTJhNzMxMTMyNzAxMjVkN2U4ZDA2MDQyZTk0ZTA5MjExNWUwNTkyMDgxODRkZGQwMDUxOTg1MWEzNzkiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS5xdWFudGl0eSJ9LHsidmFsdWUiOiIwMzVjNjlkZTE3NmU0NTU3YzhhMzY0NDZhZTI4NjI0ZDI0MDVhYTM4ZTY1ZWI3ZjMzMDA0YmQ3M2NiYjkzNzZhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0udW5pdFByaWNlIn0seyJ2YWx1ZSI6ImQ2MGQ3YzQ1M2Q5NmU2ZmYxODY0YzVmN2Q1YTQ1OTg4NzBlNzU5NDkxMjg2ZGRmM2Y0OWE2YzkwMTgwZjc4NmEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS5hbW91bnQifSx7InZhbHVlIjoiZDBiNWJlM2I2Mzc1M2JkMmU0MmM2ZDc3OTU3MjYwMWY2ODQ1YTEzY2FkZmM4YTNiZGFhOWZkYjQ5MDJkMzBlZSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5zdWJ0b3RhbCJ9LHsidmFsdWUiOiI3MDkyZDY4N2M1YTAzOWY1MTlhODQ5YzQyZTAxMjE2NTFiN2Q4NTU5ZmQ4YmMwZTRhYzc3MzQwYmZjNTY0ODAwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnRheCJ9LHsidmFsdWUiOiJhN2Y5Zjg0MTRjOTViZmNkYWFiMzc4N2IyYzRhNjU0MTlhOWQyODNmYjdlN2E1ZWQ0NTQ4MjQ5YTQxNjcxMTE5IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnRheFRvdGFsIn0seyJ2YWx1ZSI6ImYyNGI4NTA5M2JhM2FlNzM1YTM5ZmM5MTBmNDJlMTdlMjVjMDZjZGE1MWZlOWE2ZTQ0MTIyNDhmODZhNDFlYzAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudG90YWwifV0=", + "privacy": { "obfuscated": ["9e1e02a3e73cde8796839caac22c98379ed04a815ee9b80a9ee46e0ef251aa22"] } + } +} diff --git a/test/fixtures/v4/did-wrapped-signed.json b/test/fixtures/v4/did-wrapped-signed.json new file mode 100644 index 00000000..162eb647 --- /dev/null +++ b/test/fixtures/v4/did-wrapped-signed.json @@ -0,0 +1,63 @@ +{ + "@context": ["https://www.w3.org/2018/credentials/v1", "http://localhost:8080/alpha-context.json"], + "type": ["VerifiableCredential", "TradeTrustCredential"], + "validFrom": "2021-03-08T12:00:00+08:00", + "issuer": { + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", + "type": "TradeTrustIssuer", + "name": "My Own Company Pte Ltd", + "identityProof": { "identityProofType": "DNS-DID", "identifier": "example.tradetrust.io" } + }, + "credentialStatus": { "type": "TradeTrustCredentialStatus", "credentialStatusType": "NONE" }, + "renderMethod": { + "type": "TradeTrustRenderMethod", + "renderMethodType": "EMBEDDED_RENDERER", + "name": "INVOICE", + "url": "https://generic-templates.tradetrust.io" + }, + "credentialSubject": { + "name": "TradeTrust Invoice", + "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "date": "2018-02-21", + "customerId": "564", + "terms": "Due Upon Receipt", + "billFrom": { + "name": "ABC Company", + "streetAddress": "Level 1, Industry Offices", + "city": "Singapore", + "postalCode": "123456", + "phoneNumber": "60305029" + }, + "billTo": { + "company": { + "name": "DEF Company", + "streetAddress": "Level 2, Industry Offices", + "city": "Singapore", + "postalCode": "612345", + "phoneNumber": "61204028" + }, + "name": "James Lee", + "email": "def@company.com" + }, + "billableItems": [ + { "description": "Service Fee", "quantity": "1", "unitPrice": "200", "amount": "200" }, + { "description": "Labor: 5 hours at $75/hr", "quantity": "5", "unitPrice": "75", "amount": "375" }, + { "description": "New client discount", "quantity": "1", "unitPrice": "50", "amount": "50" } + ], + "subtotal": "625", + "tax": "0", + "taxTotal": "0", + "total": "625" + }, + "proof": { + "type": "TradeTrustMerkleProofSignature2018", + "proofPurpose": "assertionMethod", + "targetHash": "ed9284455e904ef10e261a674cdcf7bf1cd14e443b98bcbebc570b553ac9a6e2", + "proofs": [], + "merkleRoot": "ed9284455e904ef10e261a674cdcf7bf1cd14e443b98bcbebc570b553ac9a6e2", + "salts": "W3sidmFsdWUiOiJjOTYzODQ2ZGRiMjFmMDU3MzRhMjMyYjhiM2U2NWJhMTA0YTRiNjU0NDc5MjJhNTUzNzU1MjJhNGQyZDBjN2QxIiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6ImRmZTYzNWZkYjRhNTRjNGQ1NzhlOTMyOWU4ZTE5YzFhNTg1YWZmOWFlYzNjMTBhYTg1YzYyZGU5ZDU5YmQ0ZjAiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiZjViOGJlOGQ0NWE0MGE4Yzk1MzUxYTVlZGZmOTBjY2VhYWU0YjNhNzdmZDRlZDBiNWUxNDUyNjk2OTliNjEyYiIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6ImYyMDk4MTczY2RkNWE3Mzk1MmFkZWNhYmZlNjEwN2MzMDAyMjM4MDM1YmJkMmRlZjNmNmYzZWU0ODRiN2MyMWIiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiI3YzcyNWQyODdhNDhkNmViYzlhZjA5NWI0ZWRkNWQyMDZkNTQ2NTNhMmRhYmM3NmZlOTM2ZDZlZWI5ZDAxYWE0IiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiJiODRlNmQxYTYyYjA1OGI0OGYwMmQzM2VhNGMxMjQzYmU4Y2ZjZWVhMzRlNjQzYWU0NjA0NTlhMjM1YWE2N2U0IiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiI2ZDk5ZmQ2OTVlYTM0NzIxMGE5YzAyOTIyODJhOTJjNGQ2MWY0OTBkNjZkMjBkOWE3NTJlMDZmMDEwOGJmNzYyIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6IjMzOTYyYmQ3Y2JhMWM4MDk4NDM4ZGJjNWQwYTRmZmYwN2NlNzYyOGVjY2JmODM4ZTA1Y2YxNjg3YmRlNjg0MzciLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiYjM5MjA2MzY1MWNiMTMwYTcyZTYyM2M3YzVmZjRkNWZlNWUzNmVmNGZhNWVjMDA0MTNhM2NiOTU5OWI1NjQwOCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiJhZmZjYzg5MjNhZTYwOWIyOTg3MDY2YmU0MjYwY2RhNTk2NTc3MzY0ZjI0MDY4YTk1ZGE1YTlhYWM0NGFjOWQ5IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiZTUwNmY4ZmQ3NDNlZWI4Yzc2ZWFlZGNkODQxM2RmYzQwNDQ1ZDk4ZDZmZWNiNGNhMmUwMzRhMDY2Y2YzNzk5MCIsInBhdGgiOiJjcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiZmRkMzczMGVmZDM2MTZiMjYyZWQ1NmU2ZWIxOWE3ZmU0MjMyZDU4NjI5NGRiZDkwOTkzY2QwMGIzYWZiNWE0OSIsInBhdGgiOiJjcmVkZW50aWFsU3RhdHVzLmNyZWRlbnRpYWxTdGF0dXNUeXBlIn0seyJ2YWx1ZSI6ImE1ZThkN2E3YTIwY2ZlYWY0ZjhkZTAyNDQ4ZWY5YTVjYTRlZDc4ZDY4MDJmOWY3NGFmY2YzNTZiMjBmMGZkMDgiLCJwYXRoIjoicmVuZGVyTWV0aG9kLnR5cGUifSx7InZhbHVlIjoiNDU1YWMzYTE1MTBjMzM5NTE4NGVjNzJlOTI5NmNlNzk5M2UwNWYwODUxYzBiYzU1YTdhNzVhY2EzMDI3NDM0NiIsInBhdGgiOiJyZW5kZXJNZXRob2QucmVuZGVyTWV0aG9kVHlwZSJ9LHsidmFsdWUiOiJmMDMyOGI5ZTE4YzY4NzM1MjI5YTZhNDgzZGRmNmNkYjllYzhmMjA3YTQ0MWYzZTM1Y2I2MGViOWJiN2Y5NjI4IiwicGF0aCI6InJlbmRlck1ldGhvZC5uYW1lIn0seyJ2YWx1ZSI6ImRiYzk4MmRhMWJhMzhjMmVjYjUzY2Y0ZTliNmM5MzRkMGYyNGFhYjZjZDAyMmQ0ZTk0NTc0NTY4OGM1NmE1ODciLCJwYXRoIjoicmVuZGVyTWV0aG9kLnVybCJ9LHsidmFsdWUiOiI3ZjczNDQyMDIzNzJlYWZlMzc5ZWRkZTY1ZGQ5Nzk1MWJmYmQ3Yjg1NTBjNjkyYmNhNTM3NzkyYzZkYjY2MGIwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0Lm5hbWUifSx7InZhbHVlIjoiYmMxYmU0NzBjODJkYzFmYjgzMGNiZmViMWQ4MmViYzA4NzZjM2NkMzM3ODIyYzk4N2Q5ZWQxZmEwYzE5OGQ4YyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5pZCJ9LHsidmFsdWUiOiIyYmVlMzk0MGU2M2FkZjQ3MzgzNzE2ZjFmODI5NDM5MGM2OTk2OTUxZTM1Mzg5NjllNmI0NTgyNmJkYzBiYTNkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmRhdGUifSx7InZhbHVlIjoiODI1YmJlOWE4NWE3YjM3ZWQ0MmUyOTdjYjZhNmUxODZhYTdmMGZlOThiODg1OGQ2NDk4MjM2NGZhY2FlMWQ5MiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jdXN0b21lcklkIn0seyJ2YWx1ZSI6Ijk4ZGJjZGEyN2ZmMTIxOWRhY2VhMTkxNTZhZjFlZWY1YmNmYTg0MjY5NzEzM2MxOGZhMjc2ZTEwMDM2MDgyNzkiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGVybXMifSx7InZhbHVlIjoiNDRlZDBmY2QyOGEwNjg5ODAyZjQwNzBjMjVjMDIzMjBmZjA2NTIwYjE1NzEzYWQ0NWY0OTYxNWJkZDEyMTcwNCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5uYW1lIn0seyJ2YWx1ZSI6IjBkMGMzMDIzNjJmOTYxMzQ4MTA4MmI4NmE5ZmQxYThiZWY3MTIwMzg0MjUyZWIwOWJmYzdjYTMzYTAxYzZlN2EiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uc3RyZWV0QWRkcmVzcyJ9LHsidmFsdWUiOiIwZGFjYzk2OTQ0NzRhZmU2NTcyOGFkMWEyODA2NzM0Njc3MDgzMjI5YjY5MDVkMGZjOGNhNGZiZDMzYjdlNGYwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLmNpdHkifSx7InZhbHVlIjoiODYwNTVjMTEyOGI2ZWE5Y2Y4MzgzMTJiZWEzMGZjMDdjMTBjNWMzM2RmYmVlOTdiNTBjZDQ2MmRkOTBiNWRiYiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5wb3N0YWxDb2RlIn0seyJ2YWx1ZSI6IjM4NDc1ZTA5NzEyMDMzNmEzNjhjMGExNjRiOTUwN2U3ZWNlZmQ3MmExMjU4OGE5NDVjMDQyMTM5N2FkYTI5NmMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20ucGhvbmVOdW1iZXIifSx7InZhbHVlIjoiNThiNTdkNDM4ODFkYzBjYzk5ZTI3NTJhN2U4YWM3NTFjMmZhM2NjMjllODA4YmRlM2Y0NDA1ZmY5ZTZhZjRiNiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5uYW1lIn0seyJ2YWx1ZSI6ImQ1MDBkZjVkNDU4ZWRiYzBmMzRiNDY2OTkyNzEyYTZiNjJhNDRjZWEyYzg1ZmU2MjIyNDA1NDQyNTlhNGY3NGIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuc3RyZWV0QWRkcmVzcyJ9LHsidmFsdWUiOiI4OGNkZjM1MGRlOWYwYjUyYWNhNWI2MTI0YTQxNDdkZWFhZTMxNjU3ZDJjZDc3MzA4ODczYjU2YWEyOTYzNzUyIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LmNpdHkifSx7InZhbHVlIjoiNWFmNTkwYTAzOGMxMzAzOWJlNTQ2YzIyMzk4MjBmNzg2MWU0YjRhMDNjMjdmYmNlMTkwMzU3ZTk4MWNkYzA1YyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5wb3N0YWxDb2RlIn0seyJ2YWx1ZSI6IjA2MWY0ZTYxNjMzNDllNzExYTM0ZGUwZWQ2YjI1YTg3MmQ2NDRiZWUwYTUxOTZiMzY0MTg5ZmQ4ZDU4MTBhYmIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkucGhvbmVOdW1iZXIifSx7InZhbHVlIjoiMTNiYmI0ZWY1MTgwMzBjYTViMTZmZTg2NjQ5ZDcyZTcxYWZhYTVjODIwNjNkMWM2N2JjOGQ4NWFiY2RmZDBmZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8ubmFtZSJ9LHsidmFsdWUiOiJmMDU3NTNkNmY5NTBkNDIwNDhmYzMwYTlkZGVlMzlhNDFmZWVmMGRhYzQwOGE4OWJmZDU4ZTJlZWZhNDM0NTY3IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5lbWFpbCJ9LHsidmFsdWUiOiJlMTY3M2Y3ZTEyOTk4ZWZiNzc2ZmEzOWY4NDJkNWNkM2Y1YWY5YmQ0YzJmNzI4NjM3Mzc4MDE0NjgwNDAzYjU2IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiYzk1YTYxYmY1YjU0ZjJhY2U1MzJhMjJlMWUyYTA4Y2ZjMTk2YzExYjhhYjFjOThjZjQyNmNjNWY2OGNlYzM2YyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnF1YW50aXR5In0seyJ2YWx1ZSI6IjFiNjcyYjg5YjgxZjkwNWI3YTZiN2NhMzA5MTgxODZmZTdlNmVmZjEzOGQ3MjY0ZmMzY2NkOGM2Y2ExYjk1NWIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS51bml0UHJpY2UifSx7InZhbHVlIjoiYmM4MjdkNTJmMjkxMmM5MTNjNzk1NDBhNDIyMDg3NTE3YzIxNWQwNDczMzYyMTk1YjEwYjNmNGEzYWJhNDNkYyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLmFtb3VudCJ9LHsidmFsdWUiOiI5Y2Y3MzFjZThmMjQ1NWY4ZWI1ZTdiMmZiMDJjNzBjZWNmZTY3ZThmNWM1MjRkNDk3MzRmNjc0NWE3YWU0MDRiIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiMjdiZmY5NGQzMDc0OTUwZjFhODZkNTRiYzA4NmRhNmZmN2FjZjIyZGViOGVhYTVlOWVkNzUxZjhjN2FiYTAzOCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnF1YW50aXR5In0seyJ2YWx1ZSI6ImFiOGFhOGM5NDY1MGY3YmVmYmJhZDE2ODAyMDZkMGZkNDA3MjllNzVkMWNjY2FmZTA5NTMzMDgzOTk5MWZkZTIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS51bml0UHJpY2UifSx7InZhbHVlIjoiODkxNGE4OWU5MTAyMWVlNTZiNTk5OGZmNGU0MDVlYWU0OTc4ZmYwNDRjNTY3ZWM0ZTljNzBhODYyZDE0NzhlNiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLmFtb3VudCJ9LHsidmFsdWUiOiI3YWIxN2EyMTYxNzMyNmI0M2M2NzliZDc1MGYwNjg2Y2FhNmFhYmM1YzMzNGE2MzE2NjczODc0YmQ4NGQ3MzVkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiOWU0NmU1MmE3MzExMzI3MDEyNWQ3ZThkMDYwNDJlOTRlMDkyMTE1ZTA1OTIwODE4NGRkZDAwNTE5ODUxYTM3OSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnF1YW50aXR5In0seyJ2YWx1ZSI6IjAzNWM2OWRlMTc2ZTQ1NTdjOGEzNjQ0NmFlMjg2MjRkMjQwNWFhMzhlNjVlYjdmMzMwMDRiZDczY2JiOTM3NmEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS51bml0UHJpY2UifSx7InZhbHVlIjoiZDYwZDdjNDUzZDk2ZTZmZjE4NjRjNWY3ZDVhNDU5ODg3MGU3NTk0OTEyODZkZGYzZjQ5YTZjOTAxODBmNzg2YSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLmFtb3VudCJ9LHsidmFsdWUiOiJkMGI1YmUzYjYzNzUzYmQyZTQyYzZkNzc5NTcyNjAxZjY4NDVhMTNjYWRmYzhhM2JkYWE5ZmRiNDkwMmQzMGVlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnN1YnRvdGFsIn0seyJ2YWx1ZSI6IjcwOTJkNjg3YzVhMDM5ZjUxOWE4NDljNDJlMDEyMTY1MWI3ZDg1NTlmZDhiYzBlNGFjNzczNDBiZmM1NjQ4MDAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGF4In0seyJ2YWx1ZSI6ImE3ZjlmODQxNGM5NWJmY2RhYWIzNzg3YjJjNGE2NTQxOWE5ZDI4M2ZiN2U3YTVlZDQ1NDgyNDlhNDE2NzExMTkiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGF4VG90YWwifSx7InZhbHVlIjoiZjI0Yjg1MDkzYmEzYWU3MzVhMzlmYzkxMGY0MmUxN2UyNWMwNmNkYTUxZmU5YTZlNDQxMjI0OGY4NmE0MWVjMCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50b3RhbCJ9XQ==", + "privacy": { "obfuscated": [] }, + "key": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C#controller", + "signature": "0x9a3a1b83eb71f9c2cbcf3a2c326cc0c34519d5e9305aef7a410c03a3e09a155076501df6c06a3c4124de22e861eb9a74ca9bdb4ebb18c268ad6bfde58d78e6e01b" + } +} diff --git a/test/fixtures/v4/did-wrapped.json b/test/fixtures/v4/did-wrapped.json index 2921df32..56551065 100644 --- a/test/fixtures/v4/did-wrapped.json +++ b/test/fixtures/v4/did-wrapped.json @@ -1,48 +1,61 @@ { - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://schemata.openattestation.com/com/openattestation/4.0/alpha-context.json" - ], - "type": ["VerifiableCredential", "OpenAttestationCredential"], + "@context": ["https://www.w3.org/2018/credentials/v1", "http://localhost:8080/alpha-context.json"], + "type": ["VerifiableCredential", "TradeTrustCredential"], "validFrom": "2021-03-08T12:00:00+08:00", - "name": "Republic of Singapore Driving Licence", "issuer": { - "id": "did:ethr:0xB26B4941941C51a4885E5B7D3A1B861E54405f90", - "type": "OpenAttestationIssuer", - "name": "Government Technology Agency of Singapore (GovTech)", - "identityProof": { "identityProofType": "DNS-DID", "identifier": "example.openattestation.com" } + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", + "type": "TradeTrustIssuer", + "name": "My Own Company Pte Ltd", + "identityProof": { "identityProofType": "DNS-DID", "identifier": "example.tradetrust.io" } }, - "credentialStatus": { "type": "OpenAttestationCredentialStatus", "credentialStatusType": "NONE" }, + "credentialStatus": { "type": "TradeTrustCredentialStatus", "credentialStatusType": "NONE" }, "renderMethod": { - "type": "OpenAttestationRenderMethod", + "type": "TradeTrustRenderMethod", "renderMethodType": "EMBEDDED_RENDERER", - "name": "GOVTECH_DEMO", - "url": "https://demo-renderer.openattestation.com" + "name": "INVOICE", + "url": "https://generic-templates.tradetrust.io" }, "credentialSubject": { + "name": "TradeTrust Invoice", "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", - "type": ["DriversLicense"], - "name": "John Doe", - "licenses": [ - { - "class": "3", - "description": "Motor cars with unladen weight <= 3000kg", - "effectiveDate": "2013-05-16T00:00:00+08:00" + "date": "2018-02-21", + "customerId": "564", + "terms": "Due Upon Receipt", + "billFrom": { + "name": "ABC Company", + "streetAddress": "Level 1, Industry Offices", + "city": "Singapore", + "postalCode": "123456", + "phoneNumber": "60305029" + }, + "billTo": { + "company": { + "name": "DEF Company", + "streetAddress": "Level 2, Industry Offices", + "city": "Singapore", + "postalCode": "612345", + "phoneNumber": "61204028" }, - { - "class": "3A", - "description": "Motor cars with unladen weight <= 3000kg", - "effectiveDate": "2013-05-16T00:00:00+08:00" - } - ] + "name": "James Lee", + "email": "def@company.com" + }, + "billableItems": [ + { "description": "Service Fee", "quantity": "1", "unitPrice": "200", "amount": "200" }, + { "description": "Labor: 5 hours at $75/hr", "quantity": "5", "unitPrice": "75", "amount": "375" }, + { "description": "New client discount", "quantity": "1", "unitPrice": "50", "amount": "50" } + ], + "subtotal": "625", + "tax": "0", + "taxTotal": "0", + "total": "625" }, "proof": { - "type": "OpenAttestationMerkleProofSignature2018", + "type": "TradeTrustMerkleProofSignature2018", "proofPurpose": "assertionMethod", - "targetHash": "adb16863b9b92f1f46d67f518f853092404dc1322ffb61b45a831ee113f4ea99", + "targetHash": "ed9284455e904ef10e261a674cdcf7bf1cd14e443b98bcbebc570b553ac9a6e2", "proofs": [], - "merkleRoot": "adb16863b9b92f1f46d67f518f853092404dc1322ffb61b45a831ee113f4ea99", - "salts": "W3sidmFsdWUiOiJkYTlkMTE5MTMxOWRjOTM4ZTQ2ZjZhYmMzMjU1NTM5NGYwYzEzNDIyMGUwYjgyMDY0NzBhYjlmNmYxN2QyZTJlIiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6IjhhZDM5Njg2NGIwNGI5ZjYxY2I3ODNjY2M1YWEyNTYxODgxYmRiODZmZmI5ZmNjZjViYTQ1YzUyN2MwZGFmMGMiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiMjYwNDllNWExODQ4MDVlYTUxNjQ4OTM3OGI0NDZhNTdiMjdlZWU0YmFhN2VmYjBkNWM3OTcwMGMzZDI5OGM5MyIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6IjU3N2M2ZGUzMzYzZmE1ZjA2ZDc5NjQyMjAxNTk3ODkzYzdmNDg3NWZlYzFiZTYyOWIxZWRkNTdhZWFlOTE3YzkiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiI0NmMyOTY5MTVkZWVhNDMwMDNmY2ZmNjc3NzUxNTc3Zjg2MTdlODliYjBjNDhiNzIwMTdlMzRkOWNhNTM0ZGNlIiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiIwZWQ1Yzg0OTBlYjg2YWM5YmEyNGJlYzc3OTE2MThhZWZjZGE2M2M3OGNmZDJlMTdjMWNlNDRmNzVmZjU3NjljIiwicGF0aCI6Im5hbWUifSx7InZhbHVlIjoiMzEyNGUxNzc4Y2EzYTc2ZmI0MjUxNGExMmIzNDYzYmY4ZmY4NjNiNDdiZTExNDYyY2RiMGRiNzRmMzk1ZjViYiIsInBhdGgiOiJpc3N1ZXIuaWQifSx7InZhbHVlIjoiYTJmNTJhNTdmMWM5MDJhYzQ5MmJiNzc0YTQzOTIxYjk2NWJlM2VmZjRjNTBjMDhiNDhhNjJkOGZkNjNhMWQ1NCIsInBhdGgiOiJpc3N1ZXIudHlwZSJ9LHsidmFsdWUiOiI0NGZhZWFhNmIxYmZlZmI0NGM4NzJlYzI2Nzc4OWNkNzUwM2U3YTQ1YjZjMDdmMmE0MmJkMDE5OWU1NzI0ZjM1IiwicGF0aCI6Imlzc3Vlci5uYW1lIn0seyJ2YWx1ZSI6IjJjNzg1Y2NhOGMyODdhZjhmOGM1NWM4MmJkODI3ZGY4M2YyZDIxY2M4MTVhZWJlYTg5MmVjOTZmNGRmMzVkNzAiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlQcm9vZlR5cGUifSx7InZhbHVlIjoiOWM0OWNiOGQ1Njc2NjljOTEzMDEwYzE3MmI2YmM5N2Q4MTVlOWZlOGY3Mjg2ZWE0NzA3NWVhNDQxYzc4NmYwMyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGlmaWVyIn0seyJ2YWx1ZSI6IjJjZDcxMmFlZTdjZDlkZmI1NjBmYzBjNWVjZmZhY2FkYzkzYmYzZmI1MGRhYTgyYTk2ZTQzYjA5OGU2OTg4YTEiLCJwYXRoIjoiY3JlZGVudGlhbFN0YXR1cy50eXBlIn0seyJ2YWx1ZSI6ImM4MmUwNmU1NWI1YTY2YmUwNTk5NjVjZDI5YTUzZWE1ODg0YjM3NjU0NWE4ZmMwMzNiMTEwNWE0MzMyMWI5ZjAiLCJwYXRoIjoiY3JlZGVudGlhbFN0YXR1cy5jcmVkZW50aWFsU3RhdHVzVHlwZSJ9LHsidmFsdWUiOiJiNzBkMTU5MmU4ZTk3NDlkNGU5ZTEzNjg5NTgxNjhlY2MxZWQ2ODE5NWQzMmE4YmI1MDdlOTc3NGU3ZjkxMGFlIiwicGF0aCI6InJlbmRlck1ldGhvZC50eXBlIn0seyJ2YWx1ZSI6IjIxMGI0NGNjYTdmYzZkOTY4ZDk2ZmVjZWY3MGQzNTU1ZDY5MjViYWEwNjA4ZTczMDM3YjBiOGI5Njc4MTQ0ZGEiLCJwYXRoIjoicmVuZGVyTWV0aG9kLnJlbmRlck1ldGhvZFR5cGUifSx7InZhbHVlIjoiODQyZDBhZTQ1ZTI5N2U1YzgyMmJhZWVjMGMxNDg5MGYyNzkwZjNhNzY1M2JkMTAwNzI5YWJiNTM5NzAxMGY3NCIsInBhdGgiOiJyZW5kZXJNZXRob2QubmFtZSJ9LHsidmFsdWUiOiI4ZDIyYmIwMzJlMjg1N2RlYTk3NDU4ZWZmMjQ5ODgxZGZiZmE2MmUxNDU0MzBkZTdmNWIzZThkNWM5NGVjNmY4IiwicGF0aCI6InJlbmRlck1ldGhvZC51cmwifSx7InZhbHVlIjoiNGJiNWMyMzliNzBmZmI2NDkwYmY4MmQwZTBjODQ3ZWE0YWIyYTQyYWU1MmZjMDljZjA0ZjFiMTg1YjQ5ODFmMyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5pZCJ9LHsidmFsdWUiOiJkOGJmNmI3NzRlNjY0MGU2MWIwMmY4MmIzNTM5Y2RhMjdjODkyNmVlNjI0ZDE1ODZlOTZlMzhjZjNkMWQ0MjY1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnR5cGVbMF0ifSx7InZhbHVlIjoiYTViNjg5NThkOTNiZmM3Y2M0ZDYzM2IxODViZTRlZGNmMGFmZTkwOGRhYjIwOTI3N2RhOGQ3Nzg2ZTc0MjQ3ZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5uYW1lIn0seyJ2YWx1ZSI6IjNlMjUyNTkwMmI1MDY3ZjZiMjNhZGFjYmNmMzdiOTBjNTY1N2ViZWY1ZTQwZmQ2ZTNlMGM1N2QyYjBhODFlMmYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QubGljZW5zZXNbMF0uY2xhc3MifSx7InZhbHVlIjoiODViZDZjYzhkODI4OTRlNWI0OGQ2NmI5ZTM2NGU4MTRhMzIxMWM4ODI0NGVhNmFlZDhkZTYzNWQ1YmFhODljMCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5saWNlbnNlc1swXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiJiZWRlZDA0Yjk1MDEzZjBkNjgzZjZmNGI1YmI2ZDBjNjRjMDM0MjUxYjYwOWQwOTNkZGM0ZDE0Njg2MWJkMjVlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmxpY2Vuc2VzWzBdLmVmZmVjdGl2ZURhdGUifSx7InZhbHVlIjoiYzQ2ZTBhMzkyYTExMmM1NjRkNDdmODQ5NmFhMGRiYmZmZTg1NGEwNDQxODAxZmYxNzYyNzBiYmMyYmUxN2MwOSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5saWNlbnNlc1sxXS5jbGFzcyJ9LHsidmFsdWUiOiJjMGYzMWI2MGYyMjVkZTg1M2YzNzAyYzk4Y2E1OTk0Y2EzNTcyNmUwZTAyNGZkNzRkMWUwZTM1NzZiYjRhNmZlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmxpY2Vuc2VzWzFdLmRlc2NyaXB0aW9uIn0seyJ2YWx1ZSI6IjY0YTUxYjRkMmE3OWMyZTI5NTdkOTg0MDkwN2Q3MGEzMzY4NDRiN2QyYzNlNmE5NDk3NzY1NGUwM2RkMzk1ZWMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QubGljZW5zZXNbMV0uZWZmZWN0aXZlRGF0ZSJ9XQ==", + "merkleRoot": "ed9284455e904ef10e261a674cdcf7bf1cd14e443b98bcbebc570b553ac9a6e2", + "salts": "W3sidmFsdWUiOiJjOTYzODQ2ZGRiMjFmMDU3MzRhMjMyYjhiM2U2NWJhMTA0YTRiNjU0NDc5MjJhNTUzNzU1MjJhNGQyZDBjN2QxIiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6ImRmZTYzNWZkYjRhNTRjNGQ1NzhlOTMyOWU4ZTE5YzFhNTg1YWZmOWFlYzNjMTBhYTg1YzYyZGU5ZDU5YmQ0ZjAiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiZjViOGJlOGQ0NWE0MGE4Yzk1MzUxYTVlZGZmOTBjY2VhYWU0YjNhNzdmZDRlZDBiNWUxNDUyNjk2OTliNjEyYiIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6ImYyMDk4MTczY2RkNWE3Mzk1MmFkZWNhYmZlNjEwN2MzMDAyMjM4MDM1YmJkMmRlZjNmNmYzZWU0ODRiN2MyMWIiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiI3YzcyNWQyODdhNDhkNmViYzlhZjA5NWI0ZWRkNWQyMDZkNTQ2NTNhMmRhYmM3NmZlOTM2ZDZlZWI5ZDAxYWE0IiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiJiODRlNmQxYTYyYjA1OGI0OGYwMmQzM2VhNGMxMjQzYmU4Y2ZjZWVhMzRlNjQzYWU0NjA0NTlhMjM1YWE2N2U0IiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiI2ZDk5ZmQ2OTVlYTM0NzIxMGE5YzAyOTIyODJhOTJjNGQ2MWY0OTBkNjZkMjBkOWE3NTJlMDZmMDEwOGJmNzYyIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6IjMzOTYyYmQ3Y2JhMWM4MDk4NDM4ZGJjNWQwYTRmZmYwN2NlNzYyOGVjY2JmODM4ZTA1Y2YxNjg3YmRlNjg0MzciLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiYjM5MjA2MzY1MWNiMTMwYTcyZTYyM2M3YzVmZjRkNWZlNWUzNmVmNGZhNWVjMDA0MTNhM2NiOTU5OWI1NjQwOCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiJhZmZjYzg5MjNhZTYwOWIyOTg3MDY2YmU0MjYwY2RhNTk2NTc3MzY0ZjI0MDY4YTk1ZGE1YTlhYWM0NGFjOWQ5IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiZTUwNmY4ZmQ3NDNlZWI4Yzc2ZWFlZGNkODQxM2RmYzQwNDQ1ZDk4ZDZmZWNiNGNhMmUwMzRhMDY2Y2YzNzk5MCIsInBhdGgiOiJjcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiZmRkMzczMGVmZDM2MTZiMjYyZWQ1NmU2ZWIxOWE3ZmU0MjMyZDU4NjI5NGRiZDkwOTkzY2QwMGIzYWZiNWE0OSIsInBhdGgiOiJjcmVkZW50aWFsU3RhdHVzLmNyZWRlbnRpYWxTdGF0dXNUeXBlIn0seyJ2YWx1ZSI6ImE1ZThkN2E3YTIwY2ZlYWY0ZjhkZTAyNDQ4ZWY5YTVjYTRlZDc4ZDY4MDJmOWY3NGFmY2YzNTZiMjBmMGZkMDgiLCJwYXRoIjoicmVuZGVyTWV0aG9kLnR5cGUifSx7InZhbHVlIjoiNDU1YWMzYTE1MTBjMzM5NTE4NGVjNzJlOTI5NmNlNzk5M2UwNWYwODUxYzBiYzU1YTdhNzVhY2EzMDI3NDM0NiIsInBhdGgiOiJyZW5kZXJNZXRob2QucmVuZGVyTWV0aG9kVHlwZSJ9LHsidmFsdWUiOiJmMDMyOGI5ZTE4YzY4NzM1MjI5YTZhNDgzZGRmNmNkYjllYzhmMjA3YTQ0MWYzZTM1Y2I2MGViOWJiN2Y5NjI4IiwicGF0aCI6InJlbmRlck1ldGhvZC5uYW1lIn0seyJ2YWx1ZSI6ImRiYzk4MmRhMWJhMzhjMmVjYjUzY2Y0ZTliNmM5MzRkMGYyNGFhYjZjZDAyMmQ0ZTk0NTc0NTY4OGM1NmE1ODciLCJwYXRoIjoicmVuZGVyTWV0aG9kLnVybCJ9LHsidmFsdWUiOiI3ZjczNDQyMDIzNzJlYWZlMzc5ZWRkZTY1ZGQ5Nzk1MWJmYmQ3Yjg1NTBjNjkyYmNhNTM3NzkyYzZkYjY2MGIwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0Lm5hbWUifSx7InZhbHVlIjoiYmMxYmU0NzBjODJkYzFmYjgzMGNiZmViMWQ4MmViYzA4NzZjM2NkMzM3ODIyYzk4N2Q5ZWQxZmEwYzE5OGQ4YyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5pZCJ9LHsidmFsdWUiOiIyYmVlMzk0MGU2M2FkZjQ3MzgzNzE2ZjFmODI5NDM5MGM2OTk2OTUxZTM1Mzg5NjllNmI0NTgyNmJkYzBiYTNkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmRhdGUifSx7InZhbHVlIjoiODI1YmJlOWE4NWE3YjM3ZWQ0MmUyOTdjYjZhNmUxODZhYTdmMGZlOThiODg1OGQ2NDk4MjM2NGZhY2FlMWQ5MiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jdXN0b21lcklkIn0seyJ2YWx1ZSI6Ijk4ZGJjZGEyN2ZmMTIxOWRhY2VhMTkxNTZhZjFlZWY1YmNmYTg0MjY5NzEzM2MxOGZhMjc2ZTEwMDM2MDgyNzkiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGVybXMifSx7InZhbHVlIjoiNDRlZDBmY2QyOGEwNjg5ODAyZjQwNzBjMjVjMDIzMjBmZjA2NTIwYjE1NzEzYWQ0NWY0OTYxNWJkZDEyMTcwNCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5uYW1lIn0seyJ2YWx1ZSI6IjBkMGMzMDIzNjJmOTYxMzQ4MTA4MmI4NmE5ZmQxYThiZWY3MTIwMzg0MjUyZWIwOWJmYzdjYTMzYTAxYzZlN2EiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uc3RyZWV0QWRkcmVzcyJ9LHsidmFsdWUiOiIwZGFjYzk2OTQ0NzRhZmU2NTcyOGFkMWEyODA2NzM0Njc3MDgzMjI5YjY5MDVkMGZjOGNhNGZiZDMzYjdlNGYwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLmNpdHkifSx7InZhbHVlIjoiODYwNTVjMTEyOGI2ZWE5Y2Y4MzgzMTJiZWEzMGZjMDdjMTBjNWMzM2RmYmVlOTdiNTBjZDQ2MmRkOTBiNWRiYiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5wb3N0YWxDb2RlIn0seyJ2YWx1ZSI6IjM4NDc1ZTA5NzEyMDMzNmEzNjhjMGExNjRiOTUwN2U3ZWNlZmQ3MmExMjU4OGE5NDVjMDQyMTM5N2FkYTI5NmMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20ucGhvbmVOdW1iZXIifSx7InZhbHVlIjoiNThiNTdkNDM4ODFkYzBjYzk5ZTI3NTJhN2U4YWM3NTFjMmZhM2NjMjllODA4YmRlM2Y0NDA1ZmY5ZTZhZjRiNiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5uYW1lIn0seyJ2YWx1ZSI6ImQ1MDBkZjVkNDU4ZWRiYzBmMzRiNDY2OTkyNzEyYTZiNjJhNDRjZWEyYzg1ZmU2MjIyNDA1NDQyNTlhNGY3NGIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuc3RyZWV0QWRkcmVzcyJ9LHsidmFsdWUiOiI4OGNkZjM1MGRlOWYwYjUyYWNhNWI2MTI0YTQxNDdkZWFhZTMxNjU3ZDJjZDc3MzA4ODczYjU2YWEyOTYzNzUyIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LmNpdHkifSx7InZhbHVlIjoiNWFmNTkwYTAzOGMxMzAzOWJlNTQ2YzIyMzk4MjBmNzg2MWU0YjRhMDNjMjdmYmNlMTkwMzU3ZTk4MWNkYzA1YyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5wb3N0YWxDb2RlIn0seyJ2YWx1ZSI6IjA2MWY0ZTYxNjMzNDllNzExYTM0ZGUwZWQ2YjI1YTg3MmQ2NDRiZWUwYTUxOTZiMzY0MTg5ZmQ4ZDU4MTBhYmIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkucGhvbmVOdW1iZXIifSx7InZhbHVlIjoiMTNiYmI0ZWY1MTgwMzBjYTViMTZmZTg2NjQ5ZDcyZTcxYWZhYTVjODIwNjNkMWM2N2JjOGQ4NWFiY2RmZDBmZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8ubmFtZSJ9LHsidmFsdWUiOiJmMDU3NTNkNmY5NTBkNDIwNDhmYzMwYTlkZGVlMzlhNDFmZWVmMGRhYzQwOGE4OWJmZDU4ZTJlZWZhNDM0NTY3IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5lbWFpbCJ9LHsidmFsdWUiOiJlMTY3M2Y3ZTEyOTk4ZWZiNzc2ZmEzOWY4NDJkNWNkM2Y1YWY5YmQ0YzJmNzI4NjM3Mzc4MDE0NjgwNDAzYjU2IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiYzk1YTYxYmY1YjU0ZjJhY2U1MzJhMjJlMWUyYTA4Y2ZjMTk2YzExYjhhYjFjOThjZjQyNmNjNWY2OGNlYzM2YyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnF1YW50aXR5In0seyJ2YWx1ZSI6IjFiNjcyYjg5YjgxZjkwNWI3YTZiN2NhMzA5MTgxODZmZTdlNmVmZjEzOGQ3MjY0ZmMzY2NkOGM2Y2ExYjk1NWIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS51bml0UHJpY2UifSx7InZhbHVlIjoiYmM4MjdkNTJmMjkxMmM5MTNjNzk1NDBhNDIyMDg3NTE3YzIxNWQwNDczMzYyMTk1YjEwYjNmNGEzYWJhNDNkYyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLmFtb3VudCJ9LHsidmFsdWUiOiI5Y2Y3MzFjZThmMjQ1NWY4ZWI1ZTdiMmZiMDJjNzBjZWNmZTY3ZThmNWM1MjRkNDk3MzRmNjc0NWE3YWU0MDRiIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiMjdiZmY5NGQzMDc0OTUwZjFhODZkNTRiYzA4NmRhNmZmN2FjZjIyZGViOGVhYTVlOWVkNzUxZjhjN2FiYTAzOCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnF1YW50aXR5In0seyJ2YWx1ZSI6ImFiOGFhOGM5NDY1MGY3YmVmYmJhZDE2ODAyMDZkMGZkNDA3MjllNzVkMWNjY2FmZTA5NTMzMDgzOTk5MWZkZTIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS51bml0UHJpY2UifSx7InZhbHVlIjoiODkxNGE4OWU5MTAyMWVlNTZiNTk5OGZmNGU0MDVlYWU0OTc4ZmYwNDRjNTY3ZWM0ZTljNzBhODYyZDE0NzhlNiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLmFtb3VudCJ9LHsidmFsdWUiOiI3YWIxN2EyMTYxNzMyNmI0M2M2NzliZDc1MGYwNjg2Y2FhNmFhYmM1YzMzNGE2MzE2NjczODc0YmQ4NGQ3MzVkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiOWU0NmU1MmE3MzExMzI3MDEyNWQ3ZThkMDYwNDJlOTRlMDkyMTE1ZTA1OTIwODE4NGRkZDAwNTE5ODUxYTM3OSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnF1YW50aXR5In0seyJ2YWx1ZSI6IjAzNWM2OWRlMTc2ZTQ1NTdjOGEzNjQ0NmFlMjg2MjRkMjQwNWFhMzhlNjVlYjdmMzMwMDRiZDczY2JiOTM3NmEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS51bml0UHJpY2UifSx7InZhbHVlIjoiZDYwZDdjNDUzZDk2ZTZmZjE4NjRjNWY3ZDVhNDU5ODg3MGU3NTk0OTEyODZkZGYzZjQ5YTZjOTAxODBmNzg2YSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLmFtb3VudCJ9LHsidmFsdWUiOiJkMGI1YmUzYjYzNzUzYmQyZTQyYzZkNzc5NTcyNjAxZjY4NDVhMTNjYWRmYzhhM2JkYWE5ZmRiNDkwMmQzMGVlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnN1YnRvdGFsIn0seyJ2YWx1ZSI6IjcwOTJkNjg3YzVhMDM5ZjUxOWE4NDljNDJlMDEyMTY1MWI3ZDg1NTlmZDhiYzBlNGFjNzczNDBiZmM1NjQ4MDAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGF4In0seyJ2YWx1ZSI6ImE3ZjlmODQxNGM5NWJmY2RhYWIzNzg3YjJjNGE2NTQxOWE5ZDI4M2ZiN2U3YTVlZDQ1NDgyNDlhNDE2NzExMTkiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGF4VG90YWwifSx7InZhbHVlIjoiZjI0Yjg1MDkzYmEzYWU3MzVhMzlmYzkxMGY0MmUxN2UyNWMwNmNkYTUxZmU5YTZlNDQxMjI0OGY4NmE0MWVjMCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50b3RhbCJ9XQ==", "privacy": { "obfuscated": [] } } } diff --git a/test/fixtures/v4/did-wrapped2.json b/test/fixtures/v4/did-wrapped2.json new file mode 100644 index 00000000..f5a96e99 --- /dev/null +++ b/test/fixtures/v4/did-wrapped2.json @@ -0,0 +1,61 @@ +{ + "@context": ["https://www.w3.org/2018/credentials/v1", "http://localhost:8080/alpha-context.json"], + "type": ["VerifiableCredential", "TradeTrustCredential"], + "validFrom": "2021-03-08T12:00:00+08:00", + "issuer": { + "id": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89", + "type": "TradeTrustIssuer", + "name": "My Own Company Pte Ltd", + "identityProof": { "identityProofType": "DNS-DID", "identifier": "example.tradetrust.io" } + }, + "credentialStatus": { "type": "TradeTrustCredentialStatus", "credentialStatusType": "NONE" }, + "renderMethod": { + "type": "TradeTrustRenderMethod", + "renderMethodType": "EMBEDDED_RENDERER", + "name": "INVOICE", + "url": "https://generic-templates.tradetrust.io" + }, + "credentialSubject": { + "name": "TradeTrust Invoice", + "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "date": "2018-02-21", + "customerId": "564", + "terms": "Due Upon Receipt", + "billFrom": { + "name": "ABC Company", + "streetAddress": "Level 1, Industry Offices", + "city": "Singapore", + "postalCode": "123456", + "phoneNumber": "60305029" + }, + "billTo": { + "company": { + "name": "DEF Company", + "streetAddress": "Level 2, Industry Offices", + "city": "Singapore", + "postalCode": "612345", + "phoneNumber": "61204028" + }, + "name": "James Lee", + "email": "def@company.com" + }, + "billableItems": [ + { "description": "Service Fee", "quantity": "1", "unitPrice": "200", "amount": "200" }, + { "description": "Labor: 5 hours at $75/hr", "quantity": "5", "unitPrice": "75", "amount": "375" }, + { "description": "New client discount", "quantity": "1", "unitPrice": "50", "amount": "50" } + ], + "subtotal": "625", + "tax": "0", + "taxTotal": "0", + "total": "625" + }, + "proof": { + "type": "TradeTrustMerkleProofSignature2018", + "proofPurpose": "assertionMethod", + "targetHash": "27595bf33718176498bf16b0d61090c8928888c9037c4b508f96afad24c03841", + "proofs": [], + "merkleRoot": "27595bf33718176498bf16b0d61090c8928888c9037c4b508f96afad24c03841", + "salts": "W3sidmFsdWUiOiI0NTk1MzI1MjQwMTg4N2NkNjYxODIxODZhNTU1YWVlMTVjYzEzYmY5NGNiMWIzYTJkMmFkMGYyNmQxZjMzMjBhIiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6IjlhZTE5MDRlNzA2OTIyNGY1MzA2MjYyYzAyMDA2OWU1MjJiNDEwNWM3ZmVjNGYyN2NjODkxMWJmMjQ4OTA1NDQiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiYmNmMDMxZmJlZjAwMmIxNGYxNDcxNDI5YjAyZjQ3MGIwNTg0YmU4Mzc2ZmEwYTFmYmY2MDU5Y2EyZDEyZmI2OCIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6IjFjNTFkN2I1MWMxMTM5ZjNjYTQyMjY5ZDE1NGZiNTc4NjgwY2M5MjcxMzQ1OTBlNWZiMzVhNDE1MDQ2ZGM4N2MiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiI4MTVmMTRiZjg3NzgwNTczN2NhZmE1YTliYmI3NWI3MjA3ZGFhNDAwOTU5NjI1NWE3NmFlYjczOGQ4YjJjN2M0IiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiJkNWNkNTRiMTAyM2ZhYTY0NTdlODcxMzA4MmJkZDU0ZjMxNmI4ODU1OWMyMmE0YzY3MTNmOWU1NzAyOTNhNTA3IiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiJlZTk1NmFjOWU4ZTFhMWI4ZDM1OTdiZTQwNWNmZTljNjNlODQ3ODA4Y2JlOWJkMjVjZGFkODRkZWQzYjQ2ZmFhIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6ImJkZWFkZWQzNGIzNzBiY2UwMDU1ZGUwMDFlODA4OWNmMDIyN2ZlY2M2NTgwNjdiOTQxMGFkZmZmYjAxYjAzY2MiLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiMzIyOTg1NmI2NjM4M2U4NmE1YWFhZWQwMjNlNDYyMDlmMTRkYTVkOGFkNGJhN2E4NTk1M2MzZjZlZDhmZTM1MiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiI1MGQxOGI4NGExMGQ4NWExOGQ1ZTEwYzQ1MTUxM2MyYzZjNjUzMTk0MDQ3ZjZhZWI1YzgwY2NmNzBlN2M0YmUzIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiZWQwZWM0NWY4NWExMzMwMDZmYjY5ODY5NjEzZjZhMjRhMjk3MTY0OGM0YjllY2Y4NWQ5NWRjMWMwMDJlMDE4OCIsInBhdGgiOiJjcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiMDJlZjVhNjNmMmFlNTg3ZjdmOWNiNTAwZjcxZGYyZTE5NDQ5MWVjMmVkMzg5ZDdhOTA5ZGQ0ZDJkYjg2ZjYzMyIsInBhdGgiOiJjcmVkZW50aWFsU3RhdHVzLmNyZWRlbnRpYWxTdGF0dXNUeXBlIn0seyJ2YWx1ZSI6IjNmYWU0MTUxYTc3NDY1OTMyYjRlYTM5M2IwYTQ5NTNkOWQyMGU0YTNiZmU4MWRlZTBiOGIzNTM1M2UwNjhkZGYiLCJwYXRoIjoicmVuZGVyTWV0aG9kLnR5cGUifSx7InZhbHVlIjoiNTJmNjE0ODMzZGI4YWYyNDAxZTk0YjFmMzI3ZTdhNjk0MTk5NjM2MjU5OTNkYjQ0MmJjNjdhOWJhMDkwZjU1MSIsInBhdGgiOiJyZW5kZXJNZXRob2QucmVuZGVyTWV0aG9kVHlwZSJ9LHsidmFsdWUiOiI2M2U2Nzc2MmVmM2Y3MWYzNDdkYjJjYjdiNDY4ODQwMGMyZDc5N2ZmMTQwMjlmYjBjOTdmYjAyNzY0Mjk1YzhjIiwicGF0aCI6InJlbmRlck1ldGhvZC5uYW1lIn0seyJ2YWx1ZSI6IjhiYjViNDY2NGU4N2RhMWZiYWE5OTllMjc0ZWI0MGM0MDFhMzU5OWNhMzE1OGIxNGEwODcyODczYmYxZmFlYWEiLCJwYXRoIjoicmVuZGVyTWV0aG9kLnVybCJ9LHsidmFsdWUiOiI0YWQ1ZmJlYWZmYjJiZmY3MTI0MmY5NDZmYjlmMjY3YTk0NzUwOTU1ZmE3Y2Y5ZTExZTZhMzc5YWZiOTYzN2MwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0Lm5hbWUifSx7InZhbHVlIjoiMjgzZGNjZTA0YTVkOGU3NGU3Y2Y3ODFkMjBiMjMzYTEyMmRiYmQxMjliZmM5N2JhMjllNTg4NDY1MGFjYzUxMSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5pZCJ9LHsidmFsdWUiOiJiYmRlNjQ4NzViY2I4N2ExMDAxNmJmYWJiOTZjNjc2ZGYwMzE5OGRiYTVhZjIwM2I5YTgzMTA1MTM2ZGM5M2E1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmRhdGUifSx7InZhbHVlIjoiNGUwZjNmMDgwNDc1ODhhM2I2YTQ3ODAyY2IzNjgwZmI0NjdjMTk1OWE2ZmU5N2I3OWMzNDNjYTg5NzhhMzFhZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jdXN0b21lcklkIn0seyJ2YWx1ZSI6ImFjMTA1YTRjNzM3MzRjZjE4NmJkYTRlMzI3MzBlYzhhMmRiMmE2ZDZkZTVjNTg1MDk0Y2VmNDEyMWZiMzNkYTUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGVybXMifSx7InZhbHVlIjoiMGI5NzRmNWViNTI1YWEyMjM5MDEzMmViOWVmMWNkZTJmODIyODcyZGRjMzgxZDIzZDk3ZDdkZDk1MzI2M2VmMSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5uYW1lIn0seyJ2YWx1ZSI6ImVjZDkzOGJmYjFmODI3NzQwMzgyZmU1Nzc4ZjhlYmQ3M2NkNTdhODhkZWZmNDIzNGE3ZDc2NDgyNjI5Y2RiZjciLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uc3RyZWV0QWRkcmVzcyJ9LHsidmFsdWUiOiJlZGY0OTY1ZWI0MGJjNWMyNGFhMGFlOTU1MjQ3YmU5NTYzZGEwZDAzNGZkYmMzNmJmMmNmNDI5YWJlMTRkMDlkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLmNpdHkifSx7InZhbHVlIjoiODM3MjQzNTlhZWM3YjU5ZDY2NzhjMjVkOTliODkxZGIxNzFjNWQ2MTMyMmFlZDhhNjRlMzY0ZGU4YTUyMzYzOCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5wb3N0YWxDb2RlIn0seyJ2YWx1ZSI6Ijc1MTQxZWY3ZGFmNzczMDUxNWNmOGRmNjE0NWVkMDEwMmQ3YjRjMmM0M2I1Njc5NzRjZjY3NjNiYjhkYjJkNmUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20ucGhvbmVOdW1iZXIifSx7InZhbHVlIjoiOTVlYjU4ZjA3NWIwMGU4ZWI3NmRkNjJmYjQ5YTQzYjJmZDBhOGM5MWU5ODVlZjdlMTZiYmY3YTBjMDE1NTY0MyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5uYW1lIn0seyJ2YWx1ZSI6IjE0NmI2ZjhhYTYyNTVhZGY3MjIxZDg5MWVhMmE1NWNhNTQyZTliODI2MGRmN2I1NTI3NDhkMzQ5OTM0NjQyOGUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuc3RyZWV0QWRkcmVzcyJ9LHsidmFsdWUiOiJhODYxZDE4YTAzODE3ZDc3YWMxYmQ2ZjU3ODEwNzhiOTI5NWUwMjYwYTA5OTJhNWFkM2QxNjJkOTU3OTY2ZTIxIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LmNpdHkifSx7InZhbHVlIjoiY2RiZWU4NTI0Y2NkY2YwZThlZGExNzYyNjUwNzA1ZTI3Y2VlNjBhOGUyNWQyZjY3MTI2OTgzYWVkMDI3NWYxZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5wb3N0YWxDb2RlIn0seyJ2YWx1ZSI6ImFiYmI0M2JkNGM5MDA1YWRhOThjMGFkMzQwM2FmOTAyYTkwM2Y2NDk2ZWM1ZGU0NGI0ZmU2OTczNzg5MGY4NTgiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkucGhvbmVOdW1iZXIifSx7InZhbHVlIjoiZmFjMjg1YTFkZTA5ZjlmZWI1NDAxY2NkMTU2YjFlOGZiYWY2ODU5MjZiYWU0YWRkYzJjNmE5MWZhN2U1Y2I0ZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8ubmFtZSJ9LHsidmFsdWUiOiJlYzRmN2I3MmZhYTE2NjUyNzE2YThkMDEzYWFkYjcwMWJhYWRkYzg1MzNkODNiYjEwNWM0NzVkZTdiMmY1OTNkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5lbWFpbCJ9LHsidmFsdWUiOiIwYzU0NGI2ZmU4ZGU0M2RiYjc1NTA5MDgzMjY5ZjU3MTgzNjllODdiMTkyYjgwNzkwNDg5MTljOWZjNmY0NjY4IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiOTQ4ZjZmYTQ4ZmY3YjFkNTE5MDYyMDA3YThhOGUzOGM3MWUxOWY1MWU5NWUxY2NiNTdhMDYzNDIxOGRlOTBlMCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnF1YW50aXR5In0seyJ2YWx1ZSI6IjY1MzJlNTE4NDkxMjNhOGJjZDlmYjJiYmJhZjZkZjc2ODE3ZmM4MmUyNzkyNTNmOWE1ODNjMTExOTM5YTMzY2EiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS51bml0UHJpY2UifSx7InZhbHVlIjoiODZjMDE3MDY3ZmM5NTkyNDg1ZTVhY2RlYjUwN2QyZDkxMDRmNWQ4MmQ2Y2JjNDUwNjRhNGUwYWNiNmYxNzYzZSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLmFtb3VudCJ9LHsidmFsdWUiOiIwN2ZiYTI3MDg1OTgwOTllOGUzZGI3MDk0YTQyYTQzNDRmNzM1NTFjOGFiMmU2ZGZhYjlhMTZhZGE0NTRmNGI5IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiYTc1NGRkNzU2N2VlYzFiYzMyMTg4YzVlZjhhMjJmOTdjNDA5NzU3NjU5MjAwNjBjYjYxNWVlY2Q0ZThlMzc1NSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnF1YW50aXR5In0seyJ2YWx1ZSI6IjJiZGE5N2IwMGI1M2JjZTZmYjRmZmJhNDY4ZWIyYmMyYThhNGUyMjcxNzNlZDA4ZTM5NjUxMmJhOTAwOWIyYjMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS51bml0UHJpY2UifSx7InZhbHVlIjoiYzAxMDllY2I1MWRjZjUwZWU2MjFkZjJmNTBhNWJhYWE2OWY1MWIzNGE3ZTE1MjJkMWI5NjJlN2Y5YjAzY2JhZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLmFtb3VudCJ9LHsidmFsdWUiOiI5ZTM0YzI1Mjk5ZDQwY2I1NTk4ZWUyNGM5MTgwYTk2NDMzMWFkMjIwM2FiOTE3MTkxYTMzMTQxZmY1MzVlZjIxIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiMWExZTZiN2FlZmQ0N2E3YzdmYmM2OTQ5OWVkYmY3MzQyYmQ3ZDA4ODZlMzM4YzgzN2Y0M2ZmNjEwNGYwNGMxMCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnF1YW50aXR5In0seyJ2YWx1ZSI6Ijk4NDBjZTQ1MDY0OTVkNzMxODdkMDhiNWY3ODA3ODVjMDM5YjEwZjc3ZGJmYTBmMjNhNmEyMDZmYjJiOGU2ZDciLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS51bml0UHJpY2UifSx7InZhbHVlIjoiYzhhZWE0OTJkYTAxMWIyMTNlMGIyZjhmNTRlNzkwMjVmYmNlYmI2ZGExZmE0MjQyOGM5MzJlNmM4N2Y3ZmI2OCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLmFtb3VudCJ9LHsidmFsdWUiOiI5NWE1YjAxNjg4ZmIyNjg2Njk1YmJlNTA1OGE5NGNhNTY1MjA4NGE5NDdlYTMyYWVlYmM2NzlmM2FjNTcyMzE2IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnN1YnRvdGFsIn0seyJ2YWx1ZSI6ImQwMjRhMjRlZTM4NGFkNTgwYzJlMDk0YTIwMzgwOTIyMDY3ZGQ5ZWQyNmFmZmY4MmMxOTA3YmVhZjJiM2ExNTEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGF4In0seyJ2YWx1ZSI6IjYzOTdhYjU3NTUzMzBiZWNjOGQ1MjdhMzc2NDgwZjJjOWU5ODg1ZjUyZjg0NTlhYTVhNDEyNGI2YWY4MTQyNTAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGF4VG90YWwifSx7InZhbHVlIjoiZWFhMTE1ZTdjNjkwMGM3OTIzOTU4NjM4OTkzODhlZDUzMDJlNDdlNTZjZTkyYjViZTY5NWM2NWQzN2EwNDA0MSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50b3RhbCJ9XQ==", + "privacy": { "obfuscated": [] } + } +} diff --git a/test/fixtures/v4/idvc.json b/test/fixtures/v4/idvc.json new file mode 100644 index 00000000..517cb8af --- /dev/null +++ b/test/fixtures/v4/idvc.json @@ -0,0 +1,32 @@ +{ + "@context": [ + "https://w3id.org/security/bbs/v1", + "https://www.w3.org/2018/credentials/v1", + "https://stg.issuer.myinfo.gov.sg/myinfobusiness/schema/corporatebasicdetails/v1", + "https://w3id.org/vc/status-list/2021/v1" + ], + "id": "https://sbl.alwaysdata.net/oa/credentials/123456789", + "type": ["VerifiableCredential"], + "issuer": "did:web:sbl.alwaysdata.net:oa", + "credentialSubject": { + "uen": "198801234E", + "companyname": "My Own Company Pte Ltd", + "type": ["CorporateBasicDetails"], + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C" + }, + "expirationDate": "2023-11-01T06:45:43Z", + "credentialStatus": { + "id": "https://sbl.alwaysdata.net/oa/status/1#325", + "type": "StatusList2021Entry", + "statusListIndex": 325, + "statusListCredential": "https://sbl.alwaysdata.net/oa/status/1/325" + }, + "issuanceDate": "2023-22-13T01:35:08Z", + "proof": { + "type": "BbsBlsSignature2020", + "created": "2023-10-18T07:14:46Z", + "proofPurpose": "assertionMethod", + "proofValue": "tqvUVZOPaY/A+7Wu47HZIYbboPU/MPGhb1EPLUKKPRwmRe8QJ/dzjRviQ5fAbR88TjSalqLbaBeopNocjrl7TmzCOlLQxGeNC4El1TCICu5tiX0HxGSNAPY4t5CglTLMTsdu5kg4f0a5MGQTnFgwyw==", + "verificationMethod": "did:web:sbl.alwaysdata.net:oa#didkey" + } +} From bd8c73de25b4de95b8b36f72053094b4eaf4f23e Mon Sep 17 00:00:00 2001 From: cavacado Date: Sat, 28 Oct 2023 10:33:20 +0800 Subject: [PATCH 05/13] feat: idvc feature --- package-lock.json | 4590 +++++++++-------- scripts/postInstall.js | 9 +- scripts/publishSchema.sh | 18 +- src/4.0/oa/__tests__/digest.test.ts | 106 + src/4.0/oa/__tests__/e2e.test.wip | 405 ++ src/4.0/oa/__tests__/obfuscate.test.wip | 291 ++ src/4.0/oa/__tests__/salt.test.wip | 164 + src/4.0/oa/__tests__/sign.test.wip | 60 + src/4.0/oa/__tests__/verify.test.wip | 206 + src/4.0/oa/digest.ts | 24 + src/4.0/oa/obfuscate.ts | 57 + src/4.0/{ => oa}/salt.ts | 0 src/4.0/oa/schema/schema.json | 170 + src/4.0/oa/schema/schema.test.ts | 75 + src/4.0/oa/sign.ts | 21 + src/4.0/{ => oa}/traverseAndFlatten.ts | 0 src/4.0/oa/types.ts | 55 + src/4.0/{ => oa}/validate/index.ts | 0 src/4.0/oa/validate/validate.ts | 128 + src/4.0/{ => oa}/verify.ts | 2 +- src/4.0/oa/wrap.ts | 105 + src/4.0/{ => tt}/__tests__/digest.test.ts | 4 +- src/4.0/{ => tt}/__tests__/e2e.test.batch.wip | 0 src/4.0/{ => tt}/__tests__/e2e.test.ts | 20 +- src/4.0/{ => tt}/__tests__/obfuscate.test.ts | 14 +- src/4.0/{ => tt}/__tests__/salt.test.ts | 2 +- src/4.0/{ => tt}/__tests__/sign.test.ts | 6 +- .../{ => tt}/__tests__/verify.test.batch.wip | 0 src/4.0/{ => tt}/__tests__/verify.test.ts | 4 +- src/4.0/{ => tt}/digest.ts | 2 +- src/4.0/{ => tt}/obfuscate.ts | 4 +- src/4.0/tt/salt.ts | 39 + src/4.0/{ => tt}/schema/schema.json | 0 src/4.0/{ => tt}/schema/schema.test.ts | 24 +- src/4.0/{ => tt}/sign.ts | 8 +- src/4.0/tt/traverseAndFlatten.ts | 27 + src/4.0/{ => tt}/types.ts | 6 +- src/4.0/tt/validate/index.ts | 1 + src/4.0/{ => tt}/validate/validate.ts | 11 +- src/4.0/tt/verify.ts | 27 + src/4.0/{ => tt}/wrap.ts | 20 +- src/index.ts | 92 +- src/shared/@types/document.ts | 41 +- src/shared/ajv.ts | 4 +- src/shared/utils/__tests__/guard.test.ts | 56 + src/shared/utils/diagnose.ts | 134 +- src/shared/utils/guard.ts | 90 +- src/shared/utils/utils.ts | 59 +- src/shared/validate/validate.ts | 3 +- test/fixtures/v4/oa/did-raw.json | 39 + test/fixtures/v4/oa/did-signed-wrapped.json | 50 + test/fixtures/v4/oa/did-wrapped.json | 48 + .../v4/tt/did-idvc-raw-wrong-binding.json | 108 + test/fixtures/v4/{ => tt}/did-idvc-raw.json | 0 .../v4/{ => tt}/did-idvc-wrapped-signed.json | 0 .../v4/{ => tt}/did-idvc-wrapped.json | 0 test/fixtures/v4/{ => tt}/did-raw.json | 0 test/fixtures/v4/{ => tt}/did-raw2.json | 0 .../v4/{ => tt}/did-wrapped-obfuscated.json | 0 .../v4/{ => tt}/did-wrapped-signed.json | 0 test/fixtures/v4/{ => tt}/did-wrapped.json | 0 test/fixtures/v4/{ => tt}/did-wrapped2.json | 0 test/fixtures/v4/{ => tt}/idvc.json | 0 test/fixtures/v4/tt/revoked.json | 32 + 64 files changed, 5104 insertions(+), 2357 deletions(-) create mode 100644 src/4.0/oa/__tests__/digest.test.ts create mode 100644 src/4.0/oa/__tests__/e2e.test.wip create mode 100644 src/4.0/oa/__tests__/obfuscate.test.wip create mode 100644 src/4.0/oa/__tests__/salt.test.wip create mode 100644 src/4.0/oa/__tests__/sign.test.wip create mode 100644 src/4.0/oa/__tests__/verify.test.wip create mode 100644 src/4.0/oa/digest.ts create mode 100644 src/4.0/oa/obfuscate.ts rename src/4.0/{ => oa}/salt.ts (100%) create mode 100644 src/4.0/oa/schema/schema.json create mode 100644 src/4.0/oa/schema/schema.test.ts create mode 100644 src/4.0/oa/sign.ts rename src/4.0/{ => oa}/traverseAndFlatten.ts (100%) create mode 100644 src/4.0/oa/types.ts rename src/4.0/{ => oa}/validate/index.ts (100%) create mode 100644 src/4.0/oa/validate/validate.ts rename src/4.0/{ => oa}/verify.ts (95%) create mode 100644 src/4.0/oa/wrap.ts rename src/4.0/{ => tt}/__tests__/digest.test.ts (98%) rename src/4.0/{ => tt}/__tests__/e2e.test.batch.wip (100%) rename src/4.0/{ => tt}/__tests__/e2e.test.ts (91%) rename src/4.0/{ => tt}/__tests__/obfuscate.test.ts (96%) rename src/4.0/{ => tt}/__tests__/salt.test.ts (99%) rename src/4.0/{ => tt}/__tests__/sign.test.ts (92%) rename src/4.0/{ => tt}/__tests__/verify.test.batch.wip (100%) rename src/4.0/{ => tt}/__tests__/verify.test.ts (95%) rename src/4.0/{ => tt}/digest.ts (91%) rename src/4.0/{ => tt}/obfuscate.ts (94%) create mode 100644 src/4.0/tt/salt.ts rename src/4.0/{ => tt}/schema/schema.json (100%) rename src/4.0/{ => tt}/schema/schema.test.ts (92%) rename src/4.0/{ => tt}/sign.ts (72%) create mode 100644 src/4.0/tt/traverseAndFlatten.ts rename src/4.0/{ => tt}/types.ts (91%) create mode 100644 src/4.0/tt/validate/index.ts rename src/4.0/{ => tt}/validate/validate.ts (93%) create mode 100644 src/4.0/tt/verify.ts rename src/4.0/{ => tt}/wrap.ts (88%) create mode 100644 test/fixtures/v4/oa/did-raw.json create mode 100644 test/fixtures/v4/oa/did-signed-wrapped.json create mode 100644 test/fixtures/v4/oa/did-wrapped.json create mode 100644 test/fixtures/v4/tt/did-idvc-raw-wrong-binding.json rename test/fixtures/v4/{ => tt}/did-idvc-raw.json (100%) rename test/fixtures/v4/{ => tt}/did-idvc-wrapped-signed.json (100%) rename test/fixtures/v4/{ => tt}/did-idvc-wrapped.json (100%) rename test/fixtures/v4/{ => tt}/did-raw.json (100%) rename test/fixtures/v4/{ => tt}/did-raw2.json (100%) rename test/fixtures/v4/{ => tt}/did-wrapped-obfuscated.json (100%) rename test/fixtures/v4/{ => tt}/did-wrapped-signed.json (100%) rename test/fixtures/v4/{ => tt}/did-wrapped.json (100%) rename test/fixtures/v4/{ => tt}/did-wrapped2.json (100%) rename test/fixtures/v4/{ => tt}/idvc.json (100%) create mode 100644 test/fixtures/v4/tt/revoked.json diff --git a/package-lock.json b/package-lock.json index 9a86a7f4..93816e57 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1314,6 +1314,77 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, + "@isaacs/string-locale-compare": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", + "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", + "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", @@ -1743,164 +1814,549 @@ "fastq": "^1.6.0" } }, - "@octokit/auth-token": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", - "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", - "dev": true - }, - "@octokit/core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.1.tgz", - "integrity": "sha512-lyeeeZyESFo+ffI801SaBKmCfsvarO+dgV8/0gD8u1d87clbEdWsP5yC+dSj3zLhb2eIf5SJrn6vDz9AheETHw==", + "@npmcli/arborist": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-6.5.0.tgz", + "integrity": "sha512-Ir14P+DyH4COJ9fVbmxVy+9GmyU3e/DnlBtijVN7B3Ri53Y9QmAqi1S9IifG0PTGsfa2U4zhAF8e6I/0VXfWjg==", "dev": true, "requires": { - "@octokit/auth-token": "^4.0.0", - "@octokit/graphql": "^7.0.0", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^3.1.0", + "@npmcli/installed-package-contents": "^2.0.2", + "@npmcli/map-workspaces": "^3.0.2", + "@npmcli/metavuln-calculator": "^5.0.0", + "@npmcli/name-from-folder": "^2.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^4.0.0", + "@npmcli/query": "^3.0.0", + "@npmcli/run-script": "^6.0.0", + "bin-links": "^4.0.1", + "cacache": "^17.0.4", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^6.1.1", + "json-parse-even-better-errors": "^3.0.0", + "json-stringify-nice": "^1.1.4", + "minimatch": "^9.0.0", + "nopt": "^7.0.0", + "npm-install-checks": "^6.2.0", + "npm-package-arg": "^10.1.0", + "npm-pick-manifest": "^8.0.1", + "npm-registry-fetch": "^14.0.3", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "parse-conflict-json": "^3.0.0", + "proc-log": "^3.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.2", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^10.0.1", + "treeverse": "^3.0.0", + "walk-up-path": "^3.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" + } + }, + "hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + } + }, + "json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true + }, + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, - "@octokit/endpoint": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.1.tgz", - "integrity": "sha512-hRlOKAovtINHQPYHZlfyFwaM8OyetxeoC81lAkBy34uLb8exrZB50SQdeW3EROqiY9G9yxQTpp5OHTV54QD+vA==", + "@npmcli/config": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-6.4.0.tgz", + "integrity": "sha512-/fQjIbuNVIT/PbXvw178Tm97bxV0E0nVUFKHivMKtSI2pcs8xKdaWkHJxf9dTI0G/y5hp/KuCvgcUu5HwAtI1w==", "dev": true, "requires": { - "@octokit/types": "^12.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" + "@npmcli/map-workspaces": "^3.0.2", + "ci-info": "^3.8.0", + "ini": "^4.1.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.5", + "walk-up-path": "^3.0.1" + }, + "dependencies": { + "ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true + } } }, - "@octokit/graphql": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.2.tgz", - "integrity": "sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==", + "@npmcli/disparity-colors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/disparity-colors/-/disparity-colors-3.0.0.tgz", + "integrity": "sha512-5R/z157/f20Fi0Ou4ZttL51V0xz0EdPEOauFtPCEYOLInDBRCj1/TxOJ5aGTrtShxEshN2d+hXb9ZKSi5RLBcg==", "dev": true, "requires": { - "@octokit/request": "^8.0.1", - "@octokit/types": "^12.0.0", - "universal-user-agent": "^6.0.0" + "ansi-styles": "^4.3.0" } }, - "@octokit/openapi-types": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-19.0.0.tgz", - "integrity": "sha512-PclQ6JGMTE9iUStpzMkwLCISFn/wDeRjkZFIKALpvJQNBGwDoYYi2fFvuHwssoQ1rXI5mfh6jgTgWuddeUzfWw==", - "dev": true - }, - "@octokit/plugin-paginate-rest": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.0.0.tgz", - "integrity": "sha512-oIJzCpttmBTlEhBmRvb+b9rlnGpmFgDtZ0bB6nq39qIod6A5DP+7RkVLMOixIgRCYSHDTeayWqmiJ2SZ6xgfdw==", + "@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", "dev": true, "requires": { - "@octokit/types": "^12.0.0" + "semver": "^7.3.5" } }, - "@octokit/plugin-retry": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-6.0.1.tgz", - "integrity": "sha512-SKs+Tz9oj0g4p28qkZwl/topGcb0k0qPNX/i7vBKmDsjoeqnVfFUquqrE/O9oJY7+oLzdCtkiWSXLpLjvl6uog==", + "@npmcli/git": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", + "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", "dev": true, "requires": { - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", - "bottleneck": "^2.15.3" + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + }, + "which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, - "@octokit/plugin-throttling": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-8.0.0.tgz", - "integrity": "sha512-OkMbHYUidj81q92YRkPzWmwXkEtsI3KOcSkNm763aqUOh9IEplyX05XjKAdZFANAvaYH0Q4JBZwu4h2VnPVXZA==", + "@npmcli/installed-package-contents": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", "dev": true, "requires": { - "@octokit/types": "^12.0.0", - "bottleneck": "^2.15.3" + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" } }, - "@octokit/request": { - "version": "8.1.4", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.4.tgz", - "integrity": "sha512-M0aaFfpGPEKrg7XoA/gwgRvc9MSXHRO2Ioki1qrPDbl1e9YhjIwVoHE7HIKmv/m3idzldj//xBujcFNqGX6ENA==", + "@npmcli/map-workspaces": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.4.tgz", + "integrity": "sha512-Z0TbvXkRbacjFFLpVpV0e2mheCh+WzQpcqL+4xp49uNJOxOnIAPZyXtUxZ5Qn3QBTGKA11Exjd9a5411rBrhDg==", "dev": true, "requires": { - "@octokit/endpoint": "^9.0.0", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" + "@npmcli/name-from-folder": "^2.0.0", + "glob": "^10.2.2", + "minimatch": "^9.0.0", + "read-package-json-fast": "^3.0.0" + }, + "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" + } + }, + "glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + } + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, - "@octokit/request-error": { + "@npmcli/metavuln-calculator": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.1.tgz", - "integrity": "sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==", - "dev": true, - "requires": { - "@octokit/types": "^12.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "@octokit/types": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.0.0.tgz", - "integrity": "sha512-EzD434aHTFifGudYAygnFlS1Tl6KhbTynEWELQXIbTY8Msvb5nEqTZIm7sbPEt4mQYLZwu3zPKVdeIrw0g7ovg==", - "dev": true, - "requires": { - "@octokit/openapi-types": "^19.0.0" - } - }, - "@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", - "dev": true - }, - "@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-5.0.1.tgz", + "integrity": "sha512-qb8Q9wIIlEPj3WeA1Lba91R4ZboPL0uspzV0F9uwP+9AYMVB2zOoa7Pbk12g6D2NHAinSbHh6QYmGuRyHZ874Q==", "dev": true, "requires": { - "graceful-fs": "4.2.10" + "cacache": "^17.0.0", + "json-parse-even-better-errors": "^3.0.0", + "pacote": "^15.0.0", + "semver": "^7.3.5" }, "dependencies": { - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", "dev": true } } }, - "@pnpm/npm-conf": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", - "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", - "dev": true, - "requires": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - } + "@npmcli/name-from-folder": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz", + "integrity": "sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==", + "dev": true }, - "@rollup/plugin-json": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", - "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", + "@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true + }, + "@npmcli/package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha512-lRCEGdHZomFsURroh522YvA/2cVb9oPIJrjHanCJZkiasz1BzcnLr3tBJhlV7S86MBJBuAQ33is2D60YitZL2Q==", "dev": true, "requires": { - "@rollup/pluginutils": "^3.0.8" - } - }, - "@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "@npmcli/git": "^4.1.0", + "glob": "^10.2.2", + "hosted-git-info": "^6.1.1", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "proc-log": "^3.0.0", + "semver": "^7.5.3" + }, + "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" + } + }, + "glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + } + }, + "hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + } + }, + "json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true + }, + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "requires": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + } + } + } + }, + "@npmcli/promise-spawn": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", + "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", + "dev": true, + "requires": { + "which": "^3.0.0" + }, + "dependencies": { + "which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@npmcli/query": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/query/-/query-3.0.1.tgz", + "integrity": "sha512-0jE8iHBogf/+bFDj+ju6/UMLbJ39c8h6nSe6qile+dB7PJ0iV3gNqcb2vtt6WWCBrxv9uAjzUT/8vroluulidA==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.10" + } + }, + "@npmcli/run-script": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", + "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", + "dev": true, + "requires": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, + "dependencies": { + "which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@octokit/auth-token": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", + "dev": true + }, + "@octokit/core": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.1.tgz", + "integrity": "sha512-lyeeeZyESFo+ffI801SaBKmCfsvarO+dgV8/0gD8u1d87clbEdWsP5yC+dSj3zLhb2eIf5SJrn6vDz9AheETHw==", + "dev": true, + "requires": { + "@octokit/auth-token": "^4.0.0", + "@octokit/graphql": "^7.0.0", + "@octokit/request": "^8.0.2", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^12.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/endpoint": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.1.tgz", + "integrity": "sha512-hRlOKAovtINHQPYHZlfyFwaM8OyetxeoC81lAkBy34uLb8exrZB50SQdeW3EROqiY9G9yxQTpp5OHTV54QD+vA==", + "dev": true, + "requires": { + "@octokit/types": "^12.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/graphql": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.2.tgz", + "integrity": "sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==", + "dev": true, + "requires": { + "@octokit/request": "^8.0.1", + "@octokit/types": "^12.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/openapi-types": { + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-19.0.2.tgz", + "integrity": "sha512-8li32fUDUeml/ACRp/njCWTsk5t17cfTM1jp9n08pBrqs5cDFJubtjsSnuz56r5Tad6jdEPJld7LxNp9dNcyjQ==", + "dev": true + }, + "@octokit/plugin-paginate-rest": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.1.2.tgz", + "integrity": "sha512-euDbNV6fxX6btsCDnZoZM4vw3zO1nj1Z7TskHAulO6mZ9lHoFTpwll6farf+wh31mlBabgU81bBYdflp0GLVAQ==", + "dev": true, + "requires": { + "@octokit/types": "^12.1.1" + } + }, + "@octokit/plugin-retry": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-6.0.1.tgz", + "integrity": "sha512-SKs+Tz9oj0g4p28qkZwl/topGcb0k0qPNX/i7vBKmDsjoeqnVfFUquqrE/O9oJY7+oLzdCtkiWSXLpLjvl6uog==", + "dev": true, + "requires": { + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^12.0.0", + "bottleneck": "^2.15.3" + } + }, + "@octokit/plugin-throttling": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-8.1.2.tgz", + "integrity": "sha512-oFba+ioR6HGb0fgqxMta7Kpk/MdffUTuUxNY856l1nXPvh7Qggp8w4AksRx1SDA8SGd+4cbrpkY4k1J/Xz8nZQ==", + "dev": true, + "requires": { + "@octokit/types": "^12.0.0", + "bottleneck": "^2.15.3" + } + }, + "@octokit/request": { + "version": "8.1.4", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.4.tgz", + "integrity": "sha512-M0aaFfpGPEKrg7XoA/gwgRvc9MSXHRO2Ioki1qrPDbl1e9YhjIwVoHE7HIKmv/m3idzldj//xBujcFNqGX6ENA==", + "dev": true, + "requires": { + "@octokit/endpoint": "^9.0.0", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^12.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/request-error": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.1.tgz", + "integrity": "sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==", + "dev": true, + "requires": { + "@octokit/types": "^12.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "@octokit/types": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.1.1.tgz", + "integrity": "sha512-qnJTldJ1NyGT5MTsCg/Zi+y2IFHZ1Jo5+njNCjJ9FcainV7LjuHgmB697kA0g4MjZeDAJsM3B45iqCVsCLVFZg==", + "dev": true, + "requires": { + "@octokit/openapi-types": "^19.0.2" + } + }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true + }, + "@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "dev": true + }, + "@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "dev": true, + "requires": { + "graceful-fs": "4.2.10" + }, + "dependencies": { + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + } + } + }, + "@pnpm/npm-conf": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", + "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", + "dev": true, + "requires": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + } + }, + "@rollup/plugin-json": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", + "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.0.8" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", "dev": true, "requires": { @@ -2187,9 +2643,9 @@ "dev": true }, "type-fest": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.4.0.tgz", - "integrity": "sha512-HT3RRs7sTfY22KuPQJkD/XjbTbxgP2Je5HPt6H6JEGvcjHd5Lqru75EbrP3tb4FYjNJ+DjLp+MNQTFQU0mhXNw==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.6.0.tgz", + "integrity": "sha512-rLjWJzQFOq4xw7MgJrCZ6T1jIOvvYElXT12r+y0CC6u67hegDHaxcPqb2fZHOGlqxugGQPNB1EnTezjBetkwkw==", "dev": true } } @@ -2390,9 +2846,9 @@ "dev": true }, "type-fest": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.4.0.tgz", - "integrity": "sha512-HT3RRs7sTfY22KuPQJkD/XjbTbxgP2Je5HPt6H6JEGvcjHd5Lqru75EbrP3tb4FYjNJ+DjLp+MNQTFQU0mhXNw==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.6.0.tgz", + "integrity": "sha512-rLjWJzQFOq4xw7MgJrCZ6T1jIOvvYElXT12r+y0CC6u67hegDHaxcPqb2fZHOGlqxugGQPNB1EnTezjBetkwkw==", "dev": true }, "yocto-queue": { @@ -2403,6 +2859,42 @@ } } }, + "@sigstore/bundle": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz", + "integrity": "sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==", + "dev": true, + "requires": { + "@sigstore/protobuf-specs": "^0.2.0" + } + }, + "@sigstore/protobuf-specs": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz", + "integrity": "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==", + "dev": true + }, + "@sigstore/sign": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-1.0.0.tgz", + "integrity": "sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==", + "dev": true, + "requires": { + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "make-fetch-happen": "^11.0.1" + } + }, + "@sigstore/tuf": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz", + "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==", + "dev": true, + "requires": { + "@sigstore/protobuf-specs": "^0.2.0", + "tuf-js": "^1.1.7" + } + }, "@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -2427,6 +2919,12 @@ "@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 + }, "@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -2451,6 +2949,42 @@ "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "dev": true }, + "@tufjs/canonical-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", + "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "dev": true + }, + "@tufjs/models": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", + "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "dev": true, + "requires": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + }, + "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": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, "@types/babel__core": { "version": "7.20.1", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", @@ -2748,6 +3282,12 @@ "through": ">=2.2.7 <3" } }, + "abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true + }, "abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -2789,6 +3329,15 @@ "debug": "^4.3.4" } }, + "agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "dev": true, + "requires": { + "humanize-ms": "^1.2.1" + } + }, "aggregate-error": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-5.0.0.tgz", @@ -2841,14 +3390,12 @@ "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 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "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" } @@ -2869,6 +3416,28 @@ "picomatch": "^2.0.4" } }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true + }, + "are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -3096,6 +3665,42 @@ "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", "dev": true }, + "bin-links": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-4.0.3.tgz", + "integrity": "sha512-obsRaULtJurnfox/MDwgq6Yo9kzbv1CPTk/1/s7Z/61Lezc8IKkFCOXNeVLXz0456WRzBQmSsDWlai2tIhBsfA==", + "dev": true, + "requires": { + "cmd-shim": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "read-cmd-shim": "^4.0.0", + "write-file-atomic": "^5.0.0" + }, + "dependencies": { + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + }, + "write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + } + } + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, "bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -3194,6 +3799,99 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, + "cacache": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", + "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", + "dev": true, + "requires": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "dependencies": { + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "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" + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + } + }, + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + } + } + }, "cachedir": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", @@ -3295,12 +3993,27 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, "ci-info": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", "dev": true }, + "cidr-regex": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/cidr-regex/-/cidr-regex-3.1.1.tgz", + "integrity": "sha512-RBqYd32aDwbCMFJRL6wHOlDNYJsPNTt8vC82ErHF5vKt8QQzxm1FrkW8s/R5pVrXMf17sba09Uoy91PKiddAsw==", + "dev": true, + "requires": { + "ip-regex": "^4.1.0" + } + }, "cjs-module-lexer": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", @@ -3324,6 +4037,16 @@ } } }, + "cli-columns": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-columns/-/cli-columns-4.0.0.tgz", + "integrity": "sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ==", + "dev": true, + "requires": { + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + } + }, "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", @@ -3372,6 +4095,12 @@ "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true }, + "cmd-shim": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.2.tgz", + "integrity": "sha512-+FFYbB0YLaAkhkcrjkyNLYDiOsFSfRjwjY19LXk/psmMx1z00xlCv7hhQoTGXXIKi+YXHL/iiFo8NqMVQX9nOw==", + "dev": true + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -3394,7 +4123,6 @@ "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" } @@ -3402,9 +4130,24 @@ "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==", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true }, + "columnify": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", + "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", + "dev": true, + "requires": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + } + }, "command-line-args": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", @@ -3578,6 +4321,12 @@ } } }, + "common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "dev": true + }, "compare-func": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", @@ -3610,6 +4359,12 @@ "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", "dev": true }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, "conventional-changelog-angular": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz", @@ -3743,6 +4498,12 @@ } } }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, "cz-conventional-changelog": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz", @@ -3897,6 +4658,12 @@ "object-keys": "^1.1.1" } }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, "deprecation": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", @@ -4013,6 +4780,12 @@ } } }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "electron-to-chromium": { "version": "1.4.496", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.496.tgz", @@ -4049,8 +4822,7 @@ "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 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "encode-utf8": { "version": "1.0.3", @@ -4058,6 +4830,28 @@ "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==", "dev": true }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "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, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, "enquirer": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", @@ -4145,6 +4939,18 @@ } } }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -4700,6 +5506,12 @@ "jest-util": "^29.6.2" } }, + "exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, "external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -4747,6 +5559,12 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true + }, "fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", @@ -4881,6 +5699,24 @@ "is-callable": "^1.1.3" } }, + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + } + } + }, "from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", @@ -4940,6 +5776,15 @@ "universalify": "^2.0.0" } }, + "fs-minipass": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", + "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", + "dev": true, + "requires": { + "minipass": "^5.0.0" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -4983,6 +5828,22 @@ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true }, + "gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } + }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -5320,6 +6181,12 @@ "has-symbols": "^1.0.2" } }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, "hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", @@ -5369,6 +6236,12 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, "http-proxy-agent": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", @@ -5395,6 +6268,15 @@ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -5416,6 +6298,35 @@ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true }, + "ignore-walk": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", + "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", + "dev": true, + "requires": { + "minimatch": "^9.0.0" + }, + "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": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -5483,8 +6394,23 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, - "inquirer": { - "version": "6.5.2", + "init-package-json": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-5.0.0.tgz", + "integrity": "sha512-kBhlSheBfYmq3e0L1ii+VKe3zBTLL5lDCDWR+f9dLmEGSB3MqLlMlsolubSsyI88Bg6EA+BIMlomAnQ1SwgQBw==", + "dev": true, + "requires": { + "npm-package-arg": "^10.0.0", + "promzard": "^1.0.0", + "read": "^2.0.0", + "read-package-json": "^6.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^5.0.0" + } + }, + "inquirer": { + "version": "6.5.2", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", "dev": true, @@ -5625,16 +6551,20 @@ "requires": { "from2": "^2.3.0", "p-is-promise": "^3.0.0" - }, - "dependencies": { - "p-is-promise": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", - "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", - "dev": true - } } }, + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, + "ip-regex": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", + "dev": true + }, "is-array-buffer": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", @@ -5682,6 +6612,15 @@ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true }, + "is-cidr": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/is-cidr/-/is-cidr-4.0.2.tgz", + "integrity": "sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA==", + "dev": true, + "requires": { + "cidr-regex": "^3.1.1" + } + }, "is-core-module": { "version": "2.13.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", @@ -5709,8 +6648,7 @@ "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 + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-generator-fn": { "version": "2.1.0", @@ -5733,6 +6671,12 @@ "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, "is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -5965,6 +6909,16 @@ "integrity": "sha512-Cu/kb+4HiNSejAPhSaN1VukdNTTi/r4/e+yykqjlG/IW+1gZH5b4+Bq3whDX4tvbYugta3r8KTMUiqT3fIGxuQ==", "dev": true }, + "jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, "java-properties": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", @@ -6583,6 +7537,12 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "json-stringify-nice": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", + "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", + "dev": true + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -6614,6 +7574,18 @@ "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true }, + "just-diff": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz", + "integrity": "sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==", + "dev": true + }, + "just-diff-apply": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz", + "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==", + "dev": true + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -6642,6 +7614,204 @@ "type-check": "~0.4.0" } }, + "libnpmaccess": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-7.0.2.tgz", + "integrity": "sha512-vHBVMw1JFMTgEk15zRsJuSAg7QtGGHpUSEfnbcRL1/gTBag9iEfJbyjpDmdJmwMhvpoLoNBtdAUCdGnaP32hhw==", + "dev": true, + "requires": { + "npm-package-arg": "^10.1.0", + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmdiff": { + "version": "5.0.20", + "resolved": "https://registry.npmjs.org/libnpmdiff/-/libnpmdiff-5.0.20.tgz", + "integrity": "sha512-oG+qEc0qzg++1YqLwguQvXAyG8BrKq+23RHr4sCa5XZnf1U+hcKUp8itgaBY9sGRYyGXtsRgXWWFHBmqXIctDA==", + "dev": true, + "requires": { + "@npmcli/arborist": "^6.5.0", + "@npmcli/disparity-colors": "^3.0.0", + "@npmcli/installed-package-contents": "^2.0.2", + "binary-extensions": "^2.2.0", + "diff": "^5.1.0", + "minimatch": "^9.0.0", + "npm-package-arg": "^10.1.0", + "pacote": "^15.0.8", + "tar": "^6.1.13" + }, + "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" + } + }, + "diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "dev": true + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "libnpmexec": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/libnpmexec/-/libnpmexec-6.0.4.tgz", + "integrity": "sha512-dhFp5yA9M2g8oLg/Ys9not+pNzW8B20pcz455TGqyU5VesXnEPQwK5EPVY8W24JJn7M0jMJ6/GxosywMPOTebA==", + "dev": true, + "requires": { + "@npmcli/arborist": "^6.5.0", + "@npmcli/run-script": "^6.0.0", + "ci-info": "^3.7.1", + "npm-package-arg": "^10.1.0", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "proc-log": "^3.0.0", + "read": "^2.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "walk-up-path": "^3.0.1" + } + }, + "libnpmfund": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/libnpmfund/-/libnpmfund-4.2.1.tgz", + "integrity": "sha512-2fbmQMk3wPMdPx1gbYLNbzghj48XAsfytKrmy+A0eFXwDxCwL0BLdgXoeLQCZPpLUMSPPXdKyL6Wm4erWezhnA==", + "dev": true, + "requires": { + "@npmcli/arborist": "^6.5.0" + } + }, + "libnpmhook": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/libnpmhook/-/libnpmhook-9.0.3.tgz", + "integrity": "sha512-wMZe58sI7KLhg0+nUWZW5KdMfjNNcOIIbkoP19BDHYoUF9El7eeUWkGNxUGzpHkPKiGoQ1z/v6CYin4deebeuw==", + "dev": true, + "requires": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmorg": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/libnpmorg/-/libnpmorg-5.0.4.tgz", + "integrity": "sha512-YqYXLMAN0Y1eJH4w3hUFN9648xfSdvJANMsdeZTOWJOW4Pqp8qapJFzQdqCfUkg+tEuQmnaFQQKXvkMZC51+Mw==", + "dev": true, + "requires": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmpack": { + "version": "5.0.20", + "resolved": "https://registry.npmjs.org/libnpmpack/-/libnpmpack-5.0.20.tgz", + "integrity": "sha512-lPQXok0sU0V7hjb8oMD6HjYTR296aZvCJQZ1PGC7PeuKkBGuNeqSKVE2I9bwI80E4bFa9gfQ1I+rGfkNRjn6tQ==", + "dev": true, + "requires": { + "@npmcli/arborist": "^6.5.0", + "@npmcli/run-script": "^6.0.0", + "npm-package-arg": "^10.1.0", + "pacote": "^15.0.8" + } + }, + "libnpmpublish": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-7.5.0.tgz", + "integrity": "sha512-zctH6QcTJ093lpxmkufr2zr3AJ9V90hcRilDFNin6n91ODj+S28RdyMFFJpa9NwyztmyV2hlWLyZv0GaOQBDyA==", + "dev": true, + "requires": { + "ci-info": "^3.6.1", + "normalize-package-data": "^5.0.0", + "npm-package-arg": "^10.1.0", + "npm-registry-fetch": "^14.0.3", + "proc-log": "^3.0.0", + "semver": "^7.3.7", + "sigstore": "^1.4.0", + "ssri": "^10.0.1" + }, + "dependencies": { + "hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + } + }, + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + }, + "normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "requires": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + } + } + } + }, + "libnpmsearch": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/libnpmsearch/-/libnpmsearch-6.0.2.tgz", + "integrity": "sha512-p+5BF19AvnVg8mcIQhy6yWhI6jHQRVMYaIaKeITEfYAffWsqbottA/WZdMtHL76hViC6SFM1WdclM1w5eAIa1g==", + "dev": true, + "requires": { + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmteam": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/libnpmteam/-/libnpmteam-5.0.3.tgz", + "integrity": "sha512-7XOGhi45s+ml6TyrhJUTyrErcoDMKGKfEtiTEco4ofU7BGGAUOalVztKMVLLJgJOOXdIAIlzCHqkTXEuSiyCiA==", + "dev": true, + "requires": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmversion": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/libnpmversion/-/libnpmversion-4.0.2.tgz", + "integrity": "sha512-n1X70mFHv8Piy4yos+MFWUARSkTbyV5cdsHScaIkuwYvRAF/s2VtYScDzWB4Oe8uNEuGNdjiRR1E/Dh1tMvv6g==", + "dev": true, + "requires": { + "@npmcli/git": "^4.0.1", + "@npmcli/run-script": "^6.0.0", + "json-parse-even-better-errors": "^3.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.7" + }, + "dependencies": { + "json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true + } + } + }, "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -6851,6 +8021,67 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, + "make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "dependencies": { + "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" + } + }, + "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" + } + }, + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + } + } + }, "makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", @@ -7010,66 +8241,274 @@ "kind-of": "^6.0.3" } }, - "modify-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", - "dev": true - }, - "moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "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 - }, - "nerf-dart": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", - "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==", + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true }, - "node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "dev": true, "requires": { - "lodash": "^4.17.21" + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } } }, - "node-fetch": { - "version": "2.6.13", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.13.tgz", - "integrity": "sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==", + "minipass-fetch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "dev": true, "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-int64": { - "version": "0.4.0", + "encoding": "^0.1.13", + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "dependencies": { + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true + } + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "modify-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", + "dev": true + }, + "moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "nerf-dart": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", + "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==", + "dev": true + }, + "node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dev": true, + "requires": { + "lodash": "^4.17.21" + } + }, + "node-fetch": { + "version": "2.6.13", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.13.tgz", + "integrity": "sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-gyp": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", + "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^11.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "requires": { + "abbrev": "^1.0.0" + } + }, + "npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.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 @@ -7089,6 +8528,15 @@ "@cto.af/textdecoder": "^0.0.0" } }, + "nopt": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", + "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", + "dev": true, + "requires": { + "abbrev": "^2.0.0" + } + }, "normalize-package-data": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", @@ -7191,2111 +8639,337 @@ "write-file-atomic": "^5.0.1" }, "dependencies": { - "@colors/colors": { - "version": "1.5.0", - "bundled": true, - "dev": true, - "optional": true - }, - "@isaacs/cliui": { - "version": "8.0.2", - "bundled": true, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "requires": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "bundled": true, - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "bundled": true, - "dev": true - }, - "string-width": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "string-width-cjs": { - "version": "npm:string-width@4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "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 - }, - "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 - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "strip-ansi": { - "version": "7.1.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "strip-ansi-cjs": { - "version": "npm:strip-ansi@6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - }, - "dependencies": { - "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 - } - } - }, - "wrap-ansi-cjs": { - "version": "npm:wrap-ansi@7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "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 - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - } + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" } }, - "@isaacs/string-locale-compare": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "@npmcli/arborist": { - "version": "6.5.0", - "bundled": true, + "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": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^3.1.0", - "@npmcli/installed-package-contents": "^2.0.2", - "@npmcli/map-workspaces": "^3.0.2", - "@npmcli/metavuln-calculator": "^5.0.0", - "@npmcli/name-from-folder": "^2.0.0", - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^4.0.0", - "@npmcli/query": "^3.0.0", - "@npmcli/run-script": "^6.0.0", - "bin-links": "^4.0.1", - "cacache": "^17.0.4", - "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^6.1.1", - "json-parse-even-better-errors": "^3.0.0", - "json-stringify-nice": "^1.1.4", - "minimatch": "^9.0.0", - "nopt": "^7.0.0", - "npm-install-checks": "^6.2.0", - "npm-package-arg": "^10.1.0", - "npm-pick-manifest": "^8.0.1", - "npm-registry-fetch": "^14.0.3", - "npmlog": "^7.0.1", - "pacote": "^15.0.8", - "parse-conflict-json": "^3.0.0", - "proc-log": "^3.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.2", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^10.0.1", - "treeverse": "^3.0.0", - "walk-up-path": "^3.0.1" - } - }, - "@npmcli/config": { - "version": "6.4.0", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/map-workspaces": "^3.0.2", - "ci-info": "^3.8.0", - "ini": "^4.1.0", - "nopt": "^7.0.0", - "proc-log": "^3.0.0", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.5", - "walk-up-path": "^3.0.1" + "balanced-match": "^1.0.0" } }, - "@npmcli/disparity-colors": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^4.3.0" - } + "chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true }, - "@npmcli/fs": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "semver": "^7.3.5" - } + "ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true }, - "@npmcli/git": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/promise-spawn": "^6.0.0", - "lru-cache": "^7.4.4", - "npm-pick-manifest": "^8.0.0", - "proc-log": "^3.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^3.0.0" - } + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true }, - "@npmcli/installed-package-contents": { - "version": "2.0.2", - "bundled": true, + "cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "dev": true, "requires": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" } }, - "@npmcli/map-workspaces": { - "version": "3.0.4", - "bundled": true, + "glob": { + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", + "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", "dev": true, "requires": { - "@npmcli/name-from-folder": "^2.0.0", - "glob": "^10.2.2", - "minimatch": "^9.0.0", - "read-package-json-fast": "^3.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" } }, - "@npmcli/metavuln-calculator": { - "version": "5.0.1", - "bundled": true, + "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 + }, + "hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", "dev": true, "requires": { - "cacache": "^17.0.0", - "json-parse-even-better-errors": "^3.0.0", - "pacote": "^15.0.0", - "semver": "^7.3.5" + "lru-cache": "^7.5.1" } }, - "@npmcli/name-from-folder": { - "version": "2.0.0", - "bundled": true, + "ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", "dev": true }, - "@npmcli/node-gyp": { + "json-parse-even-better-errors": { "version": "3.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", "dev": true }, - "@npmcli/package-json": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/git": "^4.1.0", - "glob": "^10.2.2", - "hosted-git-info": "^6.1.1", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "proc-log": "^3.0.0", - "semver": "^7.5.3" - } - }, - "@npmcli/promise-spawn": { - "version": "6.0.2", - "bundled": true, - "dev": true, - "requires": { - "which": "^3.0.0" - } - }, - "@npmcli/query": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "@npmcli/run-script": { - "version": "6.0.2", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/promise-spawn": "^6.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^3.0.0", - "which": "^3.0.0" - } - }, - "@pkgjs/parseargs": { - "version": "0.11.0", - "bundled": true, - "dev": true, - "optional": true - }, - "@sigstore/bundle": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "@sigstore/protobuf-specs": "^0.2.0" - } - }, - "@sigstore/protobuf-specs": { - "version": "0.2.1", - "bundled": true, - "dev": true - }, - "@sigstore/sign": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "@sigstore/bundle": "^1.1.0", - "@sigstore/protobuf-specs": "^0.2.0", - "make-fetch-happen": "^11.0.1" - } - }, - "@sigstore/tuf": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "requires": { - "@sigstore/protobuf-specs": "^0.2.0", - "tuf-js": "^1.1.7" - } - }, - "@tootallnate/once": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "@tufjs/canonical-json": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "@tufjs/models": { - "version": "1.0.4", - "bundled": true, - "dev": true, - "requires": { - "@tufjs/canonical-json": "1.0.0", - "minimatch": "^9.0.0" - } - }, - "abbrev": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "abort-controller": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "agent-base": { - "version": "6.0.2", - "bundled": true, - "dev": true, - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.3.0", - "bundled": true, - "dev": true, - "requires": { - "debug": "^4.1.0", - "depd": "^2.0.0", - "humanize-ms": "^1.2.1" - } - }, - "aggregate-error": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ansi-regex": { - "version": "5.0.1", - "bundled": true - }, - "ansi-styles": { - "version": "4.3.0", - "bundled": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "aproba": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "archy": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "are-we-there-yet": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^4.1.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "bundled": true, - "dev": true - }, - "bin-links": { - "version": "4.0.2", - "bundled": true, - "dev": true, - "requires": { - "cmd-shim": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "read-cmd-shim": "^4.0.0", - "write-file-atomic": "^5.0.0" - } - }, - "binary-extensions": { - "version": "2.2.0", - "bundled": true, - "dev": true - }, - "brace-expansion": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "buffer": { - "version": "6.0.3", - "bundled": true, - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "builtins": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "cacache": { - "version": "17.1.3", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - } - }, - "chalk": { - "version": "5.3.0", - "bundled": true, - "dev": true - }, - "chownr": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "ci-info": { - "version": "3.8.0", - "bundled": true, - "dev": true - }, - "cidr-regex": { - "version": "3.1.1", - "bundled": true, - "dev": true, - "requires": { - "ip-regex": "^4.1.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "bundled": true, - "dev": true - }, - "cli-columns": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - } - }, - "cli-table3": { - "version": "0.6.3", - "bundled": true, - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - } - }, - "clone": { - "version": "1.0.4", - "bundled": true, - "dev": true - }, - "cmd-shim": { - "version": "6.0.1", - "bundled": true, - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "bundled": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "bundled": true - }, - "color-support": { - "version": "1.1.3", - "bundled": true, - "dev": true - }, - "columnify": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "requires": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - } - }, - "common-ancestor-path": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "bundled": true, - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "dependencies": { - "which": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "cssesc": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "debug": { - "version": "4.3.4", - "bundled": true, - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "bundled": true, - "dev": true - } - } - }, - "defaults": { - "version": "1.0.4", - "bundled": true, - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "depd": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "diff": { - "version": "5.1.0", - "bundled": true, - "dev": true - }, - "eastasianwidth": { - "version": "0.2.0", - "bundled": true, - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "bundled": true - }, - "encoding": { - "version": "0.1.13", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - } - }, - "env-paths": { - "version": "2.2.1", - "bundled": true, - "dev": true - }, - "err-code": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "event-target-shim": { - "version": "5.0.1", - "bundled": true, - "dev": true - }, - "events": { - "version": "3.3.0", - "bundled": true, - "dev": true - }, - "exponential-backoff": { - "version": "3.1.1", - "bundled": true, - "dev": true - }, - "fastest-levenshtein": { - "version": "1.0.16", - "bundled": true, - "dev": true - }, - "foreground-child": { - "version": "3.1.1", - "bundled": true, - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - } - }, - "fs-minipass": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^5.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "bundled": true, - "dev": true - }, - "gauge": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^4.0.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - } - }, - "glob": { - "version": "10.2.7", - "bundled": true, - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - } - }, - "graceful-fs": { - "version": "4.2.11", - "bundled": true, - "dev": true - }, - "has": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "hosted-git-info": { - "version": "6.1.1", - "bundled": true, - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "http-cache-semantics": { - "version": "4.1.1", - "bundled": true, - "dev": true - }, - "http-proxy-agent": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "humanize-ms": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "ieee754": { - "version": "1.2.1", - "bundled": true, - "dev": true - }, - "ignore-walk": { - "version": "6.0.3", - "bundled": true, - "dev": true, - "requires": { - "minimatch": "^9.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "bundled": true, - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "bundled": true, - "dev": true - }, - "ini": { - "version": "4.1.1", - "bundled": true, - "dev": true - }, - "init-package-json": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "npm-package-arg": "^10.0.0", - "promzard": "^1.0.0", - "read": "^2.0.0", - "read-package-json": "^6.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^5.0.0" - } - }, - "ip": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "ip-regex": { - "version": "4.3.0", - "bundled": true, - "dev": true - }, - "is-cidr": { - "version": "4.0.2", - "bundled": true, - "dev": true, - "requires": { - "cidr-regex": "^3.1.1" - } - }, - "is-core-module": { - "version": "2.12.1", - "bundled": true, - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "bundled": true - }, - "is-lambda": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "isexe": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "jackspeak": { - "version": "2.2.1", - "bundled": true, - "dev": true, - "requires": { - "@isaacs/cliui": "^8.0.2", - "@pkgjs/parseargs": "^0.11.0" - } - }, - "json-parse-even-better-errors": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "json-stringify-nice": { - "version": "1.1.4", - "bundled": true, - "dev": true - }, - "jsonparse": { - "version": "1.3.1", - "bundled": true, - "dev": true - }, - "just-diff": { - "version": "6.0.2", - "bundled": true, - "dev": true - }, - "just-diff-apply": { - "version": "5.5.0", - "bundled": true, - "dev": true - }, - "libnpmaccess": { - "version": "7.0.2", - "bundled": true, - "dev": true, - "requires": { - "npm-package-arg": "^10.1.0", - "npm-registry-fetch": "^14.0.3" - } - }, - "libnpmdiff": { - "version": "5.0.20", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/arborist": "^6.5.0", - "@npmcli/disparity-colors": "^3.0.0", - "@npmcli/installed-package-contents": "^2.0.2", - "binary-extensions": "^2.2.0", - "diff": "^5.1.0", - "minimatch": "^9.0.0", - "npm-package-arg": "^10.1.0", - "pacote": "^15.0.8", - "tar": "^6.1.13" - } - }, - "libnpmexec": { - "version": "6.0.4", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/arborist": "^6.5.0", - "@npmcli/run-script": "^6.0.0", - "ci-info": "^3.7.1", - "npm-package-arg": "^10.1.0", - "npmlog": "^7.0.1", - "pacote": "^15.0.8", - "proc-log": "^3.0.0", - "read": "^2.0.0", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.7", - "walk-up-path": "^3.0.1" - } - }, - "libnpmfund": { - "version": "4.2.1", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/arborist": "^6.5.0" - } - }, - "libnpmhook": { - "version": "9.0.3", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^14.0.3" - } - }, - "libnpmorg": { - "version": "5.0.4", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^14.0.3" - } - }, - "libnpmpack": { - "version": "5.0.20", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/arborist": "^6.5.0", - "@npmcli/run-script": "^6.0.0", - "npm-package-arg": "^10.1.0", - "pacote": "^15.0.8" - } - }, - "libnpmpublish": { - "version": "7.5.0", - "bundled": true, - "dev": true, - "requires": { - "ci-info": "^3.6.1", - "normalize-package-data": "^5.0.0", - "npm-package-arg": "^10.1.0", - "npm-registry-fetch": "^14.0.3", - "proc-log": "^3.0.0", - "semver": "^7.3.7", - "sigstore": "^1.4.0", - "ssri": "^10.0.1" - } - }, - "libnpmsearch": { - "version": "6.0.2", - "bundled": true, - "dev": true, - "requires": { - "npm-registry-fetch": "^14.0.3" - } - }, - "libnpmteam": { - "version": "5.0.3", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^14.0.3" - } - }, - "libnpmversion": { - "version": "4.0.2", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/git": "^4.0.1", - "@npmcli/run-script": "^6.0.0", - "json-parse-even-better-errors": "^3.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.7" - } - }, - "lru-cache": { - "version": "7.18.3", - "bundled": true, - "dev": true - }, - "make-fetch-happen": { - "version": "11.1.1", - "bundled": true, - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - } - }, - "minimatch": { - "version": "9.0.3", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "minipass": { - "version": "5.0.0", - "bundled": true, - "dev": true - }, - "minipass-collect": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-fetch": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } - }, - "minipass-flush": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-json-stream": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-sized": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minizlib": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "mkdirp": { - "version": "1.0.4", - "bundled": true, - "dev": true - }, - "ms": { - "version": "2.1.3", - "bundled": true, - "dev": true - }, - "mute-stream": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "negotiator": { - "version": "0.6.3", - "bundled": true, - "dev": true - }, - "node-gyp": { - "version": "9.4.0", - "bundled": true, - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^11.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true - }, - "are-we-there-yet": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "gauge": { - "version": "4.0.4", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - } - }, - "glob": { - "version": "7.2.3", - "bundled": true, - "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" - } - }, - "minimatch": { - "version": "3.1.2", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "nopt": { - "version": "6.0.0", - "bundled": true, - "dev": true, - "requires": { - "abbrev": "^1.0.0" - } - }, - "npmlog": { - "version": "6.0.2", - "bundled": true, - "dev": true, - "requires": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - } - }, - "readable-stream": { - "version": "3.6.2", - "bundled": true, - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "signal-exit": { - "version": "3.0.7", - "bundled": true, - "dev": true - }, - "which": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "nopt": { - "version": "7.2.0", - "bundled": true, - "dev": true, - "requires": { - "abbrev": "^2.0.0" - } - }, - "normalize-package-data": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } - }, - "npm-audit-report": { - "version": "5.0.0", - "bundled": true, - "dev": true - }, - "npm-bundled": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "npm-normalize-package-bin": "^3.0.0" - } - }, - "npm-install-checks": { - "version": "6.2.0", - "bundled": true, - "dev": true, - "requires": { - "semver": "^7.1.1" - } - }, - "npm-normalize-package-bin": { - "version": "3.0.1", - "bundled": true, - "dev": true - }, - "npm-package-arg": { - "version": "10.1.0", - "bundled": true, - "dev": true, - "requires": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - } - }, - "npm-packlist": { - "version": "7.0.4", - "bundled": true, - "dev": true, - "requires": { - "ignore-walk": "^6.0.0" - } - }, - "npm-pick-manifest": { - "version": "8.0.2", - "bundled": true, - "dev": true, - "requires": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^10.0.0", - "semver": "^7.3.5" - } - }, - "npm-profile": { - "version": "7.0.1", - "bundled": true, - "dev": true, - "requires": { - "npm-registry-fetch": "^14.0.0", - "proc-log": "^3.0.0" - } - }, - "npm-registry-fetch": { - "version": "14.0.5", - "bundled": true, - "dev": true, - "requires": { - "make-fetch-happen": "^11.0.0", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^10.0.0", - "proc-log": "^3.0.0" - } - }, - "npm-user-validate": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "npmlog": { - "version": "7.0.1", - "bundled": true, - "dev": true, - "requires": { - "are-we-there-yet": "^4.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^5.0.0", - "set-blocking": "^2.0.0" - } - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "p-map": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "pacote": { - "version": "15.2.0", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/git": "^4.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/promise-spawn": "^6.0.1", - "@npmcli/run-script": "^6.0.0", - "cacache": "^17.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^5.0.0", - "npm-package-arg": "^10.0.0", - "npm-packlist": "^7.0.0", - "npm-pick-manifest": "^8.0.0", - "npm-registry-fetch": "^14.0.0", - "proc-log": "^3.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^6.0.0", - "read-package-json-fast": "^3.0.0", - "sigstore": "^1.3.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - } - }, - "parse-conflict-json": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "json-parse-even-better-errors": "^3.0.0", - "just-diff": "^6.0.0", - "just-diff-apply": "^5.2.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "path-key": { - "version": "3.1.1", - "bundled": true, - "dev": true - }, - "path-scurry": { - "version": "1.9.2", - "bundled": true, - "dev": true, - "requires": { - "lru-cache": "^9.1.1", - "minipass": "^5.0.0 || ^6.0.2" - }, - "dependencies": { - "lru-cache": { - "version": "9.1.1", - "bundled": true, - "dev": true - } - } - }, - "postcss-selector-parser": { - "version": "6.0.13", - "bundled": true, - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "proc-log": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "process": { - "version": "0.11.10", - "bundled": true, - "dev": true - }, - "promise-all-reject-late": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "promise-call-limit": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "promise-retry": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - } - }, - "promzard": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "read": "^2.0.0" - } - }, - "qrcode-terminal": { - "version": "0.12.0", - "bundled": true, - "dev": true - }, - "read": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "mute-stream": "~1.0.0" - } - }, - "read-cmd-shim": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "read-package-json": { - "version": "6.0.4", - "bundled": true, - "dev": true, - "requires": { - "glob": "^10.2.2", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "npm-normalize-package-bin": "^3.0.0" - } - }, - "read-package-json-fast": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - } - }, - "readable-stream": { - "version": "4.4.0", - "bundled": true, - "dev": true, - "requires": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10" - } - }, - "retry": { - "version": "0.12.0", - "bundled": true, - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.2.3", - "bundled": true, - "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" - } - }, - "minimatch": { - "version": "3.1.2", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "safe-buffer": { - "version": "5.2.1", - "bundled": true, - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "7.5.4", - "bundled": true, - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "signal-exit": { - "version": "4.0.2", - "bundled": true, + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true }, - "sigstore": { - "version": "1.9.0", - "bundled": true, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "requires": { - "@sigstore/bundle": "^1.1.0", - "@sigstore/protobuf-specs": "^0.2.0", - "@sigstore/sign": "^1.0.0", - "@sigstore/tuf": "^1.0.3", - "make-fetch-happen": "^11.0.1" + "brace-expansion": "^2.0.1" } }, - "smart-buffer": { - "version": "4.2.0", - "bundled": true, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "socks": { - "version": "2.7.1", - "bundled": true, + "normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", "dev": true, "requires": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" } }, - "socks-proxy-agent": { - "version": "7.0.0", - "bundled": true, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" + "aggregate-error": "^3.0.0" } }, - "spdx-correct": { - "version": "3.2.0", - "bundled": true, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } } }, - "spdx-exceptions": { - "version": "2.3.0", - "bundled": true, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true }, "spdx-expression-parse": { "version": "3.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, - "spdx-license-ids": { - "version": "3.0.13", - "bundled": true, - "dev": true - }, - "ssri": { - "version": "10.0.4", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^5.0.0" - } - }, "string-width": { "version": "4.2.3", - "bundled": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string-width-cjs": { - "version": "npm:string-width-cjs@4.2.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, - "string_decoder": { - "version": "1.3.0", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, "strip-ansi": { "version": "6.0.1", - "bundled": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-ansi-cjs": { - "version": "npm:strip-ansi-cjs@6.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { "ansi-regex": "^5.0.1" } }, "supports-color": { "version": "9.4.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", + "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", "dev": true }, - "tar": { - "version": "6.1.15", - "bundled": true, - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "fs-minipass": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - } - } - }, "text-table": { "version": "0.2.0", - "bundled": true, - "dev": true - }, - "tiny-relative-date": { - "version": "1.3.0", - "bundled": true, - "dev": true - }, - "treeverse": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "tuf-js": { - "version": "1.1.7", - "bundled": true, - "dev": true, - "requires": { - "@tufjs/models": "1.0.4", - "debug": "^4.3.4", - "make-fetch-happen": "^11.1.1" - } - }, - "unique-filename": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "unique-slug": "^4.0.0" - } - }, - "unique-slug": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate-npm-package-name": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - }, - "walk-up-path": { - "version": "3.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "wcwidth": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, "which": { "version": "3.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dev": true, "requires": { "isexe": "^2.0.0" } }, - "wide-align": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "wrap-ansi": { - "version": "8.1.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "bundled": true, - "dev": true - }, - "ansi-styles": { - "version": "6.2.1", - "bundled": true, - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "bundled": true, - "dev": true - }, - "string-width": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.1.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "wrap-ansi-cjs": { - "version": "npm:wrap-ansi-cjs@7.0.0", - "bundled": true, + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, "write-file-atomic": { "version": "5.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, "requires": { "imurmurhash": "^0.1.4", "signal-exit": "^4.0.1" } + } + } + }, + "npm-audit-report": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-audit-report/-/npm-audit-report-5.0.0.tgz", + "integrity": "sha512-EkXrzat7zERmUhHaoren1YhTxFwsOu5jypE84k6632SXTHcQE1z8V51GC6GVZt8LxkC+tbBcKMUBZAgk8SUSbw==", + "dev": true + }, + "npm-bundled": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^3.0.0" + } + }, + "npm-install-checks": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.2.0.tgz", + "integrity": "sha512-744wat5wAAHsxa4590mWO0tJ8PKxR8ORZsH9wGpQc3nWTzozMAgBN/XyqYw7mg3yqLM8dLwEnwSfKMmXAjF69g==", + "dev": true, + "requires": { + "semver": "^7.1.1" + } + }, + "npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true + }, + "npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "requires": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + } }, - "yallist": { - "version": "4.0.0", - "bundled": true, + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true } } }, + "npm-packlist": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", + "dev": true, + "requires": { + "ignore-walk": "^6.0.0" + } + }, + "npm-pick-manifest": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz", + "integrity": "sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==", + "dev": true, + "requires": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + } + }, + "npm-profile": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/npm-profile/-/npm-profile-7.0.1.tgz", + "integrity": "sha512-VReArOY/fCx5dWL66cbJ2OMogTQAVVQA//8jjmjkarboki3V7UJ0XbGFW+khRwiAJFQjuH0Bqr/yF7Y5RZdkMQ==", + "dev": true, + "requires": { + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0" + } + }, + "npm-registry-fetch": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", + "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", + "dev": true, + "requires": { + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + } + }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -9305,6 +8979,81 @@ "path-key": "^3.0.0" } }, + "npm-user-validate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-2.0.0.tgz", + "integrity": "sha512-sSWeqAYJ2dUPStJB+AEj0DyLRltr/f6YNcvCA7phkB8/RMLMnVsQ41GMwHo/ERZLYNDsyB2wPm7pZo1mqPOl7Q==", + "dev": true + }, + "npmlog": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-7.0.1.tgz", + "integrity": "sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg==", + "dev": true, + "requires": { + "are-we-there-yet": "^4.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^5.0.0", + "set-blocking": "^2.0.0" + }, + "dependencies": { + "are-we-there-yet": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-4.0.1.tgz", + "integrity": "sha512-2zuA+jpOYBRgoBCfa+fB87Rk0oGJjDX6pxGzqH6f33NzUhG25Xur6R0u0Z9VVAq8Z5JvQpQI6j6rtonuivC8QA==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^4.1.0" + } + }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "gauge": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-5.0.1.tgz", + "integrity": "sha512-CmykPMJGuNan/3S4kZOpvvPYSNqSHANiWnh9XcMU2pSjtBfF0XzZ2p1bFAxTbnFxyBuPxQYHhzwaoOmUdqzvxQ==", + "dev": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^4.0.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } + }, + "readable-stream": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", + "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", + "dev": true, + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + } + } + }, "object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", @@ -9465,6 +9214,12 @@ "p-map": "^5.1.0" } }, + "p-is-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", + "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", + "dev": true + }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -9537,6 +9292,32 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, + "pacote": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", + "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", + "dev": true, + "requires": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^5.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.3.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + } + }, "pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -9552,6 +9333,25 @@ "callsites": "^3.0.0" } }, + "parse-conflict-json": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz", + "integrity": "sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^3.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" + }, + "dependencies": { + "json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true + } + } + }, "parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -9600,6 +9400,24 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "requires": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", + "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "dev": true + } + } + }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -9712,6 +9530,16 @@ "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", "dev": true }, + "postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -9752,6 +9580,12 @@ } } }, + "proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true + }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -9770,6 +9604,34 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, + "promise-all-reject-late": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", + "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", + "dev": true + }, + "promise-call-limit": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.2.tgz", + "integrity": "sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, "prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -9780,6 +9642,15 @@ "sisteransi": "^1.0.5" } }, + "promzard": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-1.0.0.tgz", + "integrity": "sha512-KQVDEubSUHGSt5xLakaToDFrSoZhStB8dXLzk2xvwR67gJktrHFvpR63oZgHyK19WKbHFLXJqCPXdVR3aBP8Ig==", + "dev": true, + "requires": { + "read": "^2.0.0" + } + }, "proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", @@ -9868,6 +9739,12 @@ } } }, + "qrcode-terminal": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", + "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==", + "dev": true + }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -10065,6 +9942,125 @@ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, + "read": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/read/-/read-2.1.0.tgz", + "integrity": "sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ==", + "dev": true, + "requires": { + "mute-stream": "~1.0.0" + }, + "dependencies": { + "mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true + } + } + }, + "read-cmd-shim": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz", + "integrity": "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==", + "dev": true + }, + "read-package-json": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", + "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", + "dev": true, + "requires": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "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" + } + }, + "glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + } + }, + "hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + } + }, + "json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true + }, + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "requires": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + } + } + } + }, + "read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "dependencies": { + "json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true + } + } + }, "read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -10279,6 +10275,12 @@ } } }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true + }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -10689,9 +10691,9 @@ "dev": true }, "type-fest": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.4.0.tgz", - "integrity": "sha512-HT3RRs7sTfY22KuPQJkD/XjbTbxgP2Je5HPt6H6JEGvcjHd5Lqru75EbrP3tb4FYjNJ+DjLp+MNQTFQU0mhXNw==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.6.0.tgz", + "integrity": "sha512-rLjWJzQFOq4xw7MgJrCZ6T1jIOvvYElXT12r+y0CC6u67hegDHaxcPqb2fZHOGlqxugGQPNB1EnTezjBetkwkw==", "dev": true }, "yocto-queue": { @@ -10832,6 +10834,19 @@ } } }, + "sigstore": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.9.0.tgz", + "integrity": "sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A==", + "dev": true, + "requires": { + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "@sigstore/sign": "^1.0.0", + "@sigstore/tuf": "^1.0.3", + "make-fetch-happen": "^11.0.1" + } + }, "sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -10855,6 +10870,44 @@ "is-fullwidth-code-point": "^3.0.0" } }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true + }, + "socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "dependencies": { + "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" + } + } + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -10939,6 +10992,15 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, + "ssri": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", + "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "dev": true, + "requires": { + "minipass": "^5.0.0" + } + }, "stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", @@ -11055,6 +11117,17 @@ "strip-ansi": "^6.0.1" } }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, "string.prototype.trim": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", @@ -11106,6 +11179,15 @@ "ansi-regex": "^5.0.1" } }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, "strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -11200,6 +11282,42 @@ } } }, + "tar": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + } + } + }, "temp-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", @@ -11276,6 +11394,12 @@ "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", "dev": true }, + "tiny-relative-date": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz", + "integrity": "sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A==", + "dev": true + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -11317,6 +11441,12 @@ "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==", "dev": true }, + "treeverse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz", + "integrity": "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==", + "dev": true + }, "trim-newlines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", @@ -11414,6 +11544,17 @@ "tslib": "^1.8.1" } }, + "tuf-js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", + "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", + "dev": true, + "requires": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" + } + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -11541,6 +11682,24 @@ } } }, + "unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "requires": { + "unique-slug": "^4.0.0" + } + }, + "unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, "unique-string": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", @@ -11654,11 +11813,26 @@ "spdx-expression-parse": "^3.0.0" } }, + "validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "requires": { + "builtins": "^5.0.0" + } + }, "validator": { "version": "13.11.0", "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==" }, + "walk-up-path": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz", + "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==", + "dev": true + }, "walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", @@ -11732,6 +11906,15 @@ "has-tostringtag": "^1.0.0" } }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, "word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -11761,6 +11944,17 @@ "strip-ansi": "^6.0.0" } }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/scripts/postInstall.js b/scripts/postInstall.js index 55149fa4..e1aeb094 100644 --- a/scripts/postInstall.js +++ b/scripts/postInstall.js @@ -16,10 +16,15 @@ if (fs.existsSync(quicktype) && process.env.npm_config_production !== "true") { quicktype + " -s schema -o src/__generated__/schema.3.0.ts -t OpenAttestationDocument --just-types src/3.0/schema/schema.json --no-date-times" ); - console.log('"Creating types from src/4.0/schema/schema.json"'); + console.log('"Creating types from src/4.0/oa/schema/schema.json"'); execSync( quicktype + - " -s schema -o src/__generated__/schema.4.0.ts -t TradeTrustDocument --just-types src/4.0/schema/schema.json --no-date-times" + " -s schema -o src/__generated__/oa-schema.4.0.ts -t OpenAttestationDocument --just-types src/4.0/oa/schema/schema.json --no-date-times" + ); + console.log('"Creating types from src/4.0/tt/schema/schema.json"'); + execSync( + quicktype + + " -s schema -o src/__generated__/tt-schema.4.0.ts -t TradeTrustDocument --just-types src/4.0/tt/schema/schema.json --no-date-times" ); } else { console.log("Not running quicktype"); diff --git a/scripts/publishSchema.sh b/scripts/publishSchema.sh index f7b75230..cc5cf2ed 100755 --- a/scripts/publishSchema.sh +++ b/scripts/publishSchema.sh @@ -4,19 +4,23 @@ rm -rf ./public mkdir public -# For exisiting v2 and v3 schemas, do not publish, instead +# For exisiting v2 and v3, v4 oa schemas, do not publish, instead # reuse the ones from OpenAttestation. Only if there is a -# base schema change for v2 and v3 then one would need to +# base schema change for v2 and v3 or v4 then one would need to # publish -# Copy 2.0 schema to public folder +# Copy oa 2.0 schema to public folder # mkdir -p public/2.0/ # cp src/2.0/schema/schema.json public/2.0/schema.json -# Copy 3.0 schema to public folder +# Copy oa 3.0 schema to public folder # mkdir -p public/3.0/ # cp src/3.0/schema/schema.json public/3.0/schema.json -# Copy 4.0 schema to public folder -mkdir -p public/4.0/ -cp src/4.0/schema/schema.json public/4.0/schema.json +# Copy oa 4.0 schema to public folder +# mkdir -p public/4.0/ +# cp src/4.0/schema/schema.json public/4.0/schema.json + +# Copy tt 4.0 schema to public folder +mkdir -p public/4.0/tt/ +cp src/4.0/tt/schema/schema.json public/4.0/tt/schema.json diff --git a/src/4.0/oa/__tests__/digest.test.ts b/src/4.0/oa/__tests__/digest.test.ts new file mode 100644 index 00000000..b7e42376 --- /dev/null +++ b/src/4.0/oa/__tests__/digest.test.ts @@ -0,0 +1,106 @@ +import { cloneDeep } from "lodash"; +import { digestCredential } from "../digest"; +import { WrappedDocument } from "../types"; +import { obfuscateVerifiableCredential } from "../obfuscate"; +import { decodeSalt } from "../salt"; +import sample from "../../../../test/fixtures/v4/oa/did-wrapped.json"; + +const verifiableCredential = sample as WrappedDocument; +// Digest will change whenever sample document is regenerated +const credentialRoot = "adb16863b9b92f1f46d67f518f853092404dc1322ffb61b45a831ee113f4ea99"; + +const { proof, ...credential } = verifiableCredential; + +describe("digest v4.0", () => { + describe("digestCredential", () => { + test("digests a document with all visible content correctly", () => { + const clonedCredential = cloneDeep(credential); + + const digest = digestCredential(clonedCredential, decodeSalt(proof.salts), []); + expect(digest).toBe(credentialRoot); + }); + test("digests a document when one single element is obfuscated", () => { + const obfuscatedVerifiableCredential = obfuscateVerifiableCredential(verifiableCredential, "issuer.id"); + const digest = digestCredential( + obfuscatedVerifiableCredential, + decodeSalt(obfuscatedVerifiableCredential.proof.salts), + obfuscatedVerifiableCredential.proof.privacy.obfuscated + ); + + expect(obfuscatedVerifiableCredential.proof.privacy.obfuscated).toMatchInlineSnapshot(` + [ + "016c17fefa241351dc2950cfbeaef8281b0bc71e1ee445d890e9c37622fa0318", + ] + `); + expect(obfuscatedVerifiableCredential.proof.privacy.obfuscated).toHaveLength(1); + expect(digest).toBe(credentialRoot); + }); + test("digests a document when multiple element are obfuscated", () => { + const obfuscatedVerifiableCredential = obfuscateVerifiableCredential(verifiableCredential, [ + "credentialSubject.id", + "credentialSubject.name", + "credentialSubject.licenses.0.description", + ]); + const digest = digestCredential( + obfuscatedVerifiableCredential, + decodeSalt(obfuscatedVerifiableCredential.proof.salts), + obfuscatedVerifiableCredential.proof.privacy.obfuscated + ); + + expect(obfuscatedVerifiableCredential.proof.privacy.obfuscated).toMatchInlineSnapshot(` + [ + "84c8662d07d3b98b7b9b58687a04fd6ff5a90e91f63e70c2399755721630b370", + "4390ee551a3ef3bebaad99c85738b3ebd96932343fb22a59865764125b79565c", + "026dbfc89aaa98005d2f25b0b274a972f1dc5c351d22270eba9d80422dd9850f", + ] + `); + expect(obfuscatedVerifiableCredential.proof.privacy.obfuscated).toHaveLength(3); + expect(digest).toBe(credentialRoot); + }); + test("digests a document with no visible content correctly", () => { + const obfuscatedVerifiableCredential = obfuscateVerifiableCredential( + verifiableCredential, + Object.keys(verifiableCredential).filter((k) => k != "proof") + ); + const digest = digestCredential( + obfuscatedVerifiableCredential, + decodeSalt(obfuscatedVerifiableCredential.proof.salts), + obfuscatedVerifiableCredential.proof.privacy.obfuscated + ); + + expect(obfuscatedVerifiableCredential).toStrictEqual({ proof: obfuscatedVerifiableCredential.proof }); + expect(obfuscatedVerifiableCredential.proof.privacy.obfuscated).toMatchInlineSnapshot(` + [ + "f0798858da35807f0e5ae1a253722da6eb073abfad039151a18355d71e18f232", + "867ae2f030d04745d384969efe67b9fdfeea3236aa6b5f10d2bdbfb495a1ecb3", + "671da469c4211222ef05dcfc4fb795b6d774f5a1fc9f1397fab7ff6eba58e5db", + "b92f17321f80808f90ee5c1b089fad1b8ad2ff63e8d4d4ba923e50d0996aba75", + "21d7f40f46a97e9480b48739b560fba4cfe6d2f1b6bf14e3bdf7c9d765590a9a", + "4b13961eed15c275d3b8c11c4d40d8f956ffa8f1361b36058da28349c155d193", + "016c17fefa241351dc2950cfbeaef8281b0bc71e1ee445d890e9c37622fa0318", + "c5796036b237228ddc64bab40cd34200cb8d9dc4574c8a9a7cdda2350d77bdf9", + "b031b7f3cc154783acc36cbdc524bb7d8e4f4093785d25c1000a15c49e0ce58b", + "0913c1f68e821d8b4b07c9406419f083cd326c989bf433ccd13c242fdf834497", + "0c9bbd46994b92637562fef0df5a95eb4549a0198923c66693b547311635455a", + "5dff1a92a0cae0a5d50530968ff06c2baea9d3ac11b415268d98728ff13a4aa6", + "363e3a4656d4b586d1855a4cc22e56b4b446a357f2c76bdc777df6596d22e7e3", + "13e4d679f8cc43a69c7fbc37cd6339ee3864eeaca137687b6c7cff07309f6f98", + "5d027cec038e4f0fbb684da654f12999b973e20788801e13e063f642228d56a5", + "6d8b020b1ef826ce5e05fb034f4d2b9c4ed5bc4d4a0d697a6ec9f6c249970cb0", + "97bbd9a5415e96e1f5f61879e1bdef14db6868304ab3b681c6bbb82e0ecd21b3", + "84c8662d07d3b98b7b9b58687a04fd6ff5a90e91f63e70c2399755721630b370", + "c96b471fec27d76d3b5e1c479ccf690bca845ba78bc2b6b28abd52f9defcf491", + "4390ee551a3ef3bebaad99c85738b3ebd96932343fb22a59865764125b79565c", + "6d38b0c91fa83fd141a20098b121eca264dcf8c20e6bd97d13b9a5e8924026c2", + "026dbfc89aaa98005d2f25b0b274a972f1dc5c351d22270eba9d80422dd9850f", + "5bc0eb80d28496cfe3ed416b91fada582f097bbdaaedcff5aa5e393c8f8be726", + "6fb9f93f2b42bb70a67e6ad5cb22f72083d9d3bf98776e83a470c82800770623", + "aa4414e7a955a034998fd1221c80a2ef77c30c26a7b15fe15b7c2716811bb3d9", + "fba6d49a55387b611fb4dedf401630d3adb1d377e17ba051524a09795ee734ae", + ] + `); + expect(obfuscatedVerifiableCredential.proof.privacy.obfuscated).toHaveLength(26); + expect(digest).toBe(credentialRoot); + }); + }); +}); diff --git a/src/4.0/oa/__tests__/e2e.test.wip b/src/4.0/oa/__tests__/e2e.test.wip new file mode 100644 index 00000000..a7d3b699 --- /dev/null +++ b/src/4.0/oa/__tests__/e2e.test.wip @@ -0,0 +1,405 @@ +import { + __unsafe__use__it__at__your__own__risks__wrapDocument as wrapDocument, + __unsafe__use__it__at__your__own__risks__wrapDocuments as wrapDocuments, + obfuscate, + SchemaId, + validateSchema, + verifySignature, +} from "../.."; +import { SignedWrappedDocument, WrappedDocument } from "../../3.0/types"; +import { + IdentityProofType, + Method, + OpenAttestationDocument, + ProofType, + TemplateType, +} from "../../__generated__/schema.3.0"; +import { cloneDeep, omit } from "lodash"; +import sampleDid from "../schema/sample-credential-did.json"; + +const openAttestationDataWithDid = sampleDid as OpenAttestationDocument; + +const openAttestationData = { + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://www.w3.org/2018/credentials/examples/v1", + "https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json", + "https://schemata.openattestation.com/com/openattestation/1.0/CustomContext.json", + ], + reference: "document identifier", + validFrom: "2010-01-01T19:23:24Z", + issuanceDate: "2010-01-01T19:23:24Z", + name: "document owner name", + type: ["VerifiableCredential", "UniversityDegreeCredential", "OpenAttestationCredential"], + credentialSubject: { + id: "did:example:ebfeb1f712ebc6f1c276e12ec21", + degree: { + type: "BachelorDegree", + name: "Bachelor of Science in Mechanical Engineering", + }, + }, + openAttestationMetadata: { + template: { + name: "any", + type: TemplateType.EmbeddedRenderer, + url: "http://some.example.com", + }, + proof: { + type: ProofType.OpenAttestationProofMethod, + value: "0x9178F546D3FF57D7A6352bD61B80cCCD46199C2d", + method: Method.TokenRegistry, + }, + identityProof: { + type: IdentityProofType.DNSTxt, + identifier: "tradetrust.io", + }, + }, + issuer: { + id: "http://some.example.com", + type: "OpenAttestationIssuer", + name: "DEMO STORE", + }, +}; + +const datum = [ + { + key1: "test", + ...openAttestationData, + }, + { + key1: "hello", + key2: "item2", + ...openAttestationData, + }, + { + key1: "item1", + key2: "true", + key3: 3.14159, + key4: false, + ...openAttestationData, + }, + { + key1: "item2", + ...openAttestationData, + }, +]; + +describe("3.0 E2E Test Scenarios", () => { + describe("Issuing a single document", () => { + const document = datum[0]; + + test("fails for missing data", async () => { + const missingData = { + ...omit(cloneDeep(document), "issuer"), + }; + await expect( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + wrapDocument(missingData, { + externalSchemaId: "http://example.com/schema.json", + version: SchemaId.v3, + }) + ).rejects.toThrow("Invalid document"); + }); + test("creates a wrapped document", async () => { + const wrappedDocument = await wrapDocument( + { + ...openAttestationData, + key1: "test", + }, + { + externalSchemaId: "http://example.com/schema.json", + version: SchemaId.v3, + } + ); + expect(wrappedDocument.schema).toBe("http://example.com/schema.json"); + expect(wrappedDocument.key1).toEqual(expect.stringContaining("test")); + expect(wrappedDocument.proof.type).toBe("OpenAttestationMerkleProofSignature2018"); + expect(wrappedDocument.proof.targetHash).toBeDefined(); + expect(wrappedDocument.proof.merkleRoot).toBeDefined(); + expect(wrappedDocument.proof.proofs).toEqual([]); + expect(wrappedDocument.proof.merkleRoot).toBe(wrappedDocument.proof.targetHash); + }); + test("creates a wrapped document with DNS-DID IdentityProof", async () => { + const wrappedDocumentWithDnsDID = await wrapDocument(openAttestationDataWithDid, { + externalSchemaId: "http://example.com/schema.json", + version: SchemaId.v3, + }); + expect(wrappedDocumentWithDnsDID.schema).toBe("http://example.com/schema.json"); + expect(wrappedDocumentWithDnsDID.proof.type).toBe("OpenAttestationMerkleProofSignature2018"); + expect(wrappedDocumentWithDnsDID.proof.targetHash).toBeDefined(); + expect(wrappedDocumentWithDnsDID.proof.merkleRoot).toBeDefined(); + expect(wrappedDocumentWithDnsDID.proof.proofs).toEqual([]); + expect(wrappedDocumentWithDnsDID.proof.merkleRoot).toBe(wrappedDocumentWithDnsDID.proof.targetHash); + expect(wrappedDocumentWithDnsDID.openAttestationMetadata.identityProof?.type).toContain(IdentityProofType.DNSDid); + expect(wrappedDocumentWithDnsDID.openAttestationMetadata.identityProof?.identifier).toContain( + openAttestationDataWithDid.openAttestationMetadata.identityProof?.identifier + ); + }); + test("checks that document is wrapped correctly", async () => { + const wrappedDocument = await wrapDocument(document, { + externalSchemaId: "http://example.com/schema.json", + version: SchemaId.v3, + }); + const verified = verifySignature(wrappedDocument); + expect(verified).toBe(true); + }); + test("checks that document conforms to the schema", async () => { + const wrappedDocument = await wrapDocument(document, { + externalSchemaId: "http://example.com/schema.json", + version: SchemaId.v3, + }); + expect(validateSchema(wrappedDocument)).toBe(true); + }); + test("does not allow for the same merkle root to be generated", async () => { + // This test takes some time to run, so we set the timeout to 14s + const wrappedDocument = await wrapDocument(document, { version: SchemaId.v3 }); + const newDocument = await wrapDocument(document, { version: SchemaId.v3 }); + expect(wrappedDocument.proof.merkleRoot).not.toBe(newDocument.proof.merkleRoot); + }, 14000); + test("obfuscate data correctly", async () => { + const newDocument = await wrapDocument(datum[2], { version: SchemaId.v3 }); + const obfuscatedDocument = await obfuscate(newDocument, ["key2"]); + expect(verifySignature(obfuscatedDocument)).toBe(true); + expect(validateSchema(obfuscatedDocument)).toBe(true); + }); + test("obfuscate data transistively", async () => { + const newDocument = await wrapDocument(datum[2], { version: SchemaId.v3 }); + const intermediateDocument = obfuscate(newDocument, ["key2"]); + const obfuscatedDocument = obfuscate(intermediateDocument, ["key3"]); + expect(obfuscate(newDocument, ["key2", "key3"])).toEqual(obfuscatedDocument); + }); + }); + + describe("Issuing a batch of documents", () => { + test("fails if there is a malformed document", async () => { + const malformedDatum = [ + ...datum, + // @ts-expect-error missing properties from OpenAttestationCredential: "@context", credentialSubject, issuanceDate, issuer, and 2 more. + { + laurent: "task force, assemble!!", + } as WrappedDocument, + ]; + await expect(wrapDocuments(malformedDatum)).rejects.toThrow("Invalid document"); + }); + test("creates a batch of documents if all are in the right format", async () => { + const wrappedDocuments = await wrapDocuments(datum, { + externalSchemaId: "http://example.com/schema.json", + version: SchemaId.v3, + }); + wrappedDocuments.forEach((doc, i: number) => { + expect(doc.schema).toBe("http://example.com/schema.json"); + expect(doc.proof.type).toBe("OpenAttestationMerkleProofSignature2018"); + expect(doc.key1).toEqual(expect.stringContaining(datum[i].key1)); + expect(doc.proof.targetHash).toBeDefined(); + expect(doc.proof.merkleRoot).toBeDefined(); + expect(doc.proof.proofs.length).toEqual(2); + }); + }); + test("checks that documents are wrapped correctly", async () => { + const wrappedDocuments = await wrapDocuments(datum, { + externalSchemaId: "http://example.com/schema.json", + version: SchemaId.v3, + }); + const verified = wrappedDocuments.reduce((prev, curr) => verifySignature(curr) && prev, true); + expect(verified).toBe(true); + }); + test("checks that documents conforms to the schema", async () => { + const wrappedDocuments = await wrapDocuments(datum, { + externalSchemaId: "http://example.com/schema.json", + version: SchemaId.v3, + }); + const validatedSchema = wrappedDocuments.reduce((prev: boolean, curr: any) => validateSchema(curr) && prev, true); + expect(validatedSchema).toBe(true); + }); + test("does not allow for same merkle root to be generated", async () => { + const wrappedDocuments = await wrapDocuments(datum, { + externalSchemaId: "http://example.com/schema.json", + version: SchemaId.v3, + }); + const newWrappedDocuments = await wrapDocuments(datum, { + version: SchemaId.v3, + }); + expect(wrappedDocuments[0].proof.merkleRoot).not.toBe(newWrappedDocuments[0].proof.merkleRoot); + }); + }); + + describe("validate", () => { + test("should return true when document is valid and version is 3.0", () => { + const credential: WrappedDocument = { + version: SchemaId.v3, + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json", + "https://schemata.openattestation.com/com/openattestation/1.0/CustomContext.json", + "https://schemata.openattestation.com/com/openattestation/1.0/DrivingLicenceCredential.json", + ], + reference: "SERIAL_NUMBER_123", + name: "Republic of Singapore Driving Licence", + issuanceDate: "2010-01-01T19:23:24Z", + validFrom: "2010-01-01T19:23:24Z", + issuer: { + id: "https://example.com", + name: "DEMO STORE", + }, + type: ["VerifiableCredential", "DrivingLicenceCredential"], + credentialSubject: { + id: "did:example:SERIAL_NUMBER_123", + class: [ + { + type: "3", + effectiveDate: "2010-01-01T19:23:24Z", + }, + { + type: "3A", + effectiveDate: "2010-01-01T19:23:24Z", + }, + ], + }, + openAttestationMetadata: { + template: { + name: "CUSTOM_TEMPLATE", + type: TemplateType.EmbeddedRenderer, + url: "https://localhost:3000/renderer", + }, + proof: { + type: ProofType.OpenAttestationProofMethod, + method: Method.DocumentStore, + value: "0x9178F546D3FF57D7A6352bD61B80cCCD46199C2d", + }, + identityProof: { + type: IdentityProofType.DNSTxt, + identifier: "tradetrust.io", + }, + }, + attachments: [ + { + fileName: "sample.pdf", + mimeType: "application/pdf", + data: "BASE64_ENCODED_FILE", + }, + ], + proof: { + proofPurpose: "assertionMethod", + salts: "", + merkleRoot: "", + privacy: { + obfuscated: [], + }, + proofs: [], + targetHash: "", + type: "OpenAttestationMerkleProofSignature2018", + }, + }; + expect(validateSchema(credential)).toStrictEqual(true); + }); + test("should return true when document is valid and version is 3.0 and identityProof is DNS-DID", () => { + const credential: WrappedDocument = { + ...openAttestationDataWithDid, + version: SchemaId.v3, + proof: { + proofPurpose: "assertionMethod", + salts: "", + merkleRoot: "", + privacy: { + obfuscated: [], + }, + proofs: [], + targetHash: "", + type: "OpenAttestationMerkleProofSignature2018", + }, + }; + expect(validateSchema(credential)).toStrictEqual(true); + }); + test("should return true when signed document is valid and version is 3.0 and identityProof is DNS-DID", () => { + const credential: SignedWrappedDocument = { + ...openAttestationDataWithDid, + version: SchemaId.v3, + proof: { + proofPurpose: "assertionMethod", + salts: "", + merkleRoot: "", + privacy: { + obfuscated: [], + }, + proofs: [], + targetHash: "", + signature: "", + key: "", + type: "OpenAttestationMerkleProofSignature2018", + }, + }; + expect(validateSchema(credential)).toStrictEqual(true); + }); + test("should return false when document is invalid due to no DNS-DID identifier", () => { + const credential: any = { + ...openAttestationDataWithDid, + openAttestationMetadata: { + ...openAttestationDataWithDid.openAttestationMetadata, + identityProof: { + identifier: "tradetrust.io", + }, + }, + version: SchemaId.v3, + proof: { + proofPurpose: "assertionMethod", + salts: "", + merkleRoot: "", + privacy: { + obfuscated: [], + }, + proofs: [], + targetHash: "", + signature: "", + key: "", + type: "OpenAttestationMerkleProofSignature2018", + }, + }; + expect(validateSchema(credential)).toStrictEqual(false); + }); + test("should default to 2.0 when document is valid and version is undefined", () => { + expect( + validateSchema({ + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore run test with version being undefined to only ignore that part + version: undefined, + data: { + issuers: [ + { + name: "issuer.name", + certificateStore: "0x9178F546D3FF57D7A6352bD61B80cCCD46199C2d", + }, + ], + }, + signature: { + merkleRoot: "0xabc", + proof: [], + targetHash: "0xabc", + type: "SHA3MerkleProof", + }, + }) + ).toStrictEqual(true); + }); + }); + + describe("unicode", () => { + test("should not corrupt unicode document", async () => { + const extraData = { + key1: "哦喷啊特特是他题哦你", + key2: "นยำืฟะะำหะฟะรนื", + key3: "おぺなってsたちおn", + key4: "خحثىشففثسفشفهخى", + }; + const document = { + ...openAttestationData, + ...extraData, + }; + const wrapped = await wrapDocument(document); + expect(wrapped.proof.merkleRoot).toBeTruthy(); + expect(wrapped.key1).toBe(extraData.key1); + expect(wrapped.key2).toBe(extraData.key2); + expect(wrapped.key3).toBe(extraData.key3); + expect(wrapped.key4).toBe(extraData.key4); + }); + }); +}); diff --git a/src/4.0/oa/__tests__/obfuscate.test.wip b/src/4.0/oa/__tests__/obfuscate.test.wip new file mode 100644 index 00000000..91adbbcf --- /dev/null +++ b/src/4.0/oa/__tests__/obfuscate.test.wip @@ -0,0 +1,291 @@ +/* eslint-disable @typescript-eslint/no-non-null-assertion */ +import { obfuscateVerifiableCredential } from "../obfuscate"; +import { __unsafe__use__it__at__your__own__risks__wrapDocument as wrapDocument, verifySignature } from "../.."; +import { Salt, WrappedDocument } from "../../3.0/types"; +import { get } from "lodash"; +import { decodeSalt } from "../salt"; +import { SchemaId } from "../../shared/@types/document"; +import * as v3 from "../../__generated__/schema.3.0"; +import { Method, OpenAttestationDocument, ProofType } from "../../__generated__/schema.3.0"; +import { toBuffer, isObfuscated, getObfuscatedData } from "../../shared/utils"; +import ObfuscatedWrapped from "../../../test/fixtures/v3/obfuscated-wrapped.json"; +import NotObfuscatedWrapped from "../../../test/fixtures/v3/not-obfuscated-wrapped.json"; + +jest.mock("../../3.0/validate"); // Skipping schema verification while wrapping + +const openAttestationData: OpenAttestationDocument = { + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://www.w3.org/2018/credentials/examples/v1", + "https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json", + "https://schemata.openattestation.com/com/openattestation/1.0/CustomContext.json", + ], + issuanceDate: "2010-01-01T19:23:24Z", + name: "document owner name", + type: ["VerifiableCredential", "AlumniCredential"], + credentialSubject: { + id: "did:example:ebfeb1f712ebc6f1c276e12ec21", + alumniOf: "Example University", + array: ["one", "two", "three", "four"], + arrayOfObject: [ + { foo: "bar", doo: "foo" }, + { foo: "baz", doo: "faz" }, + ], + }, + issuer: "https://example.edu/issuers/14", + openAttestationMetadata: { + proof: { + type: ProofType.OpenAttestationProofMethod, + value: "0x9178F546D3FF57D7A6352bD61B80cCCD46199C2d", + method: Method.TokenRegistry, + }, + identityProof: { + identifier: "some.example", + type: v3.IdentityProofType.DNSTxt, + }, + }, + attachments: [ + { + mimeType: "image/png", + fileName: "aaa", + data: "abcd", + }, + { + mimeType: "image/png", + fileName: "bbb", + data: "abcd", + }, + ], +}; + +const testData = { + key1: "value1", + key2: "value2", + keyObject: { foo: "bar", bar: "dod" }, + ...openAttestationData, +}; + +const findSaltByPath = (salts: string, path: string): Salt | undefined => { + return decodeSalt(salts).find((salt) => salt.path === path); +}; + +/** + * /!\ This method doesn't work with array like notation + * This method will ensure + * - the field has been added to the obfuscated array + * - the salt bound to the field has been removed + * - the field has been removed + */ +const expectRemovedFieldsWithoutArrayNotation = ( + field: string, + document: WrappedDocument, + obfuscatedDocument: WrappedDocument +) => { + const value = get(document, field); + const salt = findSaltByPath(document.proof.salts, field); + + expect(obfuscatedDocument.proof.privacy.obfuscated).toContain( + toBuffer({ [field]: `${salt?.value}:${value}` }).toString("hex") + ); + expect(findSaltByPath(obfuscatedDocument.proof.salts, field)).toBeUndefined(); + expect(obfuscatedDocument).not.toHaveProperty(field); +}; + +describe("privacy", () => { + describe("obfuscateDocument", () => { + test("removes one field from the root object", async () => { + const field = "key1"; + const newDocument = await wrapDocument(testData, { version: SchemaId.v3 }); + const obfuscatedDocument = await obfuscateVerifiableCredential(newDocument, field); + const verified = verifySignature(obfuscatedDocument); + expect(verified).toBe(true); + + expectRemovedFieldsWithoutArrayNotation(field, newDocument, obfuscatedDocument); + expect(obfuscatedDocument.proof.privacy.obfuscated).toHaveLength(1); + }); + test("removes one object from the root object", async () => { + const field = "keyObject"; + const expectedFieldsToBeRemoved = ["keyObject.foo", "keyObject.bar"]; + const newDocument = await wrapDocument(testData, { version: SchemaId.v3 }); + const obfuscatedDocument = await obfuscateVerifiableCredential(newDocument, field); + + const verified = verifySignature(obfuscatedDocument); + expect(verified).toBe(true); + + expectedFieldsToBeRemoved.forEach((field) => { + expectRemovedFieldsWithoutArrayNotation(field, newDocument, obfuscatedDocument); + }); + expect(obfuscatedDocument.proof.privacy.obfuscated).toHaveLength(2); + }); + test("removes one key of an object from an array", async () => { + const field = "credentialSubject.arrayOfObject[0].foo"; + const newDocument = await wrapDocument(testData, { version: SchemaId.v3 }); + const obfuscatedDocument = await obfuscateVerifiableCredential(newDocument, field); + + const verified = verifySignature(obfuscatedDocument); + expect(verified).toBe(true); + + const value = get(newDocument, field); + const salt = findSaltByPath(newDocument.proof.salts, field); + + expect(obfuscatedDocument.proof.privacy.obfuscated).toContain( + toBuffer({ [field]: `${salt?.value}:${value}` }).toString("hex") + ); + expect(findSaltByPath(obfuscatedDocument.proof.salts, field)).toBeUndefined(); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + expect(obfuscatedDocument.credentialSubject.arrayOfObject![0]).toStrictEqual({ doo: "foo" }); + expect(obfuscatedDocument.proof.privacy.obfuscated).toHaveLength(1); + }); + test("removes one object from an array", async () => { + const field = "credentialSubject.arrayOfObject[0]"; + const expectedFieldsToBeRemoved = [ + "credentialSubject.arrayOfObject[0].foo", + "credentialSubject.arrayOfObject[0].doo", + ]; + const newDocument = await wrapDocument(testData, { version: SchemaId.v3 }); + const obfuscatedDocument = await obfuscateVerifiableCredential(newDocument, field); + + const verified = verifySignature(obfuscatedDocument); + expect(verified).toBe(true); + + expectedFieldsToBeRemoved.forEach((field) => { + const value = get(newDocument, field); + const salt = findSaltByPath(newDocument.proof.salts, field); + + expect(obfuscatedDocument.proof.privacy.obfuscated).toContain( + toBuffer({ [field]: `${salt?.value}:${value}` }).toString("hex") + ); + expect(findSaltByPath(obfuscatedDocument.proof.salts, field)).toBeUndefined(); + }); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + expect(obfuscatedDocument.credentialSubject.arrayOfObject![0]).toBeUndefined(); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + expect(obfuscatedDocument.credentialSubject.arrayOfObject![1]).not.toBeUndefined(); // let's make sure only the first item has been removed + expect(obfuscatedDocument.proof.privacy.obfuscated).toHaveLength(2); + }); + test("removes an array of object", async () => { + const field = "attachments"; + const expectedFieldsToBeRemoved = [ + "attachments[0].mimeType", + "attachments[0].fileName", + "attachments[0].data", + "attachments[1].mimeType", + "attachments[1].fileName", + "attachments[1].data", + ]; + const newDocument = await wrapDocument(testData, { version: SchemaId.v3 }); + const obfuscatedDocument = await obfuscateVerifiableCredential(newDocument, field); + + const verified = verifySignature(obfuscatedDocument); + expect(verified).toBe(true); + + expectedFieldsToBeRemoved.forEach((field) => { + const value = get(newDocument, field); + const salt = findSaltByPath(newDocument.proof.salts, field); + + expect(obfuscatedDocument.proof.privacy.obfuscated).toContain( + toBuffer({ [field]: `${salt?.value}:${value}` }).toString("hex") + ); + expect(findSaltByPath(obfuscatedDocument.proof.salts, field)).toBeUndefined(); + }); + expect(obfuscatedDocument.attachments).toBeUndefined(); + expect(obfuscatedDocument.proof.privacy.obfuscated).toHaveLength(6); + }); + + test("removes multiple fields", async () => { + const fields = ["key1", "key2"]; + const newDocument = await wrapDocument(testData, { version: SchemaId.v3 }); + const obfuscatedDocument = await obfuscateVerifiableCredential(newDocument, fields); + const verified = verifySignature(obfuscatedDocument); + expect(verified).toBe(true); + + fields.forEach((field) => { + expectRemovedFieldsWithoutArrayNotation(field, newDocument, obfuscatedDocument); + }); + expect(obfuscatedDocument.proof.privacy.obfuscated).toHaveLength(2); + }); + + test("removes values from nested object", async () => { + const field = "credentialSubject.alumniOf"; + const newDocument = await wrapDocument(openAttestationData, { version: SchemaId.v3 }); + const obfuscatedDocument = await obfuscateVerifiableCredential(newDocument, field); + const verified = verifySignature(obfuscatedDocument); + expect(verified).toBe(true); + + expectRemovedFieldsWithoutArrayNotation(field, newDocument, obfuscatedDocument); + expect(obfuscatedDocument.proof.privacy.obfuscated).toHaveLength(1); + }); + + test("removes values from arrays", async () => { + const fields = ["credentialSubject.array[2]", "credentialSubject.array[3]"]; + const newDocument = await wrapDocument(openAttestationData, { version: SchemaId.v3 }); + const obfuscatedDocument = await obfuscateVerifiableCredential(newDocument, fields); + const verified = verifySignature(obfuscatedDocument); + expect(verified).toBe(true); + + const salts = decodeSalt(newDocument.proof.salts); + const salt1 = salts.find((s) => s.path === fields[0]); + const value1 = get(newDocument, fields[0]); + const salt2 = salts.find((s) => s.path === fields[1]); + const value2 = get(newDocument, fields[1]); + + expect(obfuscatedDocument.proof.privacy.obfuscated).toEqual([ + toBuffer({ [fields[0]]: `${salt1?.value}:${value1}` }).toString("hex"), + toBuffer({ [fields[1]]: `${salt2?.value}:${value2}` }).toString("hex"), + ]); + expect(findSaltByPath(obfuscatedDocument.proof.salts, fields[0])).toBeUndefined(); + expect(findSaltByPath(obfuscatedDocument.proof.salts, fields[1])).toBeUndefined(); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore not typable + expect(obfuscatedDocument.credentialSubject.array).not.toContain("three"); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore not typable + expect(obfuscatedDocument.credentialSubject.array).not.toContain("four"); + }); + + test("is transitive", async () => { + const newDocument = await wrapDocument(testData, { version: SchemaId.v3 }); + const intermediateDoc = obfuscateVerifiableCredential(newDocument, "key1"); + const finalDoc1 = obfuscateVerifiableCredential(intermediateDoc, "key2"); + const finalDoc2 = obfuscateVerifiableCredential(newDocument, ["key1", "key2"]); + + expect(finalDoc1).toEqual(finalDoc2); + expect(intermediateDoc).not.toHaveProperty("key1"); + expect(finalDoc1).not.toHaveProperty("key1"); + expect(finalDoc1).not.toHaveProperty("key2"); + expect(finalDoc2).not.toHaveProperty("key1"); + expect(finalDoc2).not.toHaveProperty("key2"); + }); + }); + + describe("getObfuscated", () => { + const documentObfuscatedV3 = ObfuscatedWrapped as WrappedDocument; + const documentNotObfuscatedV3 = NotObfuscatedWrapped as WrappedDocument; + + test("should return empty array when there is no obfuscated data in document v3", () => { + expect(getObfuscatedData(documentNotObfuscatedV3)).toHaveLength(0); + }); + + test("should return array of hashes when there is obfuscated data in document v3", () => { + const obfuscatedData = getObfuscatedData(documentObfuscatedV3); + expect(obfuscatedData.length).toBe(1); + expect(obfuscatedData?.[0]).toBe("e411260249d681968bdde76246350f7ca1c9bf1fae59b6bbf147692961b12e26"); + }); + }); + + describe("isObfuscated", () => { + const documentObfuscatedV3 = ObfuscatedWrapped as WrappedDocument; + const documentNotObfuscatedV3 = NotObfuscatedWrapped as WrappedDocument; + + test("should return false when there is no obfuscated data in document v3", () => { + expect(isObfuscated(documentNotObfuscatedV3)).toBe(false); + }); + + test("should return true where there is obfuscated data in document v3", () => { + expect(isObfuscated(documentObfuscatedV3)).toBe(true); + }); + }); +}); diff --git a/src/4.0/oa/__tests__/salt.test.wip b/src/4.0/oa/__tests__/salt.test.wip new file mode 100644 index 00000000..cf2e9a98 --- /dev/null +++ b/src/4.0/oa/__tests__/salt.test.wip @@ -0,0 +1,164 @@ +import { cloneDeep } from "lodash"; +import { Method, ProofType, OpenAttestationDocument, TemplateType } from "../../__generated__/schema.3.0"; +import { salt, decodeSalt } from "../salt"; +import * as v3 from "../../__generated__/schema.3.0"; +import { Base64 } from "js-base64"; + +const sampleDoc: OpenAttestationDocument = { + "@context": ["https://www.w3.org/2018/credentials/v1", "https://www.w3.org/2018/credentials/examples/v1"], + id: "http://example.edu/credentials/58473", + type: ["VerifiableCredential", "AlumniCredential"], + issuer: "https://example.edu/issuers/14", + issuanceDate: "2010-01-01T19:23:24Z", + credentialSubject: { + id: "did:example:ebfeb1f712ebc6f1c276e12ec21", + alumniOf: "Example University", + }, + openAttestationMetadata: { + template: { + name: "EXAMPLE_RENDERER", + type: TemplateType.EmbeddedRenderer, + url: "https://renderer.openattestation.com/", + }, + proof: { + type: ProofType.OpenAttestationProofMethod, + method: Method.DocumentStore, + value: "0xED2E50434Ac3623bAD763a35213DAD79b43208E4", + }, + identityProof: { + identifier: "some.example", + type: v3.IdentityProofType.DNSTxt, + }, + }, +}; + +describe("digest v3.0", () => { + describe("salt", () => { + test("handles shadowed keys correctly (type 1: root, dot notation)", () => { + const document = { + ...cloneDeep(sampleDoc), + "credentialSubject.alumniOf": + "0xSomeMaliciousDocumentStore, this would be at credentialSubject.alumniOf after flatMap if uncaught", + }; + expect(() => { + salt(document); + }).toThrow("Key names must not have . in them"); + }); + test("handles shadowed keys correctly (type 2: root, array index)", () => { + const document = { + ...cloneDeep(sampleDoc), + "type[1]": "MaliciousCredential, this would be at type[1] after flatMap if uncaught", + }; + expect(() => { + salt(document); + }).toThrow("Key names must not have '[' or ']' in them"); + }); + test("handles shadowed keys correctly (type 3: nested as object, dot notation)", () => { + const document = { + ...cloneDeep(sampleDoc), + nested: { + "credentialSubject.alumniOf": + "0xSomeMaliciousDocumentStore, this would be at nested.credentialSubject.alumniOf after flatMap if uncaught", + }, + }; + expect(() => { + salt(document); + }).toThrow("Key names must not have . in them"); + }); + test("handles shadowed keys correctly (type 4: nested as object, array index)", () => { + const document = { + ...cloneDeep(sampleDoc), + nested: { "type[1]": "this would be at nested.type[1] after flatMap if uncaught" }, + }; + expect(() => { + salt(document); + }).toThrow("Key names must not have '[' or ']' in them"); + }); + test("handles shadowed keys correctly (type 5: nested as array, dot notation)", () => { + const document = { + ...cloneDeep(sampleDoc), + nested: [{ "shadowed.key": "this would be at nested[0].shadowed.key after flatMap if uncaught" }], + }; + expect(() => { + salt(document); + }).toThrow("Key names must not have . in them"); + }); + test("handles shadowed keys correctly (type 6: nested as array, array index)", () => { + const document = { + ...cloneDeep(sampleDoc), + nested: [{ "type[1]": "this would be at nested[0].type[1] after flatMap if uncaught" }], + }; + expect(() => { + salt(document); + }).toThrow("Key names must not have '[' or ']' in them"); + }); + + test("handles null values correctly", () => { + const document = { + ...cloneDeep(sampleDoc), + grades: null, + }; + const salted = salt(document); + expect(salted).toContainEqual(expect.objectContaining({ path: "grades" })); + }); + test("handles undefined values correctly", () => { + const document = { + ...cloneDeep(sampleDoc), + grades: undefined, + }; + expect(() => { + salt(document); + }).toThrow("Unexpected data 'undefined' in 'grades'"); // Cannot convert undefined or null to object? + }); + test("handles numbers and booleans correctly", () => { + const document = { + ...cloneDeep(sampleDoc), + grades: ["A+", 100, 50.28, true, "B+"], + }; + const salted = salt(document); + expect(salted).toContainEqual(expect.objectContaining({ path: "grades[0]" })); + expect(salted).toContainEqual(expect.objectContaining({ path: "grades[1]" })); + expect(salted).toContainEqual(expect.objectContaining({ path: "grades[2]" })); + expect(salted).toContainEqual(expect.objectContaining({ path: "grades[3]" })); + expect(salted).toContainEqual(expect.objectContaining({ path: "grades[4]" })); + }); + test("handles sparse arrays correctly", () => { + const document = { + ...cloneDeep(sampleDoc), + grades: ["A+", 100, , , , true, "B+"], + }; + const salted = salt(document); + expect(salted).toContainEqual(expect.objectContaining({ path: "grades[0]" })); + expect(salted).toContainEqual(expect.objectContaining({ path: "grades[1]" })); + expect(salted).toContainEqual(expect.objectContaining({ path: "grades[5]" })); + expect(salted).toContainEqual(expect.objectContaining({ path: "grades[6]" })); + expect(salted).not.toContainEqual(expect.objectContaining({ path: "grades[2]" })); + expect(salted).not.toContainEqual(expect.objectContaining({ path: "grades[3]" })); + expect(salted).not.toContainEqual(expect.objectContaining({ path: "grades[4]" })); + }); + }); + + describe("decodeSalt", () => { + it("should throw when salt is of wrong length to prevent attack on value", () => { + const encodedSalt = Base64.encode( + JSON.stringify([{ path: "foo", value: "123456789012345678901234567890123456789012345678901234567890" }]) + ); + expect(() => decodeSalt(encodedSalt)).toThrowError("Salt must be 32 bytes"); + }); + + it("should decode salt correctly", () => { + const encodedSalt = Base64.encode( + JSON.stringify([{ path: "foo", value: "1234567890123456789012345678901234567890123456789012345678901234" }]) + ); + const decoded = decodeSalt(encodedSalt); + expect(decoded).toMatchInlineSnapshot(` + [ + { + "path": "foo", + "value": "1234567890123456789012345678901234567890123456789012345678901234", + }, + ] + `); + }); + }); +}); diff --git a/src/4.0/oa/__tests__/sign.test.wip b/src/4.0/oa/__tests__/sign.test.wip new file mode 100644 index 00000000..aafde700 --- /dev/null +++ b/src/4.0/oa/__tests__/sign.test.wip @@ -0,0 +1,60 @@ +import { signDocument, v3 } from "../../index"; +import { SUPPORTED_SIGNING_ALGORITHM } from "../../shared/@types/sign"; +import rawWrappedDocumentV3 from "../../../test/fixtures/v3/did-wrapped.json"; +import { Wallet } from "ethers"; + +const wrappedDocumentV3 = rawWrappedDocumentV3 as v3.WrappedDocument; + +describe("v3", () => { + it("should sign a document", async () => { + const { proof } = await signDocument(wrappedDocumentV3, SUPPORTED_SIGNING_ALGORITHM.Secp256k1VerificationKey2018, { + public: "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller", + private: "0x497c85ed89f1874ba37532d1e33519aba15bd533cdcb90774cc497bfe3cde655", + }); + expect(Object.keys(proof).length).toBe(9); + expect(proof.key).toBe("did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller"); + expect(proof.signature).toBe( + "0x3ce62bb2d6a68f15fabe653dbb71edfaf1e2a00c71c98f71801f3a7438ae477a4cf3dbefaff9359b2d2b97473909ba4b19e9d2ac0c735cec926da0d1025af07b1c" + ); + }); + it("should sign a document with a wallet", async () => { + const wallet = Wallet.fromMnemonic( + "tourist quality multiply denial diary height funny calm disease buddy speed gold" + ); + const { proof } = await signDocument( + wrappedDocumentV3, + SUPPORTED_SIGNING_ALGORITHM.Secp256k1VerificationKey2018, + wallet + ); + expect(Object.keys(proof).length).toBe(9); + expect(proof.key).toBe("did:ethr:0x906FB815De8976b1e38D9a4C1014a3acE16Ce53C#controller"); + expect(proof.signature).toBe( + "0xdfb8f7b40933d90004d0a94261f0af573702c0040f727ed813273284ef7329cd4420095b28f7d768866556be9d95fd8b89e0ee2bd1f9c589464d3b16d1247d651c" + ); + }); + + it("should throw error if a document was previously signed", async () => { + const signedDocument = await signDocument( + wrappedDocumentV3, + SUPPORTED_SIGNING_ALGORITHM.Secp256k1VerificationKey2018, + { + public: "did:ethr:0xb6De3744E1259e1aB692f5a277f053B79429c5a2#controller", + private: "0x812269266b34d2919f737daf22db95f02642f8cdc0ca673bf3f701599f4971f5", + } + ); + + await expect( + signDocument(signedDocument, SUPPORTED_SIGNING_ALGORITHM.Secp256k1VerificationKey2018, { + public: "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller", + private: "0x497c85ed89f1874ba37532d1e33519aba15bd533cdcb90774cc497bfe3cde655", + }) + ).rejects.toThrowErrorMatchingInlineSnapshot(`"Document has been signed"`); + }); + + it("should throw error if a key or signer is invalid", async () => { + await expect( + // @ts-expect-error invalid call + signDocument(wrappedDocumentV3, SUPPORTED_SIGNING_ALGORITHM.Secp256k1VerificationKey2018, {}) + ).rejects.toThrowErrorMatchingInlineSnapshot(`"Either a keypair or ethers.js Signer must be provided"`); + }); +}); diff --git a/src/4.0/oa/__tests__/verify.test.wip b/src/4.0/oa/__tests__/verify.test.wip new file mode 100644 index 00000000..3e56dfe7 --- /dev/null +++ b/src/4.0/oa/__tests__/verify.test.wip @@ -0,0 +1,206 @@ +import { verify } from "../verify"; +import sample from "../schema/sample-verifiable-credential.json"; +import batched from "../schema/batched-verifiable-credential-1.json"; +import { WrappedDocument } from "../../3.0/types"; + +// sample1: unwrapped (aka credential), sample2: only 1 doc is wrapped (aka verifiable credential/VC) +const sampleVerifiableCredential = sample as WrappedDocument; + +// sample3 & sample4: more than 1 doc wrapped (aka batched VC, where 'proofs' has values) +const sampleBatchedVC = batched as WrappedDocument; + +describe("signature", () => { + describe("verify", () => { + // Documents without proofs mean these documents are wrapped individually (i.e. targetHash == merkleRoot) + describe("documents without proofs", () => { + test("returns true for documents with unaltered data", () => { + expect(verify(sampleVerifiableCredential)).toBe(true); + }); + test("returns false for documents with altered value", () => { + const verifiableCredential = { + ...sampleVerifiableCredential, + issuer: { + id: "https://example.com", + name: "Fake Name", // Value was originally "DEMO STORE" + }, + }; + + expect(verify(verifiableCredential)).toBe(false); + }); + test("returns false for documents with altered key", () => { + const verifiableCredential = { + ...sampleVerifiableCredential, + issuer: { + id: "https://example.com", + fakename: "DEMO STORE", // Key was originally "name" + }, + }; + + expect(verify(verifiableCredential as any)).toBe(false); + }); + test("returns false for documents with additional data not part of salt", () => { + // In this test case, we added the Class 2A licence which is not found in the original salts + const verifiableCredential = { + ...sampleVerifiableCredential, + credentialSubject: { + ...sampleVerifiableCredential.credentialSubject, + class: [ + { + type: "3", + effectiveDate: "2010-01-01T19:23:24Z", + }, + { + type: "3A", + effectiveDate: "2010-01-01T19:23:24Z", + }, + { + // This was added in after it has been wrapped + type: "2A", + effectiveDate: "2020-06-05T00:00:00Z", + }, + ], + }, + }; + + expect(verify(verifiableCredential)).toBe(false); + }); + test("returns false for documents with missing data", () => { + // In this test case, we removed the Class 3A licence which is in the original salts + const verifiableCredential = { + ...sampleVerifiableCredential, + credentialSubject: { + ...sampleVerifiableCredential.credentialSubject, + class: [ + { + type: "3", + effectiveDate: "2010-01-01T19:23:24Z", + }, + // Class 3A was removed + ], + }, + }; + + expect(verify(verifiableCredential)).toBe(false); + }); + }); + + // Documents with proofs mean these documents are wrapped as a batch (i.e. proofs exist, and targetHash !== merkleRoot) + describe("documents with proofs", () => { + test("returns true for documents with unaltered data", () => { + const verifiableCredential = sampleBatchedVC; + expect(verify(verifiableCredential)).toBe(true); + }); + test("returns false for documents with altered value", () => { + const verifiableCredential = { + ...sampleBatchedVC, + issuer: { + id: "https://example.com", + name: "Fake Name", // Value was originally "DEMO STORE" + }, + }; + + expect(verify(verifiableCredential)).toBe(false); + }); + test("returns false for documents with altered key", () => { + const verifiableCredential = { + ...sampleBatchedVC, + issuer: { + id: "https://example.com", + fakename: "DEMO STORE", // Key was originally "name" + }, + }; + + expect(verify(verifiableCredential as any)).toBe(false); + }); + test("returns false for documents with additional data not part of salt", () => { + // In this test case, we added the Class 2A licence which is not found in the original salts + const verifiableCredential = { + ...sampleBatchedVC, + credentialSubject: { + ...sampleVerifiableCredential.credentialSubject, + class: [ + { + type: "3", + effectiveDate: "2010-01-01T19:23:24Z", + }, + { + type: "3A", + effectiveDate: "2010-01-01T19:23:24Z", + }, + { + // This was added in after it has been wrapped + type: "2A", + effectiveDate: "2020-06-05T00:00:00Z", + }, + ], + }, + }; + + expect(verify(verifiableCredential)).toBe(false); + }); + test("returns false for documents with missing data", () => { + // In this test case, we removed the Class 3A licence which is in the original salts + const verifiableCredential = { + ...sampleBatchedVC, + credentialSubject: { + ...sampleVerifiableCredential.credentialSubject, + class: [ + { + type: "3", + effectiveDate: "2010-01-01T19:23:24Z", + }, + // Class 3A was removed + ], + }, + }; + + expect(verify(verifiableCredential)).toBe(false); + }); + test("returns false for documents with altered targetHash", () => { + const verifiableCredential = { + ...sampleBatchedVC, + proof: { + ...sampleBatchedVC.proof, + targetHash: "81859d00caadd33f4100b7d37230684b953195786426a1be2c3bfea32b3c2a53", // Was "76eee8fc36924975c00420e463aab1a2e6b24fb8cfb81e8c789b2534da4b59a4" + }, + }; + + expect(verify(verifiableCredential)).toBe(false); + }); + test("returns false for documents with altered proofs", () => { + // Since the proofs key only exist when multiple documents are wrapped, we have to use sampleMultiVC1 or sampleMultiVC2 + const verifiableCredential = { + ...sampleBatchedVC, + proof: { + ...sampleBatchedVC.proof, + proofs: ["964b066a78bfec3701760893090fa41bd0c86fb1328f2ba07293252a1a7d5531"], // Was "964b066a78bfec3701760893090fa41bd0c86fb1328f2ba07293252a1a7d5530" + }, + }; + + expect(verify(verifiableCredential)).toBe(false); + }); + test("returns false for documents with missing proofs", () => { + const verifiableCredential = { + ...sampleBatchedVC, + proof: { + ...sampleBatchedVC.proof, + proofs: [], // Was "964b066a78bfec3701760893090fa41bd0c86fb1328f2ba07293252a1a7d5530" + }, + }; + + expect(verify(verifiableCredential)).toBe(false); + }); + test("returns false for documents with altered merkleRoot", () => { + const verifiableCredential = { + ...sampleBatchedVC, + proof: { + ...sampleBatchedVC.proof, + merkleRoot: "76eee8fc36924975c00420e463aab1a2e6b24fb8cfb81e8c789b2534da4b59a4", // Was "8505f27ea43ca3720b419ab96b80039eb4b2a1126acc9cb90f2a31349c110137" + }, + }; + + expect(verify(verifiableCredential)).toBe(false); + }); + }); + }); +}); diff --git a/src/4.0/oa/digest.ts b/src/4.0/oa/digest.ts new file mode 100644 index 00000000..bb2323d7 --- /dev/null +++ b/src/4.0/oa/digest.ts @@ -0,0 +1,24 @@ +import { get, sortBy } from "lodash"; +import { keccak256 } from "js-sha3"; +import { Salt } from "./types"; +import { OpenAttestationDocument } from "../../__generated__/oa-schema.4.0"; + +export const digestCredential = ( + document: Omit, + salts: Salt[], + obfuscatedData: string[] +) => { + // Prepare array of hashes from visible data + const hashedUnhashedDataArray = salts + .filter((salt) => get(document, salt.path)) + .map((salt) => { + return keccak256(JSON.stringify({ [salt.path]: `${salt.value}:${get(document, salt.path)}` })); + }); + + // Combine both array and sort them to ensure determinism + const combinedHashes = obfuscatedData.concat(hashedUnhashedDataArray); + const sortedHashes = sortBy(combinedHashes); + + // Finally, return the digest of the entire set of data + return keccak256(JSON.stringify(sortedHashes)); +}; diff --git a/src/4.0/oa/obfuscate.ts b/src/4.0/oa/obfuscate.ts new file mode 100644 index 00000000..10e9a5df --- /dev/null +++ b/src/4.0/oa/obfuscate.ts @@ -0,0 +1,57 @@ +import { OpenAttestationDocument } from "../../__generated__/oa-schema.4.0"; +import { toBuffer } from "../../shared/utils"; +import { WrappedDocument } from "./types"; +import { cloneDeep, get, unset, pick } from "lodash"; +import { decodeSalt, encodeSalt } from "./salt"; +import { traverseAndFlatten } from "./traverseAndFlatten"; + +const obfuscate = (_data: WrappedDocument, fields: string[] | string) => { + const data = cloneDeep(_data); // Prevents alteration of original data + + const fieldsAsArray = ([] as string[]).concat(fields); + // fields to remove will contain the list of each expanded keys from the fields passed in parameter, it's for instance useful in case of + // object obfuscation, where the object itself is not part of the salts, but each individual keys are + const fieldsToRemove: string[] = traverseAndFlatten(pick(data, fieldsAsArray), { + iteratee: ({ path }) => path, + }); + const salts = decodeSalt(data.proof.salts); + + // Obfuscate data by hashing them with the key + const obfuscatedData = fieldsToRemove.map((field) => { + const value = get(data, field); + const salt = salts.find((s) => s.path === field); + + if (!salt) { + throw new Error(`Salt not found for ${field}`); + } + + return toBuffer({ [salt.path]: `${salt.value}:${value}` }).toString("hex"); + }); + // remove fields from the object + fieldsAsArray.forEach((field) => unset(data, field)); + + data.proof.salts = encodeSalt(salts.filter((s) => !fieldsToRemove.includes(s.path))); + return { + data, + obfuscatedData, + }; +}; + +export const obfuscateVerifiableCredential = ( + document: WrappedDocument, + fields: string[] | string +): WrappedDocument => { + const { data, obfuscatedData } = obfuscate(document, fields); + const currentObfuscatedData = document.proof.privacy.obfuscated; + const newObfuscatedData = currentObfuscatedData.concat(obfuscatedData); + return { + ...data, + proof: { + ...data.proof, + privacy: { + ...data.proof.privacy, + obfuscated: newObfuscatedData, + }, + }, + }; +}; diff --git a/src/4.0/salt.ts b/src/4.0/oa/salt.ts similarity index 100% rename from src/4.0/salt.ts rename to src/4.0/oa/salt.ts diff --git a/src/4.0/oa/schema/schema.json b/src/4.0/oa/schema/schema.json new file mode 100644 index 00000000..920ad9db --- /dev/null +++ b/src/4.0/oa/schema/schema.json @@ -0,0 +1,170 @@ +{ + "title": "OpenAttestation v4.0 Schema", + "$id": "https://schemata.openattestation.com/com/openattestation/4.0/alpha-schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "definitions": { + "type": { + "oneOf": [ + { + "type": "array", + "items": { "type": "string" } + }, + { "type": "string" } + ], + "description": "Specific verifiable credential type as explained by https://www.w3.org/TR/vc-data-model/#types" + } + }, + "properties": { + "@context": { + "type": "array", + "items": { + "type": ["string", "object"], + "format": "uri" + }, + "description": "List of URI to determine the terminology used in the verifiable credential as explained by https://www.w3.org/TR/vc-data-model/#contexts" + }, + "id": { + "type": "string", + "format": "uri", + "description": "URI to the subject of the credential as explained by https://www.w3.org/TR/vc-data-model/#credential-subject" + }, + "type": { "$ref": "#/definitions/type" }, + "validFrom": { + "type": "string", + "format": "date-time", + "description": "The date and time when this credential becomes valid" + }, + "validUntil": { + "type": "string", + "format": "date-time", + "description": "The date and time when this credential expires" + }, + "name": { + "type": "string", + "description": "Human readable name of this credential" + }, + "issuer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uri", + "description": "URI when dereferenced, results in a document containing machine-readable information about the issuer that can be used to verify the information expressed in the credential. More information in https://www.w3.org/TR/vc-data-model/#issuer" + }, + "type": { "$ref": "#/definitions/type" }, + "name": { + "type": "string", + "description": "Issuer's name" + }, + "identityProof": { + "type": "object", + "properties": { + "identityProofType": { + "type": "string", + "enum": ["DNS-TXT", "DNS-DID", "DID"] + }, + "identifier": { + "type": "string", + "description": "Identifier to be shown to end user upon verifying the identity" + } + }, + "required": ["identityProofType", "identifier"], + "additionalProperties": false + } + }, + "required": ["id", "name", "identityProof"] + }, + "credentialStatus": { + "type": "object", + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/type" + }, + "credentialStatusType": { + "type": "string", + "enum": ["NONE"] + } + }, + "required": ["credentialStatusType"], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/type" + }, + "credentialStatusType": { + "type": "string", + "enum": ["REVOCATION_STORE", "OCSP_RESPONDER"] + }, + "location": { + "type": "string", + "format": "uri", + "examples": ["https://ocsp-responder.example.com"] + } + }, + "required": ["credentialStatusType", "location"], + "additionalProperties": false + } + ] + }, + "renderMethod": { + "type": "object", + "properties": { + "type": { "$ref": "#/definitions/type" }, + "renderMethodType": { + "type": "string", + "enum": ["EMBEDDED_RENDERER"], + "description": "Type of renderer template" + }, + "name": { + "type": "string", + "description": "Template name to be use by template renderer to determine the template to use" + }, + "url": { + "type": "string", + "format": "uri", + "pattern": "^(https?)://", + "description": "URL of a decentralised renderer to render this document" + } + }, + "required": ["renderMethodType", "name", "url"] + }, + "credentialSubject": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uri", + "description": "An identifier related to the subject of the verifiable credential. More information in https://www.w3.org/TR/vc-data-model/#credential-subject" + }, + "type": { "$ref": "#/definitions/type" } + } + }, + "proof": { + "type": "object", + "properties": { + "type": { "$ref": "#/definitions/type" }, + "proofPurpose": { "type": "string", "enum": ["assertionMethod"] }, + "targetHash": { "type": "string" }, + "proofs": { "type": "array", "items": { "type": "string" } }, + "merkleRoot": { "type": "string" }, + "salts": { "type": "string" }, + "privacy": { + "type": "object", + "properties": { "obfuscated": { "type": "array", "items": { "type": "string" } } } + }, + "key": { "type": "string" }, + "signature": { "type": "string" } + }, + "required": ["proofPurpose", "targetHash", "proofs", "merkleRoot", "salts", "privacy"], + "additionalProperties": false + } + }, + "required": ["@context", "issuer", "credentialStatus", "credentialSubject"] +} diff --git a/src/4.0/oa/schema/schema.test.ts b/src/4.0/oa/schema/schema.test.ts new file mode 100644 index 00000000..ad6ab092 --- /dev/null +++ b/src/4.0/oa/schema/schema.test.ts @@ -0,0 +1,75 @@ +/* eslint-disable jest/no-try-expect,jest/no-conditional-expect */ +import { cloneDeep } from "lodash"; +import { _unsafe_use_it_at_your_own_risk_v4_alpha_oa_wrapDocument as wrapDocumentV4 } from "../../../index"; +import sample from "../../../../test/fixtures/v4/oa/did-raw.json"; +import { ContextUrl } from "../../../shared/@types/document"; +import { OpenAttestationDocument } from "../../../__generated__/oa-schema.4.0"; + +const sampleVc = sample as OpenAttestationDocument; + +// eslint-disable-next-line jest/no-disabled-tests +describe("schema/4.0", () => { + it("should be valid with sample document", async () => { + const document = cloneDeep(sampleVc); + const wrappedDocument = await wrapDocumentV4(document); + expect(wrappedDocument["type"]).toStrictEqual(["VerifiableCredential", "OpenAttestationCredential"]); + expect(wrappedDocument["proof"]["type"]).toStrictEqual("OpenAttestationMerkleProofSignature2018"); + }); + + it("should be valid when adding any additional data", async () => { + const document = { ...cloneDeep(sampleVc), key1: "some" }; + const wrappedDocument = await wrapDocumentV4(document); + expect(wrappedDocument["key1"]).toStrictEqual("some"); + expect(wrappedDocument["type"]).toStrictEqual(["VerifiableCredential", "OpenAttestationCredential"]); + expect(wrappedDocument["proof"]["type"]).toStrictEqual("OpenAttestationMerkleProofSignature2018"); + }); + + describe("@context", () => { + it("should self-correct when @context is a string with a valid context, appending it to the array of @context", async () => { + // @context MUST be an ordered set in W3C VC data model, see https://www.w3.org/TR/vc-data-model/#contexts + const document = { ...cloneDeep(sampleVc), "@context": "https://w3id.org/traceability/v1" }; + const wrappedDocument = await wrapDocumentV4(document as any); + expect(wrappedDocument["@context"]).toStrictEqual([ + "https://www.w3.org/2018/credentials/v1", + ContextUrl.oa_v4_alpha, + "https://w3id.org/traceability/v1", + ]); + }); + it("should self-correct when @context is an array that contains a valid context but is missing the required contexts", async () => { + // This should not have AJV validation errors as it's only caught after + const document = { ...cloneDeep(sampleVc), "@context": ["https://w3id.org/traceability/v1"] }; + const wrappedDocument = await wrapDocumentV4(document); + expect(wrappedDocument["@context"]).toStrictEqual([ + "https://www.w3.org/2018/credentials/v1", + ContextUrl.oa_v4_alpha, + "https://w3id.org/traceability/v1", + ]); + }); + it("should self-correct when @context is an array that contains the required context but not the right order", async () => { + // This should not have AJV validation errors as it's only caught during validateW3C + const document = { + ...cloneDeep(sampleVc), + "@context": ["https://w3id.org/traceability/v1", "https://www.w3.org/2018/credentials/v1"], + }; + const wrappedDocument = await wrapDocumentV4(document); + expect(wrappedDocument["@context"]).toStrictEqual([ + "https://www.w3.org/2018/credentials/v1", + ContextUrl.oa_v4_alpha, + "https://w3id.org/traceability/v1", + ]); + }); + it("should be invalid if @context contains one invalid URI", async () => { + expect.assertions(1); + const document = { ...cloneDeep(sampleVc), "@context": ["https://www.w3.org/2018/credentials/v1", "any"] }; + await expect(wrapDocumentV4(document)).rejects.toHaveProperty("validationErrors", [ + { + keyword: "format", + instancePath: "/@context/2", + schemaPath: "#/properties/%40context/items/format", + params: { format: "uri" }, + message: 'must match format "uri"', + }, + ]); + }); + }); +}); diff --git a/src/4.0/oa/sign.ts b/src/4.0/oa/sign.ts new file mode 100644 index 00000000..e65871ec --- /dev/null +++ b/src/4.0/oa/sign.ts @@ -0,0 +1,21 @@ +import { OpenAttestationDocument, WrappedDocument, SignedWrappedDocument, SignedWrappedProof } from "./types"; +import { sign } from "../../shared/signer"; +import { SigningKey, SUPPORTED_SIGNING_ALGORITHM } from "../../shared/@types/sign"; +import { isSignedWrappedOAV4Document } from "../../shared/utils"; +import { ethers } from "ethers"; + +export const signDocument = async ( + document: SignedWrappedDocument | WrappedDocument, + algorithm: SUPPORTED_SIGNING_ALGORITHM, + keyOrSigner: SigningKey | ethers.Signer +): Promise> => { + if (isSignedWrappedOAV4Document(document)) throw new Error("Document has been signed"); + const merkleRoot = `0x${document.proof.merkleRoot}`; + const signature = await sign(algorithm, merkleRoot, keyOrSigner); + const proof: SignedWrappedProof = { + ...document.proof, + key: SigningKey.guard(keyOrSigner) ? keyOrSigner.public : `did:ethr:${await keyOrSigner.getAddress()}#controller`, + signature, + }; + return { ...document, proof }; +}; diff --git a/src/4.0/traverseAndFlatten.ts b/src/4.0/oa/traverseAndFlatten.ts similarity index 100% rename from src/4.0/traverseAndFlatten.ts rename to src/4.0/oa/traverseAndFlatten.ts diff --git a/src/4.0/oa/types.ts b/src/4.0/oa/types.ts new file mode 100644 index 00000000..914a4e72 --- /dev/null +++ b/src/4.0/oa/types.ts @@ -0,0 +1,55 @@ +// types generated by quicktype during postinstall phase +import { OpenAttestationDocument as OpenAttestationDocumentV4, ProofPurpose } from "../../__generated__/oa-schema.4.0"; +import { OpenAttestationHexString, SignatureAlgorithm } from "../../shared/@types/document"; +import { Array, Literal, Record, Static, String, Union } from "runtypes"; + +export interface Salt { + value: string; + path: string; +} + +export const PrivacyObfuscation = Record({ + obfuscated: Array(OpenAttestationHexString), +}); +export type PrivacyObfuscation = Static; + +export const WrappedProof = Record({ + type: SignatureAlgorithm, + /* FIXME: No straightforward way to represent enum in runtypes */ + // proofPurpose: runtypesFromEnum(ProofPurpose), + // proofPurpose: ProofPurpose, + proofPurpose: Union(Literal(ProofPurpose.AssertionMethod)), + targetHash: String, + proofs: Array(String), + merkleRoot: String, + salts: String, + privacy: PrivacyObfuscation, +}); +export type WrappedProof = Static; + +export const WrappedProofStrict = WrappedProof.And( + Record({ + targetHash: OpenAttestationHexString, + merkleRoot: OpenAttestationHexString, + proofs: Array(OpenAttestationHexString), + }) +); +export type WrappedProofStrict = Static; + +export const SignedWrappedProof = WrappedProof.And( + Record({ + key: String, + signature: String, + }) +); +export type SignedWrappedProof = Static; + +export type WrappedDocument = T & { + proof: WrappedProof; +}; + +export type SignedWrappedDocument = T & { + proof: SignedWrappedProof; +}; + +export * from "../../__generated__/oa-schema.4.0"; diff --git a/src/4.0/validate/index.ts b/src/4.0/oa/validate/index.ts similarity index 100% rename from src/4.0/validate/index.ts rename to src/4.0/oa/validate/index.ts diff --git a/src/4.0/oa/validate/validate.ts b/src/4.0/oa/validate/validate.ts new file mode 100644 index 00000000..0899e9d1 --- /dev/null +++ b/src/4.0/oa/validate/validate.ts @@ -0,0 +1,128 @@ +import { OpenAttestationDocument } from "../../../__generated__/oa-schema.4.0"; +import { WrappedDocument } from "../types"; +import { ContextUrl } from "../../../shared/@types/document"; +import { documentLoaders, expand } from "@govtechsg/jsonld"; +import fetch from "cross-fetch"; +import w3cDataModel from "../../../shared/contexts/w3c-data-model-v1.json"; + +const getId = (objectOrString: string | { id: string }): string => { + if (typeof objectOrString === "string") { + return objectOrString; + } + return objectOrString.id; +}; +/* Based on https://tools.ietf.org/html/rfc3339#section-5.6 */ +const dateFullYear = /[0-9]{4}/; +const dateMonth = /(0[1-9]|1[0-2])/; +const dateMDay = /([12]\d|0[1-9]|3[01])/; +const timeHour = /([01][0-9]|2[0-3])/; +const timeMinute = /[0-5][0-9]/; +const timeSecond = /([0-5][0-9]|60)/; +const timeSecFrac = /(\.[0-9]+)?/; +const timeNumOffset = new RegExp("[-+]".concat(timeHour.source, ":").concat(timeMinute.source)); +const timeOffset = new RegExp("([zZ]|".concat(timeNumOffset.source, ")")); +const partialTime = new RegExp( + "".concat(timeHour.source, ":").concat(timeMinute.source, ":").concat(timeSecond.source).concat(timeSecFrac.source) +); +const fullDate = new RegExp("".concat(dateFullYear.source, "-").concat(dateMonth.source, "-").concat(dateMDay.source)); +const fullTime = new RegExp("".concat(partialTime.source).concat(timeOffset.source)); +const rfc3339 = new RegExp("".concat(fullDate.source, "[ tT]").concat(fullTime.source)); + +const isValidRFC3339 = (str: any) => { + return rfc3339.test(str); +}; + +/* Based on https://tools.ietf.org/html/rfc3986 and https://github.com/ajv-validator/ajv/search?q=uri&unscoped_q=uri */ +const uri = + /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i; +const rfc3986 = new RegExp(uri); + +const isValidRFC3986 = (str: any) => { + return rfc3986.test(str); +}; + +let w3cDataModelUrl = "https://www.w3.org/2018/credentials/v1"; +const preloadedContextList = [w3cDataModelUrl, ContextUrl.oa_v4_alpha]; +const contexts: Map> = new Map(); +const nodeDocumentLoader = documentLoaders.xhr ? documentLoaders.xhr() : documentLoaders.node(); +let preload = true; + +const documentLoader = async (url: string) => { + if (preload) { + preload = false; + for (const url of preloadedContextList) { + // resolve the w3c data model context to the local + // file within the repo, otherwise, w3c would throttle + // these contexts after a set number of requests. + if (url === w3cDataModelUrl) { + contexts.set(url, Promise.resolve(w3cDataModel)); + } else { + contexts.set( + url, + fetch(url, { headers: { accept: "application/json" } }).then((res: any) => res.json()) + ); + } + } + } + if (contexts.get(url)) { + const promise = contexts.get(url); + return { + contextUrl: undefined, // this is for a context via a link header + document: await promise, // this is the actual document that was loaded + documentUrl: url, // this is the actual context URL after redirects + }; + } else { + const promise = nodeDocumentLoader(url); + contexts.set( + url, + promise.then(({ document }) => document) + ); + return promise; + } +}; + +export async function validateW3C(credential: WrappedDocument): Promise { + // ensure first context is 'https://www.w3.org/2018/credentials/v1' as it's mandatory, see https://www.w3.org/TR/vc-data-model/#contexts + if ( + !Array.isArray(credential["@context"]) || + (Array.isArray(credential["@context"]) && credential["@context"][0] !== "https://www.w3.org/2018/credentials/v1") + ) { + throw new Error("https://www.w3.org/2018/credentials/v1 needs to be first in the list of contexts"); + } + + // ensure issuer is a valid URI according to RFC3986 + const issuerId = getId(credential.issuer); + if (!isValidRFC3986(issuerId)) { + throw new Error("Property 'issuer' id must be a valid RFC 3986 URI"); + } + + // ensure validFrom is a valid RFC3339 date, see https://www.w3.org/TR/vc-data-model/#issuance-date + if (credential.validFrom && !isValidRFC3339(credential.validFrom)) { + throw new Error("Property 'validFrom' must be a valid RFC 3339 date"); + } + // ensure validUntil is a valid RFC3339 date, see https://www.w3.org/TR/vc-data-model/#expiration + if (credential.validUntil && !isValidRFC3339(credential.validUntil)) { + throw new Error("Property 'validUntil' must be a valid RFC 3339 date"); + } + + // https://www.w3.org/TR/vc-data-model/#types + if (!credential.type || !Array.isArray(credential.type)) { + throw new Error("Property 'type' must exist and be an array"); + } + if (!credential.type.includes("VerifiableCredential")) { + throw new Error("Property 'type' must have VerifiableCredential as one of the items"); + } + + await expand(credential, { + expansionMap: (info) => { + if (info.unmappedProperty) { + throw new Error( + `"The property ${info.activeProperty ? `${info.activeProperty}.` : ""}${ + info.unmappedProperty + } in the input was not defined in the context"` + ); + } + }, + documentLoader, + }); +} diff --git a/src/4.0/verify.ts b/src/4.0/oa/verify.ts similarity index 95% rename from src/4.0/verify.ts rename to src/4.0/oa/verify.ts index ac413a25..e0d705e7 100644 --- a/src/4.0/verify.ts +++ b/src/4.0/oa/verify.ts @@ -1,6 +1,6 @@ import { WrappedDocument } from "./types"; import { digestCredential } from "./digest"; -import { checkProof } from "../shared/merkle"; +import { checkProof } from "../../shared/merkle"; import { decodeSalt, salt } from "./salt"; export const verify = (document: T): document is WrappedDocument => { diff --git a/src/4.0/oa/wrap.ts b/src/4.0/oa/wrap.ts new file mode 100644 index 00000000..039f126c --- /dev/null +++ b/src/4.0/oa/wrap.ts @@ -0,0 +1,105 @@ +import { hashToBuffer, isStringArray, SchemaValidationError } from "../../shared/utils"; +import { MerkleTree } from "../../shared/merkle"; +import { ContextUrl, SchemaId } from "../../shared/@types/document"; +import { WrappedDocument } from "./types"; +import { digestCredential } from "../../4.0/oa/digest"; +import { validateSchema as validate } from "../../shared/validate"; +import { WrapDocumentOptionV4 } from "../../shared/@types/wrap"; +import { OpenAttestationDocument } from "../../__generated__/oa-schema.4.0"; +import { encodeSalt, salt } from "./salt"; +import { validateW3C } from "./validate"; +import { getSchema } from "../../shared/ajv"; + +export const wrapDocument = async ( + credential: T, + options: WrapDocumentOptionV4 // eslint-disable-line @typescript-eslint/no-unused-vars +): Promise> => { + const document = { ...credential }; + + // 1. Ensure that required @contexts are present and in the correct order + // @context: [Base, OA, ...] + const contexts = new Set(["https://www.w3.org/2018/credentials/v1", ContextUrl.oa_v4_alpha]); + + if (typeof document["@context"] === "string") { + contexts.add(document["@context"]); + } else if (isStringArray(document["@context"])) { + document["@context"].forEach((context) => contexts.add(context)); + } + + // Since JavaScript Sets preserve insertion order and duplicated inserts do not affect the order, we can do this: + document["@context"] = Array.from(contexts); + + // 2. Ensure that required types are present and in the correct order + // type: ["VerifiableCredential", "OpenAttestationCredential", ...] + const types = new Set(["VerifiableCredential", "OpenAttestationCredential"]); + + if (typeof document["type"] === "string") { + types.add(document["type"]); + } else if (isStringArray(document["type"])) { + document["type"].forEach((type) => types.add(type)); + } + + // Since JavaScript Sets preserve insertion order and duplicated inserts do not affect the order, we can do this: + document["type"] = Array.from(types); + + // 3. OA wrapping + const salts = salt(document); + const digest = digestCredential(document, salts, []); + + const batchBuffers = [digest].map(hashToBuffer); + + const merkleTree = new MerkleTree(batchBuffers); + const merkleRoot = merkleTree.getRoot().toString("hex"); + const merkleProof = merkleTree.getProof(hashToBuffer(digest)).map((buffer: Buffer) => buffer.toString("hex")); + + const verifiableCredential: WrappedDocument = { + ...document, + proof: { + type: "OpenAttestationMerkleProofSignature2018", + proofPurpose: "assertionMethod", + targetHash: digest, + proofs: merkleProof, + merkleRoot, + salts: encodeSalt(salts), + privacy: { + obfuscated: [], + }, + }, + }; + + const errors = validate(verifiableCredential, getSchema(SchemaId.oa_v4)); + if (errors.length > 0) { + throw new SchemaValidationError("Invalid document", errors, verifiableCredential); + } + await validateW3C(verifiableCredential); + return verifiableCredential; +}; + +export const wrapDocuments = async ( + documents: T[], + options: WrapDocumentOptionV4 +): Promise[]> => { + // create individual verifiable credential + const verifiableCredentials = await Promise.all(documents.map((document) => wrapDocument(document, options))); + + // get all the target hashes to compute the merkle tree and the merkle root + const merkleTree = new MerkleTree( + verifiableCredentials.map((verifiableCredential) => verifiableCredential.proof.targetHash).map(hashToBuffer) + ); + const merkleRoot = merkleTree.getRoot().toString("hex"); + + // for each document, update the merkle root and add the proofs needed + return verifiableCredentials.map((verifiableCredential) => { + const digest = verifiableCredential.proof.targetHash; + const merkleProof = merkleTree.getProof(hashToBuffer(digest)).map((buffer: Buffer) => buffer.toString("hex")); + + return { + ...verifiableCredential, + proof: { + ...verifiableCredential.proof, + proofs: merkleProof, + merkleRoot, + }, + }; + }); +}; diff --git a/src/4.0/__tests__/digest.test.ts b/src/4.0/tt/__tests__/digest.test.ts similarity index 98% rename from src/4.0/__tests__/digest.test.ts rename to src/4.0/tt/__tests__/digest.test.ts index f94c8e60..2eeec6d2 100644 --- a/src/4.0/__tests__/digest.test.ts +++ b/src/4.0/tt/__tests__/digest.test.ts @@ -1,9 +1,9 @@ import { cloneDeep } from "lodash"; import { digestCredential } from "../digest"; -import { WrappedDocument } from "../../4.0/types"; +import { WrappedDocument } from "../../../4.0/tt/types"; import { obfuscateVerifiableCredential } from "../obfuscate"; import { decodeSalt } from "../salt"; -import sample from "../../../test/fixtures/v4/did-idvc-wrapped.json"; +import sample from "../../../../test/fixtures/v4/tt/did-idvc-wrapped.json"; const verifiableCredential = sample as WrappedDocument; // Digest will change whenever sample document is regenerated diff --git a/src/4.0/__tests__/e2e.test.batch.wip b/src/4.0/tt/__tests__/e2e.test.batch.wip similarity index 100% rename from src/4.0/__tests__/e2e.test.batch.wip rename to src/4.0/tt/__tests__/e2e.test.batch.wip diff --git a/src/4.0/__tests__/e2e.test.ts b/src/4.0/tt/__tests__/e2e.test.ts similarity index 91% rename from src/4.0/__tests__/e2e.test.ts rename to src/4.0/tt/__tests__/e2e.test.ts index 36fd5679..654279e4 100644 --- a/src/4.0/__tests__/e2e.test.ts +++ b/src/4.0/tt/__tests__/e2e.test.ts @@ -1,23 +1,23 @@ import { - _unsafe_use_it_at_your_own_risk_v4_alpha_wrapDocument as wrapDocument, + _unsafe_use_it_at_your_own_risk_v4_alpha_tt_wrapDocument as wrapDocument, obfuscate, SchemaId, validateSchema, verifySignature, -} from "../.."; -import { validateSchema as validate } from "../../shared/validate"; -import { getSchema } from "../../shared/ajv"; -import { SignedWrappedDocument, WrappedDocument } from "../../4.0/types"; +} from "../../.."; +import { validateSchema as validate } from "../../../shared/validate"; +import { getSchema } from "../../../shared/ajv"; +import { SignedWrappedDocument, WrappedDocument } from "../../../4.0/tt/types"; import { IdentityProofType, TradeTrustDocument, RenderMethodType, CredentialStatusType, -} from "../../__generated__/schema.4.0"; +} from "../../../__generated__/tt-schema.4.0"; import { cloneDeep, omit } from "lodash"; -import sample from "../../../test/fixtures/v4/did-raw.json"; -import sampleWrapped from "../../../test/fixtures/v4/did-wrapped.json"; -import sampleWrappedSigned from "../../../test/fixtures/v4/did-wrapped-signed.json"; +import sample from "../../../../test/fixtures/v4/tt/did-raw.json"; +import sampleWrapped from "../../../../test/fixtures/v4/tt/did-wrapped.json"; +import sampleWrappedSigned from "../../../../test/fixtures/v4/tt/did-wrapped-signed.json"; const documentDid = sample as TradeTrustDocument; @@ -144,7 +144,7 @@ describe("4.0 E2E Test Scenarios", () => { describe("validate", () => { test("should return true when document is valid and version is 4.0", () => { const credential = sample; - expect(validate(credential, getSchema(SchemaId.v4)).length).toStrictEqual(0); + expect(validate(credential, getSchema(SchemaId.tt_v4)).length).toStrictEqual(0); }); test("should return true when document is valid and version is 4.0 and identityProof is DNS-DID", () => { const credential: WrappedDocument = sampleWrapped as WrappedDocument; diff --git a/src/4.0/__tests__/obfuscate.test.ts b/src/4.0/tt/__tests__/obfuscate.test.ts similarity index 96% rename from src/4.0/__tests__/obfuscate.test.ts rename to src/4.0/tt/__tests__/obfuscate.test.ts index 99c57d3c..90ab9401 100644 --- a/src/4.0/__tests__/obfuscate.test.ts +++ b/src/4.0/tt/__tests__/obfuscate.test.ts @@ -1,18 +1,18 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ import { get } from "lodash"; import { - _unsafe_use_it_at_your_own_risk_v4_alpha_wrapDocument as wrapDocument, + _unsafe_use_it_at_your_own_risk_v4_alpha_tt_wrapDocument as wrapDocument, verifySignature, obfuscate, -} from "../.."; +} from "../../.."; import { decodeSalt } from "../salt"; -import { toBuffer, isObfuscated, getObfuscatedData } from "../../shared/utils"; -import { Salt, WrappedDocument, TradeTrustDocument, CredentialStatusType, IdentityProofType } from "../../4.0/types"; +import { toBuffer, isObfuscated, getObfuscatedData } from "../../../shared/utils"; +import { Salt, WrappedDocument, TradeTrustDocument, CredentialStatusType, IdentityProofType } from "../../../4.0/tt/types"; -import ObfuscatedWrapped from "../../../test/fixtures/v4/did-wrapped-obfuscated.json"; -import NotObfuscatedWrapped from "../../../test/fixtures/v4/did-wrapped.json"; +import ObfuscatedWrapped from "../../../../test/fixtures/v4/tt/did-wrapped-obfuscated.json"; +import NotObfuscatedWrapped from "../../../../test/fixtures/v4/tt/did-wrapped.json"; -jest.mock("../../4.0/validate"); // Skipping schema verification while wrapping +jest.mock("../../../4.0/tt/validate"); // Skipping schema verification while wrapping const data: TradeTrustDocument = { "@context": [ diff --git a/src/4.0/__tests__/salt.test.ts b/src/4.0/tt/__tests__/salt.test.ts similarity index 99% rename from src/4.0/__tests__/salt.test.ts rename to src/4.0/tt/__tests__/salt.test.ts index 6fe21aee..26b3aa05 100644 --- a/src/4.0/__tests__/salt.test.ts +++ b/src/4.0/tt/__tests__/salt.test.ts @@ -4,7 +4,7 @@ import { TradeTrustDocument, RenderMethodType, CredentialStatusType, -} from "../../__generated__/schema.4.0"; +} from "../../../__generated__/tt-schema.4.0"; import { salt, decodeSalt } from "../salt"; import { Base64 } from "js-base64"; diff --git a/src/4.0/__tests__/sign.test.ts b/src/4.0/tt/__tests__/sign.test.ts similarity index 92% rename from src/4.0/__tests__/sign.test.ts rename to src/4.0/tt/__tests__/sign.test.ts index 1babdf4c..f12597ff 100644 --- a/src/4.0/__tests__/sign.test.ts +++ b/src/4.0/tt/__tests__/sign.test.ts @@ -1,6 +1,6 @@ -import { signDocument, v4 } from "../../index"; -import { SUPPORTED_SIGNING_ALGORITHM } from "../../shared/@types/sign"; -import sample from "../../../test/fixtures/v4/did-wrapped2.json"; +import { signDocument, TTv4 as v4 } from "../../../index"; +import { SUPPORTED_SIGNING_ALGORITHM } from "../../../shared/@types/sign"; +import sample from "../../../../test/fixtures/v4/tt/did-wrapped2.json"; import { Wallet } from "ethers"; const wrappedDocumentV4 = sample as v4.WrappedDocument; diff --git a/src/4.0/__tests__/verify.test.batch.wip b/src/4.0/tt/__tests__/verify.test.batch.wip similarity index 100% rename from src/4.0/__tests__/verify.test.batch.wip rename to src/4.0/tt/__tests__/verify.test.batch.wip diff --git a/src/4.0/__tests__/verify.test.ts b/src/4.0/tt/__tests__/verify.test.ts similarity index 95% rename from src/4.0/__tests__/verify.test.ts rename to src/4.0/tt/__tests__/verify.test.ts index 9f4c711a..9cadc662 100644 --- a/src/4.0/__tests__/verify.test.ts +++ b/src/4.0/tt/__tests__/verify.test.ts @@ -1,6 +1,6 @@ import { verify } from "../verify"; -import sample from "../../../test/fixtures/v4/did-wrapped.json"; -import { WrappedDocument } from "../../4.0/types"; +import sample from "../../../../test/fixtures/v4/tt/did-wrapped.json"; +import { WrappedDocument } from "../../../4.0/tt/types"; const sampleVerifiableCredential = sample as WrappedDocument; diff --git a/src/4.0/digest.ts b/src/4.0/tt/digest.ts similarity index 91% rename from src/4.0/digest.ts rename to src/4.0/tt/digest.ts index 1f944056..8ef315fa 100644 --- a/src/4.0/digest.ts +++ b/src/4.0/tt/digest.ts @@ -1,7 +1,7 @@ import { get, sortBy } from "lodash"; import { keccak256 } from "js-sha3"; import { Salt } from "./types"; -import { TradeTrustDocument } from "../__generated__/schema.4.0"; +import { TradeTrustDocument } from "../../__generated__/tt-schema.4.0"; export const digestCredential = ( document: Omit, diff --git a/src/4.0/obfuscate.ts b/src/4.0/tt/obfuscate.ts similarity index 94% rename from src/4.0/obfuscate.ts rename to src/4.0/tt/obfuscate.ts index e56bc27a..e2cd990b 100644 --- a/src/4.0/obfuscate.ts +++ b/src/4.0/tt/obfuscate.ts @@ -1,5 +1,5 @@ -import { TradeTrustDocument } from "../__generated__/schema.4.0"; -import { toBuffer } from "../shared/utils"; +import { TradeTrustDocument } from "../../__generated__/tt-schema.4.0"; +import { toBuffer } from "../../shared/utils"; import { WrappedDocument } from "./types"; import { cloneDeep, get, unset, pick } from "lodash"; import { decodeSalt, encodeSalt } from "./salt"; diff --git a/src/4.0/tt/salt.ts b/src/4.0/tt/salt.ts new file mode 100644 index 00000000..ab4a5a33 --- /dev/null +++ b/src/4.0/tt/salt.ts @@ -0,0 +1,39 @@ +import { Salt } from "./types"; +import { randomBytes } from "crypto"; +import { Base64 } from "js-base64"; +import { traverseAndFlatten } from "./traverseAndFlatten"; + +const ENTROPY_IN_BYTES = 32; + +const illegalCharactersCheck = (data: Record) => { + Object.entries(data).forEach(([key, value]) => { + if (key.includes(".")) { + throw new Error("Key names must not have . in them"); + } + if (key.includes("[") || key.includes("]")) { + throw new Error("Key names must not have '[' or ']' in them"); + } + if (value && typeof value === "object") { + return illegalCharactersCheck(value); // Recursively search if property contains sub-properties + } + }); +}; + +// Using 32 bytes of entropy as compared to 16 bytes in uuid +// Using hex encoding as compared to base64 for constant string length +export const secureRandomString = () => randomBytes(ENTROPY_IN_BYTES).toString("hex"); + +export const salt = (data: any): Salt[] => { + // Check for illegal characters e.g. '.', '[' or ']' + illegalCharactersCheck(data); + return traverseAndFlatten(data, { iteratee: ({ path }) => ({ value: secureRandomString(), path }) }); +}; + +export const encodeSalt = (salts: Salt[]): string => Base64.encode(JSON.stringify(salts)); +export const decodeSalt = (salts: string): Salt[] => { + const decoded: Salt[] = JSON.parse(Base64.decode(salts)); + decoded.forEach((salt) => { + if (salt.value.length !== ENTROPY_IN_BYTES * 2) throw new Error(`Salt must be ${ENTROPY_IN_BYTES} bytes`); + }); + return decoded; +}; diff --git a/src/4.0/schema/schema.json b/src/4.0/tt/schema/schema.json similarity index 100% rename from src/4.0/schema/schema.json rename to src/4.0/tt/schema/schema.json diff --git a/src/4.0/schema/schema.test.ts b/src/4.0/tt/schema/schema.test.ts similarity index 92% rename from src/4.0/schema/schema.test.ts rename to src/4.0/tt/schema/schema.test.ts index 50a7b828..245cf7d3 100644 --- a/src/4.0/schema/schema.test.ts +++ b/src/4.0/tt/schema/schema.test.ts @@ -1,12 +1,10 @@ /* eslint-disable jest/no-try-expect,jest/no-conditional-expect */ import { cloneDeep } from "lodash"; -import { - _unsafe_use_it_at_your_own_risk_v4_alpha_wrapDocument as wrapDocumentV4, -} from "../../index"; -import sample from "../../../test/fixtures/v4/did-raw.json"; -import sampleWithIDVC from "../../../test/fixtures/v4/did-idvc-raw.json"; -import { ContextUrl } from "../../shared/@types/document"; -import { TradeTrustDocument } from "../../__generated__/schema.4.0"; +import { _unsafe_use_it_at_your_own_risk_v4_alpha_tt_wrapDocument as wrapDocumentV4 } from "../../../index"; +import sample from "../../../../test/fixtures/v4/tt/did-raw.json"; +import sampleWithIDVC from "../../../../test/fixtures/v4/tt/did-idvc-raw.json"; +import { ContextUrl } from "../../../shared/@types/document"; +import { TradeTrustDocument } from "../../../__generated__/tt-schema.4.0"; const sampleVc = sample as TradeTrustDocument; @@ -34,7 +32,7 @@ describe("schema/4.0, plain vc", () => { const wrappedDocument = await wrapDocumentV4(document as any); expect(wrappedDocument["@context"]).toStrictEqual([ "https://www.w3.org/2018/credentials/v1", - ContextUrl.v4_alpha, + ContextUrl.tt_v4_alpha, "https://w3id.org/traceability/v1", ]); }); @@ -44,7 +42,7 @@ describe("schema/4.0, plain vc", () => { const wrappedDocument = await wrapDocumentV4(document); expect(wrappedDocument["@context"]).toStrictEqual([ "https://www.w3.org/2018/credentials/v1", - ContextUrl.v4_alpha, + ContextUrl.tt_v4_alpha, "https://w3id.org/traceability/v1", ]); }); @@ -57,7 +55,7 @@ describe("schema/4.0, plain vc", () => { const wrappedDocument = await wrapDocumentV4(document); expect(wrappedDocument["@context"]).toStrictEqual([ "https://www.w3.org/2018/credentials/v1", - ContextUrl.v4_alpha, + ContextUrl.tt_v4_alpha, "https://w3id.org/traceability/v1", ]); }); @@ -102,7 +100,7 @@ describe("schema/4.0, vc with idvc", () => { const wrappedDocument = await wrapDocumentV4(document as any); expect(wrappedDocument["@context"]).toStrictEqual([ "https://www.w3.org/2018/credentials/v1", - ContextUrl.v4_alpha, + ContextUrl.tt_v4_alpha, "https://w3id.org/traceability/v1", ]); }); @@ -112,7 +110,7 @@ describe("schema/4.0, vc with idvc", () => { const wrappedDocument = await wrapDocumentV4(document); expect(wrappedDocument["@context"]).toStrictEqual([ "https://www.w3.org/2018/credentials/v1", - ContextUrl.v4_alpha, + ContextUrl.tt_v4_alpha, "https://w3id.org/traceability/v1", ]); }); @@ -125,7 +123,7 @@ describe("schema/4.0, vc with idvc", () => { const wrappedDocument = await wrapDocumentV4(document); expect(wrappedDocument["@context"]).toStrictEqual([ "https://www.w3.org/2018/credentials/v1", - ContextUrl.v4_alpha, + ContextUrl.tt_v4_alpha, "https://w3id.org/traceability/v1", ]); }); diff --git a/src/4.0/sign.ts b/src/4.0/tt/sign.ts similarity index 72% rename from src/4.0/sign.ts rename to src/4.0/tt/sign.ts index cd6e4f05..9427e0fc 100644 --- a/src/4.0/sign.ts +++ b/src/4.0/tt/sign.ts @@ -1,7 +1,7 @@ import { TradeTrustDocument, WrappedDocument, SignedWrappedDocument, SignedWrappedProof } from "./types"; -import { sign } from "../shared/signer"; -import { SigningKey, SUPPORTED_SIGNING_ALGORITHM } from "../shared/@types/sign"; -import { isSignedWrappedV4Document } from "../shared/utils"; +import { sign } from "../../shared/signer"; +import { SigningKey, SUPPORTED_SIGNING_ALGORITHM } from "../../shared/@types/sign"; +import { isSignedWrappedTTV4Document } from "../../shared/utils"; import { ethers } from "ethers"; export const signDocument = async ( @@ -9,7 +9,7 @@ export const signDocument = async ( algorithm: SUPPORTED_SIGNING_ALGORITHM, keyOrSigner: SigningKey | ethers.Signer ): Promise> => { - if (isSignedWrappedV4Document(document)) throw new Error("Document has been signed"); + if (isSignedWrappedTTV4Document(document)) throw new Error("Document has been signed"); const merkleRoot = `0x${document.proof.merkleRoot}`; const signature = await sign(algorithm, merkleRoot, keyOrSigner); const proof: SignedWrappedProof = { diff --git a/src/4.0/tt/traverseAndFlatten.ts b/src/4.0/tt/traverseAndFlatten.ts new file mode 100644 index 00000000..d5a855ad --- /dev/null +++ b/src/4.0/tt/traverseAndFlatten.ts @@ -0,0 +1,27 @@ +import { Options } from "@govtechsg/jsonld"; + +interface Options { + /* function to run on every field */ + iteratee: (data: { value: any; path: string }) => T; + /* root path of the property being acceded */ + path?: string; +} + +export function traverseAndFlatten(data: any[], options: Options): T[]; +export function traverseAndFlatten(data: string | number | boolean | null, options: Options): T; +export function traverseAndFlatten(data: any, options: Options): T[]; // hmmmm this is probably wrong but it works for the moment :) +export function traverseAndFlatten(data: any, { iteratee, path = "" }: Options): any { + if (Array.isArray(data)) { + return data.flatMap((v, index) => traverseAndFlatten(v, { iteratee, path: `${path}[${index}]` })); + } + // Since null datas are allowed but typeof null === "object", the "&& data" is used to skip this + if (typeof data === "object" && data) { + return Object.keys(data).flatMap((key) => + traverseAndFlatten(data[key], { iteratee, path: path ? `${path}.${key}` : key }) + ); + } + if (typeof data === "string" || typeof data === "number" || typeof data === "boolean" || data === null) { + return iteratee({ value: data, path }); + } + throw new Error(`Unexpected data '${data}' in '${path}'`); +} diff --git a/src/4.0/types.ts b/src/4.0/tt/types.ts similarity index 91% rename from src/4.0/types.ts rename to src/4.0/tt/types.ts index 5b3e8560..38f36c2a 100644 --- a/src/4.0/types.ts +++ b/src/4.0/tt/types.ts @@ -1,6 +1,6 @@ // types generated by quicktype during postinstall phase -import { TradeTrustDocument as TradeTrustDocumentV4, ProofPurpose } from "../__generated__/schema.4.0"; -import { TradeTrustHexString, TradeTrustSignatureAlgorithm as SignatureAlgorithm } from "../shared/@types/document"; +import { TradeTrustDocument as TradeTrustDocumentV4, ProofPurpose } from "../../__generated__/tt-schema.4.0"; +import { TradeTrustHexString, TradeTrustSignatureAlgorithm as SignatureAlgorithm } from "../../shared/@types/document"; import { Array, Literal, Record, Static, String, Union } from "runtypes"; export interface Salt { @@ -52,4 +52,4 @@ export type SignedWrappedDocument { if (typeof objectOrString === "string") { @@ -42,7 +42,8 @@ const isValidRFC3986 = (str: any) => { }; let w3cDataModelUrl = "https://www.w3.org/2018/credentials/v1"; -const preloadedContextList = [w3cDataModelUrl, ContextUrl.v4_alpha]; +let traceabilityUrl = "https://w3id.org/traceability/v1"; +const preloadedContextList = [w3cDataModelUrl, ContextUrl.tt_v4_alpha]; const contexts: Map> = new Map(); const nodeDocumentLoader = documentLoaders.xhr ? documentLoaders.xhr() : documentLoaders.node(); let preload = true; diff --git a/src/4.0/tt/verify.ts b/src/4.0/tt/verify.ts new file mode 100644 index 00000000..e0d705e7 --- /dev/null +++ b/src/4.0/tt/verify.ts @@ -0,0 +1,27 @@ +import { WrappedDocument } from "./types"; +import { digestCredential } from "./digest"; +import { checkProof } from "../../shared/merkle"; +import { decodeSalt, salt } from "./salt"; + +export const verify = (document: T): document is WrappedDocument => { + if (!document.proof) { + return false; + } + + // Remove proof from document + // eslint-disable-next-line no-unused-vars,@typescript-eslint/no-unused-vars + const { proof, ...documentWithoutProof } = document; + const decodedSalts = decodeSalt(document.proof.salts); + + // Checks to ensure there are no added/removed values, so visibleSalts.length must match decodedSalts.length + const visibleSalts = salt(documentWithoutProof); + if (visibleSalts.length !== decodedSalts.length) return false; + + // Checks target hash + const digest = digestCredential(documentWithoutProof, decodedSalts, document.proof.privacy.obfuscated); + const targetHash = document.proof.targetHash; + if (digest !== targetHash) return false; + + // Calculates merkle root from target hash and proof, then compare to merkle root in document + return checkProof(document.proof.proofs, document.proof.merkleRoot, document.proof.targetHash); +}; diff --git a/src/4.0/wrap.ts b/src/4.0/tt/wrap.ts similarity index 88% rename from src/4.0/wrap.ts rename to src/4.0/tt/wrap.ts index 8e18d697..68b4544c 100644 --- a/src/4.0/wrap.ts +++ b/src/4.0/tt/wrap.ts @@ -1,14 +1,14 @@ -import { hashToBuffer, isStringArray, SchemaValidationError } from "../shared/utils"; -import { MerkleTree } from "../shared/merkle"; -import { ContextUrl, SchemaId } from "../shared/@types/document"; +import { hashToBuffer, isStringArray, SchemaValidationError } from "../../shared/utils"; +import { MerkleTree } from "../../shared/merkle"; +import { ContextUrl, SchemaId } from "../../shared/@types/document"; import { WrappedDocument } from "./types"; -import { digestCredential } from "../4.0/digest"; -import { validateSchema as validate } from "../shared/validate"; -import { WrapDocumentOptionV4 } from "../shared/@types/wrap"; -import { TradeTrustDocument } from "../__generated__/schema.4.0"; +import { digestCredential } from "../../4.0/tt/digest"; +import { validateSchema as validate } from "../../shared/validate"; +import { WrapDocumentOptionV4 } from "../../shared/@types/wrap"; +import { TradeTrustDocument } from "../../__generated__/tt-schema.4.0"; import { encodeSalt, salt } from "./salt"; import { validateW3C } from "./validate"; -import { getSchema } from "../shared/ajv"; +import { getSchema } from "../../shared/ajv"; export const wrapDocument = async ( credential: T, @@ -18,7 +18,7 @@ export const wrapDocument = async ( // 1. Ensure that required @contexts are present and in the correct order // @context: [Base, OA, ...] - const contexts = new Set(["https://www.w3.org/2018/credentials/v1", ContextUrl.v4_alpha]); + const contexts = new Set(["https://www.w3.org/2018/credentials/v1", ContextUrl.tt_v4_alpha]); if (typeof document["@context"] === "string") { contexts.add(document["@context"]); @@ -67,7 +67,7 @@ export const wrapDocument = async ( }, }; - const errors = validate(verifiableCredential, getSchema(SchemaId.v4)); + const errors = validate(verifiableCredential, getSchema(SchemaId.tt_v4)); if (errors.length > 0) { throw new SchemaValidationError("Invalid document", errors, verifiableCredential); } diff --git a/src/index.ts b/src/index.ts index 9da16ec9..fdef6646 100644 --- a/src/index.ts +++ b/src/index.ts @@ -25,14 +25,23 @@ import { digestCredential as digestCredentialV3 } from "./3.0/digest"; import { obfuscateVerifiableCredential as obfuscateVerifiableCredentialV3 } from "./3.0/obfuscate"; import { OpenAttestationDocument as OpenAttestationDocumentV3 } from "./__generated__/schema.3.0"; -import * as v4 from "./4.0/types"; -import { WrappedDocument as WrappedDocumentV4 } from "./4.0/types"; -import { wrapDocument as wrapDocumentV4, wrapDocuments as wrapDocumentsV4 } from "./4.0/wrap"; -import { signDocument as signDocumentV4 } from "./4.0/sign"; -import { verify as verifyV4 } from "./4.0/verify"; -import { digestCredential as digestCredentialV4 } from "./4.0/digest"; -import { obfuscateVerifiableCredential as obfuscateVerifiableCredentialV4 } from "./4.0/obfuscate"; -import { TradeTrustDocument as TradeTrustDocumentV4 } from "./__generated__/schema.4.0"; +import * as OAv4 from "./4.0/oa/types"; +import { WrappedDocument as OAWrappedDocumentV4 } from "./4.0/oa/types"; +import { wrapDocument as OAwrapDocumentV4, wrapDocuments as OAwrapDocumentsV4 } from "./4.0/oa/wrap"; +import { signDocument as OAsignDocumentV4 } from "./4.0/oa/sign"; +import { verify as OAverifyV4 } from "./4.0/oa/verify"; +import { digestCredential as OAdigestCredentialV4 } from "./4.0/oa/digest"; +import { obfuscateVerifiableCredential as OAobfuscateVerifiableCredentialV4 } from "./4.0/oa/obfuscate"; +import { OpenAttestationDocument as OpenAttestationDocumentV4 } from "./__generated__/oa-schema.4.0"; + +import * as TTv4 from "./4.0/tt/types"; +import { WrappedDocument as TTWrappedDocumentV4 } from "./4.0/tt/types"; +import { wrapDocument as TTwrapDocumentV4, wrapDocuments as TTwrapDocumentsV4 } from "./4.0/tt/wrap"; +import { signDocument as TTsignDocumentV4 } from "./4.0/tt/sign"; +import { verify as TTverifyV4 } from "./4.0/tt/verify"; +import { digestCredential as TTdigestCredentialV4 } from "./4.0/tt/digest"; +import { obfuscateVerifiableCredential as TTobfuscateVerifiableCredentialV4 } from "./4.0/tt/obfuscate"; +import { TradeTrustDocument as TradeTrustDocumentV4 } from "./__generated__/tt-schema.4.0"; export function wrapDocument( data: T, @@ -62,18 +71,32 @@ export function __unsafe__use__it__at__your__own__risks__wrapDocuments( +export function _unsafe_use_it_at_your_own_risk_v4_alpha_oa_wrapDocument( data: T, options?: WrapDocumentOptionV4 -): Promise> { - return wrapDocumentV4(data, options ?? { version: SchemaId.v4 }); +): Promise> { + return OAwrapDocumentV4(data, options ?? { version: SchemaId.oa_v4 }); } -export function _unsafe_use_it_at_your_own_risk_v4_alpha_wrapDocuments( +export function _unsafe_use_it_at_your_own_risk_v4_alpha_tt_wrapDocument( + data: T, + options?: WrapDocumentOptionV4 +): Promise> { + return TTwrapDocumentV4(data, options ?? { version: SchemaId.tt_v4 }); +} + +export function _unsafe_use_it_at_your_own_risk_v4_alpha_oa_wrapDocuments( + dataArray: T[], + options?: WrapDocumentOptionV4 +): Promise[]> { + return OAwrapDocumentsV4(dataArray, options ?? { version: SchemaId.oa_v4 }); +} + +export function _unsafe_use_it_at_your_own_risk_v4_alpha_tt_wrapDocuments( dataArray: T[], options?: WrapDocumentOptionV4 -): Promise[]> { - return wrapDocumentsV4(dataArray, options ?? { version: SchemaId.v4 }); +): Promise[]> { + return TTwrapDocumentsV4(dataArray, options ?? { version: SchemaId.tt_v4 }); } export const validateSchema = (document: WrappedDocument): boolean => { @@ -81,8 +104,11 @@ export const validateSchema = (document: WrappedDocument): boolean => { return validate(document, getSchema(SchemaId.v2)).length === 0; else if (utils.isWrappedV3Document(document) || document?.version === SchemaId.v3) return validate(document, getSchema(SchemaId.v3)).length === 0; - else if (utils.isWrappedV4Document(document)) { - return validate(document, getSchema(SchemaId.v4)).length === 0; + else if (utils.isWrappedOAV4Document(document)) { + return validate(document, getSchema(SchemaId.oa_v4)).length === 0; + } + else if (utils.isWrappedTTV4Document(document)) { + return validate(document, getSchema(SchemaId.tt_v4)).length === 0; } return validate(document, getSchema(`${document?.version || SchemaId.v2}`)).length === 0; @@ -91,20 +117,22 @@ export const validateSchema = (document: WrappedDocument): boolean => { export function verifySignature>(document: T) { if (utils.isWrappedV2Document(document)) return verify(document); else if (utils.isWrappedV3Document(document)) return verifyV3(document); - else if (utils.isWrappedV4Document(document)) return verifyV4(document); + else if (utils.isWrappedOAV4Document(document)) return OAverifyV4(document); + else if (utils.isWrappedTTV4Document(document)) return TTverifyV4(document); throw new Error("Unsupported document type: Only OpenAttestation v2, v3 or v4 documents can be signature verified"); } export function digest(document: OpenAttestationDocumentV3, salts: v3.Salt[], obfuscatedData: string[]): string; -export function digest(document: TradeTrustDocumentV4, salts: v4.Salt[], obfuscatedData: string[]): string; +export function digest(document: TradeTrustDocumentV4, salts: TTv4.Salt[], obfuscatedData: string[]): string; export function digest( document: OpenAttestationDocumentV3 | TradeTrustDocumentV4, - salts: v3.Salt[] | v4.Salt[], + salts: v3.Salt[] | TTv4.Salt[], obfuscatedData: string[] ): string { if (utils.isRawV3Document(document)) return digestCredentialV3(document, salts, obfuscatedData); - else if (utils.isRawV4Document(document)) return digestCredentialV4(document, salts, obfuscatedData); + else if (utils.isRawTTV4Document(document)) return TTdigestCredentialV4(document, salts, obfuscatedData); + else if (utils.isRawOAV4Document(document)) return OAdigestCredentialV4(document, salts, obfuscatedData); throw new Error( "Unsupported credential type: This function only supports digest generation for OpenAttestation v3 or v4 credentials" @@ -119,6 +147,10 @@ export function obfuscate( document: WrappedDocument, fields: string[] | string ): WrappedDocument; +export function obfuscate( + document: WrappedDocument, + fields: string[] | string +): WrappedDocument; export function obfuscate( document: WrappedDocument, fields: string[] | string @@ -126,7 +158,8 @@ export function obfuscate( export function obfuscate(document: WrappedDocument, fields: string[] | string) { if (utils.isWrappedV2Document(document)) return obfuscateDocumentV2(document, fields); else if (utils.isWrappedV3Document(document)) return obfuscateVerifiableCredentialV3(document, fields); - else if (utils.isWrappedV4Document(document)) return obfuscateVerifiableCredentialV4(document, fields); + else if (utils.isWrappedOAV4Document(document)) return OAobfuscateVerifiableCredentialV4(document, fields); + else if (utils.isWrappedTTV4Document(document)) return TTobfuscateVerifiableCredentialV4(document, fields); throw new Error("Unsupported document type: Only OpenAttestation v2, v3 or v4 documents can be obfuscated"); } @@ -145,11 +178,16 @@ export async function signDocument( algorithm: SUPPORTED_SIGNING_ALGORITHM, keyOrSigner: SigningKey | ethers.Signer ): Promise>; -export async function signDocument( - document: v4.SignedWrappedDocument | v4.WrappedDocument, +export async function signDocument( + document: OAv4.SignedWrappedDocument | OAv4.WrappedDocument, + algorithm: SUPPORTED_SIGNING_ALGORITHM, + keyOrSigner: SigningKey | ethers.Signer +): Promise>; +export async function signDocument( + document: TTv4.SignedWrappedDocument | TTv4.WrappedDocument, algorithm: SUPPORTED_SIGNING_ALGORITHM, keyOrSigner: SigningKey | ethers.Signer -): Promise>; +): Promise>; export async function signDocument( document: any, algorithm: SUPPORTED_SIGNING_ALGORITHM, @@ -162,7 +200,8 @@ export async function signDocument( if (utils.isWrappedV2Document(document)) return signDocumentV2(document, algorithm, keyOrSigner); else if (utils.isWrappedV3Document(document)) return signDocumentV3(document, algorithm, keyOrSigner); - else if (utils.isWrappedV4Document(document)) return signDocumentV4(document, algorithm, keyOrSigner); + else if (utils.isWrappedOAV4Document(document)) return OAsignDocumentV4(document, algorithm, keyOrSigner); + else if (utils.isWrappedTTV4Document(document)) return TTsignDocumentV4(document, algorithm, keyOrSigner); // Unreachable code atm until utils.isWrappedV2Document & utils.isWrappedV3Document becomes more strict throw new Error("Unsupported document type: Only OpenAttestation v2, v3 or v4 documents can be signed"); @@ -179,4 +218,5 @@ export * from "./shared/signer"; export { getData } from "./shared/utils"; // keep it to avoid breaking change, moved from privacy to utils export { v2 }; export { v3 }; -export { v4 }; +export { TTv4 }; +export { OAv4 }; diff --git a/src/shared/@types/document.ts b/src/shared/@types/document.ts index 1f749910..56c163ab 100644 --- a/src/shared/@types/document.ts +++ b/src/shared/@types/document.ts @@ -1,7 +1,8 @@ // types generated by quicktype during postinstall phase import { OpenAttestationDocument as OpenAttestationDocumentV2 } from "../../__generated__/schema.2.0"; import { OpenAttestationDocument as OpenAttestationDocumentV3 } from "../../__generated__/schema.3.0"; -import { TradeTrustDocument as TradeTrustDocumentV4 } from "../../__generated__/schema.4.0"; +import { OpenAttestationDocument as OpenAttestationDocumentV4 } from "../../__generated__/oa-schema.4.0"; +import { TradeTrustDocument as TradeTrustDocumentV4 } from "../../__generated__/tt-schema.4.0"; import { SignedWrappedDocument as SignedWrappedDocumentV2, WrappedDocument as WrappedDocumentV2, @@ -11,44 +12,54 @@ import { WrappedDocument as WrappedDocumentV3, } from "../../3.0/types"; import { - SignedWrappedDocument as SignedWrappedDocumentV4, - WrappedDocument as WrappedDocumentV4, -} from "../../4.0/types"; + SignedWrappedDocument as OASignedWrappedDocumentV4, + WrappedDocument as OAWrappedDocumentV4, +} from "../../4.0/oa/types"; +import { + SignedWrappedDocument as TTSignedWrappedDocumentV4, + WrappedDocument as TTWrappedDocumentV4, +} from "../../4.0/tt/types"; import { Literal, Static, String } from "runtypes"; import { ethers } from "ethers"; -export type OpenAttestationDocument = OpenAttestationDocumentV2 | OpenAttestationDocumentV3 | TradeTrustDocumentV4; +export type OpenAttestationDocument = + | OpenAttestationDocumentV2 + | OpenAttestationDocumentV3 + | OpenAttestationDocumentV4 + | TradeTrustDocumentV4; export type WrappedDocument = T extends OpenAttestationDocumentV2 ? WrappedDocumentV2 : T extends OpenAttestationDocumentV3 ? WrappedDocumentV3 + : T extends OpenAttestationDocumentV4 + ? OAWrappedDocumentV4 : T extends TradeTrustDocumentV4 - ? WrappedDocumentV4 + ? TTWrappedDocumentV4 : unknown; export type SignedWrappedDocument = T extends OpenAttestationDocumentV2 ? SignedWrappedDocumentV2 : T extends OpenAttestationDocumentV3 ? SignedWrappedDocumentV3 + : T extends OpenAttestationDocumentV4 + ? OASignedWrappedDocumentV4 : T extends TradeTrustDocumentV4 - ? SignedWrappedDocumentV4 + ? TTSignedWrappedDocumentV4 : unknown; export enum SchemaId { v2 = "https://schema.openattestation.com/2.0/schema.json", v3 = "https://schema.openattestation.com/3.0/schema.json", - // v4 = "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-schema.json", - v4 = "http://localhost:8080/alpha-schema.json", + oa_v4 = "https://schemata.openattestation.com/com/openattestation/4.0/alpha-schema.json", + // TTv4 = "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-schema.json", + tt_v4 = "http://localhost:8080/alpha-schema.json", // Note: Schema property is no longer placed in the OA v4 // document - // Starting from v4 onwards, Tradetrust would fork their - // behavior from OA due to the introduction of IDVC verification - // for identityProof, hence the difference in schema itself. - // } export enum ContextUrl { - // v4_alpha = "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json", - v4_alpha = "http://localhost:8080/alpha-context.json", + oa_v4_alpha = "https://schemata.openattestation.com/com/openattestation/4.0/alpha-context.json", + // tt_v4_alpha = "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json", + tt_v4_alpha = "http://localhost:8080/alpha-context.json", } export const OpenAttestationHexString = String.withConstraint( diff --git a/src/shared/ajv.ts b/src/shared/ajv.ts index 94ebf88a..0fc743e8 100644 --- a/src/shared/ajv.ts +++ b/src/shared/ajv.ts @@ -2,7 +2,8 @@ import Ajv from "ajv"; import addFormats from "ajv-formats"; import openAttestationSchemav2 from "../2.0/schema/schema.json"; import openAttestationSchemav3 from "../3.0/schema/schema.json"; -import tradeTrustSchemav4 from "../4.0/schema/schema.json"; +import openAttestationSchemav4 from "../4.0/oa/schema/schema.json"; +import tradeTrustSchemav4 from "../4.0/tt/schema/schema.json"; import { CurrentOptions } from "ajv/dist/core"; const defaultTransform = (schema: Record) => schema; @@ -17,6 +18,7 @@ export const buildAjv = ( ajv.addKeyword("deprecationMessage"); ajv.compile(transform(openAttestationSchemav2)); ajv.compile(transform(openAttestationSchemav3)); + ajv.compile(transform(openAttestationSchemav4)); ajv.compile(transform(tradeTrustSchemav4)); return ajv; }; diff --git a/src/shared/utils/__tests__/guard.test.ts b/src/shared/utils/__tests__/guard.test.ts index eb1dc12d..b7232e66 100644 --- a/src/shared/utils/__tests__/guard.test.ts +++ b/src/shared/utils/__tests__/guard.test.ts @@ -4,9 +4,19 @@ import { isSignedWrappedV3Document, isWrappedV2Document, isWrappedV3Document, + isSignedWrappedTTV4Document, + isSignedWrappedOAV4Document, + isWrappedOAV4Document, + isWrappedTTV4Document, + isRawOAV4Document, + isRawTTV4Document, + isRawV2Document, + isRawV3Document, } from "../guard"; import { __unsafe__use__it__at__your__own__risks__wrapDocument, + _unsafe_use_it_at_your_own_risk_v4_alpha_oa_wrapDocument, + _unsafe_use_it_at_your_own_risk_v4_alpha_tt_wrapDocument, SchemaId, signDocument, SUPPORTED_SIGNING_ALGORITHM, @@ -16,6 +26,13 @@ import { import * as v3 from "../../../3.0/types"; import * as v2 from "../../../2.0/types"; +import sampleOARawV4 from "../../../../test/fixtures/v4/oa/did-raw.json"; +import sampleOAWrappedV4 from "../../../../test/fixtures/v4/oa/did-wrapped.json"; +import sampleOAWrappedSignedV4 from "../../../../test/fixtures/v4/oa/did-signed-wrapped.json"; +import sampleTTRawV4 from "../../../../test/fixtures/v4/tt/did-raw.json"; +import sampleTTWrappedV4 from "../../../../test/fixtures/v4/tt/did-wrapped.json"; +import sampleTTWrappedSignedV4 from "../../../../test/fixtures/v4/tt/did-wrapped-signed.json"; + describe("guard", () => { let wrappedV3Document: WrappedDocument; let signedV2Document: v2.SignedWrappedDocument; @@ -351,4 +368,43 @@ describe("guard", () => { expect(isSignedWrappedV3Document(omit(cloneDeep(signedV3Document), "proof.signature"))).toBe(false); }); }); + + describe("v4 variants", () => { + it("the guards should distinguish between v2,v3,and v4 variants for raw documents for oa v4 docs", () => { + expect(isRawV2Document(sampleOARawV4)).toBeFalsy(); + expect(isRawV3Document(sampleOARawV4)).toBeFalsy(); + expect(isRawTTV4Document(sampleOARawV4)).toBeFalsy(); + expect(isRawOAV4Document(sampleOARawV4)).toBeTruthy(); + }); + it("the guards should distinguish between v2,v3,and v4 variants for raw documents tt v4 docs", () => { + expect(isRawV2Document(sampleTTRawV4)).toBeFalsy(); + expect(isRawV3Document(sampleTTRawV4)).toBeFalsy(); + expect(isRawTTV4Document(sampleTTRawV4)).toBeTruthy(); + expect(isRawOAV4Document(sampleTTRawV4)).toBeFalsy(); + }); + it("the guards should distinguish between v2,v3,and v4 variants for raw documents oa wrapped v4 docs", () => { + expect(isWrappedV2Document(sampleOAWrappedV4)).toBeFalsy(); + expect(isWrappedV3Document(sampleOAWrappedV4)).toBeFalsy(); + expect(isWrappedOAV4Document(sampleOAWrappedV4)).toBeTruthy(); + expect(isWrappedTTV4Document(sampleOAWrappedV4)).toBeFalsy(); + }); + it("the guards should distinguish between v2,v3,and v4 variants for raw documents tt wrapped v4 docs", () => { + expect(isWrappedV2Document(sampleTTWrappedV4)).toBeFalsy(); + expect(isWrappedV3Document(sampleTTWrappedV4)).toBeFalsy(); + expect(isWrappedOAV4Document(sampleTTWrappedV4)).toBeFalsy(); + expect(isWrappedTTV4Document(sampleTTWrappedV4)).toBeTruthy(); + }); + it("the guards should distinguish between v2,v3,and v4 variants for wrapped signed documents oa wrapped signed v4 docs", () => { + expect(isSignedWrappedV2Document(sampleOAWrappedSignedV4)).toBeFalsy(); + expect(isSignedWrappedV3Document(sampleOAWrappedSignedV4)).toBeFalsy(); + expect(isSignedWrappedOAV4Document(sampleOAWrappedSignedV4)).toBeTruthy(); + expect(isSignedWrappedTTV4Document(sampleOAWrappedSignedV4)).toBeFalsy(); + }); + it("the guards should distinguish between v2,v3,and v4 variants for wrapped signed documents tt wrapped signed v4 docs", () => { + expect(isSignedWrappedV2Document(sampleTTWrappedSignedV4)).toBeFalsy(); + expect(isSignedWrappedV3Document(sampleTTWrappedSignedV4)).toBeFalsy(); + expect(isSignedWrappedOAV4Document(sampleTTWrappedSignedV4)).toBeFalsy(); + expect(isSignedWrappedTTV4Document(sampleTTWrappedSignedV4)).toBeTruthy(); + }); + }); }); diff --git a/src/shared/utils/diagnose.ts b/src/shared/utils/diagnose.ts index 51af5ab5..a6b3b304 100644 --- a/src/shared/utils/diagnose.ts +++ b/src/shared/utils/diagnose.ts @@ -7,23 +7,28 @@ import { VerifiableCredentialSignedProof as SignedWrappedProofV3, } from "../../3.0/types"; import { - WrappedProof as WrappedProofV4, - WrappedProofStrict as WrappedProofStrictV4, - SignedWrappedProof as SignedWrappedProofV4, -} from "../../4.0/types"; + WrappedProof as OAWrappedProofV4, + WrappedProofStrict as OAWrappedProofStrictV4, + SignedWrappedProof as OASignedWrappedProofV4, +} from "../../4.0/oa/types"; +import { + WrappedProof as TTWrappedProofV4, + WrappedProofStrict as TTWrappedProofStrictV4, + SignedWrappedProof as TTSignedWrappedProofV4, +} from "../../4.0/tt/types"; import { ArrayProof, Signature, SignatureStrict } from "../../2.0/types"; import { clone, cloneDeepWith } from "lodash"; import { buildAjv, getSchema } from "../ajv"; import { Kind, Mode } from "./@types/diagnose"; import { isStringArray } from "./utils"; -type Version = "2.0" | "3.0" | "4.0"; +type Version = "2.0" | "3.0" | "oa_4.0" | "tt_4.0"; interface DiagnoseError { message: string; } -const handleError = (debug: boolean, ...messages: string[]) => { +export const handleError = (debug: boolean, ...messages: string[]) => { if (debug) { for (const message of messages) { logger.info(message); @@ -93,9 +98,10 @@ export const diagnose = ({ const versionToSchemaId: Record = { "2.0": SchemaId.v2, "3.0": SchemaId.v3, - "4.0": SchemaId.v4, + "oa_4.0": SchemaId.oa_v4, + "tt_4.0": SchemaId.tt_v4 }; - + const errors = validate( document, getSchema(versionToSchemaId[version], mode === "non-strict" ? ajv : undefined), @@ -116,8 +122,10 @@ export const diagnose = ({ } switch (version) { - case "4.0": - return diagnoseV4({ mode, debug, document, kind }); + case "tt_4.0": + return diagnoseTTV4({ mode, debug, document, kind }); + case "oa_4.0": + return diagnoseOAV4({ mode, debug, document, kind }); case "3.0": return diagnoseV3({ mode, debug, document, kind }); case "2.0": @@ -191,7 +199,7 @@ const diagnoseV3 = ({ kind, document, debug, mode }: { kind: Kind; document: any return []; }; -const diagnoseV4 = ({ +const diagnoseOAV4 = ({ kind, document, debug, @@ -218,7 +226,103 @@ const diagnoseV4 = ({ // 2. Ensure that required @contexts are present // @context: [Base, OA, ...] - const contexts = ["https://www.w3.org/2018/credentials/v1", ContextUrl.v4_alpha]; + const contexts = ["https://www.w3.org/2018/credentials/v1", ContextUrl.oa_v4_alpha]; + if (isStringArray(document["@context"])) { + for (let i = 0; i < contexts.length; i++) { + if (document["@context"][i] !== contexts[i]) { + return handleError( + debug, + `The document @context contains an unexpected value or in the wrong order. Expected ${contexts}, received ${document["@context"]}` + ); + } + } + } else { + return handleError( + debug, + `The document @context should be an array of string values. Expected ${contexts}, received ${document["@context"]}` + ); + } + + // 3. Ensure that required types are present + // type: ["VerifiableCredential", "OpenAttestationCredential", ...] + const types = ["VerifiableCredential", "OpenAttestationCredential"]; + if (isStringArray(document["type"])) { + for (let i = 0; i < types.length; i++) { + if (document["type"][i] !== types[i]) { + return handleError( + debug, + `The document type contains an unexpected value or in the wrong order. Expected ${types}, received ${document["type"]}` + ); + } + } + } else { + return handleError( + debug, + `The document type should be an array of string values. Expected ${types}, received ${document["type"]}` + ); + } + + // 4. Check proof object + // eslint-disable-next-line @typescript-eslint/no-unused-expressions + if (mode === "strict") { + OAWrappedProofStrictV4.check(document.proof); + } else { + OAWrappedProofV4.check(document.proof); + } + } catch (e) { + if (e instanceof Error) { + return handleError(debug, e.message); + } else { + console.error(e); + } + } + + /* Signed & wrapped document checks */ + if (kind === "signed") { + if (!document.proof) { + return handleError(debug, `The document does not have a proof`); + } + try { + OASignedWrappedProofV4.check(document.proof); + } catch (e) { + if (e instanceof Error) { + return handleError(debug, e.message); + } else { + console.error(e); + } + } + } + + return []; +}; +const diagnoseTTV4 = ({ + kind, + document, + debug, + mode, +}: { + kind: Exclude; + document: any; + debug: boolean; + mode: Mode; +}) => { + /* Wrapped document checks */ + try { + // 1. Since OA v4 has deprecated a few properties from v2/v3, check that they are not used + const deprecatedProperties = ["version", "openAttestationMetadata"]; + const documentProperties = Object.keys(document); + const deprecatedDocumentProperties = documentProperties.filter((p) => deprecatedProperties.includes(p)); + + if (deprecatedDocumentProperties.length > 0) { + return handleError( + debug, + `The document has outdated properties previously used in v2/v3. The following properties are no longer in use in a v4 document: ${deprecatedDocumentProperties}` + ); + } + + // 2. Ensure that required @contexts are present + // @context: [Base, TT, ...] + const contexts = ["https://www.w3.org/2018/credentials/v1", ContextUrl.tt_v4_alpha]; if (isStringArray(document["@context"])) { for (let i = 0; i < contexts.length; i++) { if (document["@context"][i] !== contexts[i]) { @@ -257,9 +361,9 @@ const diagnoseV4 = ({ // 4. Check proof object // eslint-disable-next-line @typescript-eslint/no-unused-expressions if (mode === "strict") { - WrappedProofStrictV4.check(document.proof); + TTWrappedProofStrictV4.check(document.proof); } else { - WrappedProofV4.check(document.proof); + TTWrappedProofV4.check(document.proof); } } catch (e) { if (e instanceof Error) { @@ -275,7 +379,7 @@ const diagnoseV4 = ({ return handleError(debug, `The document does not have a proof`); } try { - SignedWrappedProofV4.check(document.proof); + TTSignedWrappedProofV4.check(document.proof); } catch (e) { if (e instanceof Error) { return handleError(debug, e.message); diff --git a/src/shared/utils/guard.ts b/src/shared/utils/guard.ts index 109740bd..6b3646c0 100644 --- a/src/shared/utils/guard.ts +++ b/src/shared/utils/guard.ts @@ -7,11 +7,12 @@ import { OpenAttestationDocument as OpenAttestationDocumentV3, WrappedDocument as WrappedDocumentV3, } from "../../3.0/types"; +import { TradeTrustDocument as TradeTrustDocumentV4, WrappedDocument as TTWrappedDocumentV4 } from "../../4.0/tt/types"; import { - TradeTrustDocument as TradeTrustDocumentV4, - WrappedDocument as WrappedDocumentV4, -} from "../../4.0/types"; -import { diagnose } from "./diagnose"; + OpenAttestationDocument as OpenAttestationDocumentV4, + WrappedDocument as OAWrappedDocumentV4, +} from "../../4.0/oa/types"; +import { diagnose, handleError } from "./diagnose"; import { Mode } from "./@types/diagnose"; /** @@ -43,11 +44,55 @@ export const isRawV3Document = ( * @param document * @param mode strict or non-strict. Strict will perform additional check on the data. For instance strict validation will ensure that a target hash is a 32 bytes hex string while non strict validation will just check that target hash is a string. */ -export const isRawV4Document = ( +export const isRawOAV4Document = ( + document: any, + { mode }: { mode: Mode } = { mode: "non-strict" } +): document is OpenAttestationDocumentV4 => { + const debug = false; + if (!document.type) { + handleError(debug, "A raw verifiable credential needs to have a type"); + return false; + } + if (typeof document.type === "string") { + handleError( + debug, + "A raw open-attestation credential needs to have a VerifiableCredential and OpenAttestationCredential in an array" + ); + return false; + } + if (!document.type.includes("OpenAttestationCredential")) { + handleError(debug, "A raw open-attestation credential needs to have the OpenAttestationCredential type"); + return false; + } + return diagnose({ version: "oa_4.0", kind: "raw", document, debug, mode }).length === 0; +}; + +/** + * + * @param document + * @param mode strict or non-strict. Strict will perform additional check on the data. For instance strict validation will ensure that a target hash is a 32 bytes hex string while non strict validation will just check that target hash is a string. + */ +export const isRawTTV4Document = ( document: any, { mode }: { mode: Mode } = { mode: "non-strict" } ): document is TradeTrustDocumentV4 => { - return diagnose({ version: "4.0", kind: "raw", document, debug: false, mode }).length === 0; + const debug = false; + if (!document.type) { + handleError(debug, "A raw verifiable credential needs to have a type"); + return false; + } + if (typeof document.type === "string") { + handleError( + debug, + "A raw tradetrust credential needs to have a VerifiableCredential and TradeTrustCredential in an array" + ); + return false; + } + if (!document.type.includes("TradeTrustCredential")) { + handleError(debug, "A raw tradetrust credential needs to have the TradeTrustCredential type"); + return false; + } + return diagnose({ version: "tt_4.0", kind: "raw", document, debug, mode }).length === 0; }; /** @@ -79,11 +124,22 @@ export const isWrappedV3Document = ( * @param document * @param mode strict or non-strict. Strict will perform additional check on the data. For instance strict validation will ensure that a target hash is a 32 bytes hex string while non strict validation will just check that target hash is a string. */ -export const isWrappedV4Document = ( +export const isWrappedOAV4Document = ( + document: any, + { mode }: { mode: Mode } = { mode: "non-strict" } +): document is OAWrappedDocumentV4 => { + return diagnose({ version: "oa_4.0", kind: "wrapped", document, debug: false, mode }).length === 0; +}; +/** + * + * @param document + * @param mode strict or non-strict. Strict will perform additional check on the data. For instance strict validation will ensure that a target hash is a 32 bytes hex string while non strict validation will just check that target hash is a string. + */ +export const isWrappedTTV4Document = ( document: any, { mode }: { mode: Mode } = { mode: "non-strict" } -): document is WrappedDocumentV4 => { - return diagnose({ version: "4.0", kind: "wrapped", document, debug: false, mode }).length === 0; +): document is TTWrappedDocumentV4 => { + return diagnose({ version: "tt_4.0", kind: "wrapped", document, debug: false, mode }).length === 0; }; /** @@ -115,9 +171,21 @@ export const isSignedWrappedV3Document = ( * @param document * @param mode strict or non-strict. Strict will perform additional check on the data. For instance strict validation will ensure that a target hash is a 32 bytes hex string while non strict validation will just check that target hash is a string. */ -export const isSignedWrappedV4Document = ( +export const isSignedWrappedOAV4Document = ( + document: any, + { mode }: { mode: Mode } = { mode: "non-strict" } +): document is SignedWrappedDocument => { + return diagnose({ version: "oa_4.0", kind: "signed", document, debug: false, mode }).length === 0; +}; + +/** + * + * @param document + * @param mode strict or non-strict. Strict will perform additional check on the data. For instance strict validation will ensure that a target hash is a 32 bytes hex string while non strict validation will just check that target hash is a string. + */ +export const isSignedWrappedTTV4Document = ( document: any, { mode }: { mode: Mode } = { mode: "non-strict" } ): document is SignedWrappedDocument => { - return diagnose({ version: "4.0", kind: "signed", document, debug: false, mode }).length === 0; + return diagnose({ version: "tt_4.0", kind: "signed", document, debug: false, mode }).length === 0; }; diff --git a/src/shared/utils/utils.ts b/src/shared/utils/utils.ts index 2aa6ea7b..e777fed1 100644 --- a/src/shared/utils/utils.ts +++ b/src/shared/utils/utils.ts @@ -10,9 +10,12 @@ import * as v3 from "../../__generated__/schema.3.0"; import { WrappedDocument as WrappedDocumentV3 } from "../../3.0/types"; import { OpenAttestationDocument as OpenAttestationDocumentV3 } from "../../__generated__/schema.3.0"; -import * as v4 from "../../__generated__/schema.4.0"; -import { WrappedDocument as WrappedDocumentV4 } from "../../4.0/types"; -import { TradeTrustDocument as TradeTrustDocumentV4DocumentV4 } from "../../__generated__/schema.4.0"; +import * as TTv4 from "../../__generated__/tt-schema.4.0"; +import * as OAv4 from "../../__generated__/oa-schema.4.0"; +import { WrappedDocument as OAWrappedDocumentV4 } from "../../4.0/oa/types"; +import { WrappedDocument as TTWrappedDocumentV4 } from "../../4.0/tt/types"; +import { OpenAttestationDocument as OpenAttestationDocumentV4 } from "../../__generated__/oa-schema.4.0"; +import { TradeTrustDocument as TradeTrustDocumentV4 } from "../../__generated__/tt-schema.4.0"; import { OpenAttestationDocument, WrappedDocument } from "../@types/document"; import { @@ -20,8 +23,10 @@ import { isWrappedV2Document, isRawV3Document, isWrappedV3Document, - isRawV4Document, - isWrappedV4Document, + isRawOAV4Document, + isWrappedOAV4Document, + isRawTTV4Document, + isWrappedTTV4Document, } from "./guard"; export type Hash = string | Buffer; @@ -103,7 +108,8 @@ export function getIssuerAddress(document: any): any { export const getMerkleRoot = (document: any): string => { if (isWrappedV2Document(document)) return document.signature.merkleRoot; else if (isWrappedV3Document(document)) return document.proof.merkleRoot; - else if (isWrappedV4Document(document)) return document.proof.merkleRoot; + else if (isWrappedOAV4Document(document)) return document.proof.merkleRoot; + else if (isWrappedTTV4Document(document)) return document.proof.merkleRoot; throw new Error( "Unsupported document type: Only can retrieve merkle root from wrapped OpenAttestation v2, v3 & v4 documents." @@ -113,7 +119,8 @@ export const getMerkleRoot = (document: any): string => { export const getTargetHash = (document: any): string => { if (isWrappedV2Document(document)) return document.signature.targetHash; else if (isWrappedV3Document(document)) return document.proof.targetHash; - else if (isWrappedV4Document(document)) return document.proof.targetHash; + else if (isWrappedOAV4Document(document)) return document.proof.targetHash; + else if (isWrappedTTV4Document(document)) return document.proof.targetHash; throw new Error( "Unsupported document type: Only can retrieve target hash from wrapped OpenAttestation v2, v3 & v4 documents." @@ -131,7 +138,9 @@ export const getTemplateURL = (document: any): string | undefined => { else return document.$template?.url; } else if (isRawV3Document(document) || isWrappedV3Document(document)) { return document.openAttestationMetadata.template?.url; - } else if (isRawV4Document(document) || isWrappedV4Document(document)) { + } else if (isRawOAV4Document(document) || isWrappedOAV4Document(document)) { + return document.renderMethod?.url; + } else if (isRawTTV4Document(document) || isWrappedTTV4Document(document)) { return document.renderMethod?.url; } @@ -141,7 +150,7 @@ export const getTemplateURL = (document: any): string | undefined => { }; export const getDocumentData = (document: WrappedDocument): OpenAttestationDocument => { - if (isWrappedV3Document(document) || isWrappedV4Document(document)) { + if (isWrappedV3Document(document) || isWrappedOAV4Document(document) || isWrappedTTV4Document(document)) { const omit = (keys: any, obj: any): any => Object.fromEntries(Object.entries(obj).filter(([k]) => !keys.includes(k))); return omit(["proof"], document); @@ -184,15 +193,25 @@ export const isDocumentRevokable = (document: any): boolean => { !!document.openAttestationMetadata.proof.value; return isDocumentStoreRevokableV3 || isDidRevokableV3; - } else if (isWrappedV4Document(document)) { + } else if (isWrappedOAV4Document(document)) { const isDidRevokableV4 = - document.issuer.identityProof.identityProofType === v4.IdentityProofType.DNSDid - ? document.credentialStatus.credentialStatusType === v4.CredentialStatusType.OcspResponder || - document.credentialStatus.credentialStatusType === v4.CredentialStatusType.RevocationStore + document.issuer.identityProof.identityProofType === OAv4.IdentityProofType.DNSDid + ? document.credentialStatus.credentialStatusType === OAv4.CredentialStatusType.OcspResponder || + document.credentialStatus.credentialStatusType === OAv4.CredentialStatusType.RevocationStore : false; // TODO: OA v4 issuer schema not updated to support document store issuance yet // const isDocumentStoreRevokableV4 = ? + return isDidRevokableV4; + } else if (isWrappedTTV4Document(document)) { + const isDidRevokableV4 = + document.issuer.identityProof.identityProofType === TTv4.IdentityProofType.DNSDid + ? document.credentialStatus.credentialStatusType === TTv4.CredentialStatusType.OcspResponder || + document.credentialStatus.credentialStatusType === TTv4.CredentialStatusType.RevocationStore + : false; + // TODO: TT v4 issuer schema not updated to support document store issuance yet + // const isDocumentStoreRevokableV4 = ? + return isDidRevokableV4; } @@ -225,13 +244,16 @@ export const isObfuscated = ( document: | WrappedDocumentV2 | WrappedDocumentV3 - | WrappedDocumentV4 + | OAWrappedDocumentV4 + | TTWrappedDocumentV4 ): boolean => { if (isWrappedV2Document(document)) { return !!document.privacy?.obfuscatedData?.length; } else if (isWrappedV3Document(document)) { return !!document.proof.privacy.obfuscated.length; - } else if (isWrappedV4Document(document)) { + } else if (isWrappedOAV4Document(document)) { + return !!document.proof.privacy.obfuscated.length; + } else if (isWrappedTTV4Document(document)) { return !!document.proof.privacy.obfuscated.length; } @@ -244,13 +266,16 @@ export const getObfuscatedData = ( document: | WrappedDocumentV2 | WrappedDocumentV3 - | WrappedDocumentV4 + | OAWrappedDocumentV4 + | TTWrappedDocumentV4 ): string[] => { if (isWrappedV2Document(document)) { return document.privacy?.obfuscatedData || []; } else if (isWrappedV3Document(document)) { return document.proof.privacy.obfuscated || []; - } else if (isWrappedV4Document(document)) { + } else if (isWrappedOAV4Document(document)) { + return document.proof.privacy.obfuscated || []; + } else if (isWrappedTTV4Document(document)) { return document.proof.privacy.obfuscated || []; } diff --git a/src/shared/validate/validate.ts b/src/shared/validate/validate.ts index 3128bdd4..9dd238ab 100644 --- a/src/shared/validate/validate.ts +++ b/src/shared/validate/validate.ts @@ -15,7 +15,8 @@ export const validateSchema = (document: any, validator: ValidateFunction, kind? // FIXME: Unable to use isWrappedV4Document() type guard here because it also calls validateSchema (endless recursive call) // Need a better way to determine whether a document needs to be unwrapped first const valid = validator( - (Array.isArray(document["@context"]) && document["@context"].includes(ContextUrl.v4_alpha)) || + (Array.isArray(document["@context"]) && document["@context"].includes(ContextUrl.tt_v4_alpha)) || + (Array.isArray(document["@context"]) && document["@context"].includes(ContextUrl.oa_v4_alpha)) || document.version === SchemaId.v3 || kind === "raw" ? document diff --git a/test/fixtures/v4/oa/did-raw.json b/test/fixtures/v4/oa/did-raw.json new file mode 100644 index 00000000..788b56a2 --- /dev/null +++ b/test/fixtures/v4/oa/did-raw.json @@ -0,0 +1,39 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/com/openattestation/4.0/alpha-context.json" + ], + "type": ["VerifiableCredential", "OpenAttestationCredential"], + "validFrom": "2021-03-08T12:00:00+08:00", + "name": "Republic of Singapore Driving Licence", + "issuer": { + "id": "did:ethr:0xB26B4941941C51a4885E5B7D3A1B861E54405f90", + "type": "OpenAttestationIssuer", + "name": "Government Technology Agency of Singapore (GovTech)", + "identityProof": { "identityProofType": "DNS-DID", "identifier": "example.openattestation.com" } + }, + "credentialStatus": { "type": "OpenAttestationCredentialStatus", "credentialStatusType": "NONE" }, + "renderMethod": { + "type": "OpenAttestationRenderMethod", + "renderMethodType": "EMBEDDED_RENDERER", + "name": "GOVTECH_DEMO", + "url": "https://demo-renderer.openattestation.com" + }, + "credentialSubject": { + "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "type": ["DriversLicense"], + "name": "John Doe", + "licenses": [ + { + "class": "3", + "description": "Motor cars with unladen weight <= 3000kg", + "effectiveDate": "2013-05-16T00:00:00+08:00" + }, + { + "class": "3A", + "description": "Motor cars with unladen weight <= 3000kg", + "effectiveDate": "2013-05-16T00:00:00+08:00" + } + ] + } +} diff --git a/test/fixtures/v4/oa/did-signed-wrapped.json b/test/fixtures/v4/oa/did-signed-wrapped.json new file mode 100644 index 00000000..f2efde6d --- /dev/null +++ b/test/fixtures/v4/oa/did-signed-wrapped.json @@ -0,0 +1,50 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/com/openattestation/4.0/alpha-context.json" + ], + "type": ["VerifiableCredential", "OpenAttestationCredential"], + "validFrom": "2021-03-08T12:00:00+08:00", + "name": "Republic of Singapore Driving Licence", + "issuer": { + "id": "did:ethr:0xB26B4941941C51a4885E5B7D3A1B861E54405f90", + "type": "OpenAttestationIssuer", + "name": "Government Technology Agency of Singapore (GovTech)", + "identityProof": { "identityProofType": "DNS-DID", "identifier": "example.openattestation.com" } + }, + "credentialStatus": { "type": "OpenAttestationCredentialStatus", "credentialStatusType": "NONE" }, + "renderMethod": { + "type": "OpenAttestationRenderMethod", + "renderMethodType": "EMBEDDED_RENDERER", + "name": "GOVTECH_DEMO", + "url": "https://demo-renderer.openattestation.com" + }, + "credentialSubject": { + "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "type": ["DriversLicense"], + "name": "John Doe", + "licenses": [ + { + "class": "3", + "description": "Motor cars with unladen weight <= 3000kg", + "effectiveDate": "2013-05-16T00:00:00+08:00" + }, + { + "class": "3A", + "description": "Motor cars with unladen weight <= 3000kg", + "effectiveDate": "2013-05-16T00:00:00+08:00" + } + ] + }, + "proof": { + "type": "OpenAttestationMerkleProofSignature2018", + "proofPurpose": "assertionMethod", + "targetHash": "adb16863b9b92f1f46d67f518f853092404dc1322ffb61b45a831ee113f4ea99", + "proofs": [], + "merkleRoot": "adb16863b9b92f1f46d67f518f853092404dc1322ffb61b45a831ee113f4ea99", + "salts": "W3sidmFsdWUiOiJkYTlkMTE5MTMxOWRjOTM4ZTQ2ZjZhYmMzMjU1NTM5NGYwYzEzNDIyMGUwYjgyMDY0NzBhYjlmNmYxN2QyZTJlIiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6IjhhZDM5Njg2NGIwNGI5ZjYxY2I3ODNjY2M1YWEyNTYxODgxYmRiODZmZmI5ZmNjZjViYTQ1YzUyN2MwZGFmMGMiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiMjYwNDllNWExODQ4MDVlYTUxNjQ4OTM3OGI0NDZhNTdiMjdlZWU0YmFhN2VmYjBkNWM3OTcwMGMzZDI5OGM5MyIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6IjU3N2M2ZGUzMzYzZmE1ZjA2ZDc5NjQyMjAxNTk3ODkzYzdmNDg3NWZlYzFiZTYyOWIxZWRkNTdhZWFlOTE3YzkiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiI0NmMyOTY5MTVkZWVhNDMwMDNmY2ZmNjc3NzUxNTc3Zjg2MTdlODliYjBjNDhiNzIwMTdlMzRkOWNhNTM0ZGNlIiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiIwZWQ1Yzg0OTBlYjg2YWM5YmEyNGJlYzc3OTE2MThhZWZjZGE2M2M3OGNmZDJlMTdjMWNlNDRmNzVmZjU3NjljIiwicGF0aCI6Im5hbWUifSx7InZhbHVlIjoiMzEyNGUxNzc4Y2EzYTc2ZmI0MjUxNGExMmIzNDYzYmY4ZmY4NjNiNDdiZTExNDYyY2RiMGRiNzRmMzk1ZjViYiIsInBhdGgiOiJpc3N1ZXIuaWQifSx7InZhbHVlIjoiYTJmNTJhNTdmMWM5MDJhYzQ5MmJiNzc0YTQzOTIxYjk2NWJlM2VmZjRjNTBjMDhiNDhhNjJkOGZkNjNhMWQ1NCIsInBhdGgiOiJpc3N1ZXIudHlwZSJ9LHsidmFsdWUiOiI0NGZhZWFhNmIxYmZlZmI0NGM4NzJlYzI2Nzc4OWNkNzUwM2U3YTQ1YjZjMDdmMmE0MmJkMDE5OWU1NzI0ZjM1IiwicGF0aCI6Imlzc3Vlci5uYW1lIn0seyJ2YWx1ZSI6IjJjNzg1Y2NhOGMyODdhZjhmOGM1NWM4MmJkODI3ZGY4M2YyZDIxY2M4MTVhZWJlYTg5MmVjOTZmNGRmMzVkNzAiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlQcm9vZlR5cGUifSx7InZhbHVlIjoiOWM0OWNiOGQ1Njc2NjljOTEzMDEwYzE3MmI2YmM5N2Q4MTVlOWZlOGY3Mjg2ZWE0NzA3NWVhNDQxYzc4NmYwMyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGlmaWVyIn0seyJ2YWx1ZSI6IjJjZDcxMmFlZTdjZDlkZmI1NjBmYzBjNWVjZmZhY2FkYzkzYmYzZmI1MGRhYTgyYTk2ZTQzYjA5OGU2OTg4YTEiLCJwYXRoIjoiY3JlZGVudGlhbFN0YXR1cy50eXBlIn0seyJ2YWx1ZSI6ImM4MmUwNmU1NWI1YTY2YmUwNTk5NjVjZDI5YTUzZWE1ODg0YjM3NjU0NWE4ZmMwMzNiMTEwNWE0MzMyMWI5ZjAiLCJwYXRoIjoiY3JlZGVudGlhbFN0YXR1cy5jcmVkZW50aWFsU3RhdHVzVHlwZSJ9LHsidmFsdWUiOiJiNzBkMTU5MmU4ZTk3NDlkNGU5ZTEzNjg5NTgxNjhlY2MxZWQ2ODE5NWQzMmE4YmI1MDdlOTc3NGU3ZjkxMGFlIiwicGF0aCI6InJlbmRlck1ldGhvZC50eXBlIn0seyJ2YWx1ZSI6IjIxMGI0NGNjYTdmYzZkOTY4ZDk2ZmVjZWY3MGQzNTU1ZDY5MjViYWEwNjA4ZTczMDM3YjBiOGI5Njc4MTQ0ZGEiLCJwYXRoIjoicmVuZGVyTWV0aG9kLnJlbmRlck1ldGhvZFR5cGUifSx7InZhbHVlIjoiODQyZDBhZTQ1ZTI5N2U1YzgyMmJhZWVjMGMxNDg5MGYyNzkwZjNhNzY1M2JkMTAwNzI5YWJiNTM5NzAxMGY3NCIsInBhdGgiOiJyZW5kZXJNZXRob2QubmFtZSJ9LHsidmFsdWUiOiI4ZDIyYmIwMzJlMjg1N2RlYTk3NDU4ZWZmMjQ5ODgxZGZiZmE2MmUxNDU0MzBkZTdmNWIzZThkNWM5NGVjNmY4IiwicGF0aCI6InJlbmRlck1ldGhvZC51cmwifSx7InZhbHVlIjoiNGJiNWMyMzliNzBmZmI2NDkwYmY4MmQwZTBjODQ3ZWE0YWIyYTQyYWU1MmZjMDljZjA0ZjFiMTg1YjQ5ODFmMyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5pZCJ9LHsidmFsdWUiOiJkOGJmNmI3NzRlNjY0MGU2MWIwMmY4MmIzNTM5Y2RhMjdjODkyNmVlNjI0ZDE1ODZlOTZlMzhjZjNkMWQ0MjY1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnR5cGVbMF0ifSx7InZhbHVlIjoiYTViNjg5NThkOTNiZmM3Y2M0ZDYzM2IxODViZTRlZGNmMGFmZTkwOGRhYjIwOTI3N2RhOGQ3Nzg2ZTc0MjQ3ZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5uYW1lIn0seyJ2YWx1ZSI6IjNlMjUyNTkwMmI1MDY3ZjZiMjNhZGFjYmNmMzdiOTBjNTY1N2ViZWY1ZTQwZmQ2ZTNlMGM1N2QyYjBhODFlMmYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QubGljZW5zZXNbMF0uY2xhc3MifSx7InZhbHVlIjoiODViZDZjYzhkODI4OTRlNWI0OGQ2NmI5ZTM2NGU4MTRhMzIxMWM4ODI0NGVhNmFlZDhkZTYzNWQ1YmFhODljMCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5saWNlbnNlc1swXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiJiZWRlZDA0Yjk1MDEzZjBkNjgzZjZmNGI1YmI2ZDBjNjRjMDM0MjUxYjYwOWQwOTNkZGM0ZDE0Njg2MWJkMjVlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmxpY2Vuc2VzWzBdLmVmZmVjdGl2ZURhdGUifSx7InZhbHVlIjoiYzQ2ZTBhMzkyYTExMmM1NjRkNDdmODQ5NmFhMGRiYmZmZTg1NGEwNDQxODAxZmYxNzYyNzBiYmMyYmUxN2MwOSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5saWNlbnNlc1sxXS5jbGFzcyJ9LHsidmFsdWUiOiJjMGYzMWI2MGYyMjVkZTg1M2YzNzAyYzk4Y2E1OTk0Y2EzNTcyNmUwZTAyNGZkNzRkMWUwZTM1NzZiYjRhNmZlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmxpY2Vuc2VzWzFdLmRlc2NyaXB0aW9uIn0seyJ2YWx1ZSI6IjY0YTUxYjRkMmE3OWMyZTI5NTdkOTg0MDkwN2Q3MGEzMzY4NDRiN2QyYzNlNmE5NDk3NzY1NGUwM2RkMzk1ZWMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QubGljZW5zZXNbMV0uZWZmZWN0aXZlRGF0ZSJ9XQ==", + "privacy": { "obfuscated": [] }, + "key": "did:ethr:0xB26B4941941C51a4885E5B7D3A1B861E54405f90#controller", + "signature": "0xf5743ee83429b0ff71ca40d61f59b9c26f1fc220c2e9a4620bc73128acc0bb2b74764c561058327b19c6992ae6c2a543dd40c7c7e359df48a209477e3cea5bbe1c" + } +} diff --git a/test/fixtures/v4/oa/did-wrapped.json b/test/fixtures/v4/oa/did-wrapped.json new file mode 100644 index 00000000..2921df32 --- /dev/null +++ b/test/fixtures/v4/oa/did-wrapped.json @@ -0,0 +1,48 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/com/openattestation/4.0/alpha-context.json" + ], + "type": ["VerifiableCredential", "OpenAttestationCredential"], + "validFrom": "2021-03-08T12:00:00+08:00", + "name": "Republic of Singapore Driving Licence", + "issuer": { + "id": "did:ethr:0xB26B4941941C51a4885E5B7D3A1B861E54405f90", + "type": "OpenAttestationIssuer", + "name": "Government Technology Agency of Singapore (GovTech)", + "identityProof": { "identityProofType": "DNS-DID", "identifier": "example.openattestation.com" } + }, + "credentialStatus": { "type": "OpenAttestationCredentialStatus", "credentialStatusType": "NONE" }, + "renderMethod": { + "type": "OpenAttestationRenderMethod", + "renderMethodType": "EMBEDDED_RENDERER", + "name": "GOVTECH_DEMO", + "url": "https://demo-renderer.openattestation.com" + }, + "credentialSubject": { + "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "type": ["DriversLicense"], + "name": "John Doe", + "licenses": [ + { + "class": "3", + "description": "Motor cars with unladen weight <= 3000kg", + "effectiveDate": "2013-05-16T00:00:00+08:00" + }, + { + "class": "3A", + "description": "Motor cars with unladen weight <= 3000kg", + "effectiveDate": "2013-05-16T00:00:00+08:00" + } + ] + }, + "proof": { + "type": "OpenAttestationMerkleProofSignature2018", + "proofPurpose": "assertionMethod", + "targetHash": "adb16863b9b92f1f46d67f518f853092404dc1322ffb61b45a831ee113f4ea99", + "proofs": [], + "merkleRoot": "adb16863b9b92f1f46d67f518f853092404dc1322ffb61b45a831ee113f4ea99", + "salts": "W3sidmFsdWUiOiJkYTlkMTE5MTMxOWRjOTM4ZTQ2ZjZhYmMzMjU1NTM5NGYwYzEzNDIyMGUwYjgyMDY0NzBhYjlmNmYxN2QyZTJlIiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6IjhhZDM5Njg2NGIwNGI5ZjYxY2I3ODNjY2M1YWEyNTYxODgxYmRiODZmZmI5ZmNjZjViYTQ1YzUyN2MwZGFmMGMiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiMjYwNDllNWExODQ4MDVlYTUxNjQ4OTM3OGI0NDZhNTdiMjdlZWU0YmFhN2VmYjBkNWM3OTcwMGMzZDI5OGM5MyIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6IjU3N2M2ZGUzMzYzZmE1ZjA2ZDc5NjQyMjAxNTk3ODkzYzdmNDg3NWZlYzFiZTYyOWIxZWRkNTdhZWFlOTE3YzkiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiI0NmMyOTY5MTVkZWVhNDMwMDNmY2ZmNjc3NzUxNTc3Zjg2MTdlODliYjBjNDhiNzIwMTdlMzRkOWNhNTM0ZGNlIiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiIwZWQ1Yzg0OTBlYjg2YWM5YmEyNGJlYzc3OTE2MThhZWZjZGE2M2M3OGNmZDJlMTdjMWNlNDRmNzVmZjU3NjljIiwicGF0aCI6Im5hbWUifSx7InZhbHVlIjoiMzEyNGUxNzc4Y2EzYTc2ZmI0MjUxNGExMmIzNDYzYmY4ZmY4NjNiNDdiZTExNDYyY2RiMGRiNzRmMzk1ZjViYiIsInBhdGgiOiJpc3N1ZXIuaWQifSx7InZhbHVlIjoiYTJmNTJhNTdmMWM5MDJhYzQ5MmJiNzc0YTQzOTIxYjk2NWJlM2VmZjRjNTBjMDhiNDhhNjJkOGZkNjNhMWQ1NCIsInBhdGgiOiJpc3N1ZXIudHlwZSJ9LHsidmFsdWUiOiI0NGZhZWFhNmIxYmZlZmI0NGM4NzJlYzI2Nzc4OWNkNzUwM2U3YTQ1YjZjMDdmMmE0MmJkMDE5OWU1NzI0ZjM1IiwicGF0aCI6Imlzc3Vlci5uYW1lIn0seyJ2YWx1ZSI6IjJjNzg1Y2NhOGMyODdhZjhmOGM1NWM4MmJkODI3ZGY4M2YyZDIxY2M4MTVhZWJlYTg5MmVjOTZmNGRmMzVkNzAiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlQcm9vZlR5cGUifSx7InZhbHVlIjoiOWM0OWNiOGQ1Njc2NjljOTEzMDEwYzE3MmI2YmM5N2Q4MTVlOWZlOGY3Mjg2ZWE0NzA3NWVhNDQxYzc4NmYwMyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGlmaWVyIn0seyJ2YWx1ZSI6IjJjZDcxMmFlZTdjZDlkZmI1NjBmYzBjNWVjZmZhY2FkYzkzYmYzZmI1MGRhYTgyYTk2ZTQzYjA5OGU2OTg4YTEiLCJwYXRoIjoiY3JlZGVudGlhbFN0YXR1cy50eXBlIn0seyJ2YWx1ZSI6ImM4MmUwNmU1NWI1YTY2YmUwNTk5NjVjZDI5YTUzZWE1ODg0YjM3NjU0NWE4ZmMwMzNiMTEwNWE0MzMyMWI5ZjAiLCJwYXRoIjoiY3JlZGVudGlhbFN0YXR1cy5jcmVkZW50aWFsU3RhdHVzVHlwZSJ9LHsidmFsdWUiOiJiNzBkMTU5MmU4ZTk3NDlkNGU5ZTEzNjg5NTgxNjhlY2MxZWQ2ODE5NWQzMmE4YmI1MDdlOTc3NGU3ZjkxMGFlIiwicGF0aCI6InJlbmRlck1ldGhvZC50eXBlIn0seyJ2YWx1ZSI6IjIxMGI0NGNjYTdmYzZkOTY4ZDk2ZmVjZWY3MGQzNTU1ZDY5MjViYWEwNjA4ZTczMDM3YjBiOGI5Njc4MTQ0ZGEiLCJwYXRoIjoicmVuZGVyTWV0aG9kLnJlbmRlck1ldGhvZFR5cGUifSx7InZhbHVlIjoiODQyZDBhZTQ1ZTI5N2U1YzgyMmJhZWVjMGMxNDg5MGYyNzkwZjNhNzY1M2JkMTAwNzI5YWJiNTM5NzAxMGY3NCIsInBhdGgiOiJyZW5kZXJNZXRob2QubmFtZSJ9LHsidmFsdWUiOiI4ZDIyYmIwMzJlMjg1N2RlYTk3NDU4ZWZmMjQ5ODgxZGZiZmE2MmUxNDU0MzBkZTdmNWIzZThkNWM5NGVjNmY4IiwicGF0aCI6InJlbmRlck1ldGhvZC51cmwifSx7InZhbHVlIjoiNGJiNWMyMzliNzBmZmI2NDkwYmY4MmQwZTBjODQ3ZWE0YWIyYTQyYWU1MmZjMDljZjA0ZjFiMTg1YjQ5ODFmMyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5pZCJ9LHsidmFsdWUiOiJkOGJmNmI3NzRlNjY0MGU2MWIwMmY4MmIzNTM5Y2RhMjdjODkyNmVlNjI0ZDE1ODZlOTZlMzhjZjNkMWQ0MjY1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnR5cGVbMF0ifSx7InZhbHVlIjoiYTViNjg5NThkOTNiZmM3Y2M0ZDYzM2IxODViZTRlZGNmMGFmZTkwOGRhYjIwOTI3N2RhOGQ3Nzg2ZTc0MjQ3ZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5uYW1lIn0seyJ2YWx1ZSI6IjNlMjUyNTkwMmI1MDY3ZjZiMjNhZGFjYmNmMzdiOTBjNTY1N2ViZWY1ZTQwZmQ2ZTNlMGM1N2QyYjBhODFlMmYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QubGljZW5zZXNbMF0uY2xhc3MifSx7InZhbHVlIjoiODViZDZjYzhkODI4OTRlNWI0OGQ2NmI5ZTM2NGU4MTRhMzIxMWM4ODI0NGVhNmFlZDhkZTYzNWQ1YmFhODljMCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5saWNlbnNlc1swXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiJiZWRlZDA0Yjk1MDEzZjBkNjgzZjZmNGI1YmI2ZDBjNjRjMDM0MjUxYjYwOWQwOTNkZGM0ZDE0Njg2MWJkMjVlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmxpY2Vuc2VzWzBdLmVmZmVjdGl2ZURhdGUifSx7InZhbHVlIjoiYzQ2ZTBhMzkyYTExMmM1NjRkNDdmODQ5NmFhMGRiYmZmZTg1NGEwNDQxODAxZmYxNzYyNzBiYmMyYmUxN2MwOSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5saWNlbnNlc1sxXS5jbGFzcyJ9LHsidmFsdWUiOiJjMGYzMWI2MGYyMjVkZTg1M2YzNzAyYzk4Y2E1OTk0Y2EzNTcyNmUwZTAyNGZkNzRkMWUwZTM1NzZiYjRhNmZlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmxpY2Vuc2VzWzFdLmRlc2NyaXB0aW9uIn0seyJ2YWx1ZSI6IjY0YTUxYjRkMmE3OWMyZTI5NTdkOTg0MDkwN2Q3MGEzMzY4NDRiN2QyYzNlNmE5NDk3NzY1NGUwM2RkMzk1ZWMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QubGljZW5zZXNbMV0uZWZmZWN0aXZlRGF0ZSJ9XQ==", + "privacy": { "obfuscated": [] } + } +} diff --git a/test/fixtures/v4/tt/did-idvc-raw-wrong-binding.json b/test/fixtures/v4/tt/did-idvc-raw-wrong-binding.json new file mode 100644 index 00000000..1a76e139 --- /dev/null +++ b/test/fixtures/v4/tt/did-idvc-raw-wrong-binding.json @@ -0,0 +1,108 @@ +{ + "@context": ["https://www.w3.org/2018/credentials/v1", "http://localhost:8080/alpha-context.json"], + "type": ["VerifiableCredential", "TradeTrustCredential"], + "validFrom": "2021-03-08T12:00:00+08:00", + "issuer": { + "id": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89", + "type": "TradeTrustIssuer", + "name": "My Own Company Pte Ltd", + "identityProof": { + "identityProofType": "IDVC", + "identifier": "My Own Company Pte Ltd", + "identityVC": { + "type": "TradeTrustIdentityVC", + "data": { + "@context": [ + "https://w3id.org/security/bbs/v1", + "https://www.w3.org/2018/credentials/v1", + "https://stg.issuer.myinfo.gov.sg/myinfobusiness/schema/corporatebasicdetails/v1", + "https://w3id.org/vc/status-list/2021/v1" + ], + "id": "https://sbl.alwaysdata.net/oa/credentials/123456789", + "type": ["VerifiableCredential"], + "issuer": "did:web:sbl.alwaysdata.net:oa", + "credentialSubject": { + "uen": "198801234E", + "companyname": "My Own Company Pte Ltd", + "type": ["CorporateBasicDetails"], + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C" + }, + "expirationDate": "2023-11-01T06:45:43Z", + "credentialStatus": { + "id": "https://sbl.alwaysdata.net/oa/status/1#325", + "type": "StatusList2021Entry", + "statusListIndex": 325, + "statusListCredential": "https://sbl.alwaysdata.net/oa/status/1/325" + }, + "issuanceDate": "2023-22-13T01:35:08Z", + "proof": { + "type": "BbsBlsSignature2020", + "created": "2023-10-18T07:14:46Z", + "proofPurpose": "assertionMethod", + "proofValue": "tqvUVZOPaY/A+7Wu47HZIYbboPU/MPGhb1EPLUKKPRwmRe8QJ/dzjRviQ5fAbR88TjSalqLbaBeopNocjrl7TmzCOlLQxGeNC4El1TCICu5tiX0HxGSNAPY4t5CglTLMTsdu5kg4f0a5MGQTnFgwyw==", + "verificationMethod": "did:web:sbl.alwaysdata.net:oa#didkey" + } + } + } + } + }, + "credentialStatus": { + "type": "TradeTrustCredentialStatus", + "credentialStatusType": "NONE" + }, + "renderMethod": { + "type": "TradeTrustRenderMethod", + "renderMethodType": "EMBEDDED_RENDERER", + "name": "INVOICE", + "url": "https://generic-templates.tradetrust.io" + }, + "credentialSubject": { + "name": "TradeTrust Invoice", + "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "date": "2018-02-21", + "customerId": "564", + "terms": "Due Upon Receipt", + "billFrom": { + "name": "ABC Company", + "streetAddress": "Level 1, Industry Offices", + "city": "Singapore", + "postalCode": "123456", + "phoneNumber": "60305029" + }, + "billTo": { + "company": { + "name": "DEF Company", + "streetAddress": "Level 2, Industry Offices", + "city": "Singapore", + "postalCode": "612345", + "phoneNumber": "61204028" + }, + "name": "James Lee", + "email": "def@company.com" + }, + "billableItems": [ + { + "description": "Service Fee", + "quantity": "1", + "unitPrice": "200", + "amount": "200" + }, + { + "description": "Labor: 5 hours at $75/hr", + "quantity": "5", + "unitPrice": "75", + "amount": "375" + }, + { + "description": "New client discount", + "quantity": "1", + "unitPrice": "50", + "amount": "50" + } + ], + "subtotal": "625", + "tax": "0", + "taxTotal": "0", + "total": "625" + } +} diff --git a/test/fixtures/v4/did-idvc-raw.json b/test/fixtures/v4/tt/did-idvc-raw.json similarity index 100% rename from test/fixtures/v4/did-idvc-raw.json rename to test/fixtures/v4/tt/did-idvc-raw.json diff --git a/test/fixtures/v4/did-idvc-wrapped-signed.json b/test/fixtures/v4/tt/did-idvc-wrapped-signed.json similarity index 100% rename from test/fixtures/v4/did-idvc-wrapped-signed.json rename to test/fixtures/v4/tt/did-idvc-wrapped-signed.json diff --git a/test/fixtures/v4/did-idvc-wrapped.json b/test/fixtures/v4/tt/did-idvc-wrapped.json similarity index 100% rename from test/fixtures/v4/did-idvc-wrapped.json rename to test/fixtures/v4/tt/did-idvc-wrapped.json diff --git a/test/fixtures/v4/did-raw.json b/test/fixtures/v4/tt/did-raw.json similarity index 100% rename from test/fixtures/v4/did-raw.json rename to test/fixtures/v4/tt/did-raw.json diff --git a/test/fixtures/v4/did-raw2.json b/test/fixtures/v4/tt/did-raw2.json similarity index 100% rename from test/fixtures/v4/did-raw2.json rename to test/fixtures/v4/tt/did-raw2.json diff --git a/test/fixtures/v4/did-wrapped-obfuscated.json b/test/fixtures/v4/tt/did-wrapped-obfuscated.json similarity index 100% rename from test/fixtures/v4/did-wrapped-obfuscated.json rename to test/fixtures/v4/tt/did-wrapped-obfuscated.json diff --git a/test/fixtures/v4/did-wrapped-signed.json b/test/fixtures/v4/tt/did-wrapped-signed.json similarity index 100% rename from test/fixtures/v4/did-wrapped-signed.json rename to test/fixtures/v4/tt/did-wrapped-signed.json diff --git a/test/fixtures/v4/did-wrapped.json b/test/fixtures/v4/tt/did-wrapped.json similarity index 100% rename from test/fixtures/v4/did-wrapped.json rename to test/fixtures/v4/tt/did-wrapped.json diff --git a/test/fixtures/v4/did-wrapped2.json b/test/fixtures/v4/tt/did-wrapped2.json similarity index 100% rename from test/fixtures/v4/did-wrapped2.json rename to test/fixtures/v4/tt/did-wrapped2.json diff --git a/test/fixtures/v4/idvc.json b/test/fixtures/v4/tt/idvc.json similarity index 100% rename from test/fixtures/v4/idvc.json rename to test/fixtures/v4/tt/idvc.json diff --git a/test/fixtures/v4/tt/revoked.json b/test/fixtures/v4/tt/revoked.json new file mode 100644 index 00000000..8823f35b --- /dev/null +++ b/test/fixtures/v4/tt/revoked.json @@ -0,0 +1,32 @@ +{ + "@context": [ + "https://w3id.org/security/bbs/v1", + "https://www.w3.org/2018/credentials/v1", + "https://stg.issuer.myinfo.gov.sg/myinfobusiness/schema/corporatebasicdetails/v1", + "https://w3id.org/vc/status-list/2021/v1" + ], + "id": "https://sbl.alwaysdata.net/oa/credentials/123456789", + "type": ["VerifiableCredential"], + "issuer": "did:web:sbl.alwaysdata.net:oa", + "credentialSubject": { + "uen": "198801234E", + "companyname": "My Own Company Pte Ltd", + "type": ["CorporateBasicDetails"], + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C" + }, + "expirationDate": "2023-11-01T06:45:43Z", + "credentialStatus": { + "id": "https://sbl.alwaysdata.net/oa/status/2#1", + "type": "StatusList2021Entry", + "statusListIndex": 1, + "statusListCredential": "https://sbl.alwaysdata.net/oa/status/2/1" + }, + "issuanceDate": "2023-22-13T01:35:08Z", + "proof": { + "type": "BbsBlsSignature2020", + "created": "2023-10-26T09:24:19Z", + "proofPurpose": "assertionMethod", + "proofValue": "gV1gs4fkKMSU56bsac/5peRTOh88E3zF+vnJEMzUfrT6aoIANYcrFRAt1EzXmuEsZKAGC93tNPEWM0V+xNJaB3tsGEGHhQCmGbHCJ3RJQxclTLn7BEZ2v6xhwgWXlRFNGpgBLJXgQ8xkg7D6Br1IYg==", + "verificationMethod": "did:web:sbl.alwaysdata.net:oa#didkey" + } +} From da19efecbc4de08277582b197cf23584e14e6813 Mon Sep 17 00:00:00 2001 From: cavacado Date: Tue, 31 Oct 2023 13:26:40 +0800 Subject: [PATCH 06/13] chore: fix lint errors --- src/3.0/validate/validate.ts | 6 +++--- src/4.0/oa/validate/validate.ts | 2 +- src/4.0/tt/__tests__/obfuscate.test.ts | 8 +++++++- src/4.0/tt/__tests__/salt.test.ts | 2 +- src/4.0/tt/validate/validate.ts | 3 +-- src/index.ts | 3 +-- src/shared/utils/__tests__/guard.test.ts | 2 -- src/shared/utils/diagnose.ts | 4 ++-- src/shared/validate/validate.ts | 2 +- test/fixtures/v4/tt/did-idvc-raw.json | 5 +---- 10 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/3.0/validate/validate.ts b/src/3.0/validate/validate.ts index a6057ee7..c054236a 100644 --- a/src/3.0/validate/validate.ts +++ b/src/3.0/validate/validate.ts @@ -3,7 +3,7 @@ import { WrappedDocument } from "../../3.0/types"; import { documentLoaders, expand } from "@govtechsg/jsonld"; import fetch from "cross-fetch"; import w3cContextExamples from "../../shared/contexts/w3c-context-examples.json"; -import w3cDataModel from "../../shared/contexts/w3c-data-model-v1.json" +import w3cDataModel from "../../shared/contexts/w3c-data-model-v1.json"; const getId = (objectOrString: string | { id: string }): string => { if (typeof objectOrString === "string") { @@ -41,8 +41,8 @@ const isValidRFC3986 = (str: any) => { return rfc3986.test(str); }; -let w3cExamplesContextUrl = "https://www.w3.org/2018/credentials/examples/v1"; -let w3cDataModelUrl = "https://www.w3.org/2018/credentials/v1"; +const w3cExamplesContextUrl = "https://www.w3.org/2018/credentials/examples/v1"; +const w3cDataModelUrl = "https://www.w3.org/2018/credentials/v1"; const preloadedContextList = [ w3cExamplesContextUrl, w3cDataModelUrl, diff --git a/src/4.0/oa/validate/validate.ts b/src/4.0/oa/validate/validate.ts index 0899e9d1..31f5f0db 100644 --- a/src/4.0/oa/validate/validate.ts +++ b/src/4.0/oa/validate/validate.ts @@ -41,7 +41,7 @@ const isValidRFC3986 = (str: any) => { return rfc3986.test(str); }; -let w3cDataModelUrl = "https://www.w3.org/2018/credentials/v1"; +const w3cDataModelUrl = "https://www.w3.org/2018/credentials/v1"; const preloadedContextList = [w3cDataModelUrl, ContextUrl.oa_v4_alpha]; const contexts: Map> = new Map(); const nodeDocumentLoader = documentLoaders.xhr ? documentLoaders.xhr() : documentLoaders.node(); diff --git a/src/4.0/tt/__tests__/obfuscate.test.ts b/src/4.0/tt/__tests__/obfuscate.test.ts index 90ab9401..695696e0 100644 --- a/src/4.0/tt/__tests__/obfuscate.test.ts +++ b/src/4.0/tt/__tests__/obfuscate.test.ts @@ -7,7 +7,13 @@ import { } from "../../.."; import { decodeSalt } from "../salt"; import { toBuffer, isObfuscated, getObfuscatedData } from "../../../shared/utils"; -import { Salt, WrappedDocument, TradeTrustDocument, CredentialStatusType, IdentityProofType } from "../../../4.0/tt/types"; +import { + Salt, + WrappedDocument, + TradeTrustDocument, + CredentialStatusType, + IdentityProofType, +} from "../../../4.0/tt/types"; import ObfuscatedWrapped from "../../../../test/fixtures/v4/tt/did-wrapped-obfuscated.json"; import NotObfuscatedWrapped from "../../../../test/fixtures/v4/tt/did-wrapped.json"; diff --git a/src/4.0/tt/__tests__/salt.test.ts b/src/4.0/tt/__tests__/salt.test.ts index 26b3aa05..800775fb 100644 --- a/src/4.0/tt/__tests__/salt.test.ts +++ b/src/4.0/tt/__tests__/salt.test.ts @@ -35,7 +35,7 @@ const sampleDoc: TradeTrustDocument = { renderMethodType: RenderMethodType.EmbeddedRenderer, name: "INVOICE", url: "https://generic-templates.tradetrust.io", - } + }, }; describe("digest v4.0", () => { diff --git a/src/4.0/tt/validate/validate.ts b/src/4.0/tt/validate/validate.ts index 4a6ecb21..4bca9f9e 100644 --- a/src/4.0/tt/validate/validate.ts +++ b/src/4.0/tt/validate/validate.ts @@ -41,8 +41,7 @@ const isValidRFC3986 = (str: any) => { return rfc3986.test(str); }; -let w3cDataModelUrl = "https://www.w3.org/2018/credentials/v1"; -let traceabilityUrl = "https://w3id.org/traceability/v1"; +const w3cDataModelUrl = "https://www.w3.org/2018/credentials/v1"; const preloadedContextList = [w3cDataModelUrl, ContextUrl.tt_v4_alpha]; const contexts: Map> = new Map(); const nodeDocumentLoader = documentLoaders.xhr ? documentLoaders.xhr() : documentLoaders.node(); diff --git a/src/index.ts b/src/index.ts index fdef6646..af84587d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -106,8 +106,7 @@ export const validateSchema = (document: WrappedDocument): boolean => { return validate(document, getSchema(SchemaId.v3)).length === 0; else if (utils.isWrappedOAV4Document(document)) { return validate(document, getSchema(SchemaId.oa_v4)).length === 0; - } - else if (utils.isWrappedTTV4Document(document)) { + } else if (utils.isWrappedTTV4Document(document)) { return validate(document, getSchema(SchemaId.tt_v4)).length === 0; } diff --git a/src/shared/utils/__tests__/guard.test.ts b/src/shared/utils/__tests__/guard.test.ts index b7232e66..e1a05fe6 100644 --- a/src/shared/utils/__tests__/guard.test.ts +++ b/src/shared/utils/__tests__/guard.test.ts @@ -15,8 +15,6 @@ import { } from "../guard"; import { __unsafe__use__it__at__your__own__risks__wrapDocument, - _unsafe_use_it_at_your_own_risk_v4_alpha_oa_wrapDocument, - _unsafe_use_it_at_your_own_risk_v4_alpha_tt_wrapDocument, SchemaId, signDocument, SUPPORTED_SIGNING_ALGORITHM, diff --git a/src/shared/utils/diagnose.ts b/src/shared/utils/diagnose.ts index a6b3b304..26f1e595 100644 --- a/src/shared/utils/diagnose.ts +++ b/src/shared/utils/diagnose.ts @@ -99,9 +99,9 @@ export const diagnose = ({ "2.0": SchemaId.v2, "3.0": SchemaId.v3, "oa_4.0": SchemaId.oa_v4, - "tt_4.0": SchemaId.tt_v4 + "tt_4.0": SchemaId.tt_v4, }; - + const errors = validate( document, getSchema(versionToSchemaId[version], mode === "non-strict" ? ajv : undefined), diff --git a/src/shared/validate/validate.ts b/src/shared/validate/validate.ts index 9dd238ab..5d313c51 100644 --- a/src/shared/validate/validate.ts +++ b/src/shared/validate/validate.ts @@ -16,7 +16,7 @@ export const validateSchema = (document: any, validator: ValidateFunction, kind? // Need a better way to determine whether a document needs to be unwrapped first const valid = validator( (Array.isArray(document["@context"]) && document["@context"].includes(ContextUrl.tt_v4_alpha)) || - (Array.isArray(document["@context"]) && document["@context"].includes(ContextUrl.oa_v4_alpha)) || + (Array.isArray(document["@context"]) && document["@context"].includes(ContextUrl.oa_v4_alpha)) || document.version === SchemaId.v3 || kind === "raw" ? document diff --git a/test/fixtures/v4/tt/did-idvc-raw.json b/test/fixtures/v4/tt/did-idvc-raw.json index 782a31de..925eed9f 100644 --- a/test/fixtures/v4/tt/did-idvc-raw.json +++ b/test/fixtures/v4/tt/did-idvc-raw.json @@ -1,8 +1,5 @@ { - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "http://localhost:8080/alpha-context.json" - ], + "@context": ["https://www.w3.org/2018/credentials/v1", "http://localhost:8080/alpha-context.json"], "type": ["VerifiableCredential", "TradeTrustCredential"], "validFrom": "2021-03-08T12:00:00+08:00", "issuer": { From 0fe2695a0e22f898d56a3d2f7ccefb404fe903d6 Mon Sep 17 00:00:00 2001 From: cavacado Date: Wed, 1 Nov 2023 11:41:53 +0800 Subject: [PATCH 07/13] feat: regenerate test fixtures for ttv4 --- package.json | 3 +- scripts/generate.ts | 83 ++++++++++ src/4.0/tt/__tests__/digest.test.ts | 154 +++++++++--------- src/4.0/tt/__tests__/e2e.test.ts | 2 +- src/4.0/tt/__tests__/obfuscate.test.ts | 2 +- src/4.0/tt/__tests__/sign.test.ts | 4 +- src/4.0/tt/schema/schema.json | 2 +- src/shared/@types/document.ts | 6 +- .../v4/tt/did-idvc-raw-idvc-revoked.json | 111 +++++++++++++ .../tt/did-idvc-raw-tampered-signature.json | 111 +++++++++++++ .../v4/tt/did-idvc-raw-wrong-binding.json | 5 +- test/fixtures/v4/tt/did-idvc-raw.json | 5 +- .../v4/tt/did-idvc-wrapped-idvc-revoked.json | 129 +++++++++++++++ .../did-idvc-wrapped-signed-idvc-revoked.json | 131 +++++++++++++++ ...dvc-wrapped-signed-tampered-signature.json | 131 +++++++++++++++ ...did-idvc-wrapped-signed-wrong-binding.json | 131 +++++++++++++++ .../v4/tt/did-idvc-wrapped-signed.json | 58 +++++-- .../did-idvc-wrapped-tampered-signature.json | 129 +++++++++++++++ .../v4/tt/did-idvc-wrapped-wrong-binding.json | 129 +++++++++++++++ test/fixtures/v4/tt/did-idvc-wrapped.json | 56 +++++-- test/fixtures/v4/tt/did-raw.json | 5 +- test/fixtures/v4/tt/did-raw2.json | 5 +- .../v4/tt/did-wrapped-obfuscated.json | 2 +- test/fixtures/v4/tt/did-wrapped-signed.json | 55 +++++-- test/fixtures/v4/tt/did-wrapped-signed2.json | 92 +++++++++++ test/fixtures/v4/tt/did-wrapped.json | 53 ++++-- test/fixtures/v4/tt/did-wrapped2.json | 53 ++++-- 27 files changed, 1491 insertions(+), 156 deletions(-) create mode 100644 scripts/generate.ts create mode 100644 test/fixtures/v4/tt/did-idvc-raw-idvc-revoked.json create mode 100644 test/fixtures/v4/tt/did-idvc-raw-tampered-signature.json create mode 100644 test/fixtures/v4/tt/did-idvc-wrapped-idvc-revoked.json create mode 100644 test/fixtures/v4/tt/did-idvc-wrapped-signed-idvc-revoked.json create mode 100644 test/fixtures/v4/tt/did-idvc-wrapped-signed-tampered-signature.json create mode 100644 test/fixtures/v4/tt/did-idvc-wrapped-signed-wrong-binding.json create mode 100644 test/fixtures/v4/tt/did-idvc-wrapped-tampered-signature.json create mode 100644 test/fixtures/v4/tt/did-idvc-wrapped-wrong-binding.json create mode 100644 test/fixtures/v4/tt/did-wrapped-signed2.json diff --git a/package.json b/package.json index e65eeccf..7d745b65 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,8 @@ "lint": "eslint . --ext .ts,.json --max-warnings 0", "lint:fix": "npm run lint -- --fix", "publish:schema": "./scripts/publishSchema.sh", - "postinstall": "node scripts/postInstall" + "postinstall": "node scripts/postInstall", + "generate": "npx ts-node ./scripts/generate.ts" }, "files": [ "/dist", diff --git a/scripts/generate.ts b/scripts/generate.ts new file mode 100644 index 00000000..b7db0d2a --- /dev/null +++ b/scripts/generate.ts @@ -0,0 +1,83 @@ +import { + _unsafe_use_it_at_your_own_risk_v4_alpha_tt_wrapDocument as TTwrapDocumentV4, + _unsafe_use_it_at_your_own_risk_v4_alpha_oa_wrapDocument as OAwrapDocumentV4, + signDocument, + utils, +} from "../src/index"; +import { SUPPORTED_SIGNING_ALGORITHM } from "../src/shared/@types/sign"; +import fs from "fs"; +import path from "path"; + +// DONT run the generation unnecessarily, you will break +// tests that looks at the signature/digest since the salts +// are randomly generated. + +export const readFile = (url: string) => { + return JSON.parse(fs.readFileSync(`${url}`, "utf-8")); +}; +interface IRun { + location: string; + keys?: [string, string]; +} +const run = async ({ location, keys }: IRun) => { + let resolved = path.resolve(location); + let name = path.basename(resolved); + let dirName = path.dirname(resolved); + let document = readFile(resolved); + if (utils.isRawOAV4Document(document)) { + let wrapName = name.replace("raw", "wrapped"); + let wrapped = await OAwrapDocumentV4(document); + fs.writeFileSync(`${dirName}/${wrapName}`, JSON.stringify(wrapped, null, 2)); + let signName = wrapName.replace("wrapped", "signed"); + let signed = await signDocument(wrapped, SUPPORTED_SIGNING_ALGORITHM.Secp256k1VerificationKey2018, { + public: "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller", + private: "0x497c85ed89f1874ba37532d1e33519aba15bd533cdcb90774cc497bfe3cde655", + }); + fs.writeFileSync(`${dirName}/${signName}`, JSON.stringify(signed, null, 2)); + } else if (utils.isRawTTV4Document(document)) { + let wrapName = name.replace("raw", "wrapped"); + let wrapped = await TTwrapDocumentV4(document); + fs.writeFileSync(`${dirName}/${wrapName}`, JSON.stringify(wrapped, null, 2)); + let pub, pte; + if (keys) { + [pub, pte] = keys; + } else { + pub = "0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89"; + pte = "0x497c85ed89f1874ba37532d1e33519aba15bd533cdcb90774cc497bfe3cde655"; + } + let signName = wrapName.replace("wrapped", "wrapped-signed"); + // rmb to replace the signing keys before committing!!! + let signed = await signDocument(wrapped, SUPPORTED_SIGNING_ALGORITHM.Secp256k1VerificationKey2018, { + public: `did:ethr:${pub}#controller`, + private: `${pte}`, + }); + fs.writeFileSync(`${dirName}/${signName}`, JSON.stringify(signed, null, 2)); + } +}; + +async function main() { + let paths = [ + "./test/fixtures/v4/tt/did-idvc-raw.json", + "./test/fixtures/v4/tt/did-idvc-raw-idvc-revoked.json", + "./test/fixtures/v4/tt/did-idvc-raw-tampered-signature.json", + "./test/fixtures/v4/tt/did-idvc-raw-wrong-binding.json", + "./test/fixtures/v4/tt/did-raw.json", + "./test/fixtures/v4/tt/did-raw2.json", + ]; + + await paths.forEach((path) => { + if (path === "./test/fixtures/v4/tt/did-raw2.json") { + run({ + location: path, + keys: [ + "0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89", + "0x497c85ed89f1874ba37532d1e33519aba15bd533cdcb90774cc497bfe3cde655", + ], + }); + } else { + run({ location: path }); + } + }); +} + +main() \ No newline at end of file diff --git a/src/4.0/tt/__tests__/digest.test.ts b/src/4.0/tt/__tests__/digest.test.ts index 2eeec6d2..3b833294 100644 --- a/src/4.0/tt/__tests__/digest.test.ts +++ b/src/4.0/tt/__tests__/digest.test.ts @@ -7,7 +7,7 @@ import sample from "../../../../test/fixtures/v4/tt/did-idvc-wrapped.json"; const verifiableCredential = sample as WrappedDocument; // Digest will change whenever sample document is regenerated -const credentialRoot = "84edabc618b2a5a7bad7eee9b58c287e9a39959d231eef3ab9270bd99922e54c"; +const credentialRoot = "841c8d1fb121bf7baab0b1677c91dc47cca6aa1e8ac772f38e96f8b4315d1150"; const { proof, ...credential } = verifiableCredential; @@ -29,7 +29,7 @@ describe("digest v4.0", () => { expect(obfuscatedVerifiableCredential.proof.privacy.obfuscated).toMatchInlineSnapshot(` [ - "64f21c91615d91a7430eb834b33b409259625f33a2e3891c7f6976cc5be6ee9e", + "3ab265cb563c7eff24dfed07cff40ed3644d6591424f3f7d29803f66d33178a2", ] `); expect(obfuscatedVerifiableCredential.proof.privacy.obfuscated).toHaveLength(1); @@ -49,9 +49,9 @@ describe("digest v4.0", () => { expect(obfuscatedVerifiableCredential.proof.privacy.obfuscated).toMatchInlineSnapshot(` [ - "0c5c136c958df65ca70ea7c8a8fa2dc076bbb24d9d040e92a4c434a3d399e13b", - "3f303d3023c4f9fdaff8a930a76d7eaa9379cdb91c0a139dbcc33809da24499c", - "60dcf42761bbad28607ebee19657335c79539ebb49e905edffb69c743d878848", + "b7c00bc647ad41c9d446b2ee40426c6a268694046dc790af4707cd91af2798a4", + "c6f6daace5b15efe7049830cadb993566633ba6bb23d3980e644f69cce93e4a4", + "5f9d1c1351d01055844dbfcf100f058a5c37ae051719f04837c328244d3ce95c", ] `); expect(obfuscatedVerifiableCredential.proof.privacy.obfuscated).toHaveLength(3); @@ -71,78 +71,78 @@ describe("digest v4.0", () => { expect(obfuscatedVerifiableCredential).toStrictEqual({ proof: obfuscatedVerifiableCredential.proof }); expect(obfuscatedVerifiableCredential.proof.privacy.obfuscated).toMatchInlineSnapshot(` [ - "334773dd035f824f9f6d6c990a9352c86ca0212f1e6ab1b6830408940243633b", - "73766305cdd739bbb42392cb12c6caaa8aab04a49b1ca3fa72e635a0fd965054", - "cea40f9d495354864581b58704407bb86ea2a800ddcee4119bb6f6b464b1d08d", - "37c7347e8fbea3ddaa9b013cba3b4d168dbb5fa0eb655f93948c375b65ab0ed6", - "019361c659697addc497621f6b5379e8e25a05526d41f6b132e3327ccffcd28f", - "64f21c91615d91a7430eb834b33b409259625f33a2e3891c7f6976cc5be6ee9e", - "aed3887fb97eb2eda746589f940fcb26c7d8f838a5c8d38e717e83d070e8a9e2", - "aee7ef0d7cb1de180a885c4321511c60ffd0d12a7ac34755e8ed43ecafc44494", - "16ce1de2cb512f8b0e759e1c63de8e9108cfeec33be6125eb047d55d1a1a3b97", - "e2605099b77afbf81b696a32288bddd5bc2aee7a7cd50456ca52adb8d94e38cf", - "51842bb2f40dbd01aa58f0382789db9c3c25910651362350817a5d6a02643467", - "f704cceab35a1cca3b33731545cb70f7c9915036c4887f82eb1e3e84f839ab9d", - "861108158a9bb6649ca027369cd9f5b8fc04d99401f7b03383ac741eb823cf39", - "537d2e7d9bbbadaf5ded31b02da3b8e5f4c80684005ea8e5774cd674fbf3980f", - "b7f784b55c2e0b88bad3a8ae7844486eca1f757b6e3abd21d7ea2f677b546fe1", - "cd47120779cb2c36fa75125084dccf59b9b019db15698cd190eb8a622e0fa72e", - "44b01dfc0da17a24f22baeaeaf311bf08576b493ab20d5417996f40ca559027e", - "8ce101f5bbb344f5d0d369c879e84f7a0df2accd7b37b6440636c2077190ad68", - "6d003e734c84fc5c1742a54a37c816bffddec958b7de17a9608c57b9684d6595", - "06175801c35d7cfc2e5bfb4dc491efeeff6830259df4c5ebdc29a02c77dae1dc", - "806b2cc2ff30b4f536d3e58f3d39a0716bdc1a58920759be63c7ff8d6614293e", - "ac1984071ec67e3ea61a39539d5639860d9061475a180b1a34d291143d9e17da", - "4e840ded70d9087c8cb14ec7cf36f794399b7b3b0f58f4cff5d603f795a10026", - "0a29a1423813d456c2992d50ae1f768ea64b8919fcbd9c0f2070ca8f1dc5282c", - "6a7e73a39abcde6a61f801a44080bd008dab25eaecefd013b5638e311557afe9", - "c1fbf60a25017ee08db4d9e3fb1a35de1ed07ce31123a9d16d4f386948beb00a", - "3c71562f88dd131f8f2e87744bdd8b5dafaedc72bb5a1334f08ccc12fd1eac2a", - "c1ce27fb0c124e6a48c57a461f01ae88cd9757f32a88b1cfd72ce1b16335d195", - "271bad071400301f6a5d1b87bc57c621832fbc005ed376c0930e4e2fefb7e8a6", - "19c62aa3091996e4ad8ff87327968d8c9732b0d52fae1d7957cdca066a8dae2a", - "969a6b4fed64cc6bc03cb39e555471cbfd4c688aabd73408e1a75d10a45fe232", - "e6f1c5fecea3fd20f19cd401e32c756a70b2515296c1a84cad1241ccfbb46d9a", - "1f65a38f57c58bf97f17d1b39d1b3a5132a445e7d7a4c1382263bca4d7e2f6da", - "27079c9b4d0da7bb296b76990077a5428a1da3acab23533e33f71044cd30e4ca", - "0e264ed0ed64142ff89d1271b31c8af1089041cfe88dafd7edb8b180d61f3fac", - "473c14d6b5003ae5b90338f1e2d1a96ad74abb303ea36a9b2d0997718d4bea3a", - "e27fee4caab163c8c296cadfaa7de3d51b358c024fb841f9bba3f5fd2242120d", - "453ef4ea13d029f93384f1fb435cca0bb98f6abced0d4714fc382b6f139b1bbd", - "d53fe2271521650fa3f340d71585697a2132402fb67b1dc6bb4af600247698f9", - "3f303d3023c4f9fdaff8a930a76d7eaa9379cdb91c0a139dbcc33809da24499c", - "0c5c136c958df65ca70ea7c8a8fa2dc076bbb24d9d040e92a4c434a3d399e13b", - "9b349234d4048af5f4bfa7b49a8f538b5a871897bafe6cd5d12b892d9a8fe047", - "02c501a51a5b98ffb40c0cc49ed028830a4e51ba7ac64b069abf2504b4036a5f", - "7deecd85f4987312f1694ee04596f1925db14f24b9ef1a49d80d9b53e9a3004d", - "60dcf42761bbad28607ebee19657335c79539ebb49e905edffb69c743d878848", - "73c597d557aefe29d90e91ed173786447ca8a844a48ab9e6b7754011b9dc3d11", - "042d21eda4189c66e217843fdaa05fbeac71ca18dc8bd756c40240020b588f04", - "f274edd3f04bfbfd1ee20ea3ba7f2a77e53295647163c1484b77e490df536fb0", - "119e94cf3b6880f62a17e0a4deb4a532b8af37a9432865abc316c4b348c55970", - "d7e9d77fc4549ab28029673b2b627856036d460afe08cb0a42e399e276e6aad6", - "83a3300c5ed08e9be72f8b57d0f91b093abf86280d28cacf6418d62d35c82966", - "88b36e1a32740562ef9a5014087c4c12d9e3a2b3149fa916f6da51c720e6ac5e", - "13f5f1932d2e163ea88f610cf19184eaca0dbe9516fbb267f33f23382ebcd9b7", - "b337d898307b99a8b4594994de2a083d694c7609346103e5f320d77e92db6839", - "da9567df9b5533f5dcac74396ee921869a670d23b3216ad3360a09c0afd34391", - "420389026e9af30df94163660c52b601b2b83be2f6c1220b5eafd8a557755edd", - "00caf617c53702c65a2c86544976a65775bc28d4bc4b42d6e8b988b9093d23dc", - "d8c7fe69cbd871ef8de6d22a3f85fe1c173abd1b5421d12574d03c9c3af86523", - "3a33a800cfba77e683853342964eb974c5a94f37426c5adf815595dd4f235dcd", - "0e5437bd41ec3a59361e3933d4c3447ac052fed32cdc5e745a233f910527fad4", - "b8f3b26f2e8ed9a04c480fd02ec1c7e51857923ce6b18beb4421b70f87cfefd5", - "33b614be854ae6aa03694b4ba0a947da6a3c639be225cf0820c5f9fae241b92c", - "541f832d5844d6a69854abca2acf0bef5801a9106b586bd477c861647bdff993", - "83c4c43c35313cbc7121dc832a33ed1215f3cd38277a2c556e2698fc5e58c00b", - "5ecc72d784dfb60394e7c94b28afbb799f541a3fe3931b7b7bdb310204fd18af", - "35848fabcd2d6d2bc0ba889b5d1d25f9ec8af8c1753c0ac93f84f15269e7970d", - "47c2c8f5ec53afa14da2116874b2c67fd22608da54e5b7b50759c9778b4a15d1", - "87100106b645b241ee223fbc27689540612057bf9e9a1013acab4e6422c70b52", - "ac0ae1d4877c9399776466d34fa3d5ebe2e36535e303a458033e592641822399", - "9ec16217b63485709169d817f4fac105170440daba9aa3448589813f17b0ea72", - "52d56439e7047eaafee32002d0c16ac396a875fcbaa68503b85f8b456396933f", - "545e3d045e169b6d9514c788c6760efee7bf39689a6b3808204a53b7bbb8ebca", + "008784adf2e69bb3ed0a9e89f65eb49c4c6aa1d68268f00a90af1097ffdc7a33", + "54e9f5aebe7bd1da2abd287b7d312b9294279a2be6748cb6ceefd8ee9673d336", + "6690718e61ebdadc3ee577551621ba13a3e5ac2d6df60e28534112d24ba5232e", + "b45d353bb2ea820455f32d549e6860ee75837c393e70904a5cb9e195fe8f9514", + "9f51119813540c17aec50c92552ab41ad869f1a1db6a4f4bf81686378566ab57", + "3ab265cb563c7eff24dfed07cff40ed3644d6591424f3f7d29803f66d33178a2", + "d62f42213ca3c04d725d2ecdddfc5c5a0455469baa2c2994f4347f9175f0412c", + "782797f2d774e04e3d63f6c52cefa38ebbeb54469a67e4d400e98fc0801556e0", + "85e42eec9de6d3dcb6beca7382e7078bac2919f569a8dcf1fd7a0430167d4575", + "17d96ec9c1fe914fa0df4b81c11fad894247259c595a4c9083958a44a0291610", + "de644fce7068a28c3f3904bc94d6a4a775c2cba92de94fd5cb1c7cc676dd8da2", + "27a6724717fa9ae7f47c2b9aec500ed7b20f0afa090d99feed14a9049b30203e", + "d8de3d7fe4c6091fb040dd9391c31d41b5f46b9a7074c613f64f2c50fd3b6b2b", + "e9921b4150346670e6020b006a0345459d0cda9ef5bbedd3770771c41d63499b", + "2cf5ceb32e849dcdbe95660513514fe32d0d2cf07f2ac1a876b42c16214de4a2", + "8863970f284f79acfe04d6c1cbd43bb88ff5aba61112234385cd3f3d3be51753", + "cbd4737e911620688d0d284f3b26b89fb4f63fccba915da727f19e0c28cdc7a7", + "bd3258c6562a25d3b5a8954bf588095b908799e212610548b74bcd19fd93fb63", + "45a3f1a678afb60a7d33629c9e8898070df8a05b20102290df2006588f31df0b", + "89113ae2e91b8efadbccb48ca8933b074562ef96866f9d0029d0a5a1635836b9", + "b486948597c9951497126a3ad65d52f1e6844fb7a373f6ad582d4930035f80c0", + "13c24585d9ce52c383fea0d9733649b7d3ee828333646d9fb3acff834235b028", + "ba851d11bc4457fa262d55254ba95e5d4e5a9da20b4926b6916fb8b3ef0ce65d", + "c63efeacdb69d68e52f76d90f824eb77e305b2f8d9253226dea0176df7f9f089", + "9d2f14e851c96609a6489ea257885bd8818d588621b35b323c8c570ce117617c", + "69659291007ae3193926f1e3e618d131f9b1dbab1f3f940b318b1b83bce1d396", + "37149b14aeebc0538951c4f88bb9a0e49b97622a929b0f37758825a912c3e3da", + "60627af7fd93634f6f013db9c7837662e2839ab28c7ba41aec0df0e651bb4283", + "7698e84c82091c9c7fdf5290d9b7983f70024684d5023d08d2a5d540e79adf81", + "7115349d5983fd3d651e6a456daa3c9a98aa42582336f7f8820f770a445cbe81", + "96ef912a326f4c14e7b12dace418ca82d46e0015a715a64de7633ab9927ba6de", + "de46d656c6df85bb29a0460cf4628c2a98c7d486cb248f37e6b11556040c13ba", + "b1ad8d4ab5ce02ceb12568bba516509942387856b3d2c07af6501c061cc87451", + "927b70286fcfb95138391a57a25342ce5a53ae020bfea69bcecd78fc63152f71", + "b2e175668027a6592ceeaef85f7e35d4f9162d068d7929bcac7426cbb9d37d29", + "b3b5218e37927d0ac58bae71021a5ff0f654f433bd67eb6e595c046376b752c6", + "cd943c3cb74ebeec414bd42d2a3770530c86f4ce7d0dbfe1fd2d1dc593aa280e", + "b8116589d800ca209fd8a7ab40223d886730e071705bb8f1ab1d50ff0e42dca2", + "426f50db4d81bd27b2887b520af69ea3eb591725e9ed1f01fb024d9ac3252366", + "c6f6daace5b15efe7049830cadb993566633ba6bb23d3980e644f69cce93e4a4", + "b7c00bc647ad41c9d446b2ee40426c6a268694046dc790af4707cd91af2798a4", + "330adf8228b05b575ea01997eb2a73d7d4bb31dd3ce3a150650b641f3765227b", + "9f0f6892058861ba3c4f1e4dfba5ac1db9cf4f9d25e7cbdd23567aa1e27f9410", + "ac51bf94f175586db73bb08ae389fc700103d4d0977e5d258c211bb7733fb928", + "5f9d1c1351d01055844dbfcf100f058a5c37ae051719f04837c328244d3ce95c", + "9ead189203ae69b4af749d37ba179a3ae84f612c0fead6acd4946d035cd3c9d5", + "2446000c3e110c3866ddf1cf7ec165a39b0cd102a225bdf4f717ea388b9de238", + "0ea8a88b839f69e2ac31356255245ae4485eaa85a581a336c9546dae9eacd084", + "89d3a60b0e89c3cf1c4e8c4810f32c6902a15f4444b3d94486bb53c8fed7001e", + "627194fdf7e4a0a6712b3ada915651b4027e688ba8b120ce5ce9854a577948f4", + "44cba34631f99ef080ebb494e1d09c7cc64ef838a270b5ae1fadf0812b05b376", + "4a334c0e46e40c31821cb3a169c8fe0b1d09cefb5dad187073ce1d95930aac4f", + "4ca0d4bf685bd4eb72bd45f1ca8ee86e1930fe44e3c2817816fa8f2e193236de", + "73fac6dbc7814f2fca84405e6c33ff63e3df9dfb85b51e7a071cd908284070d8", + "1a8be31aca5d7c5bf406d5cbb40ecdb704e8999187487ffd761b2d3da5609003", + "1991589e4e8b8a6e8f97b0980448d019d25d0132a29d7178b42ce09b5a0f381e", + "fd5ba936506111d45b006ce2d18ad09b9baebeacb844eeb6f97eb02f4a7ee582", + "0dc9a50e30993dbb1c766cda68666ed143e12eeea2f102948e4efc9836465abe", + "c057915151b17cb8434337e8154de954bf4dd12cb89bea4e3c420b52b1930531", + "cdf7179659079d04fa0dfa5cbc00b22d3112daa3870b2a3e34b3814c51bb28f7", + "1a1782cfcf768adca8c28bee50e726cf4b83854b66d6be264855dc17bbb4da32", + "dfc7c4737b7020712bcdabde73941a2037cd2b64e7ddc0d62005f94107e6a7e2", + "12fd3239cdfb73def93daccc9ed7d911b569e90f215c36d95f26f1ba9d28fafd", + "0b8547d4a369fec0f16b6a7a06ff67c6ea084f256d7754b8b690d0f317ffbcd8", + "2b03cac576abbc6d985c085085fe754eea8c69d2c789d25d1d55f5e1f706beb3", + "cc09ef332daa6877fc8c41e4c302f8ffe9cd9612b6c281cfd0f19f035cf1fb24", + "b231a30abd0f9996229aa8c327c472b9af3ad7ec2956d15fd076f6642ce63d12", + "a9cb0bc40b1ffadfd46a59046c3f7f0622757faa4aff121b76e5c34339f7a534", + "81fe2151515c6ae32232a17229e265bea62e814cc43d88182ac82472e031ab3a", + "1ef3e0aa4e1d0c9e5261905ce7530b7de41dfb39f971af7093a606f1c042af8e", + "cb59872d81a5d7078be868c1128ef0b8d0cb33ebe8312175661cc2c4f48225e0", + "96b9df0fd0ba01d29ae88b7fb99459f8d2773fc5640286ce40d0fc8033a31125", ] `); expect(obfuscatedVerifiableCredential.proof.privacy.obfuscated).toHaveLength(72); diff --git a/src/4.0/tt/__tests__/e2e.test.ts b/src/4.0/tt/__tests__/e2e.test.ts index 654279e4..5bc9a903 100644 --- a/src/4.0/tt/__tests__/e2e.test.ts +++ b/src/4.0/tt/__tests__/e2e.test.ts @@ -22,7 +22,7 @@ import sampleWrappedSigned from "../../../../test/fixtures/v4/tt/did-wrapped-sig const documentDid = sample as TradeTrustDocument; const sampleTradeTrustDoc: TradeTrustDocument = { - "@context": ["https://www.w3.org/2018/credentials/v1", "http://localhost:8080/alpha-context.json"], + "@context": ["https://www.w3.org/2018/credentials/v1", "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json"], id: "http://example.edu/credentials/58473", type: ["VerifiableCredential", "TradeTrustCredential", "AlumniCredential"], issuer: { diff --git a/src/4.0/tt/__tests__/obfuscate.test.ts b/src/4.0/tt/__tests__/obfuscate.test.ts index 695696e0..b01542b9 100644 --- a/src/4.0/tt/__tests__/obfuscate.test.ts +++ b/src/4.0/tt/__tests__/obfuscate.test.ts @@ -24,7 +24,7 @@ const data: TradeTrustDocument = { "@context": [ "https://www.w3.org/2018/credentials/v1", "https://www.w3.org/2018/credentials/examples/v1", - "http://localhost:8080/alpha-context.json", + "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json", "https://schemata.openattestation.com/com/openattestation/1.0/CustomContext.json", ], issuanceDate: "2010-01-01T19:23:24Z", diff --git a/src/4.0/tt/__tests__/sign.test.ts b/src/4.0/tt/__tests__/sign.test.ts index f12597ff..7177d249 100644 --- a/src/4.0/tt/__tests__/sign.test.ts +++ b/src/4.0/tt/__tests__/sign.test.ts @@ -15,7 +15,7 @@ describe("v4", () => { expect(Object.keys(proof).length).toBe(9); expect(proof.key).toBe("did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller"); expect(proof.signature).toBe( - "0x0830cbd0a56ffea5d94f56ce3aabb9ec4de9996bad1d35f63ca4795d09fb46807d532bc730578611750092a92621f0f0a89f78dcf2f33bc06361a80b417395641c" + "0x98f3d0f71671efc478eb3b3df7d301a520bcdcd8c08f9066ec8b8a4616ea397528d84f764462209f85659715501d7e2ddd63443653c77d6f66cc21331781b90e1b" ); }); it("should sign a document with a wallet", async () => { @@ -30,7 +30,7 @@ describe("v4", () => { expect(Object.keys(proof).length).toBe(9); expect(proof.key).toBe("did:ethr:0x906FB815De8976b1e38D9a4C1014a3acE16Ce53C#controller"); expect(proof.signature).toBe( - "0x3f1b55c7a822ea7bdbfb739eb818fa91e4086dc60b616dec32fd0d32b584beed504531d93e36c808941ed04c7a2c3f252795671fd8201b27fea51c2f8ea9c2f91b" + "0x3e487607cfcf536e1fd912161fc67ac7306fe6246999760c929c94bf125992614d24a0f39ebb690bb1d5fd02dca7cb78d06aa012f3c907ba7a8e5add80f42c5f1b" ); }); diff --git a/src/4.0/tt/schema/schema.json b/src/4.0/tt/schema/schema.json index 06a76033..e9b15619 100644 --- a/src/4.0/tt/schema/schema.json +++ b/src/4.0/tt/schema/schema.json @@ -1,6 +1,6 @@ { "title": "Tradetrust v4.0 Schema", - "$id": "http://localhost:8080/alpha-schema.json", + "$id": "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-schema.json", "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "definitions": { diff --git a/src/shared/@types/document.ts b/src/shared/@types/document.ts index 56c163ab..2323fce5 100644 --- a/src/shared/@types/document.ts +++ b/src/shared/@types/document.ts @@ -50,16 +50,14 @@ export enum SchemaId { v2 = "https://schema.openattestation.com/2.0/schema.json", v3 = "https://schema.openattestation.com/3.0/schema.json", oa_v4 = "https://schemata.openattestation.com/com/openattestation/4.0/alpha-schema.json", - // TTv4 = "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-schema.json", - tt_v4 = "http://localhost:8080/alpha-schema.json", + tt_v4 = "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-schema.json", // Note: Schema property is no longer placed in the OA v4 // document } export enum ContextUrl { oa_v4_alpha = "https://schemata.openattestation.com/com/openattestation/4.0/alpha-context.json", - // tt_v4_alpha = "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json", - tt_v4_alpha = "http://localhost:8080/alpha-context.json", + tt_v4_alpha = "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json", } export const OpenAttestationHexString = String.withConstraint( diff --git a/test/fixtures/v4/tt/did-idvc-raw-idvc-revoked.json b/test/fixtures/v4/tt/did-idvc-raw-idvc-revoked.json new file mode 100644 index 00000000..0b65e1db --- /dev/null +++ b/test/fixtures/v4/tt/did-idvc-raw-idvc-revoked.json @@ -0,0 +1,111 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" + ], + "type": ["VerifiableCredential", "TradeTrustCredential"], + "validFrom": "2021-03-08T12:00:00+08:00", + "issuer": { + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", + "type": "TradeTrustIssuer", + "name": "My Own Company Pte Ltd", + "identityProof": { + "identityProofType": "IDVC", + "identifier": "My Own Company Pte Ltd", + "identityVC": { + "type": "TradeTrustIdentityVC", + "data": { + "@context": [ + "https://w3id.org/security/bbs/v1", + "https://www.w3.org/2018/credentials/v1", + "https://stg.issuer.myinfo.gov.sg/myinfobusiness/schema/corporatebasicdetails/v1", + "https://w3id.org/vc/status-list/2021/v1" + ], + "id": "https://sbl.alwaysdata.net/oa/credentials/123456789", + "type": ["VerifiableCredential"], + "issuer": "did:web:sbl.alwaysdata.net:oa", + "credentialSubject": { + "uen": "198801234E", + "companyname": "My Own Company Pte Ltd", + "type": ["CorporateBasicDetails"], + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C" + }, + "expirationDate": "2023-11-01T06:45:43Z", + "credentialStatus": { + "id": "https://sbl.alwaysdata.net/oa/status/2#1", + "type": "StatusList2021Entry", + "statusListIndex": 1, + "statusListCredential": "https://sbl.alwaysdata.net/oa/status/2/1" + }, + "issuanceDate": "2023-22-13T01:35:08Z", + "proof": { + "type": "BbsBlsSignature2020", + "created": "2023-10-26T09:24:19Z", + "proofPurpose": "assertionMethod", + "proofValue": "gV1gs4fkKMSU56bsac/5peRTOh88E3zF+vnJEMzUfrT6aoIANYcrFRAt1EzXmuEsZKAGC93tNPEWM0V+xNJaB3tsGEGHhQCmGbHCJ3RJQxclTLn7BEZ2v6xhwgWXlRFNGpgBLJXgQ8xkg7D6Br1IYg==", + "verificationMethod": "did:web:sbl.alwaysdata.net:oa#didkey" + } + } + } + } + }, + "credentialStatus": { + "type": "TradeTrustCredentialStatus", + "credentialStatusType": "NONE" + }, + "renderMethod": { + "type": "TradeTrustRenderMethod", + "renderMethodType": "EMBEDDED_RENDERER", + "name": "INVOICE", + "url": "https://generic-templates.tradetrust.io" + }, + "credentialSubject": { + "name": "TradeTrust Invoice", + "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "date": "2018-02-21", + "customerId": "564", + "terms": "Due Upon Receipt", + "billFrom": { + "name": "ABC Company", + "streetAddress": "Level 1, Industry Offices", + "city": "Singapore", + "postalCode": "123456", + "phoneNumber": "60305029" + }, + "billTo": { + "company": { + "name": "DEF Company", + "streetAddress": "Level 2, Industry Offices", + "city": "Singapore", + "postalCode": "612345", + "phoneNumber": "61204028" + }, + "name": "James Lee", + "email": "def@company.com" + }, + "billableItems": [ + { + "description": "Service Fee", + "quantity": "1", + "unitPrice": "200", + "amount": "200" + }, + { + "description": "Labor: 5 hours at $75/hr", + "quantity": "5", + "unitPrice": "75", + "amount": "375" + }, + { + "description": "New client discount", + "quantity": "1", + "unitPrice": "50", + "amount": "50" + } + ], + "subtotal": "625", + "tax": "0", + "taxTotal": "0", + "total": "625" + } +} diff --git a/test/fixtures/v4/tt/did-idvc-raw-tampered-signature.json b/test/fixtures/v4/tt/did-idvc-raw-tampered-signature.json new file mode 100644 index 00000000..d5fc8c06 --- /dev/null +++ b/test/fixtures/v4/tt/did-idvc-raw-tampered-signature.json @@ -0,0 +1,111 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" + ], + "type": ["VerifiableCredential", "TradeTrustCredential"], + "validFrom": "2021-03-08T12:00:00+08:00", + "issuer": { + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", + "type": "TradeTrustIssuer", + "name": "My Own Company Pte Ltd", + "identityProof": { + "identityProofType": "IDVC", + "identifier": "My Own Company Pte Ltd", + "identityVC": { + "type": "TradeTrustIdentityVC", + "data": { + "@context": [ + "https://w3id.org/security/bbs/v1", + "https://www.w3.org/2018/credentials/v1", + "https://stg.issuer.myinfo.gov.sg/myinfobusiness/schema/corporatebasicdetails/v1", + "https://w3id.org/vc/status-list/2021/v1" + ], + "id": "https://sbl.alwaysdata.net/oa/credentials/123456789", + "type": ["VerifiableCredential"], + "issuer": "did:web:sbl.alwaysdata.net:oa", + "credentialSubject": { + "uen": "198801234E", + "companyname": "My Own Company Pte Ltd", + "type": ["CorporateBasicDetails"], + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C" + }, + "expirationDate": "2023-11-01T06:45:43Z", + "credentialStatus": { + "id": "https://sbl.alwaysdata.net/oa/status/1#325", + "type": "StatusList2021Entry", + "statusListIndex": 325, + "statusListCredential": "https://sbl.alwaysdata.net/oa/status/1/325" + }, + "issuanceDate": "2023-22-13T01:35:08Z", + "proof": { + "type": "BbsBlsSignature2020", + "created": "2023-10-18T07:14:46Z", + "proofPurpose": "assertionMethod", + "proofValue": "tqvUVZOPaY/A+7Wu47HZIYbboPU/MPGhb1EPLUKKPRwmRe8QJ/dzjRviQ5fAbR88TjSalqLbaBeopNocjrl7TmzCOlLQxGeNC4El1TCICu5tiX0HxGSNAPY4t5CglTLMTsdu5kg4f0a5MGQTnFgwyw==", + "verificationMethod": "did:web:sbl.alwaysdata.net:oa#didkey" + } + } + } + } + }, + "credentialStatus": { + "type": "TradeTrustCredentialStatus", + "credentialStatusType": "NONE" + }, + "renderMethod": { + "type": "TradeTrustRenderMethod", + "renderMethodType": "EMBEDDED_RENDERER", + "name": "INVOICE", + "url": "https://generic-templates.tradetrust.io" + }, + "credentialSubject": { + "name": "TradeTrust Invoice", + "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "date": "2018-02-21", + "customerId": "564", + "terms": "Due Upon Receipt", + "billFrom": { + "name": "ABC Company", + "streetAddress": "Level 1, Industry Offices", + "city": "Singapore", + "postalCode": "123456", + "phoneNumber": "60305029" + }, + "billTo": { + "company": { + "name": "DEF Company", + "streetAddress": "Level 2, Industry Offices", + "city": "Singapore", + "postalCode": "612345", + "phoneNumber": "61204028" + }, + "name": "James Lee", + "email": "def@company.com" + }, + "billableItems": [ + { + "description": "Service Fee", + "quantity": "1", + "unitPrice": "200", + "amount": "200" + }, + { + "description": "Labor: 5 hours at $75/hr", + "quantity": "5", + "unitPrice": "75", + "amount": "375" + }, + { + "description": "New client discount", + "quantity": "1", + "unitPrice": "50", + "amount": "50" + } + ], + "subtotal": "625", + "tax": "0", + "taxTotal": "0", + "total": "625" + } +} diff --git a/test/fixtures/v4/tt/did-idvc-raw-wrong-binding.json b/test/fixtures/v4/tt/did-idvc-raw-wrong-binding.json index 1a76e139..678c4e19 100644 --- a/test/fixtures/v4/tt/did-idvc-raw-wrong-binding.json +++ b/test/fixtures/v4/tt/did-idvc-raw-wrong-binding.json @@ -1,5 +1,8 @@ { - "@context": ["https://www.w3.org/2018/credentials/v1", "http://localhost:8080/alpha-context.json"], + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" + ], "type": ["VerifiableCredential", "TradeTrustCredential"], "validFrom": "2021-03-08T12:00:00+08:00", "issuer": { diff --git a/test/fixtures/v4/tt/did-idvc-raw.json b/test/fixtures/v4/tt/did-idvc-raw.json index 925eed9f..d5fc8c06 100644 --- a/test/fixtures/v4/tt/did-idvc-raw.json +++ b/test/fixtures/v4/tt/did-idvc-raw.json @@ -1,5 +1,8 @@ { - "@context": ["https://www.w3.org/2018/credentials/v1", "http://localhost:8080/alpha-context.json"], + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" + ], "type": ["VerifiableCredential", "TradeTrustCredential"], "validFrom": "2021-03-08T12:00:00+08:00", "issuer": { diff --git a/test/fixtures/v4/tt/did-idvc-wrapped-idvc-revoked.json b/test/fixtures/v4/tt/did-idvc-wrapped-idvc-revoked.json new file mode 100644 index 00000000..cad1d330 --- /dev/null +++ b/test/fixtures/v4/tt/did-idvc-wrapped-idvc-revoked.json @@ -0,0 +1,129 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" + ], + "type": [ + "VerifiableCredential", + "TradeTrustCredential" + ], + "validFrom": "2021-03-08T12:00:00+08:00", + "issuer": { + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", + "type": "TradeTrustIssuer", + "name": "My Own Company Pte Ltd", + "identityProof": { + "identityProofType": "IDVC", + "identifier": "My Own Company Pte Ltd", + "identityVC": { + "type": "TradeTrustIdentityVC", + "data": { + "@context": [ + "https://w3id.org/security/bbs/v1", + "https://www.w3.org/2018/credentials/v1", + "https://stg.issuer.myinfo.gov.sg/myinfobusiness/schema/corporatebasicdetails/v1", + "https://w3id.org/vc/status-list/2021/v1" + ], + "id": "https://sbl.alwaysdata.net/oa/credentials/123456789", + "type": [ + "VerifiableCredential" + ], + "issuer": "did:web:sbl.alwaysdata.net:oa", + "credentialSubject": { + "uen": "198801234E", + "companyname": "My Own Company Pte Ltd", + "type": [ + "CorporateBasicDetails" + ], + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C" + }, + "expirationDate": "2023-11-01T06:45:43Z", + "credentialStatus": { + "id": "https://sbl.alwaysdata.net/oa/status/2#1", + "type": "StatusList2021Entry", + "statusListIndex": 1, + "statusListCredential": "https://sbl.alwaysdata.net/oa/status/2/1" + }, + "issuanceDate": "2023-22-13T01:35:08Z", + "proof": { + "type": "BbsBlsSignature2020", + "created": "2023-10-26T09:24:19Z", + "proofPurpose": "assertionMethod", + "proofValue": "gV1gs4fkKMSU56bsac/5peRTOh88E3zF+vnJEMzUfrT6aoIANYcrFRAt1EzXmuEsZKAGC93tNPEWM0V+xNJaB3tsGEGHhQCmGbHCJ3RJQxclTLn7BEZ2v6xhwgWXlRFNGpgBLJXgQ8xkg7D6Br1IYg==", + "verificationMethod": "did:web:sbl.alwaysdata.net:oa#didkey" + } + } + } + } + }, + "credentialStatus": { + "type": "TradeTrustCredentialStatus", + "credentialStatusType": "NONE" + }, + "renderMethod": { + "type": "TradeTrustRenderMethod", + "renderMethodType": "EMBEDDED_RENDERER", + "name": "INVOICE", + "url": "https://generic-templates.tradetrust.io" + }, + "credentialSubject": { + "name": "TradeTrust Invoice", + "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "date": "2018-02-21", + "customerId": "564", + "terms": "Due Upon Receipt", + "billFrom": { + "name": "ABC Company", + "streetAddress": "Level 1, Industry Offices", + "city": "Singapore", + "postalCode": "123456", + "phoneNumber": "60305029" + }, + "billTo": { + "company": { + "name": "DEF Company", + "streetAddress": "Level 2, Industry Offices", + "city": "Singapore", + "postalCode": "612345", + "phoneNumber": "61204028" + }, + "name": "James Lee", + "email": "def@company.com" + }, + "billableItems": [ + { + "description": "Service Fee", + "quantity": "1", + "unitPrice": "200", + "amount": "200" + }, + { + "description": "Labor: 5 hours at $75/hr", + "quantity": "5", + "unitPrice": "75", + "amount": "375" + }, + { + "description": "New client discount", + "quantity": "1", + "unitPrice": "50", + "amount": "50" + } + ], + "subtotal": "625", + "tax": "0", + "taxTotal": "0", + "total": "625" + }, + "proof": { + "type": "TradeTrustMerkleProofSignature2018", + "proofPurpose": "assertionMethod", + "targetHash": "f7b498c78de16c381751083fd86904b9f013fe714496597fe659730be78cf625", + "proofs": [], + "merkleRoot": "f7b498c78de16c381751083fd86904b9f013fe714496597fe659730be78cf625", + "salts": "W3sidmFsdWUiOiI0MWJlZWRkNTA3N2RjYjYxMDY3MzkwOGM1OTIwODEzNGM3MDljMzQyNTZjMzA2ZjU5OWRlODk5NjIzZTEwM2M0IiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6IjE0M2Q1MTc4ZWI2MWIyNzU4YzJlM2VlODRhMDQwYWEyNGE5YTc5MTVlOWM2NTAyY2I3NTRiNDc0N2VjMDAxM2EiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiM2Y3MGI2ODQ2MTI2ZjkyYjQ5ZjA3NmFmZTc2NzdjYzk1ZDJkMmQ5MjdjM2JiMDY3ZWFlMzY5MWZmOWM1YWE2ZiIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6ImU4MDYxNTZhZWRiNWMxZjU4MTc0NTM3YTkyZTQxODFiN2MyZjQ4MGUyYzU0MzIwYzIwMTU4YjA2NDlkMGQxZjYiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiI1YzkzYzY0ZWIzZjBiOGI1NTBmYjg5OTIxMmUwN2M3YWE1OGU2YjA1ZjZkODgyNTNkN2FjMGJmZmE2NjRjZmE4IiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiIwMjFkNGVjY2U1MWVkMzI4MzQ4OGYzMmY3NGFiODdmMDI5ZTBiMjkwNjFiOWFhMmQ0NGFhYmYyOTk1ZDAwMjdjIiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiJiN2MxYWY2NjM1YzM0MjM3ODZmOTNlOTMzM2ViNTE2MzYyZTQyNTYyNjc5NGUxZDQxZDJkNGIxODkxYTdlNjJkIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6IjIyODUxYTQ1ZWQ4NWEzYWQ0M2U2YmM5ZDg3ZWI5ODQwMTIwMzQ0YjA1ODU5N2I2MGM1NzE4ZDNhZTU5NjE3MDgiLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiNzQzZThiZGE4NjQyZmQzNDAyODFkOWYzYTYwODYwOWQzODYwY2MxYjliODYyZjRlYmUxMmFlYTI5YTcyYTQ0ZSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiIwMjU0ZjRjNGRkN2JiMzQ1NzgyNTA0NzUwODU2ODg1NGE5Yzc5YTlkOGVmNzcwYmIxYWUzYjk3OWUzNjdmNDk4IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiODdmODkxYzNkNWM3ZWRjYWRjYTgwMmIzZDM0ODdjNTM0N2RmMmYzOTUwZDQ4MWE1N2Q3NzFmNGYwNDRmOGNhOSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLnR5cGUifSx7InZhbHVlIjoiOTgyODdiMTU1NzdjN2ZkMTJkOWQ3MmM3NTA5YzYwYWNkMDJjZjAxYWZjNWE0NmQyYTM0ZjY5ZmE1NGU1MTg3ZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMF0ifSx7InZhbHVlIjoiZDVmNDIyZWUwMmVlZjNmN2ZkMThmMjRjZjIzOTJkZTAzYmUzMjg3NTBjNDgwMTE1NjkyYTA4ZDYzZmM4MTVjMSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiNDRkOWQwZjUyOTRjOWNlYmJjNGNjNDFiOTczOTk1YTg1MmFiZmVjZDY3ZmNkOTZmYjFjY2Q5ODE3ZGNjNjY0MyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiNmJkOTkwNGNiYjg5YWFkYjJmMWRlZWFlYmFiZTA1OTQ5ZmUxOWFiMDBiODgwMDEzOTAxMzIwOWY2M2YwYjMxYSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbM10ifSx7InZhbHVlIjoiNmUwYTdkM2UyZjI1ZDI1ZjI5ZWYyN2M5YjJlOWIxNGY3NmI4MWVkNWE1MzVkNGE1YjZkOGE5NzBhNDU1YmNhZCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuaWQifSx7InZhbHVlIjoiZjRlYmMzODA2YjUzMjliMTJiMGI3MjZlNmQ1YzJmZTQ3Y2JmN2MyNmExNjU5YzIwZjE2N2RkNTkyNmE0OGZlNSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEudHlwZVswXSJ9LHsidmFsdWUiOiI3ZmUwYjRlZWI4Y2VlMzkxOTMwYjU5ZTQ0YTIwYTljNzIwZGFjYzBkNWE5MGNiODI5ZDg0Y2E5Nzc5OWZkNmFjIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1ZXIifSx7InZhbHVlIjoiYzE5OGU3MTI3ODJhZDU1ZjgyYjE3NmU5NDNhZTgxYWU5MzQ0YzJiZjZmY2ZlM2M4MDc5NTUxZTc1NTU3ZWMxYiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QudWVuIn0seyJ2YWx1ZSI6Ijc2ZTk5Yzg1ZjlhN2U2NzQxZTE1MDY0ODM4NzhmNWQ0NTQ2ZTg1YWRkNThhYzQzZWUxMmU1NDMyNTI3ZDQxNTQiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LmNvbXBhbnluYW1lIn0seyJ2YWx1ZSI6ImZlNGNiZDNiMDQ3NjAyNjg5OWE4M2JkODM3Njg2YzQ1YTA1ZGUwYWU1NTZkOGNiOGJhOGQ1NDllZGUzZWQ5YjciLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LnR5cGVbMF0ifSx7InZhbHVlIjoiYjkyYTk2MzU0OTg0YTI5NDRiMjM2MWE1NTBiODliMGFkMjA1NTdjMjNmMTgwZTI5NmViNmE1YTAwOGFkMjBmNCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiMDI2M2JkZTdkYTA4ZjQ3ZmYxYTA4OTllYmY1NTk1ODViNGJhYjc2NThhMWY4NTkyNzBmZjk2ODFmYzkyOTA0MSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuZXhwaXJhdGlvbkRhdGUifSx7InZhbHVlIjoiMTg3MDI3ZDZkNGUzZjRjNTUwZjM0MjQxYTRlN2MzNjNlYjBjZTQwYTE5OGQ1ODA5Y2Q0MDlmMjlhODQxMjYxZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5pZCJ9LHsidmFsdWUiOiI0ZjAzMDY3MDE2ZWY1ZTYyMjNkOTMzM2M1YWNkZmNiMTc4ODdjNjUxYTMxMTdjMDc5NmEyZmM3ZjNlNjlmYjI5IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5jcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiYjE3NDJlM2NlNGViZGYzYTk2ZTQxNGU0NGVmOWEzNGI4YTQyZWE4MjVjYWYxNzE0MmJkNTAwM2ExNzBmZDIyNCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0SW5kZXgifSx7InZhbHVlIjoiYjAzZGVlNmNkZTRkNjlkOWRjODlmNzYxMTY4MWNhMzViMzI3NDIxNWE3OGM5YTI5ZWY4ODI1YmYxMWQ3MWY1NyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0Q3JlZGVudGlhbCJ9LHsidmFsdWUiOiJhODMwMGM4ZDZjOTVhM2QxZWIyZTc3NWY0NTI2ZDg0YzNhYjQ3MDQzNmZmYTc1NzY4ZGEwYTY0YWUxNzM0NDE4IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1YW5jZURhdGUifSx7InZhbHVlIjoiZDdjMWY5YTlmYzQ0Yjk3ZWU0NmM4ZjgyZmM1YTc2N2I2NTA5OTM5NjVmMjlhZjM2MzU5ZjBmMGE3YTQ2NjNhNSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEucHJvb2YudHlwZSJ9LHsidmFsdWUiOiIwNjhhY2ExYTg1OWQxYWE4Y2I2NTFjNGNmODc0Njc3ODJlNTNhMWY4OWI4NGZlNmQyMTRjZTBkZDllYTA4ZWI1IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5jcmVhdGVkIn0seyJ2YWx1ZSI6IjA2ZGJhMTczZDU1YzJjMzRjODAxYTdmNTRiNjgyNjZlNDNiNDMzMWVkNGIwODhiYjgwODU3YjUyYjhlNWY4MDUiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnByb29mUHVycG9zZSJ9LHsidmFsdWUiOiIzNWRhZmEyMDIyYzJiNTY4NWNjZjRhZDUxZDU1YjM1YThmMzgxZWEwZDZhMGU1YWU2OTM4ZjIzOTJjMzRhMTcwIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5wcm9vZlZhbHVlIn0seyJ2YWx1ZSI6IjY2ZjhhYjJiNDIxOTNhNWNhOWEzNGY3ZDBkZTlkM2UxZTljMWQzN2NkNWMxZmExYWE2NjNlMDg0ZTU4NTQyODkiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnZlcmlmaWNhdGlvbk1ldGhvZCJ9LHsidmFsdWUiOiI4MWNmZDgyYmI5MjI4OWY5MGYxYjVlMTliNDlhZjQ4MDgxZmMzMmVhNTQxN2Q2NjU0ZmM2ZmQ2NTViMDI4YzlmIiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMudHlwZSJ9LHsidmFsdWUiOiIwYWY0NGNhNmYwNmUxMjczMjg5Mzk4MmFjYzhjNGFlMzdiMGFjYTkzNGFkYzcwMTBhYWQ2MmQyYWVkZmIzYTk3IiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMuY3JlZGVudGlhbFN0YXR1c1R5cGUifSx7InZhbHVlIjoiZjE0Nzg4ZTJhNTZkMDQ4ZDgyNjYxN2IwMzY2MDE0OGQ5NWYzYzAzOWExZTUxY2YyMTVhNjA5NDlmZmYzYTI1OSIsInBhdGgiOiJyZW5kZXJNZXRob2QudHlwZSJ9LHsidmFsdWUiOiI5OWQ5YjRlNDUzNjhmN2E1YjMyNjY3YjkyZDU2NzdiYzY2YjZiZWNiZDc4OTRjMWQ4M2VjZDFhMmU4NmJkZDVkIiwicGF0aCI6InJlbmRlck1ldGhvZC5yZW5kZXJNZXRob2RUeXBlIn0seyJ2YWx1ZSI6ImZmMzI2ZmZkM2Q5ZDI3ZjEzZDdmYWNmMWNhYWViM2Q3NmEyNTIwMTA1MjQxZjJmZTBiODg1YzI2ZDk4MTViMTMiLCJwYXRoIjoicmVuZGVyTWV0aG9kLm5hbWUifSx7InZhbHVlIjoiYzEwZmY1NDU3MzgxNjUzOTUyMTAxYTVhOTgxMjAxYzA1NjMzNDQyYjgzNTU3ZDAxYWI0ZTUxZGFlN2RmODFlYiIsInBhdGgiOiJyZW5kZXJNZXRob2QudXJsIn0seyJ2YWx1ZSI6IjAxYzhiYjUwNDlkYjEzNjQwYzlhNWIzMDEwMjc4Y2I2NTc2OThmMGNlMjM2NmVlMjU2NTBiMjRkZWE0ZDEwYmEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QubmFtZSJ9LHsidmFsdWUiOiJmZWQyNzc5ZTNhYjY1YzE0YjdjMzA5OWNkYWU2M2E4ZDhmY2Q5NjUyODM3ZjI1ZDg2N2I3NDdiNThhZjM0NDkzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmlkIn0seyJ2YWx1ZSI6IjQ2MTJhZjAwMGM5NjRhNThlNTRiYTVkYmJjOGM2YmVmYWVmZTk0M2ZiNzZmMjVmNGI0ODlkZmE5ZDZiNGVjM2MiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuZGF0ZSJ9LHsidmFsdWUiOiIxOGJjZjk4NDZiZGZiNTQ5MWZjNDE5YThhNzc4ZWMyYzYxNWZjNWQ4MDhjM2Y3MzVkZGQyM2UwMzg4NjE0MjRmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmN1c3RvbWVySWQifSx7InZhbHVlIjoiOWM5MjYyZWEzOGZiZDI5ZTIyMjJjNTZlYTA1ZDc3NDkzYTYwMzY0NzNkZmE3MDYwYTM5MzkwMjg3NjM0NGM2NiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50ZXJtcyJ9LHsidmFsdWUiOiI0MWExN2NmZWQzYTA4MzAwNjA5N2E2OGIzM2FkMTkzNGNkMjhmYWNhNzRlNzUxNWE5MTMzMWI4YjJiMjBiMWRhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLm5hbWUifSx7InZhbHVlIjoiOGE4YTBhMTI4NmRkODcyZjhkMWRlMmUwOTAxYjMzMWE0Mzc5MjllZjdkMGRhMmU5ZDIwMzdkZWI3MmM2YjY3NiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6ImJkMjljMzg5ODY2ZWU4MDI1YmZjYjIyZDUyZTc4Mzg0YTg1Y2UzNzgxNDc3ZjA3Y2VlNDczMzQwYWMwNzM2MTIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uY2l0eSJ9LHsidmFsdWUiOiI3ZmU5MTI5ZGQxMmJjZTRkY2E0ZDUyNWU4YjNlZTVkY2M5NGE4NDJlMTg5ZGFmZTM5NDMwYjQyMDcwM2UzM2ZmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLnBvc3RhbENvZGUifSx7InZhbHVlIjoiNGJlYzMxMzMzOTI1MWI4NmUwYTExMjYzZmU3MGFjMDc0YzMwMWFhMzQxOTM4OTY2MjMwNTIyZDk2NTA1NTQyNiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiIzYWM5Nzg4ZWZlZGE5NWUwOGVjZGFmMWE4N2IyOGI0NGI5NjQxNDk5ZTExZDBmMGJmNzE0MTZmYzg5NjRhZmY1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55Lm5hbWUifSx7InZhbHVlIjoiYTBlMjQ1ODNhMWEyNzNkZGJiYWMwZjM0MmZkMTdjNDVkZTBmMDg0N2I2YjRjMjFhZDk2MWExNDc0ZjU0NGZhNCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6IjkxOTRkYTkyOWYzZTMxMDU5ZjY4MzRmZmY2ZTg3ZjE4NTcyZjJkYWRmYjc5NmE0ZDJhNzc0NzZkMzI2YjY4ODgiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuY2l0eSJ9LHsidmFsdWUiOiJmZjc1NDJkNThiMWY1MGM1OTdkOTgzZmZiNWM0M2E1N2FiMDE3OGZkZTVhZDgwNTAxNWIyNDQ0MzYzOGM2MmUyIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LnBvc3RhbENvZGUifSx7InZhbHVlIjoiNzMxYmEyZjY0ODQ2MzdhM2M3OGI5ZGIzNjE1ZmIzNjJkNDhkY2NlNTg4YjEzOTdkYjRkOTIxZGJjN2QzOGQxZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiJjMDgyMWZiZWViNzZiOGY3ODA1MWJjMWVjMDI5MzAzMjRjYmUwZWFlOWQzNzYwYmQ1ZDhjM2E3ZjBlZmZlNGE4IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5uYW1lIn0seyJ2YWx1ZSI6IjRmZjlkYzNhNzdhZjU1N2EwMTU4NzIzNTkyYTczZDliMDQ2NTM4MzJiNjQ4YTFmYjUxYzc0ZjkwNzBjNzBiMGQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmVtYWlsIn0seyJ2YWx1ZSI6IjhjMzc0YTlhNjI4NTFmNTczYTMyNmI4MzQ5ZmEyZGQ4ZDk5YjM0MzVkOGYwOTE3M2EyMmYwZjU3ZGJjOTkwZGIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiI3MGJkN2Y5OTMxNTZjZWRiYmViYzU1ZWE1OWRmYTkxMmRkYzJlNzJlYTgwOWMxYWYzNDQzYWE4YjYwZWQzMjljIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0ucXVhbnRpdHkifSx7InZhbHVlIjoiZWZlNWQwMTY2MjE3NTkyNDUwOTc3NWI2MjZkMWE0MDNjYThlYzdhZGNjYWIwM2ZkNGNhZjFmODRhMTcwYjc1MCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiI1YTMzNWQ4NzRlN2RjMmM5MzlhNjgwOTI2YTI3MmNhMjVjYTk0M2Q2OWM1MTYzNzI3MWU5NzRlN2VlYWNhZjJhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uYW1vdW50In0seyJ2YWx1ZSI6Ijk3YTAxZmJkMDFkZDNkMWQ4OTBiMTEzODQxNmVmYTVjOWIxYjg0MjEyZGNjMTVkOWNmOWI4NmExMzNiYTFjNDAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiI5ZWE0MDA5NWM3NzM3MjBiMWY5MGYyYTEyYTk5MGQ1ZDU1Njk2NmZkMTFjM2ZjOWU2NWU1YjQwNjhiZGU0ODczIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0ucXVhbnRpdHkifSx7InZhbHVlIjoiMjFkNjM4OThjMzIxNjE2ODcxMjYzNzQzNTNmNWViOThhMWY4OGEzZTAwNTQzYzY2NmNmNjJhOTM2Mzk1MGQ3MCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiI3MjEwN2RlNjU0ZDdmODE1MmVkM2I5MzE4NWVkN2M1MzAyNDY3YzFiNmIxZjJlZGY1NDI4ZTdkM2E1MGUwYTJjIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uYW1vdW50In0seyJ2YWx1ZSI6IjE4Mzg5ODZkMWRkMGQyMWUyZTY4MzA4ZjlkNGM5OWRlODM4M2U2NThjOGQwNzM5NTBiZWJmMjViNmJhNzlmNGQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiI1Nzc2ZWE4YWY0ZTYxN2Q5OTQ2MWY0MTI5NjY3ZWE2ZjM5ODk1MzY1NWQwMWIxZjljOGRjOGQ4YjQ2NzhkYzk0IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0ucXVhbnRpdHkifSx7InZhbHVlIjoiNDg3ZDc1MzM5MTU0MDczYmY4M2NlYmY4ZDA2MzdiNTY5NDdkOWEyOWNlYTEyOGYxNWVmNWFmZjM2YzI5NDVhZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiI4OTJmMzA0OWJlNGFjNjM1ZDIwZDZmYTdiNTFmNDkyZjZjZjAxMTk5MWZjMjdkOGVkNzM5ZjEyMmFlNGQwZmUwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uYW1vdW50In0seyJ2YWx1ZSI6IjhhNDZmNTY0ODA3NDI5ZGQyMzJkZTBjN2M4M2Y0NTIzNzVmNTI3NzhlYTJiMGI4MzFkZTQ0MTJmYjlmZTRmZTMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Quc3VidG90YWwifSx7InZhbHVlIjoiOTZiNmM1YTExM2Q4YWQ4YTkxNzcxNDg3YjlhMTZkMjg1MTE4MDczMjEyODdiNjBjZWU1MDU5YWUyYWU1NzcxNyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXgifSx7InZhbHVlIjoiYzE2NTU0OGU1NThkM2JhOGRlMWQ1ZWJjNjYyNWIwNTg1YTY4OTEwN2ZlYTc4ZWI5NTZlY2MyODUzZTk3MDMwYiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXhUb3RhbCJ9LHsidmFsdWUiOiI5NjcyOWJlODM5ODRjOWY0Zjk1ZTE3MzY4Nzk5MDU0MTBlMWJjMDkxYWEyNzczODBjZWEyN2VkNzYwZWIzZGM1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnRvdGFsIn1d", + "privacy": { + "obfuscated": [] + } + } +} \ No newline at end of file diff --git a/test/fixtures/v4/tt/did-idvc-wrapped-signed-idvc-revoked.json b/test/fixtures/v4/tt/did-idvc-wrapped-signed-idvc-revoked.json new file mode 100644 index 00000000..eed255d8 --- /dev/null +++ b/test/fixtures/v4/tt/did-idvc-wrapped-signed-idvc-revoked.json @@ -0,0 +1,131 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" + ], + "type": [ + "VerifiableCredential", + "TradeTrustCredential" + ], + "validFrom": "2021-03-08T12:00:00+08:00", + "issuer": { + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", + "type": "TradeTrustIssuer", + "name": "My Own Company Pte Ltd", + "identityProof": { + "identityProofType": "IDVC", + "identifier": "My Own Company Pte Ltd", + "identityVC": { + "type": "TradeTrustIdentityVC", + "data": { + "@context": [ + "https://w3id.org/security/bbs/v1", + "https://www.w3.org/2018/credentials/v1", + "https://stg.issuer.myinfo.gov.sg/myinfobusiness/schema/corporatebasicdetails/v1", + "https://w3id.org/vc/status-list/2021/v1" + ], + "id": "https://sbl.alwaysdata.net/oa/credentials/123456789", + "type": [ + "VerifiableCredential" + ], + "issuer": "did:web:sbl.alwaysdata.net:oa", + "credentialSubject": { + "uen": "198801234E", + "companyname": "My Own Company Pte Ltd", + "type": [ + "CorporateBasicDetails" + ], + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C" + }, + "expirationDate": "2023-11-01T06:45:43Z", + "credentialStatus": { + "id": "https://sbl.alwaysdata.net/oa/status/2#1", + "type": "StatusList2021Entry", + "statusListIndex": 1, + "statusListCredential": "https://sbl.alwaysdata.net/oa/status/2/1" + }, + "issuanceDate": "2023-22-13T01:35:08Z", + "proof": { + "type": "BbsBlsSignature2020", + "created": "2023-10-26T09:24:19Z", + "proofPurpose": "assertionMethod", + "proofValue": "gV1gs4fkKMSU56bsac/5peRTOh88E3zF+vnJEMzUfrT6aoIANYcrFRAt1EzXmuEsZKAGC93tNPEWM0V+xNJaB3tsGEGHhQCmGbHCJ3RJQxclTLn7BEZ2v6xhwgWXlRFNGpgBLJXgQ8xkg7D6Br1IYg==", + "verificationMethod": "did:web:sbl.alwaysdata.net:oa#didkey" + } + } + } + } + }, + "credentialStatus": { + "type": "TradeTrustCredentialStatus", + "credentialStatusType": "NONE" + }, + "renderMethod": { + "type": "TradeTrustRenderMethod", + "renderMethodType": "EMBEDDED_RENDERER", + "name": "INVOICE", + "url": "https://generic-templates.tradetrust.io" + }, + "credentialSubject": { + "name": "TradeTrust Invoice", + "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "date": "2018-02-21", + "customerId": "564", + "terms": "Due Upon Receipt", + "billFrom": { + "name": "ABC Company", + "streetAddress": "Level 1, Industry Offices", + "city": "Singapore", + "postalCode": "123456", + "phoneNumber": "60305029" + }, + "billTo": { + "company": { + "name": "DEF Company", + "streetAddress": "Level 2, Industry Offices", + "city": "Singapore", + "postalCode": "612345", + "phoneNumber": "61204028" + }, + "name": "James Lee", + "email": "def@company.com" + }, + "billableItems": [ + { + "description": "Service Fee", + "quantity": "1", + "unitPrice": "200", + "amount": "200" + }, + { + "description": "Labor: 5 hours at $75/hr", + "quantity": "5", + "unitPrice": "75", + "amount": "375" + }, + { + "description": "New client discount", + "quantity": "1", + "unitPrice": "50", + "amount": "50" + } + ], + "subtotal": "625", + "tax": "0", + "taxTotal": "0", + "total": "625" + }, + "proof": { + "type": "TradeTrustMerkleProofSignature2018", + "proofPurpose": "assertionMethod", + "targetHash": "f7b498c78de16c381751083fd86904b9f013fe714496597fe659730be78cf625", + "proofs": [], + "merkleRoot": "f7b498c78de16c381751083fd86904b9f013fe714496597fe659730be78cf625", + "salts": "W3sidmFsdWUiOiI0MWJlZWRkNTA3N2RjYjYxMDY3MzkwOGM1OTIwODEzNGM3MDljMzQyNTZjMzA2ZjU5OWRlODk5NjIzZTEwM2M0IiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6IjE0M2Q1MTc4ZWI2MWIyNzU4YzJlM2VlODRhMDQwYWEyNGE5YTc5MTVlOWM2NTAyY2I3NTRiNDc0N2VjMDAxM2EiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiM2Y3MGI2ODQ2MTI2ZjkyYjQ5ZjA3NmFmZTc2NzdjYzk1ZDJkMmQ5MjdjM2JiMDY3ZWFlMzY5MWZmOWM1YWE2ZiIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6ImU4MDYxNTZhZWRiNWMxZjU4MTc0NTM3YTkyZTQxODFiN2MyZjQ4MGUyYzU0MzIwYzIwMTU4YjA2NDlkMGQxZjYiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiI1YzkzYzY0ZWIzZjBiOGI1NTBmYjg5OTIxMmUwN2M3YWE1OGU2YjA1ZjZkODgyNTNkN2FjMGJmZmE2NjRjZmE4IiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiIwMjFkNGVjY2U1MWVkMzI4MzQ4OGYzMmY3NGFiODdmMDI5ZTBiMjkwNjFiOWFhMmQ0NGFhYmYyOTk1ZDAwMjdjIiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiJiN2MxYWY2NjM1YzM0MjM3ODZmOTNlOTMzM2ViNTE2MzYyZTQyNTYyNjc5NGUxZDQxZDJkNGIxODkxYTdlNjJkIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6IjIyODUxYTQ1ZWQ4NWEzYWQ0M2U2YmM5ZDg3ZWI5ODQwMTIwMzQ0YjA1ODU5N2I2MGM1NzE4ZDNhZTU5NjE3MDgiLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiNzQzZThiZGE4NjQyZmQzNDAyODFkOWYzYTYwODYwOWQzODYwY2MxYjliODYyZjRlYmUxMmFlYTI5YTcyYTQ0ZSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiIwMjU0ZjRjNGRkN2JiMzQ1NzgyNTA0NzUwODU2ODg1NGE5Yzc5YTlkOGVmNzcwYmIxYWUzYjk3OWUzNjdmNDk4IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiODdmODkxYzNkNWM3ZWRjYWRjYTgwMmIzZDM0ODdjNTM0N2RmMmYzOTUwZDQ4MWE1N2Q3NzFmNGYwNDRmOGNhOSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLnR5cGUifSx7InZhbHVlIjoiOTgyODdiMTU1NzdjN2ZkMTJkOWQ3MmM3NTA5YzYwYWNkMDJjZjAxYWZjNWE0NmQyYTM0ZjY5ZmE1NGU1MTg3ZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMF0ifSx7InZhbHVlIjoiZDVmNDIyZWUwMmVlZjNmN2ZkMThmMjRjZjIzOTJkZTAzYmUzMjg3NTBjNDgwMTE1NjkyYTA4ZDYzZmM4MTVjMSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiNDRkOWQwZjUyOTRjOWNlYmJjNGNjNDFiOTczOTk1YTg1MmFiZmVjZDY3ZmNkOTZmYjFjY2Q5ODE3ZGNjNjY0MyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiNmJkOTkwNGNiYjg5YWFkYjJmMWRlZWFlYmFiZTA1OTQ5ZmUxOWFiMDBiODgwMDEzOTAxMzIwOWY2M2YwYjMxYSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbM10ifSx7InZhbHVlIjoiNmUwYTdkM2UyZjI1ZDI1ZjI5ZWYyN2M5YjJlOWIxNGY3NmI4MWVkNWE1MzVkNGE1YjZkOGE5NzBhNDU1YmNhZCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuaWQifSx7InZhbHVlIjoiZjRlYmMzODA2YjUzMjliMTJiMGI3MjZlNmQ1YzJmZTQ3Y2JmN2MyNmExNjU5YzIwZjE2N2RkNTkyNmE0OGZlNSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEudHlwZVswXSJ9LHsidmFsdWUiOiI3ZmUwYjRlZWI4Y2VlMzkxOTMwYjU5ZTQ0YTIwYTljNzIwZGFjYzBkNWE5MGNiODI5ZDg0Y2E5Nzc5OWZkNmFjIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1ZXIifSx7InZhbHVlIjoiYzE5OGU3MTI3ODJhZDU1ZjgyYjE3NmU5NDNhZTgxYWU5MzQ0YzJiZjZmY2ZlM2M4MDc5NTUxZTc1NTU3ZWMxYiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QudWVuIn0seyJ2YWx1ZSI6Ijc2ZTk5Yzg1ZjlhN2U2NzQxZTE1MDY0ODM4NzhmNWQ0NTQ2ZTg1YWRkNThhYzQzZWUxMmU1NDMyNTI3ZDQxNTQiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LmNvbXBhbnluYW1lIn0seyJ2YWx1ZSI6ImZlNGNiZDNiMDQ3NjAyNjg5OWE4M2JkODM3Njg2YzQ1YTA1ZGUwYWU1NTZkOGNiOGJhOGQ1NDllZGUzZWQ5YjciLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LnR5cGVbMF0ifSx7InZhbHVlIjoiYjkyYTk2MzU0OTg0YTI5NDRiMjM2MWE1NTBiODliMGFkMjA1NTdjMjNmMTgwZTI5NmViNmE1YTAwOGFkMjBmNCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiMDI2M2JkZTdkYTA4ZjQ3ZmYxYTA4OTllYmY1NTk1ODViNGJhYjc2NThhMWY4NTkyNzBmZjk2ODFmYzkyOTA0MSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuZXhwaXJhdGlvbkRhdGUifSx7InZhbHVlIjoiMTg3MDI3ZDZkNGUzZjRjNTUwZjM0MjQxYTRlN2MzNjNlYjBjZTQwYTE5OGQ1ODA5Y2Q0MDlmMjlhODQxMjYxZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5pZCJ9LHsidmFsdWUiOiI0ZjAzMDY3MDE2ZWY1ZTYyMjNkOTMzM2M1YWNkZmNiMTc4ODdjNjUxYTMxMTdjMDc5NmEyZmM3ZjNlNjlmYjI5IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5jcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiYjE3NDJlM2NlNGViZGYzYTk2ZTQxNGU0NGVmOWEzNGI4YTQyZWE4MjVjYWYxNzE0MmJkNTAwM2ExNzBmZDIyNCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0SW5kZXgifSx7InZhbHVlIjoiYjAzZGVlNmNkZTRkNjlkOWRjODlmNzYxMTY4MWNhMzViMzI3NDIxNWE3OGM5YTI5ZWY4ODI1YmYxMWQ3MWY1NyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0Q3JlZGVudGlhbCJ9LHsidmFsdWUiOiJhODMwMGM4ZDZjOTVhM2QxZWIyZTc3NWY0NTI2ZDg0YzNhYjQ3MDQzNmZmYTc1NzY4ZGEwYTY0YWUxNzM0NDE4IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1YW5jZURhdGUifSx7InZhbHVlIjoiZDdjMWY5YTlmYzQ0Yjk3ZWU0NmM4ZjgyZmM1YTc2N2I2NTA5OTM5NjVmMjlhZjM2MzU5ZjBmMGE3YTQ2NjNhNSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEucHJvb2YudHlwZSJ9LHsidmFsdWUiOiIwNjhhY2ExYTg1OWQxYWE4Y2I2NTFjNGNmODc0Njc3ODJlNTNhMWY4OWI4NGZlNmQyMTRjZTBkZDllYTA4ZWI1IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5jcmVhdGVkIn0seyJ2YWx1ZSI6IjA2ZGJhMTczZDU1YzJjMzRjODAxYTdmNTRiNjgyNjZlNDNiNDMzMWVkNGIwODhiYjgwODU3YjUyYjhlNWY4MDUiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnByb29mUHVycG9zZSJ9LHsidmFsdWUiOiIzNWRhZmEyMDIyYzJiNTY4NWNjZjRhZDUxZDU1YjM1YThmMzgxZWEwZDZhMGU1YWU2OTM4ZjIzOTJjMzRhMTcwIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5wcm9vZlZhbHVlIn0seyJ2YWx1ZSI6IjY2ZjhhYjJiNDIxOTNhNWNhOWEzNGY3ZDBkZTlkM2UxZTljMWQzN2NkNWMxZmExYWE2NjNlMDg0ZTU4NTQyODkiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnZlcmlmaWNhdGlvbk1ldGhvZCJ9LHsidmFsdWUiOiI4MWNmZDgyYmI5MjI4OWY5MGYxYjVlMTliNDlhZjQ4MDgxZmMzMmVhNTQxN2Q2NjU0ZmM2ZmQ2NTViMDI4YzlmIiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMudHlwZSJ9LHsidmFsdWUiOiIwYWY0NGNhNmYwNmUxMjczMjg5Mzk4MmFjYzhjNGFlMzdiMGFjYTkzNGFkYzcwMTBhYWQ2MmQyYWVkZmIzYTk3IiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMuY3JlZGVudGlhbFN0YXR1c1R5cGUifSx7InZhbHVlIjoiZjE0Nzg4ZTJhNTZkMDQ4ZDgyNjYxN2IwMzY2MDE0OGQ5NWYzYzAzOWExZTUxY2YyMTVhNjA5NDlmZmYzYTI1OSIsInBhdGgiOiJyZW5kZXJNZXRob2QudHlwZSJ9LHsidmFsdWUiOiI5OWQ5YjRlNDUzNjhmN2E1YjMyNjY3YjkyZDU2NzdiYzY2YjZiZWNiZDc4OTRjMWQ4M2VjZDFhMmU4NmJkZDVkIiwicGF0aCI6InJlbmRlck1ldGhvZC5yZW5kZXJNZXRob2RUeXBlIn0seyJ2YWx1ZSI6ImZmMzI2ZmZkM2Q5ZDI3ZjEzZDdmYWNmMWNhYWViM2Q3NmEyNTIwMTA1MjQxZjJmZTBiODg1YzI2ZDk4MTViMTMiLCJwYXRoIjoicmVuZGVyTWV0aG9kLm5hbWUifSx7InZhbHVlIjoiYzEwZmY1NDU3MzgxNjUzOTUyMTAxYTVhOTgxMjAxYzA1NjMzNDQyYjgzNTU3ZDAxYWI0ZTUxZGFlN2RmODFlYiIsInBhdGgiOiJyZW5kZXJNZXRob2QudXJsIn0seyJ2YWx1ZSI6IjAxYzhiYjUwNDlkYjEzNjQwYzlhNWIzMDEwMjc4Y2I2NTc2OThmMGNlMjM2NmVlMjU2NTBiMjRkZWE0ZDEwYmEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QubmFtZSJ9LHsidmFsdWUiOiJmZWQyNzc5ZTNhYjY1YzE0YjdjMzA5OWNkYWU2M2E4ZDhmY2Q5NjUyODM3ZjI1ZDg2N2I3NDdiNThhZjM0NDkzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmlkIn0seyJ2YWx1ZSI6IjQ2MTJhZjAwMGM5NjRhNThlNTRiYTVkYmJjOGM2YmVmYWVmZTk0M2ZiNzZmMjVmNGI0ODlkZmE5ZDZiNGVjM2MiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuZGF0ZSJ9LHsidmFsdWUiOiIxOGJjZjk4NDZiZGZiNTQ5MWZjNDE5YThhNzc4ZWMyYzYxNWZjNWQ4MDhjM2Y3MzVkZGQyM2UwMzg4NjE0MjRmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmN1c3RvbWVySWQifSx7InZhbHVlIjoiOWM5MjYyZWEzOGZiZDI5ZTIyMjJjNTZlYTA1ZDc3NDkzYTYwMzY0NzNkZmE3MDYwYTM5MzkwMjg3NjM0NGM2NiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50ZXJtcyJ9LHsidmFsdWUiOiI0MWExN2NmZWQzYTA4MzAwNjA5N2E2OGIzM2FkMTkzNGNkMjhmYWNhNzRlNzUxNWE5MTMzMWI4YjJiMjBiMWRhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLm5hbWUifSx7InZhbHVlIjoiOGE4YTBhMTI4NmRkODcyZjhkMWRlMmUwOTAxYjMzMWE0Mzc5MjllZjdkMGRhMmU5ZDIwMzdkZWI3MmM2YjY3NiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6ImJkMjljMzg5ODY2ZWU4MDI1YmZjYjIyZDUyZTc4Mzg0YTg1Y2UzNzgxNDc3ZjA3Y2VlNDczMzQwYWMwNzM2MTIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uY2l0eSJ9LHsidmFsdWUiOiI3ZmU5MTI5ZGQxMmJjZTRkY2E0ZDUyNWU4YjNlZTVkY2M5NGE4NDJlMTg5ZGFmZTM5NDMwYjQyMDcwM2UzM2ZmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLnBvc3RhbENvZGUifSx7InZhbHVlIjoiNGJlYzMxMzMzOTI1MWI4NmUwYTExMjYzZmU3MGFjMDc0YzMwMWFhMzQxOTM4OTY2MjMwNTIyZDk2NTA1NTQyNiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiIzYWM5Nzg4ZWZlZGE5NWUwOGVjZGFmMWE4N2IyOGI0NGI5NjQxNDk5ZTExZDBmMGJmNzE0MTZmYzg5NjRhZmY1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55Lm5hbWUifSx7InZhbHVlIjoiYTBlMjQ1ODNhMWEyNzNkZGJiYWMwZjM0MmZkMTdjNDVkZTBmMDg0N2I2YjRjMjFhZDk2MWExNDc0ZjU0NGZhNCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6IjkxOTRkYTkyOWYzZTMxMDU5ZjY4MzRmZmY2ZTg3ZjE4NTcyZjJkYWRmYjc5NmE0ZDJhNzc0NzZkMzI2YjY4ODgiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuY2l0eSJ9LHsidmFsdWUiOiJmZjc1NDJkNThiMWY1MGM1OTdkOTgzZmZiNWM0M2E1N2FiMDE3OGZkZTVhZDgwNTAxNWIyNDQ0MzYzOGM2MmUyIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LnBvc3RhbENvZGUifSx7InZhbHVlIjoiNzMxYmEyZjY0ODQ2MzdhM2M3OGI5ZGIzNjE1ZmIzNjJkNDhkY2NlNTg4YjEzOTdkYjRkOTIxZGJjN2QzOGQxZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiJjMDgyMWZiZWViNzZiOGY3ODA1MWJjMWVjMDI5MzAzMjRjYmUwZWFlOWQzNzYwYmQ1ZDhjM2E3ZjBlZmZlNGE4IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5uYW1lIn0seyJ2YWx1ZSI6IjRmZjlkYzNhNzdhZjU1N2EwMTU4NzIzNTkyYTczZDliMDQ2NTM4MzJiNjQ4YTFmYjUxYzc0ZjkwNzBjNzBiMGQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmVtYWlsIn0seyJ2YWx1ZSI6IjhjMzc0YTlhNjI4NTFmNTczYTMyNmI4MzQ5ZmEyZGQ4ZDk5YjM0MzVkOGYwOTE3M2EyMmYwZjU3ZGJjOTkwZGIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiI3MGJkN2Y5OTMxNTZjZWRiYmViYzU1ZWE1OWRmYTkxMmRkYzJlNzJlYTgwOWMxYWYzNDQzYWE4YjYwZWQzMjljIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0ucXVhbnRpdHkifSx7InZhbHVlIjoiZWZlNWQwMTY2MjE3NTkyNDUwOTc3NWI2MjZkMWE0MDNjYThlYzdhZGNjYWIwM2ZkNGNhZjFmODRhMTcwYjc1MCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiI1YTMzNWQ4NzRlN2RjMmM5MzlhNjgwOTI2YTI3MmNhMjVjYTk0M2Q2OWM1MTYzNzI3MWU5NzRlN2VlYWNhZjJhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uYW1vdW50In0seyJ2YWx1ZSI6Ijk3YTAxZmJkMDFkZDNkMWQ4OTBiMTEzODQxNmVmYTVjOWIxYjg0MjEyZGNjMTVkOWNmOWI4NmExMzNiYTFjNDAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiI5ZWE0MDA5NWM3NzM3MjBiMWY5MGYyYTEyYTk5MGQ1ZDU1Njk2NmZkMTFjM2ZjOWU2NWU1YjQwNjhiZGU0ODczIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0ucXVhbnRpdHkifSx7InZhbHVlIjoiMjFkNjM4OThjMzIxNjE2ODcxMjYzNzQzNTNmNWViOThhMWY4OGEzZTAwNTQzYzY2NmNmNjJhOTM2Mzk1MGQ3MCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiI3MjEwN2RlNjU0ZDdmODE1MmVkM2I5MzE4NWVkN2M1MzAyNDY3YzFiNmIxZjJlZGY1NDI4ZTdkM2E1MGUwYTJjIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uYW1vdW50In0seyJ2YWx1ZSI6IjE4Mzg5ODZkMWRkMGQyMWUyZTY4MzA4ZjlkNGM5OWRlODM4M2U2NThjOGQwNzM5NTBiZWJmMjViNmJhNzlmNGQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiI1Nzc2ZWE4YWY0ZTYxN2Q5OTQ2MWY0MTI5NjY3ZWE2ZjM5ODk1MzY1NWQwMWIxZjljOGRjOGQ4YjQ2NzhkYzk0IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0ucXVhbnRpdHkifSx7InZhbHVlIjoiNDg3ZDc1MzM5MTU0MDczYmY4M2NlYmY4ZDA2MzdiNTY5NDdkOWEyOWNlYTEyOGYxNWVmNWFmZjM2YzI5NDVhZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiI4OTJmMzA0OWJlNGFjNjM1ZDIwZDZmYTdiNTFmNDkyZjZjZjAxMTk5MWZjMjdkOGVkNzM5ZjEyMmFlNGQwZmUwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uYW1vdW50In0seyJ2YWx1ZSI6IjhhNDZmNTY0ODA3NDI5ZGQyMzJkZTBjN2M4M2Y0NTIzNzVmNTI3NzhlYTJiMGI4MzFkZTQ0MTJmYjlmZTRmZTMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Quc3VidG90YWwifSx7InZhbHVlIjoiOTZiNmM1YTExM2Q4YWQ4YTkxNzcxNDg3YjlhMTZkMjg1MTE4MDczMjEyODdiNjBjZWU1MDU5YWUyYWU1NzcxNyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXgifSx7InZhbHVlIjoiYzE2NTU0OGU1NThkM2JhOGRlMWQ1ZWJjNjYyNWIwNTg1YTY4OTEwN2ZlYTc4ZWI5NTZlY2MyODUzZTk3MDMwYiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXhUb3RhbCJ9LHsidmFsdWUiOiI5NjcyOWJlODM5ODRjOWY0Zjk1ZTE3MzY4Nzk5MDU0MTBlMWJjMDkxYWEyNzczODBjZWEyN2VkNzYwZWIzZGM1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnRvdGFsIn1d", + "privacy": { + "obfuscated": [] + }, + "key": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C#controller", + "signature": "0x0086fa6e7d0810a918aef7c75edfe57f42099db6f03632f1a6c926c214ad5cd02f8d389df39bd660db0331ff34b953ed55b1776e627c41bf89bec3457efec0b11c" + } +} \ No newline at end of file diff --git a/test/fixtures/v4/tt/did-idvc-wrapped-signed-tampered-signature.json b/test/fixtures/v4/tt/did-idvc-wrapped-signed-tampered-signature.json new file mode 100644 index 00000000..8274f22b --- /dev/null +++ b/test/fixtures/v4/tt/did-idvc-wrapped-signed-tampered-signature.json @@ -0,0 +1,131 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" + ], + "type": [ + "VerifiableCredential", + "TradeTrustCredential" + ], + "validFrom": "2021-03-08T12:00:00+08:00", + "issuer": { + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", + "type": "TradeTrustIssuer", + "name": "My Own Company Pte Ltd", + "identityProof": { + "identityProofType": "IDVC", + "identifier": "My Own Company Pte Ltd", + "identityVC": { + "type": "TradeTrustIdentityVC", + "data": { + "@context": [ + "https://w3id.org/security/bbs/v1", + "https://www.w3.org/2018/credentials/v1", + "https://stg.issuer.myinfo.gov.sg/myinfobusiness/schema/corporatebasicdetails/v1", + "https://w3id.org/vc/status-list/2021/v1" + ], + "id": "https://sbl.alwaysdata.net/oa/credentials/123456789", + "type": [ + "VerifiableCredential" + ], + "issuer": "did:web:sbl.alwaysdata.net:oa", + "credentialSubject": { + "uen": "198801234E", + "companyname": "My Own Company Pte Ltd", + "type": [ + "CorporateBasicDetails" + ], + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C" + }, + "expirationDate": "2023-11-01T06:45:43Z", + "credentialStatus": { + "id": "https://sbl.alwaysdata.net/oa/status/1#325", + "type": "StatusList2021Entry", + "statusListIndex": 325, + "statusListCredential": "https://sbl.alwaysdata.net/oa/status/1/325" + }, + "issuanceDate": "2023-22-13T01:35:08Z", + "proof": { + "type": "BbsBlsSignature2020", + "created": "2023-10-18T07:14:46Z", + "proofPurpose": "assertionMethod", + "proofValue": "tqvUVZOPaY/A+7Wu47HZIYbboPU/MPGhb1EPLUKKPRwmRe8QJ/dzjRviQ5fAbR88TjSalqLbaBeopNocjrl7TmzCOlLQxGeNC4El1TCICu5tiX0HxGSNAPY4t5CglTLMTsdu5kg4f0a5MGQTnFgwyw==", + "verificationMethod": "did:web:sbl.alwaysdata.net:oa#didkey" + } + } + } + } + }, + "credentialStatus": { + "type": "TradeTrustCredentialStatus", + "credentialStatusType": "NONE" + }, + "renderMethod": { + "type": "TradeTrustRenderMethod", + "renderMethodType": "EMBEDDED_RENDERER", + "name": "INVOICE", + "url": "https://generic-templates.tradetrust.io" + }, + "credentialSubject": { + "name": "TradeTrust Invoice", + "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "date": "2018-02-21", + "customerId": "564", + "terms": "Due Upon Receipt", + "billFrom": { + "name": "ABC Company", + "streetAddress": "Level 1, Industry Offices", + "city": "Singapore", + "postalCode": "123456", + "phoneNumber": "60305029" + }, + "billTo": { + "company": { + "name": "DEF Company", + "streetAddress": "Level 2, Industry Offices", + "city": "Singapore", + "postalCode": "612345", + "phoneNumber": "61204028" + }, + "name": "James Lee", + "email": "def@company.com" + }, + "billableItems": [ + { + "description": "Service Fee", + "quantity": "1", + "unitPrice": "200", + "amount": "200" + }, + { + "description": "Labor: 5 hours at $75/hr", + "quantity": "5", + "unitPrice": "75", + "amount": "375" + }, + { + "description": "New client discount", + "quantity": "1", + "unitPrice": "50", + "amount": "50" + } + ], + "subtotal": "625", + "tax": "0", + "taxTotal": "0", + "total": "625" + }, + "proof": { + "type": "TradeTrustMerkleProofSignature2018", + "proofPurpose": "assertionMethod", + "targetHash": "1f134a15ff584973e8074839a6e8a7dcaab580c5d688a39ed662d9efe4187678", + "proofs": [], + "merkleRoot": "1f134a15ff584973e8074839a6e8a7dcaab580c5d688a39ed662d9efe4187678", + "salts": "W3sidmFsdWUiOiI3OTMzZmNlY2NmZTA0NThhMGEwMzFiNDQ0ZDQ1YjFhYWIxOTNiNjBlMTg5MThhYmRmZjQyMjc5MzkwZTc0NmM0IiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6ImRmZjQ2NzNkMjU2MzE5YWU1MDdiODU4NDYyYmM1ODU5YTY1ZWFiNzBiYzlkZmI2OTE1OWJmZjQyZmVmMmJjOWMiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiMDIxMzI4YTFmZDg2NWYzYzU3ZWVhMGU2MDU0NjdkMDMyZmY1NmM5YmU0N2U3NjhkMzU0YjAzYWUzNTI1M2RjOCIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6ImMyNmYwOTllYmU5N2FhNjY3ODkwNTJkOTdkMjZjMjg3YzI1NDBiMDk5MTdjYWFmYjkyMmYwZjJlNzFkNDU3MmQiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiIyMGFmZjc2NDA1OWEyNzU1YWVjNWZkN2YwMDMzNzFhM2FjNzM0YjYyMGM5N2JlMTQ3MTA5NTliNzZjYTNlODhiIiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiI1OThiODRlZTAwZmY3MmRkMGIzOGM0NDJkOTZlMjk4NmFlYmRhYjE1NzAwNzVhMzA4ODI5Yjc4MDQ2ZGJiZmQ1IiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiIwYzAwMTM4NjA2OWE3N2JlNzM3MTFlY2Q5ZmY2MWMyM2ZiMTRmZDQ0ODk5ZWNhY2EyNDU0YjgxM2I2YTU1NTIxIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6IjEzMjM2ZGVmOGIzNWYwOWY5NmM3OGFlNGU1N2VlNTFlMDU0NDc5OWYxYjE4NWRhNDg1YzIzZGQzNjRmODViNjQiLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiOWM5M2NjYzk0MTBhNjQ1ZTQ4Njg0NDliOTkwZjQ2ZTdlNDhjMjI5YWUyYzI1MmFjYjdhMDI4YmQyODA3NGM4OCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiJkYzU5ZGQ2NGIwZTc2ZDlmNzE4NTIzYTRjZThmYzg5MjNjODJkMGY1ZThjNzA2NjI4MzcwNDJiNDg3MjkxZTA2IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiYTdjODEwZDZhNzY5MDczN2M3OGFlNDliMDJhMTg5NWIxNmRiNTRkNjI1MjlkMDQxMzI4ZWViZjEyYWU3MGNkNCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLnR5cGUifSx7InZhbHVlIjoiNDM3NTQ3N2M2N2U3ZDVlOGIxMjJhNGQ4NzU2Y2Q1M2Q5YjUwMmZjOWFiN2Q3YjQ2MDcyOGY5Y2NkZTAxNGFlMCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMF0ifSx7InZhbHVlIjoiMWVlYmJiYmJlZjIwZGFkOWI3MmI4NGUzYjg2OTA0MTVjZmY5YmVmMTgzZTI5NTRkMGE3MTY5MTRjYzcwMDA3MiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiZjA5ZDk1ZDVhMWM3Y2Y1MTEwMzBiMjFkY2Y5ZDhkZDJhNWEyZjQ2Mjc5MDljOGY5YjRjOWQ3NWQ2NjI4ZjAxNyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiNGQ3M2QzOGU2ZGVkZjNhNTlmMmFhMWU5MDYyZjBhZjlhNzUzOWEyYTNhMzM1OWU2NDkxMDViZGI3NWJlN2Q3YiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbM10ifSx7InZhbHVlIjoiMmYxOWExYmMzYjIwYzkyM2YxM2EwOWE4ZmJmOWI3YTAzNzU1MjExZjRlODBmZGM2OTUyZTZjNjhiNGM5ZWI5NCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuaWQifSx7InZhbHVlIjoiM2Q5ZmQyZjg4N2M5M2QyOGU2NDdhMmZlNTJlMGY0YzEzN2MwOTk3ODI4NGI5OGMyYTgzYTVlY2EwMTVjMjBmMCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEudHlwZVswXSJ9LHsidmFsdWUiOiJiMTIyYjQwYWY1MmEwYzQ3MGZkN2Y5NDdiZmQ5MjZlMjMxNGJhYWI0YTRlYWJiODhkNzJjM2ZhMzZhZDljZTJlIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1ZXIifSx7InZhbHVlIjoiYThlZmQ0Y2UxNmFmNWMxNWY3ZDk5ZmNjYzU3ZDU0YTM1NzQ1ZWM0YzViZTVlMGU3MDZiODg0OWI2NjRkZGY5OCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QudWVuIn0seyJ2YWx1ZSI6ImQ1Y2JlYjM3ZGRlMjg4YjZmNmE1NjQ4MDA1ZTVhZGFkNzE5OTBlYTI0MWZiNTEzNTAyOWEyODY1NGEzYzYyNmUiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LmNvbXBhbnluYW1lIn0seyJ2YWx1ZSI6IjNhZDkyMTgwNzgxYWExZmEwN2E2N2MwNWM1MjM3YTkzMThiNjI3NWRjYWY1YjlhYjFhYTJlZGY5YjhkMTA1NzkiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LnR5cGVbMF0ifSx7InZhbHVlIjoiYzMyNDdjOGM3YWVjMjM3ZWNjOTExYmNjYzcyZDYzYTVmMTE3NWVjZjNjYzIwNDBlODZlZDU5MTg4N2VmM2U3MSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiYWNmNWRiNmY0MjVjN2Y0NjI5NTFiMGMyMTBhMTQwYjBhMWE2NTc4ZDcwMzc2ZjdiNzExMTQ0NDc0Yzk2ZDNkZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuZXhwaXJhdGlvbkRhdGUifSx7InZhbHVlIjoiNzAyMDQxZDZmZDgwNmEyMzk4YzEyZjRhM2U5ZDBhNDRiYWQxM2FiYzJiNDgzOTFlOGU4OTY3MzI5ZDQ4Njk3ZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5pZCJ9LHsidmFsdWUiOiIyZDE5ZjdiMjU5MzdkMzliOTM0ZGMwNzk1NzgyNTA1YmU1ZjZjMzA5ZjJiM2E1ZjY5M2JiNDAxMWZjZDg0NThlIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5jcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiYmIxYWI4MGZjMTdkODMwZmIxYjY1MDZhNzAxYjUwZTM2ZTQ0YTZjNDNjNWJkNzYzOGJiNWUyN2NmZTAyOTQxMyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0SW5kZXgifSx7InZhbHVlIjoiZjEwMDEzZWQyOTBkZjczODRmYzEyNTI3MWJhOWUzYWEzYWEyOTRjYWZkMjUwMjNlNjA1NzVkZTZhMjQ1YzkyZCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0Q3JlZGVudGlhbCJ9LHsidmFsdWUiOiI3MDYwYTI4ZWUwMDEwOTU0ZWE3Nzg0ODMxOGVkOWYzZWYzYzA0OTY0MTdlY2NjYjliM2EwZGUyZDE5N2ZhZDY0IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1YW5jZURhdGUifSx7InZhbHVlIjoiOTM3ODJjNjU1MmUyMDRmMmI0MGFhY2YyMTUyNmE1MzU2MDhhNWVkNzcyNmM4OGJmMjI1Nzc3ZmM4MTEwNjI3ZSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEucHJvb2YudHlwZSJ9LHsidmFsdWUiOiI1NDVkNDAzZmEyZjJmMTY2NzFhZGE1YmE3MmNjZjZjNDQwMmYzOTI5ODRhN2FhOTliOGZjNjM5NDcxMmExODBiIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5jcmVhdGVkIn0seyJ2YWx1ZSI6ImJkOGM0MDk0NDk2MmIwMDBkMWJiN2MzZDU3MWJmMjA2ZjgzODM0MWEwYzE3MzJmYWFhNjM2Yzg3OGIwZDZmNmIiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnByb29mUHVycG9zZSJ9LHsidmFsdWUiOiI4ZDU4NTgxZGRjOTM5NDBkZTY1OWRiNjhkOWY0MDhmZDA4MDZjZDI0YmIwMzJjOTJlN2M3NjU0MzlmYzM3YjlhIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5wcm9vZlZhbHVlIn0seyJ2YWx1ZSI6ImI1ZjJiMjUwNDI5Y2ZkNmJlOWZmYWE0ZThkZmUwOTQyOTRmNGY4N2MwZmUwM2FmZTMxYTEyMTdkNjg2YzU4M2QiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnZlcmlmaWNhdGlvbk1ldGhvZCJ9LHsidmFsdWUiOiI3YjlhMWNlNTE2NDYwMjE3MTU0M2MxYjJiMTkwMzI2ZWU0MGEzZDg4N2VmMWMxMTk0NzRlYWU4YzkyNzMzZTExIiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMudHlwZSJ9LHsidmFsdWUiOiIwYmE4Zjg4MThkNTA0NjUwOGIwNWRkNmE0ZWM3ZDRjOWJiMGRhYjVlNjczNWU0NjI1OWNkNmIxZTU5NTM1YjQ5IiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMuY3JlZGVudGlhbFN0YXR1c1R5cGUifSx7InZhbHVlIjoiZTBiMjU3NzBlMmRjZTJmY2Q0NjI0NDc2MTI5YjgwNThhMWJlNWFjNTkxYmQxZjkyYTlmMjY3MDEzNmMxNjcyMiIsInBhdGgiOiJyZW5kZXJNZXRob2QudHlwZSJ9LHsidmFsdWUiOiJlOTJmMGY2OTU0OGUzMGIxYTlkMWJmYzVlNTcxNzBkNTM3MDcyMTI2NDc4MzAwMGE1ZWYxYWU4M2I4MGEyNjhiIiwicGF0aCI6InJlbmRlck1ldGhvZC5yZW5kZXJNZXRob2RUeXBlIn0seyJ2YWx1ZSI6IjE0ZGNmYWQxZmI1MmU5MTQ5NmI1NGRiNzZmYTliYjA1ZDFlNjY0NjA5OTViYjA1NmMwYmEwOGNkNDNhNGZlNDIiLCJwYXRoIjoicmVuZGVyTWV0aG9kLm5hbWUifSx7InZhbHVlIjoiMDFjNzBhN2RiMmMyNDk5Y2RlOTU1NjAwMzIzNzI1YmI3ZGUxMDA4ZDkxOWYzNmMwODcxODI1Y2FjNjliZjVhMyIsInBhdGgiOiJyZW5kZXJNZXRob2QudXJsIn0seyJ2YWx1ZSI6IjJlOTdhMjEyY2RmYTE0M2Y0ZDM5ZDgzYmY1NzI2N2FmMzVkNzFjYjU0MTc3NTU5YjViNjJlNGYwYTM3YmZlNzkiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QubmFtZSJ9LHsidmFsdWUiOiJiZjM1YmZmZmY1YWY2NzNiZDZjZjRkYTg4MmViZTIxNDE2ZGQwYjZkM2QwYzAxNThhYjA0NGMzYTA0MTAxOGNmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmlkIn0seyJ2YWx1ZSI6ImZlYmRjMzJlYzk4ZWQ5ZmQ3MDlkZDJmZDU4ZTY2NTI2OTU2ZDA3ZjAxNWU2ZTIxYTk5OTI4N2E5MmI3OWM4YjAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuZGF0ZSJ9LHsidmFsdWUiOiIzZGNiZGQ4ZjNmMjFiNzY2ZmU4YzgzNTFmYTAzYTNjOTlhMjUzNGYzYTRhZGY0ZTUwNTc1NzhhYTEzNzI2MDcyIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmN1c3RvbWVySWQifSx7InZhbHVlIjoiZmExYjRjYzRjYjc4OTQ5NTdkNGE0MzNmMmMxYmZiOWIzYWExMzQyOWZjMWEwZDg1NTNmNTZiZTJiMGFhY2IyYyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50ZXJtcyJ9LHsidmFsdWUiOiJhZGJhMTA3MTU3OTI5YTI5ZGQ4NGQwMzAxOWUxYjIwY2FhMjQ5MTZkZDgzODI5MDkzMzRjZDExOTA4ZmY3YzhmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLm5hbWUifSx7InZhbHVlIjoiYzE4NWZjOTQ1MjBiYWE3YmIzYmI5Njc4MWUwMDY0NzRiMDYxMmI1NDFlYjlkYTYzMmExMjc1ZTc2ODRmMjYwNCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6ImMwODFhZThiZjcwNDQ2Zjk0MjMwZGY0OTBmZDQwMDhkMmRjNjkwNGJhNzNhZDdhMWUxMDcyMTM3MDI1OGFjYTYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uY2l0eSJ9LHsidmFsdWUiOiJhZmNmNTBiY2EzMWIzMmM0MTA0ZWU4Mjc3NTZhZDgwZTdiZmEzMDU5ODU4MjEwOWZmYzM5OGFlMzU1M2JlMGMxIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLnBvc3RhbENvZGUifSx7InZhbHVlIjoiOTlmMGJiMGJiYjg3MjFiNTI1ODk0N2FlZDBjZmFhZTkxZmU3ZjRhMzhmYmQ1MWNiZTAwZTdmNzYyZTJmYjI3NyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiIzMGU5ODhhYjA3YmYyOTE0NGUyMGVmMjZkOTUyZTI0YmY0YmEzZjQ0MTZkZDBjNDU3NzZjMGU0ZmMzN2NlM2RlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55Lm5hbWUifSx7InZhbHVlIjoiZjJhOTU5NWJmNTBkNDliOGMzNmQxMjg4MGRiOTNhYmI1MjYwZTgzOWU3M2NmN2VmNjlmMWZmN2VhZWYxMDY2NiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6IjQzMTg2NTY2MzQxNGMyYTg3MGU3MGNlNDE4NTZkNWQzNDk2ZDc1YWVlMjhjMDQ4NzZlOTc5NTZhNzFmOGU4ODUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuY2l0eSJ9LHsidmFsdWUiOiJiNDFhZDQyZjk0NjNlZTBiODMyMDFlNWIzM2VjZjI5NjJhYzE3NjkwY2FkOGYzNzA2ZTA3NmRkNWIxMGMzOTRkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LnBvc3RhbENvZGUifSx7InZhbHVlIjoiYzI0ODNkZDdlOWRiNmNlNTQ0NTM5NjAyNTM5Yjc3ZDkzNzQ3MWU2YWUwZDllNjZiZDJkM2M3YmU1MTExMzhmZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiJjOGFlN2E0MWIwNzUwOGE3YmUyMjM1OGFkNjhhMGYyNTZlYWZlYjZiZWE5OWJjM2FiMzg0NTEyNzBkZTNkYmRhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5uYW1lIn0seyJ2YWx1ZSI6IjVhZTRiYWIyMmNkMGE1Y2QxMTcxMzRlMTM0NTZlYTRjYzk2YjdiYTRiNjIzNTIwNjg2YTNlM2Y0MzhmMDg3OTciLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmVtYWlsIn0seyJ2YWx1ZSI6IjVlM2ExZDY2YzdjZTZmNmM3MjNlZWVhMDljYWE2NjcwMWMxYzkwYTE0YzdkMjQwNjE3N2Y1OGMzNGZhM2VhMWUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiJiY2VjOWZmYjA2NjQ5MGY1NmUxMjE4MWI3ODEwNzgwNWMzZDkzODIxMjE3ZDgxNmMwNWY0MzI1Nzk1NzBlOGVmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0ucXVhbnRpdHkifSx7InZhbHVlIjoiOTI4ZWY0ZmU1YWIxMDNhYWQ1NTc4YTdjZDkwMWIzNDhlNzk1NTQ4M2IzMzM0MjNhY2IyZWM2MDBkNzNkMjEzYyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiIzYzAxMWU3ZmJmZDM2MzFkODc2MjgxODYyOTAyOWZkODVlM2MxYjIyYjI1OTNhYWJkZDM4MGQ3YjViMjc4NDdkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uYW1vdW50In0seyJ2YWx1ZSI6ImY0NjE3MTc0MDNjZTdjZWM5Njc2NGZkNmVlNmQyNTMxMTMzMjY1YmI5YzdiYjczNTQ1MmI0NWVmNDQwNTUzODYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiIwMDI3MWRkM2M0YmE0MzZmOWQ0YmJjZWZhNzBjZDcxN2ZiYzBhMWYzMDdlYWM0MmMwM2RhZjAxOTliZTFiZjBkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0ucXVhbnRpdHkifSx7InZhbHVlIjoiMTkwMGY3NTE0NTNkOTBjMDhlNjk4ZGFiMmM1YWM5YjhjNzFjNjA0NGE2NDcxMTgxNThlOGM3MTIzNWIyMDA0OSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiI3NWFiNDc2Y2ExYmIzMTU1OTFmZmE3MGU5MzQ4Mjc3YWY5ODc2OGJkN2ZmZjMwYzljNmVlM2FiYjA3NmZiZDRmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uYW1vdW50In0seyJ2YWx1ZSI6IjE5YTcyZmUyNTQ1ZTYyYjI2OTIzMGY4ZGUwNmI5ZjcxMzRiNzE1MmY2NWZmYzcxOGUwNDFhNWJlNTdmMjM3OTEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiJjZDgyN2Q4NGI5YWI1NzUxZjc3ODFhZWU3YTVjYTZmYzAyN2E5ZTc1MzU4YWY5MWQyNDdjMDljZmZkZWQ5ZGRjIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0ucXVhbnRpdHkifSx7InZhbHVlIjoiYjEwNmMxMzAzZThjYzk3MjlkMjkyZmQ0OTIxN2I4ZTI3ZTRjOWVjZjQyNTNkMDVmMDEwYTRiYjNiMjJhNTAzNiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiIwYmUyZmMyNzE4NGRiNGFjMTFkZDczOTdmZWRlMDkzYTM4M2I4ZmIwMjJlYTcwNjgyNzA3ZTQ0NjFiMjU5MDc1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uYW1vdW50In0seyJ2YWx1ZSI6Ijc4NDc3Nzc1NTgwZjExZjZjNmJiM2IwOTI2N2E5ZWE0N2JjNDM4NWQ0MDFlNDcxMzQ1MjBmNDVkZWMyZTEyNGMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Quc3VidG90YWwifSx7InZhbHVlIjoiYjQ2M2JkYmNiYThjOTgwYjcyZjA3Nzg4MmYzODk1MWYyZmU5ZjFiNDAyOTdmM2IxYWRlYTg1ZjU1ODk1ZDkwNyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXgifSx7InZhbHVlIjoiNzE4YTUxODQyMzg3NzcwNjlkMjVmYzlkMGIwZWFiZTc3MDA3MzVhMGFhMzI1YTY0MmQ0OGIxZTliZWM4ZDI4ZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXhUb3RhbCJ9LHsidmFsdWUiOiIyYTNmMzE1YTZhNGY5MDFhOTkwMDE2ZmQwY2UyNDU4MzA4MjQ5M2IzMzgzYTk0NDM3YTliMzc4MzIwMDc3NmE1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnRvdGFsIn1d", + "privacy": { + "obfuscated": [] + }, + "key": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C#controller", + "signature": "0x725dc1af3ec48a3b1a279c6b09e96a69d92c9f20f1570c3a00984bce20240d591782ab1b36de4fb57f445811c3e41805f1663bcbddfa842e00b85370127f9b1d1b" + } +} \ No newline at end of file diff --git a/test/fixtures/v4/tt/did-idvc-wrapped-signed-wrong-binding.json b/test/fixtures/v4/tt/did-idvc-wrapped-signed-wrong-binding.json new file mode 100644 index 00000000..43660bea --- /dev/null +++ b/test/fixtures/v4/tt/did-idvc-wrapped-signed-wrong-binding.json @@ -0,0 +1,131 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" + ], + "type": [ + "VerifiableCredential", + "TradeTrustCredential" + ], + "validFrom": "2021-03-08T12:00:00+08:00", + "issuer": { + "id": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89", + "type": "TradeTrustIssuer", + "name": "My Own Company Pte Ltd", + "identityProof": { + "identityProofType": "IDVC", + "identifier": "My Own Company Pte Ltd", + "identityVC": { + "type": "TradeTrustIdentityVC", + "data": { + "@context": [ + "https://w3id.org/security/bbs/v1", + "https://www.w3.org/2018/credentials/v1", + "https://stg.issuer.myinfo.gov.sg/myinfobusiness/schema/corporatebasicdetails/v1", + "https://w3id.org/vc/status-list/2021/v1" + ], + "id": "https://sbl.alwaysdata.net/oa/credentials/123456789", + "type": [ + "VerifiableCredential" + ], + "issuer": "did:web:sbl.alwaysdata.net:oa", + "credentialSubject": { + "uen": "198801234E", + "companyname": "My Own Company Pte Ltd", + "type": [ + "CorporateBasicDetails" + ], + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C" + }, + "expirationDate": "2023-11-01T06:45:43Z", + "credentialStatus": { + "id": "https://sbl.alwaysdata.net/oa/status/1#325", + "type": "StatusList2021Entry", + "statusListIndex": 325, + "statusListCredential": "https://sbl.alwaysdata.net/oa/status/1/325" + }, + "issuanceDate": "2023-22-13T01:35:08Z", + "proof": { + "type": "BbsBlsSignature2020", + "created": "2023-10-18T07:14:46Z", + "proofPurpose": "assertionMethod", + "proofValue": "tqvUVZOPaY/A+7Wu47HZIYbboPU/MPGhb1EPLUKKPRwmRe8QJ/dzjRviQ5fAbR88TjSalqLbaBeopNocjrl7TmzCOlLQxGeNC4El1TCICu5tiX0HxGSNAPY4t5CglTLMTsdu5kg4f0a5MGQTnFgwyw==", + "verificationMethod": "did:web:sbl.alwaysdata.net:oa#didkey" + } + } + } + } + }, + "credentialStatus": { + "type": "TradeTrustCredentialStatus", + "credentialStatusType": "NONE" + }, + "renderMethod": { + "type": "TradeTrustRenderMethod", + "renderMethodType": "EMBEDDED_RENDERER", + "name": "INVOICE", + "url": "https://generic-templates.tradetrust.io" + }, + "credentialSubject": { + "name": "TradeTrust Invoice", + "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "date": "2018-02-21", + "customerId": "564", + "terms": "Due Upon Receipt", + "billFrom": { + "name": "ABC Company", + "streetAddress": "Level 1, Industry Offices", + "city": "Singapore", + "postalCode": "123456", + "phoneNumber": "60305029" + }, + "billTo": { + "company": { + "name": "DEF Company", + "streetAddress": "Level 2, Industry Offices", + "city": "Singapore", + "postalCode": "612345", + "phoneNumber": "61204028" + }, + "name": "James Lee", + "email": "def@company.com" + }, + "billableItems": [ + { + "description": "Service Fee", + "quantity": "1", + "unitPrice": "200", + "amount": "200" + }, + { + "description": "Labor: 5 hours at $75/hr", + "quantity": "5", + "unitPrice": "75", + "amount": "375" + }, + { + "description": "New client discount", + "quantity": "1", + "unitPrice": "50", + "amount": "50" + } + ], + "subtotal": "625", + "tax": "0", + "taxTotal": "0", + "total": "625" + }, + "proof": { + "type": "TradeTrustMerkleProofSignature2018", + "proofPurpose": "assertionMethod", + "targetHash": "f79bfd314da2a463564aba2f42c5e659f8945b38fae3572c7e2ada7fcd2b9926", + "proofs": [], + "merkleRoot": "f79bfd314da2a463564aba2f42c5e659f8945b38fae3572c7e2ada7fcd2b9926", + "salts": "W3sidmFsdWUiOiJhNTdjYjUzZjI1ZjE1NWY3YmZlMGZlMTk1ZjZlZDk0YTgzMzhkOGI3NzBjZGU1YjEwZjBjOGUwNGZlYTkyMjgxIiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6ImYxM2E1ODM1MTllMWM3ZDhlYmM0NWVlNDMzMDYzMDAxZDg4M2M4OTI2MDVhNDNlZDA3YmZiZmNjYjMyM2Q1ZGEiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiNzdjYTlmMGJlOTUyZDM5MjFkMDhiYzhiN2RjMGQ2YTBjZTkyOGVkMzg5Yzg5ZGQyMjZhOTExNGEzM2ZhZGNmOCIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6ImEzOTI5NzBjMWY4ZjAxZDNiMTNkYmRlMTM0MTRmMTBlYTAwOTgyNTNlZDVjNDljN2FiMjczMWY2ZWYzOThiNTAiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiJiNjBhYjBmZDIwYTYyOTliY2FiMTdjYzQ5ODBmZDYzOGI0MjQ1NWQzZTkzOTJkNzcwNjZlMGQ5NGFiYjg5YTY4IiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiIxY2Y2NTFmMTBlZDAyMTMwMzFhYTE4MDQyMmNkOGExODAxNjk3YTc1Y2NkYTdlYmE5ZTZiMmRjODY4YzMyZGY0IiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiJhNjRiMjdkNGM3NmJjYTJiOTY3YmQ2ZDZkZjMzMTY4MTFjMDhiNmMxOWFhNmYwNDBiODJmYWRmZWNkMmM5MTcyIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6Ijc1NTZiNzZhNDFiYjExOTk4MjYxYjY3ZjdkNzA1MjlkZTI2YTcxODc0MDMwMjBiYWRhN2E0NTQyY2Y3YmQxNGEiLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiMjYyZWQzMGJhODliYzZjNjZkNzU0YjYxNmRkOGE3NzZkNGZkYWY0ZDBjZTE3MjRmOWRkYTNjMWE1NDJkMDgyYSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiJlZWU3OWNkNDdiOGJmMzIwMmVhMWE0MTBjOTc1MDU0NDM1MDUyYTQ5OTM5NWQwMDYxZTExY2IxNmMyOTM0ZTBkIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiMzM3ZWVhOGUxNGU5ODA4ZTE0ZGUxYWY2YWIxNTRlMDA1MGFiMzMxNTU2OThjNzMxODRiODc4NWNiNmZjOTg3ZCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLnR5cGUifSx7InZhbHVlIjoiZTRiNTg0YjEyNmNkZGUyZDI5YzM0Y2YzMDkyYmE2MWE4MmYyYmM0YjAwNmRlYTY4Y2M5NzllOWQ4YWQ5YmVkZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMF0ifSx7InZhbHVlIjoiZjM1NTBkYjZhZTE2MDU4MTkxOWZjOTljYTI0YWUwZWE0ZjgyYTJiMmI5MzljZjBjZjZiYjhkMDgxZWY0NTY1ZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiMmI4MTEzOTdhZDQzMWYzNTI3ZDcxZGFiYTZhZDQwNDBjZThjYzRmYTliNjBhNTBjZWY0NzBkYjNmMmEwZDZmYyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiNTc3ODdlZjg4ZTE0Mjg2YzI1NjRjNTNlYmY4ODJiNTE4ODAwMmQwOWUyM2RkMmE4Mjk3NmJhYzdkYTAzYjAzNyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbM10ifSx7InZhbHVlIjoiMjhmNWZhNTYzZThhYjM1MTg0Y2QzNmNhMWFhMTI0NmI2NmY2ODAxYWMzYWE5YjU2OWJhZTJkMGIxZDZhOTM0YyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuaWQifSx7InZhbHVlIjoiYTMwMmZmYjUxMDc0ZGJmOWMyM2RlNmUzZGI1ZDIxNzA4NTA2NGU4ODU2NjM5OGIzZDcyM2Q3NDQyYzg3NzBkNyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEudHlwZVswXSJ9LHsidmFsdWUiOiJjMTVkN2NkNWUwOGQzOWFkNDExYjBlYmQxNTNhZDYzYjRmYmFmNGZiN2Q4YmIzOGRmMGFhYWJlMDM1MDk1NDQxIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1ZXIifSx7InZhbHVlIjoiN2ZiZGFmYTNhYWNjOGNhMGM3NTdkYWQ0NzliMmI2NDE3MjFmNTA3ZGZlOTY4YWNlYzhiOTVhY2ViNmZjY2VjOSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QudWVuIn0seyJ2YWx1ZSI6IjQzZTYwYWExNmQ5MTdhN2FiNGJlZGNiZDgwZTZjOWFlNDBmYmQ1ZWZhYjMwOTUyN2QwOGIyOTYxOTNjYTQ4ODgiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LmNvbXBhbnluYW1lIn0seyJ2YWx1ZSI6IjVlMDQ5MmMxYjVlZDdiMDk1NGY3ZThkZjQ1ZWRmZjkyODgyMTdmY2I3ZTE5OGQ2YzQ5N2UyZTUzZDliOTUzYTAiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LnR5cGVbMF0ifSx7InZhbHVlIjoiMzcxOWMzNjQ2YTQwMWI5MTU3NWUzMWNiM2ZjZWU5ZjkyNjMzMDU4MjBkZDc1NGY0ZDlkNzQzNTk2OWExODhmNiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiNjY4NTNkOTc5ZjFhNWY5YzYxZTVlNDc2NWJlYjljM2IwNGZkYjA5NTY0NjRmYzgyNGUyYjgyYTI2YzY5ODYyYiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuZXhwaXJhdGlvbkRhdGUifSx7InZhbHVlIjoiODU4NTUyOTc5MTYzY2JmY2JjNTg1N2I0ZjJiYmUwYzk4MmU1NzVhNWExZjExZThmOThlNTM2NzJjOWY2NTkyMiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5pZCJ9LHsidmFsdWUiOiI3ZjJmYjU5M2Y1MTAyMzkwZjZlNjNiYjc0NTkyNGVjMTNhYzJjZjg5N2M1MzkyNzAxZDFlZTQzMTQ2MGNkMGY4IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5jcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiZTQ2OTI1ZDhjODQ3YWVlMWUyMjg2ZGZhZGQ4ZjFjYWQ4M2E3N2I3ZTU1YTlhZjQ2ZDI3NjkwM2JjMThhNzljOSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0SW5kZXgifSx7InZhbHVlIjoiMjE4ZTk5MzJhOTVkZmUzYmI0OTVlMzVjOTAxNDU2NDVjNjMzMDZmODU1NDczMWUxM2Q2Njg1ZDliMTcxODYxNiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0Q3JlZGVudGlhbCJ9LHsidmFsdWUiOiI5NDNhODg4NzM5NjM3YTY4MTc3MWVjNzAwZDliZWVjYzgyMGFjY2JlZDdlZjgzOWRjNmViY2QwZjA2YTExMmE5IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1YW5jZURhdGUifSx7InZhbHVlIjoiOTIwMWFmMmZhOTQxZGI4ZTNkYzU4NDdmYzZiMzZkMDI3ZDAzODkwMTg4MmE5MGQ3ZTg4NDRlODU3MzBjZjNmOCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEucHJvb2YudHlwZSJ9LHsidmFsdWUiOiJmMzMwNGJhM2M1ODAxOTFhYmNlZTE3MDc3ODhlNDI0NGYwMjM0YzZjMDIyM2Y1NTA5NTY3MmUyYTNmM2RmMDNjIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5jcmVhdGVkIn0seyJ2YWx1ZSI6ImNiN2Q1ODczNTVhM2FhMzJkOWMyY2M4OWYzMWIwMzIzYzg2MTZmOWRmYzBkMzBmM2FiMjA3MzM0YzllZjFlODgiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnByb29mUHVycG9zZSJ9LHsidmFsdWUiOiI4NmU5NTcxN2UzZTdhMGMyNjJlOTI0MTU2NGZiMTRkZjM0YWUyZDFhMWJhM2JmMDMzNDVhYzBmOTAzMmExY2ExIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5wcm9vZlZhbHVlIn0seyJ2YWx1ZSI6IjBhMTU2YTljNmU5NmMwMGM0OTZmN2EyNThkZTg2MjQ4ZThiMzU3MDM0MDg1N2QwNGZkNzEyZDlhZWY3MzRiNjQiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnZlcmlmaWNhdGlvbk1ldGhvZCJ9LHsidmFsdWUiOiIyM2Y5ZTE4MWVjYWYwMzNlMDEyNmFhMDAzNGUwYTM5YWU1MDI5MGZiZWRkNGE5YjUxODk5Y2JkNDVhZjE2MjBjIiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMudHlwZSJ9LHsidmFsdWUiOiJjOWUwZDUxYmI0ZDA5MTdhNjZmOTliMWJkMTc5ZGM1MTRmNzJjYzgxNWFiYjBjMTIzM2NkNmYwMjU5MzZlNDY2IiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMuY3JlZGVudGlhbFN0YXR1c1R5cGUifSx7InZhbHVlIjoiNWU1MGRkMTczMjVhNjgwMTM5ZTM1ODVlODU0NTkyY2VkMzk3OTE4ODVlNmYzZjg3MTdhOTVhMWY0ZGY1MzFlNSIsInBhdGgiOiJyZW5kZXJNZXRob2QudHlwZSJ9LHsidmFsdWUiOiIwZDRlNTg5OTA5NDdiYTRjZWQzZTY4MzRlZTEzZTU5MjkwZDU5NTAyMDdhOTk2NmFhYzg4ZjJmY2Q2YmRjNjdhIiwicGF0aCI6InJlbmRlck1ldGhvZC5yZW5kZXJNZXRob2RUeXBlIn0seyJ2YWx1ZSI6ImYxYjFjZTQxNzUzMDNhODRkODZhMDU4MDE2ZjBlODBiMmZkMWExZDkyNzlkM2NlNDcyOTk5YTE2MTY4ZDQ5ZDYiLCJwYXRoIjoicmVuZGVyTWV0aG9kLm5hbWUifSx7InZhbHVlIjoiMzFkMGEyMDc4ZmQzNzdjMzkwZjIwMzJlMDU4NWU5ZmIxYjExYzk4OTQ0MDRhYWJjZmY5YWJhOTQ4ZWUyMmUzMCIsInBhdGgiOiJyZW5kZXJNZXRob2QudXJsIn0seyJ2YWx1ZSI6IjRhMTUwYzk0OGFjMGEwMjYxZTE2ZDdjMDg5MjIxNzg0ZWI2ZjY3NmJmNWRkN2YyZTgxYmM3ODIxZWJjNDhiODEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QubmFtZSJ9LHsidmFsdWUiOiI1Njg1NDJmMTg0NTI0YmE2NDg5NmFjNTBlZTc1YTk5YzUzZjkxYzU3NTdmZmQ0YjIwODI5MWIyM2MxYmZlNDE4IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmlkIn0seyJ2YWx1ZSI6IjgxYmVjMzExN2M5ODlmMmFlNmQ4M2NiNGNiMzFiZGEzZDY2YWEzZGRiNjhkYTM3N2IyNTc3OGE2NWQwNWJiNWQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuZGF0ZSJ9LHsidmFsdWUiOiJjNTZkODA3ZDI1YWMzZTA3OWU3Mjc3YWQ0NDkxODU4Mzk3YjI3M2RkNmNkYjVhZWYzMDRlOTg3MmUzNjQ0MGRlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmN1c3RvbWVySWQifSx7InZhbHVlIjoiZjhhYjUyYjVhOGFkYTJhNzRkMmJiNjllMWFhMDYwOGEwM2EzNmJhNmM3Y2Q5Y2RjYWZmOGYyNTNmNjVhYTc0NyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50ZXJtcyJ9LHsidmFsdWUiOiJmNTk2YzEzN2I0ZWUxYjJjMGY4NWQ2ODFkNDMwN2RmN2ZlMDBhMTA5ODJiMWRjZDU1ZTE4OTExNjYyMjE2NDZhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLm5hbWUifSx7InZhbHVlIjoiYzRmY2U1MDg5MTU3OGEzY2M1MmU4NzFmNjM2NDExZTdlOWU2NzAyOTA5MmE4YWE2NGMxYzAyM2YwZWZiODEyMyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6ImNiYWQ1Y2I1YWQ5NzFkM2IzZDAyNzEzYzRhMzYxYTlkOTUxMTE5OThkMjQwYTM1YjAxOTc5Y2RhYWYyNjc5MmUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uY2l0eSJ9LHsidmFsdWUiOiIxODQ0MDIyZWIzYjI5NDM5NzllYjI5MjdlYjJiMjcxZDk4NzZmNDc4ZWExN2ZhMjA1MzhkMjU1OGVkMDUxM2YxIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLnBvc3RhbENvZGUifSx7InZhbHVlIjoiMWM0YzA2NTdkNTRlMTg2NGMwMWI3MTA4ZjljYWZlODI5MDBjMmQ2NDA2ZjhmZTdjZTQwYjFmMTUyODhmZTY5MCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiJkMjkxMGY5NDMzYTg1Mzk5ODQyNzk5ZmVhMTI3ODE5MDM0NGNiMTE4ZGJlMWU3YTM0YzVmZTAxNWQ2MWNkMTk1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55Lm5hbWUifSx7InZhbHVlIjoiNDAwNDllMmUwMWEyMzdmZjA3NjdiN2Q4YjQ4OTFkMmQ2MWQ3MmEyOTA3N2M2MGI2M2E0NzlhZjlmMDcwOWI2ZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6IjQ3YzcxNjQ1OWEzMTEwYWI1YjY1MTI2ZDlkZWM0MGQ4MDBjOWU0NzcxYWFlOGI0YThkMGZlYjQ0NjdlM2NmYTYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuY2l0eSJ9LHsidmFsdWUiOiIwODU4YzQ0MGVlYTI0ZTU3ZTg4YjY3NzQzODIxZTM3Zjg3MWVlYWViNjdiYTJiMGNkZjRlNWNmMzVjNjJkYmY3IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LnBvc3RhbENvZGUifSx7InZhbHVlIjoiZTkwZWJiZWY5YTg3Mzc5MTJiNWMzMDk3YjU4ZTQ0N2Q3YzA1NTEzMjMzYmNiN2FjMDIxOTE3MzJjNzRmYzhmYiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiI2MmVhYTYwZGNkZTUzNDNmNTdhY2Y2MWE2ZmY5ZThlODgxM2UxZjRkYmQ2OGY2N2RjMzRhNmJkZmQ3N2JhNTdlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5uYW1lIn0seyJ2YWx1ZSI6IjU2YzRjMWQ4MjIwNmNkNzgxOTg5MGI1N2FmMWZjMTBhZjZmYjE3ZDBmODE1MDAwY2IyNzM4YjVlYjY2Njg1ZWQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmVtYWlsIn0seyJ2YWx1ZSI6IjA1MmY3MTUwYTgzYzUwMjU1MzA4MDMyMWRhZDJhOGUxMTMwMjJhZDMyNWZmYTk1NTYxZmI2ODk4YTJjZGUyZTEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiIwNTI4NDFlNGQxYzA3MDBlN2VjYzE1MjgzNzE4YTQwOTA0MzQyNjM1MzY1N2Q2ODAxNGZhYjQ1ZDZkODY2MmZlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0ucXVhbnRpdHkifSx7InZhbHVlIjoiNWEyZTc1YjVlODg3NjI1ZmE5MzEwOGNlZDIzZmVlNjA2MDg5Nzk0OWJhYWJkNDZkZTM4YjBiNmZiMjYzNWY5OSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiI1Yzc3NDcwYzJlOTQ1MTk5OThjYjFhODhhOTZlNTMxOWM3NDhmYWNmNmU3Y2ExMzViOTYyMWJiMzQ0ZGY0YThiIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uYW1vdW50In0seyJ2YWx1ZSI6ImVmMDUyZDE5ZTIzNmNjNzU3ODlkNGM5NTAxMDU1YWZkNjk1ZDY2YTEwYTI1YTY4YmFjZDFlMDJhNjBkMmNkMjEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiI1YzVjMWY4ZjZhM2M5YWUzZWZjM2IyOWQ3ZjQ0NjQ5OTc4NmYxMjUxZDdjNWIyNzk4ODBhNDQ4NzQ5MDRjMjEzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0ucXVhbnRpdHkifSx7InZhbHVlIjoiMDllMDg0NzA4MTczMjIzZmJkYzA1NTQwM2YwMzUyMDNkMTE1M2RmNzVmZWE5N2E5ZTNjMWJjMGRiMzRmZTFlZSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiI0MGJlNGRlMDBlOWZkYTBhODY2MzM4ZjczZmI1OWNlNzFkNDg0ZTcyYWE5YTg2ZmE3MjA2YWRiNjYzNWI1YmQyIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uYW1vdW50In0seyJ2YWx1ZSI6ImMxZGRjN2FjMDkyY2Q4YTY4MGE0NGUzMjBmMzNmZmVkN2NjZTdkZTFiNjc5OGMyMjY4MTViOGMxOGIzODAzMjAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiIxMzM3OTBiYTI1YTI3YzA3MzZkZmViMGU1YWQ5MDMxMWRlYzM2NmYwMmZjYTM3MDQ1ZDdmNmJlY2E1ZjU1YWE2IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0ucXVhbnRpdHkifSx7InZhbHVlIjoiNGY3NGFiZTMwMTIzYzNhMWNmZTZjZDQ1NWY0ODdmYzk2ZjAwNzhlMzY5OTY2YzZiYTdkMTcxYmQ0YzU2MjhmYiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiJjZGI3NGE4MjZhNzg0YWEyMTVjNmQyZTFjYjJiMjA2ODdhMmNmYWJjMmMzNzQ0ZmFlZjUwMWQ2OWNiOGNkMDdlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uYW1vdW50In0seyJ2YWx1ZSI6IjE5M2ExYmYzY2U2YWI0NzA5MTRiOTk2ZThmZTQ3ODNkNjViMDczNWFkOWM4MTAyM2RjMTRkZTc5NzgxNWEwY2QiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Quc3VidG90YWwifSx7InZhbHVlIjoiYzRlZjdmNDgwZjlkMjY5OTQ5YWExYTMzM2Q1OGI3MDg5NzA1YzY0YTg4Zjk2OGYyODBiY2VkYTA3YWFmYzk4ZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXgifSx7InZhbHVlIjoiNTBkNzI4NTZkYTNlNzczNjhmZDg1YTc2ZjBkZTczNjgyZjlkNzI1Mjg3MGMxNWIxODljMGVkZTMzZmQ2Yjc5NyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXhUb3RhbCJ9LHsidmFsdWUiOiI4OGFiOGYzODU4MjM1ZWU2NGVkOTcxYThjODUzYWNlZjBjOGE2NDMzODI0NGQwODQxZDBlNjBmYTk0OWUyYmIxIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnRvdGFsIn1d", + "privacy": { + "obfuscated": [] + }, + "key": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C#controller", + "signature": "0x54fd94d1e350982ad6c9d0494db89ffabdc601650d9e3c68d71ad484572cf6f22d8da8aab95ad5751302e3a444e6598c7a30658ae699acea0aea9ed1de0ec2221b" + } +} \ No newline at end of file diff --git a/test/fixtures/v4/tt/did-idvc-wrapped-signed.json b/test/fixtures/v4/tt/did-idvc-wrapped-signed.json index 94063a27..2c2848ff 100644 --- a/test/fixtures/v4/tt/did-idvc-wrapped-signed.json +++ b/test/fixtures/v4/tt/did-idvc-wrapped-signed.json @@ -1,6 +1,12 @@ { - "@context": ["https://www.w3.org/2018/credentials/v1", "http://localhost:8080/alpha-context.json"], - "type": ["VerifiableCredential", "TradeTrustCredential"], + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" + ], + "type": [ + "VerifiableCredential", + "TradeTrustCredential" + ], "validFrom": "2021-03-08T12:00:00+08:00", "issuer": { "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", @@ -19,12 +25,16 @@ "https://w3id.org/vc/status-list/2021/v1" ], "id": "https://sbl.alwaysdata.net/oa/credentials/123456789", - "type": ["VerifiableCredential"], + "type": [ + "VerifiableCredential" + ], "issuer": "did:web:sbl.alwaysdata.net:oa", "credentialSubject": { "uen": "198801234E", "companyname": "My Own Company Pte Ltd", - "type": ["CorporateBasicDetails"], + "type": [ + "CorporateBasicDetails" + ], "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C" }, "expirationDate": "2023-11-01T06:45:43Z", @@ -46,7 +56,10 @@ } } }, - "credentialStatus": { "type": "TradeTrustCredentialStatus", "credentialStatusType": "NONE" }, + "credentialStatus": { + "type": "TradeTrustCredentialStatus", + "credentialStatusType": "NONE" + }, "renderMethod": { "type": "TradeTrustRenderMethod", "renderMethodType": "EMBEDDED_RENDERER", @@ -78,9 +91,24 @@ "email": "def@company.com" }, "billableItems": [ - { "description": "Service Fee", "quantity": "1", "unitPrice": "200", "amount": "200" }, - { "description": "Labor: 5 hours at $75/hr", "quantity": "5", "unitPrice": "75", "amount": "375" }, - { "description": "New client discount", "quantity": "1", "unitPrice": "50", "amount": "50" } + { + "description": "Service Fee", + "quantity": "1", + "unitPrice": "200", + "amount": "200" + }, + { + "description": "Labor: 5 hours at $75/hr", + "quantity": "5", + "unitPrice": "75", + "amount": "375" + }, + { + "description": "New client discount", + "quantity": "1", + "unitPrice": "50", + "amount": "50" + } ], "subtotal": "625", "tax": "0", @@ -90,12 +118,14 @@ "proof": { "type": "TradeTrustMerkleProofSignature2018", "proofPurpose": "assertionMethod", - "targetHash": "84edabc618b2a5a7bad7eee9b58c287e9a39959d231eef3ab9270bd99922e54c", + "targetHash": "841c8d1fb121bf7baab0b1677c91dc47cca6aa1e8ac772f38e96f8b4315d1150", "proofs": [], - "merkleRoot": "84edabc618b2a5a7bad7eee9b58c287e9a39959d231eef3ab9270bd99922e54c", - "salts": "W3sidmFsdWUiOiJlMTJhNTk0ZjkyYmNjZjhlYTkwOWIwZmQzZjg3NTMzOGFkOTEwNTM3YjFhMTUwOTQzZTk2MTM2MWI4MzEzMzM3IiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6ImYxMmQ0MDFjY2YyOTk4ZDQxMzBhZTc1ZWQzMWI3MjI3MjA0MTBjYzEyZTRhYWY1MjEyM2MwNzdhOWJkNmUzM2QiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiZDYwN2NhMmM2NDk1MTNjZDliNTQ2YTA1OTdiMzNkOGE4MTkzNWYxNzE1MTYzMTY0YzQ5ZGU4NTBkMDY1NTE5MCIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6ImJkMWIxYzQ1M2I5MTFiMjQ3Zjk0OGM0NmRhNDRmMjFkNjYxYzMwYWMyNTkwNzgwYTM2YjYwNmE3YjY1Y2I2ZTciLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiI0NWQyNzNiZTJlNzc5YTA0YjQxNmVkZjhjZjBhMTVlYTEyOWM1MzIyMmJmZDFjNmUzZTgyMTJkYzhjYjQxMGZiIiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiJhNzYzY2M3YjkxN2ZjODc4N2Q5ZmIzMWM4YWQ3ZjUxYmQzNTQ0OTU1ZDg3ODEyZTFmN2FiZWM5MTI0YzhjYzM0IiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiI5MWVlOGZkYTY2Y2EzMmJmNmFmY2RiMDEzMzJjMDMzNGRhN2EwODZkNTZjYzg2NzhlMTUxZDM5ZjFlNjQxYzhlIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6Ijg2NDQ1NzUzMjlhMGEwOTdmYmIzZTE1ZGEwOThjNTc2OTUyZDYzMWNhOWFhNDU4MjZkMzk1NTYzNzI3YThmN2IiLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiYTEzYmNjYTBjODZhMjljOGZjZTM2MTgzMWU0Y2Y2MWJmMzAxYTg5MTY4MGMxNzRiNjc5NTQ5NDE2MTczYjI1ZCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiI5NTU4ODY0NmUwYjBlY2Y5MzgyYjExZjEyYTI0MjdiY2M1ZDczNDQxZGExMDQ3ZTI5OGNjN2RmMDdjYzEzZjNiIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiMTQ2ODY5YTlhNGU2MDNiYjUyYTI0N2M1MzFmYWM5N2RjMDIyMmY0YmQzNjY5ZWRlZjc4NTEyOTgyY2UwYjNkZSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLnR5cGUifSx7InZhbHVlIjoiN2NiYzNiZTI4ZDkwMDc3NzIyOGNhZDVhYWYwMjc4ZTkwMzE1YTIzNTExNjdjOTgwMDExMGRhN2ViYmZkOGRmYiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMF0ifSx7InZhbHVlIjoiOWU0MjJlZWUxNTk4MDljZjcyNmQ4MzIyYmVlMDE2YWI1ZWRmZDIxM2QwZDllNWNiOGFiMDgzYWMyZjRjMjU1MiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiMjYzMjdkZjVkNmQwYjRmZWQxZjkxZWExY2U3YzZhYWU2M2ZlOGNmYjhhZjExOTg4NzA3YmFkNGNmYzE5MjVmYSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiMWE2OTI0ZDQ1ZjZhMzEyYThiMDVlYzlmZmVlMjBmMzVlODZiYWUwMmNlNjk3ZjdhZTNmOTBiYzkyMGQwNzA4YyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbM10ifSx7InZhbHVlIjoiZjEzNTJhZTIyZWVmNmI2YzhkNzM0MWRjMzNjNWMxYjIxMmE4NzEwZDU3MzM1Njg2N2YwYTQ5N2UxMzkwNGRkYiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuaWQifSx7InZhbHVlIjoiZDBkNzQ4OGY1MmFjYTRlYjc3OTQ4MTNhZThlMjYxYjBkYWQzOTBlMjgyYjUyYThjYTU4ZDViMDk0NTM5MmZmNiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEudHlwZVswXSJ9LHsidmFsdWUiOiI2YmJkYzhiNjNiYjU1ZmEyNzEzZGE5Y2IzMzcxOWNkNTZlMjgxYTE3NjE0ZmVlNTVjZTUxM2U5MzlhNjdiNzdlIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1ZXIifSx7InZhbHVlIjoiZjBmNTM1ODA4OTMzMWQwNGVkMTUxMzVlMWNkMzEwZGJlMjdmMGFiMDQ2OWNmNTY1MmQ1Yzc4ZjUwODM5Y2RiZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QudWVuIn0seyJ2YWx1ZSI6Ijc0YzczOGY1YjYyM2E2YjhmNjVlMDM3MGQ5ODBiM2YyMzU1ZTQwYjhkZjk4ODRlMzMzMGM3NTU5NmFkYjk3MTQiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LmNvbXBhbnluYW1lIn0seyJ2YWx1ZSI6ImM1ZTFhYjkzNTIwYWRlNjFkMGZmZWExMGQ2YmU0ZGY5NTVjNzc2MGY4NzdhNzMyOGY2Y2U4NzYyYzhkNWIzODQiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LnR5cGVbMF0ifSx7InZhbHVlIjoiMGYzMmZiYzE5NTRjMjVjNmUzYmY1ODg3MjVjNmQwOGQ3OGE2MGQzYzA5NWMyNjBiZTZkODRkNDc1N2YyMzc3OCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiOWJjOTk3MDFkNmRlYjM4OTY1OGE3N2Y2ZDg2ZmQzZTAzNDhmYzQ1MGZiOWM1ODA0MTJmNGRmYjVjNmYxMzBlYyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuZXhwaXJhdGlvbkRhdGUifSx7InZhbHVlIjoiNDFkMjA3ZTY3OGUwYzQ0YTRhMGU2MTgxZDFlNzg4NzY1NThhNmY3MmY2MWFjYjRmZDhiYzhhZjYzNWJiOTUzYiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5pZCJ9LHsidmFsdWUiOiI4MmY1YjM3ZjczMmQwZThkNGUyOTdiZDJjOTA4YWM3NmQzYzQ4MTg1MjBlMjJjMmIxMjMwMjk3ZTNjMDg4ZjFhIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5jcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiMDExZWE5MjA4MmJjZmMxNTM5MTU4ZGY4ZjFkZTlkMWMzMjVhNmU1NjM1YTA4NTk0NDE3MGEwNGVhNmQ1M2U1OSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0SW5kZXgifSx7InZhbHVlIjoiZGEyNjgwMjc3MmUyYTIwODMwZWYyYWNmNjU5OTI3NDcwMjhhNzlmOGE5ZDExYjAxZDlmNDVhNzdmZmQ5NDhhYiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0Q3JlZGVudGlhbCJ9LHsidmFsdWUiOiIwNjVkZTU1MTliNjZmNTBjYTc1YTNmY2RkZjRhNWM0NzRjMzhhZDM2MWIyMWU1YjI5ZWVjYzU3Y2ZiYWNlZTQ4IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1YW5jZURhdGUifSx7InZhbHVlIjoiNDJhNDU1MmRlZmIwYjI5MDcyYjE2ZWUzY2UwODA2OTJiYTMyN2QwZDQ2NDI2ZThlY2FkNTcxNzc4ZGViZGQwMCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEucHJvb2YudHlwZSJ9LHsidmFsdWUiOiI0MzJjNGE2YzExNjYwMDJjOGRiYjMzMDkyYTBmMmE4YzgxNzllMjE1MTk3ZjVlMTgzZmI1MmQ0Mzk3OTlhYTVmIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5jcmVhdGVkIn0seyJ2YWx1ZSI6ImRhZTIxYjhlODZiMGMwMmYwYjg3Y2UzMGQ4NTMxYmNiMzI4NTNhZDQ2NWY4NmYzNTliYWIzNGY2NjllNjJmYjQiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnByb29mUHVycG9zZSJ9LHsidmFsdWUiOiJlNzRkNWQ1YjFkYTdkZTQ5ZGQxZmUwMGY5MWYyMzRmN2U2ODZmYWVmNjU4MzI0MjQzNDZkMGVmYzBiYmEyMmFiIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5wcm9vZlZhbHVlIn0seyJ2YWx1ZSI6IjM4NjgxNWFiMjIyMmM2Yzg5N2JlNDRlYWRiZmUxYmE3NTkxYzdmYzkyMjJmY2ZiZDA3YTZkZTE3NzA5MTgyYTciLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnZlcmlmaWNhdGlvbk1ldGhvZCJ9LHsidmFsdWUiOiJlNTQzNDY2ZTVhNzVjN2QxMDczNjVkZThhMzcwNGM2MmIwNGVmYzliN2I5YWRiYjdiYWMwMWUwNzBiNjE0MzNkIiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMudHlwZSJ9LHsidmFsdWUiOiIwZTM5YjA5OTdhMWRiYjkyMmQ1OTBkMGIxNjVlMmUxYjQzMGJkZjYxNmIzMmUzOGVhMWE5ZmU5ZDc3MDA2YzQyIiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMuY3JlZGVudGlhbFN0YXR1c1R5cGUifSx7InZhbHVlIjoiNDNjMjFmN2I2YzdhNmUyZjA3NWIxODk5ODMzMzQ4ZmFjZjk5MWVmMjc1MzQxMTI1MzhhYWUyYzc2Yjc4N2MxZiIsInBhdGgiOiJyZW5kZXJNZXRob2QudHlwZSJ9LHsidmFsdWUiOiI5ZDliMzkxMWVkM2Q2OTU4ZDdiOWY3ZGE5Zjk0NGNmMDY1N2Q5OGE5NzVmNjgwZTU3YzJlMjQ3NjRiZWE1YTNmIiwicGF0aCI6InJlbmRlck1ldGhvZC5yZW5kZXJNZXRob2RUeXBlIn0seyJ2YWx1ZSI6IjcwMTc4ZGE4ODVkNGE4MmEyNjJhOGNlYjcyY2I1ZjA3Y2FlMzdlZDUzYzI4ZTliZWM4MTBhNzdiMzZjOWFkMzkiLCJwYXRoIjoicmVuZGVyTWV0aG9kLm5hbWUifSx7InZhbHVlIjoiMTg3Y2MwNmNkNGJmOGZjYWZhMTQyMGJmMzI5YTIzMTRjZjJmZjk1NzkzNTkzZjY2MWZjZmY3ZGMxZDA4YTNlNyIsInBhdGgiOiJyZW5kZXJNZXRob2QudXJsIn0seyJ2YWx1ZSI6IjAyMDU2ZmQyODI5ZTIxNzEwY2QyZTRlYzVmZWUxNjVmMTcyMDY1MTA0NWNlYzdhZGVjNGIwMDYyYjllYTI0MmYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QubmFtZSJ9LHsidmFsdWUiOiI5ODVlYjU0YWYwMmUwOGIyZTRkMDk0YjE2NTgwYjFmMWE5MWRkMzk5Y2JmNjZkZDIwOTI5OTMxY2ZiMDdjZDBmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmlkIn0seyJ2YWx1ZSI6ImE0NDdjODA0ZTdmZjBjMTBlYjFiN2JiMzU4ZjYwNWRmNmIzNzBlN2M3NjI1MzZhMmE0NDg2ZjUyNDVkMDk0ZmIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuZGF0ZSJ9LHsidmFsdWUiOiI5YzIzODdiNjUwNTUyYmU5MWQyYzg0ODdmZWQyYTI0MTQ0NmFkZjM2NDM3MDY4NmZjNjVjMzY0Y2ZjMGEyZDU4IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmN1c3RvbWVySWQifSx7InZhbHVlIjoiYzExYzNjNmVhODM1N2EzNTRjOTMxZDk2MzZkNWIxNTBkMmRhMzFjNDllODAxNWE2YzUyOGVhYzQwZWNjMTk4YiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50ZXJtcyJ9LHsidmFsdWUiOiJlMmFkMzg5YmE3Zjc4ZmE3YjBmNzkxOWUyYTM0NTAxODllNDlhNDI2YzU1ODFlOGVjZThhOWFhYzI1MTVmNjUyIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLm5hbWUifSx7InZhbHVlIjoiNThjMDlmMzI4MzNkOGQwYWY0YTRkZTc0OTRkYjk5NzJiZWQwNzVkOTkzMDQ0MjExMWM4ZmQ2ZTA4YTcyMzM0OSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6ImQ3MTY2YTVlODBiNzAxMjQyZTZjYWI4YTI3YzE2YjdiZTkzMGJmZTkxY2EyNGYxMTVjZTk2YjRlZjllZjE1NzEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uY2l0eSJ9LHsidmFsdWUiOiJiZmVjN2U2M2M2YWUyMTkzZGJjY2EyOWQwYTQ0Y2U1ZTk4MWNjNmFhNmM1Yjk4ZjY3NjBkMjk2MWE4ODRlYjYzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLnBvc3RhbENvZGUifSx7InZhbHVlIjoiMTBiYjFkY2FiY2YxN2EwYmFjMzg2NzdmMjNkNDU0Y2UwNDczZjUxMDYwZGZkOWQyMDVmNGUyMWU0OTA3MzJmZSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiIzNTdjZDk1ZjE3OTBkMjE0NWRhNDZlMzk1ZDI5MjcyMWQ2ZGQzZjkwMzY1ZDEyZWJhZjRhZWUxZDQzYzVjY2NjIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55Lm5hbWUifSx7InZhbHVlIjoiMDg5NDFhZGQ3YTU4MzBiOTE1MjBlYmVkNTY4YTQ2MTc5NjI5NjAzZGMzMjZkMDZiY2I0ODcxYmI2ZDVmZThhYSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6IjgzYjY5ZjEzZTQyNGY4NGY4YTAwMzBmNzljYzMxZjc0NjkwMzM2ZjhmNDllNWNhYTIxYTFmNWVlOWQ0ZjBiZWEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuY2l0eSJ9LHsidmFsdWUiOiJkMTRiODY4OTVmZTU2OGY3Yzc3NmRjOTUwMjc3NGE4OTQzYmNkODVhM2ZhNGNhOTM0NmVlMDAyNzFlMGVjOTA5IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LnBvc3RhbENvZGUifSx7InZhbHVlIjoiMDgxMjYzMjQxZDQ1YzY2NGJhMjEwZTQ0Njk1MmYyNTliNmFlMDA4NjVhZDk0YjliZGNiOTJhMmNjY2Y4ZTFhZSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiIzYmY2NDA0MjM1Y2Y5YjkxYjlhZmQ4ZjdkNTE5YzY3NWJhYzdmNTc0N2M5NTIwZWViZTYzY2VmM2VlNzZkNzQwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5uYW1lIn0seyJ2YWx1ZSI6ImExZjA0MjExM2JlMjEyZThjZTZjNTZjMDllMjkyOTk3OWMzOWRkZTk3Mzg4OTVjMDI2ODA2YjQ2MzQyNDRlNjAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmVtYWlsIn0seyJ2YWx1ZSI6IjY4MDc3M2Q1M2U5YjEyYTE1NzA5ZTM0NjYxNDY0MzlmM2FlM2Q0NGVjZTQ0YjhmZTY4MjY3MTYyYTc5ODRiYzMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiI3NjNhOTNhMTNlNmMxZmE3YWU0YzEzNzIyMTU5ZjIxMDk4YWMyODg5NGZmMWI3ODRlMTVlYzZhMjI0NDExNjAwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0ucXVhbnRpdHkifSx7InZhbHVlIjoiOTdjZGQ2MzE2NjljMjQ3ZWFiZGU2OTdiM2M5MTkwZTMxOTk5M2Y0NDU2MjFmODEwNTU2MDdhYjgwOGYyZTY4NyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiJkZjM5Mjk5YjZjMzFmYTU3YzVjOWU2OGY5NGMzNDA5OTIyOGZkZWE1M2ZhZGY5N2RiMjExYjQxMGVhMzI1MDQ1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uYW1vdW50In0seyJ2YWx1ZSI6ImRmNTZhZjU4OTRhZmI3OGY0Y2IwOTRiYzVhNWJjNmQ5Njg2MzY5YWZjYmUyYTM0NDE2YThmNWNhMmYxMjQwY2EiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiJhZTkxZTc5NTdlODNlN2M0NDgwMDU1MzEyZWU1NWYwNDcxMjQwOGY5YWVkYmNiNTBhNWRmY2NjZjFlMmYwOTMwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0ucXVhbnRpdHkifSx7InZhbHVlIjoiZWZjMzA5M2U0YmUzMTc0NzYyZmRiMGI2Y2Q0MmY5NmI2YjJlNDUyZmQxYjY2NzQxMjRjNWVhZjU5ODJiOTQ5YSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiJmMjllNjA5YTRlMjM3OTkzNWU5NmM4NTVkZDk0MjQ3YzhjMmRjMTJkMDEyYzQ1NWQwZjNhYTJkMTQyN2EyMmE2IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uYW1vdW50In0seyJ2YWx1ZSI6IjA0OTBmNjViMDdmOTRkMmFlMTUxOGIwODAyYjdjNTMyZDk1YzhmZjMxYzk4MDRjZTQ0NDJhYjM5MDJhZjcyNTciLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiI2OTU2ZjczMDhhMTFlMDVhYzBmYTYwZDFhNTMzMGYwNjZiMDQ4NjUwY2I2MWQ1YjQ1Nzg4NjE0ZjBjNWFiYTZlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0ucXVhbnRpdHkifSx7InZhbHVlIjoiYWI2MGI4MzM2MjllZjA3MGU1YzZkYzRlODNlOWRhMmJhYTU0NTg2Nzc5ZGE1ZGIyMmI0NzQ0ODhmZWNmMmJjYSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiJjNTlhOGZjMGIzMTYyZmI2ZGY5YjM0MjE5ZTQ2NmVkYTkyMWU5NjVlYzY1MzMzMGE1NDc0ZWFiODRjZTVjNjExIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uYW1vdW50In0seyJ2YWx1ZSI6IjMyMmI4YTcyZDJkNTY2YTc5NmJhZDYzNTFmZGZkN2JkOGNmZDIxYWJjNzJiZTZlZGRlNmYyZWVkNTFlN2IyNTQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Quc3VidG90YWwifSx7InZhbHVlIjoiNTE2OTJjNzc3NTFiMTljZjY4ODRlOTY1YmYxZDRlZTY4M2NkZGVkYzM5MjgyZTQ5YWE4NTZmNTkwNjA5MWI1OSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXgifSx7InZhbHVlIjoiMGFjNDQ4NmVkYzIxNzUyYjNkOGRkZDQ0MDExNWM5MDM2NmMwNjc3MDNlNDEzZjM5MTI2ZTQ0NGRmYjNkM2JmMyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXhUb3RhbCJ9LHsidmFsdWUiOiIyMzUzZDJhZGIyMDBhMTc0YjVmOTFhOTA5NWQxZWEzYmE0MGZkMzRmNzk3Nzc3NWNmNzU4NGE3YTllZDNjZTNjIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnRvdGFsIn1d", - "privacy": { "obfuscated": [] }, + "merkleRoot": "841c8d1fb121bf7baab0b1677c91dc47cca6aa1e8ac772f38e96f8b4315d1150", + "salts": "W3sidmFsdWUiOiJiYjMyNjdiNGRkZGY0ZWRkMzJlZDNmY2YxYTlhOWM5NzY3NGFiYjBlMjk5MDc3ZTgxNjA0MzIyYjA0Y2IyZjg3IiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6ImZiNzJiODdmNGRjMTM3MmFmNGQzOTcxYWQ3OWFiNzMxNDIwNGU0ZWU5YmU4NmE4N2NhNDQwYzdjMmU1OTY0ZGIiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiN2EzMTliZTQ4Nzk1ZDRlMjAxYjAyMDE0YzlmMjFkZmJlZjM3YWE2ODZlMzViNWM2Y2YyMjMwYTExMGRjNDJiNiIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6ImQ2MzlhNzI4MGVjNjNlYzc2N2MwYTFiZmRmZGQ3MTQxYjVjNWNlZTg5NzU2ZmIxMGYzMTZhZGM3MTA3MGU4OTAiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiIyN2M5YzYwMzUzMGFmYWExZTdjYmFjNTI4Y2VmM2ZiZjJhNTA5NTNjNjg2MzY0NTgyNWY2MzhmMDAwOWZlNjg5IiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiI1ZGMwNmM2ZWZiZTMyYzAzODgyMmRmYzNlMGI5NjJiMzc4YzI4MjE0MzdkZTU0NjU4MzUyZWVmYWJlNGM0OTUxIiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiI1ZjBhZTFmM2ZjODYzMjFmZmYwMGRkMzZiN2QxNDBhOGY3Y2U2Y2FiOGQ1ZmIwZDE3NDcxNThkMTQ3NWJkNmZhIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6ImUxMDZmZTFlMzZhYzA1YzZiYzgyNDg2NWVmYmI5YzM5MGNkZWI2OTQ3NjZjZGYzNDIyZTEwZWE4OTEzMDVmNjgiLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiOWJjZDE3YzRiNDQ1MjE0YjMwYTMxMGNjZDIyMWQ1MzcxNjY1NGQxZDBmZjc3YmZjNzI5YjZkODE1ZmU1MGJmZCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiIwM2FmYzQzNTViNTQyYTc2ZDM4MTQ5NDlhNjMyZjEzYTM0YzcyOTE4MWM4MmI5ODRiMmFhM2RiMDgxN2FjMzRhIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiMTFkYjMzODJmMzI0OTNjOTViMjYwNWY4NWQ0MWVmMmJkMTcwMTlhMDFkNTM3NTk5Y2M3Y2Y2OGI3NGNjNjdlYSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLnR5cGUifSx7InZhbHVlIjoiZmZkOTQ5ZDRiMDA1ZjhlMjRiYzI4ODgyNjQ4YzM2NjE3NDM1NzA5MDI0ZDU4M2M2ZTE3NmYxY2JmY2Q5NzZmMyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMF0ifSx7InZhbHVlIjoiZjNkNDgzY2YyMmI2YmVlMTUzN2RiMjlhYThkOWE2OTYyNWIyM2E2N2Y0ZmIxZjg4ODNjNWMzNmMzOTA3MjkyMiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiYzA5ZDZlMjBlZmQzZjg5ODM3ZTg1YTczMjYwZWRiZGEzNmUyYmZmODhlNTk0YzZmMGIxMzljOTZjOTg0YTdiMyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiYTc0ZDRmODc2ZmI5NGMyZjI5Yjc4ZTRlMmRhMDY2ZjIxNTE0OWVlYTY3ZmJjM2RhZTgzYTE0OTZiZTllZWUyNCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbM10ifSx7InZhbHVlIjoiOTM2ZTQzMzgwMjI1Y2FmMWViNTE1NmYzNTBmODBmNjIxYzk4YWVlMjAxMWU3YzdlODE1ZmUzMTM5NmQ1YzlhYiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuaWQifSx7InZhbHVlIjoiMDkxYThjM2I4OTIwMjM1NzdlYjIwNzIwM2VkZWQ5YWU3NDFjYjQwYjJhYWNjZjJjNzAxM2UzNjJlMzRhNDhhZSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEudHlwZVswXSJ9LHsidmFsdWUiOiJhMTVmYmQ4MTdiNjQ4Y2U3MTVmNGY5ZmRjNDU3YmZjMTI4ZmExMjg3ZjJjOWQyY2Y5NDlhN2I5NGQwZWRhYTY1IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1ZXIifSx7InZhbHVlIjoiYTcwYmE3YjJlNTI2MjRkZTQzYjljODRmYjIwMzc0ODY0NmUwZTcxYTVhODJjNjk2YzA0M2VmYWY2MjI5ZDEzZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QudWVuIn0seyJ2YWx1ZSI6ImJlOGJhZDU4MTRhYWM3OGY3Njk5N2ZiY2U1NGJhMmJmYjk4MWU2ODAwNWU4ZTY4MzkzNjA2MGM0MmQ1MTUzZDEiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LmNvbXBhbnluYW1lIn0seyJ2YWx1ZSI6ImY5MTkxMjFkMmU4ODA0MTc3Y2M2MmJjZDMwYzMxZGQ1M2JhNDY2ZTlhZDQwNDNmNTZiZWZmNGM0MzYzZTE1ZDgiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LnR5cGVbMF0ifSx7InZhbHVlIjoiMmY3NmE4ZWUyYTI3MjgxOGNmOTIzYjg4YmVhOGRmYzUxNmIwZWU4OTNjMjI4OTIzZWExNDJkN2E4YWVmODA3YyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiNzg1ZDc5OGE3M2Y2NjU5YTc2M2E0MzUzOTRlYTE1NGM3Y2RmNDRmNjA3YTM1YmZjYWZhMWZhYWE4N2VlZGZiZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuZXhwaXJhdGlvbkRhdGUifSx7InZhbHVlIjoiM2E3MjAwZGU4NWRjOTlkMjQyMWQwYjEwZTUxNDg0ZDk2ZTdhODIxYzMxMmViZjllZWY2ZDIzMmJlNjJlZjJiOSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5pZCJ9LHsidmFsdWUiOiI2MTY3NzRjMjE3YWZjN2UwZjZmMjkwOTNjYWZkMzM2ODNmODVjNzVkNmE4ZDdjYjMwM2Q5MGYyMDljNTUyOGY5IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5jcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiMmI4NWY5NWVmZGQ2ODViNzM5ODcxZjVmNzhiZDUwMTZlZDAyNTMxNDIwMjNkZDczM2ZjOWEwNzI1ZWFmZTBkMCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0SW5kZXgifSx7InZhbHVlIjoiZDU3YzQ3NGYwN2Q4YTExMjNhMzk0YmZiMGYyNzRjOTYxZDUwMzQwMjEzN2IyYzkwNmZjODhmZjRkNWEzYWE5MSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0Q3JlZGVudGlhbCJ9LHsidmFsdWUiOiJiZjMxYWIzNmVlNjUwNGNkZmUzYTgxMTg2ZDdlZTk5MGI0MTczZjA4MGEwZTZhMTVlYzk3YmUyZGU5NTU2MTM2IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1YW5jZURhdGUifSx7InZhbHVlIjoiZDljNmYxNTFiNDU4NTI0OWZjNmY1YzBhZDhiZGVmYmM2NjFkN2VhN2U3YzFmZWI4MGFhMTZkNzNhYzg1MGRjZSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEucHJvb2YudHlwZSJ9LHsidmFsdWUiOiI4YmIyMzFmYzJkMmIxOGMxOWJiYmZhMzA2YzlkMWQ3ZWNhYjcyMTE0NTI3Zjk0NTNjYTY1MjkyMDc3N2Y1NTIzIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5jcmVhdGVkIn0seyJ2YWx1ZSI6IjNmNGNkYWM1NDg5NzA0M2VjYThmOWZjNzUwNmYyYjUxOGU5NzU2YTljMTVhNmJmM2E0NWRjNDkzZDUyN2Y1MzIiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnByb29mUHVycG9zZSJ9LHsidmFsdWUiOiJlNDVhNTA0NzY4OTA3MDE0YmU2ZjRiMDc5ZDZkZTNkYjZhY2MxMzNhMzRmYTg2ZWU4MjgxNmUwMzE3ZDFkOGE5IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5wcm9vZlZhbHVlIn0seyJ2YWx1ZSI6IjQ1YmM3NTY5MTJmZWZkNjFjNTViYmY2ZDc3MGY5OGZiZDVhNWQyMDI4ZWE5ZDUxMDQyMzY1OGQzOTQ3N2MzYTAiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnZlcmlmaWNhdGlvbk1ldGhvZCJ9LHsidmFsdWUiOiI4MzUwOGI0N2Q5NDkzOTM1MGJkYzBlMGIxNGI3MGQyYjUwYTc1ZmI5ZmFlNzdhYTA0MWViZjQ1YjJhNzFlYWRjIiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMudHlwZSJ9LHsidmFsdWUiOiI1M2QyM2RmM2ZkYTc3YWU3MzQwMDg2MTY5YTgzYjE1YjY3Y2Q1ODdhMDU5NWQzMWRlOTI5YjAxZDQxZTE5OTQzIiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMuY3JlZGVudGlhbFN0YXR1c1R5cGUifSx7InZhbHVlIjoiNDg2NGUxYWJjOTBkZGFmNDk0YmUxMTkyOGEyYzI2YmJlODNjMGY0ZmMxNWQ1YWJiY2NlNTJmNTE1NGVkNTQ0YyIsInBhdGgiOiJyZW5kZXJNZXRob2QudHlwZSJ9LHsidmFsdWUiOiJmZmQxMzg5NmFiMWJkNjg0ZGNhNzA3N2JjNDljNzE0ZjNjNzIwMjMwNTY5ODYzMmI5NTYzMmZmNWU2MjBiZmI2IiwicGF0aCI6InJlbmRlck1ldGhvZC5yZW5kZXJNZXRob2RUeXBlIn0seyJ2YWx1ZSI6ImI0NDUyNzAwZjE0ZDg5ZGFlOTQzNGZkNzRlN2MzMmNlNjUyMGI3YjY5ODYxYjVmZTc3YTJlZTQ0MGMyZjEyYzAiLCJwYXRoIjoicmVuZGVyTWV0aG9kLm5hbWUifSx7InZhbHVlIjoiNzU5NDFkOTFmMjRmYTgyMDhmNWRmZTdhMWMwOGI0ZWJlZjA1OGQ4MWYzZjJjNzQ0YTZkZDk1MGY3Mzc2ZjY3YyIsInBhdGgiOiJyZW5kZXJNZXRob2QudXJsIn0seyJ2YWx1ZSI6IjVkN2E2NGUwOThhOWQxYjA2MjljYjRkZjE4YjE5ZWQ1NTQwMGQ5ZjRkZTcwY2U2Mzk1ZjlmYmM3NDc4YzdiZWEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QubmFtZSJ9LHsidmFsdWUiOiIxNDM1MzFhMDA0ZDNjZjBmOGYyZGE2NGY5OTIwNjA1MDcwYzlhZmViNTk5YTg1MTZjNWZlM2NhN2I5M2M5NzBhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmlkIn0seyJ2YWx1ZSI6ImZjYWFjODY4MDdjNDRhNjI5ZmEwYTdhZWNlYjk0NjRlN2Y0MDYxNGFjYWI5YTZjMzVlNGQ1MGUxNWE5ZGQ4MDYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuZGF0ZSJ9LHsidmFsdWUiOiIyN2ZkNDRhYTI2ZWM1MzE2MzM5OWRiMzE4MzkxZTAzNzdlODdlNjIxOGRmZDU1N2VlOGFhZDhhZjY3M2U4MGViIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmN1c3RvbWVySWQifSx7InZhbHVlIjoiMTNlMDc4NjMzZmU2MWViOGYzMmM1N2U1MjU3NmQ0NzMxZDUxMzEzMjJjNmNmYzFiZDRiMDkyN2Y4NTIwZGVlNCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50ZXJtcyJ9LHsidmFsdWUiOiI0YzcxNWU5YTFhZmI3N2MwMDNmYTk3M2M2MGI3MzYzMWI0N2ViNjM2N2MyYTMzNWFhNjlkMWFkOWY5NmM3NjljIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLm5hbWUifSx7InZhbHVlIjoiOTIxNWUwOTdjNDc3MjhiOTc5NGVlZjg4YjMxODJjYmUxMGUwMmVjNDA4YTYzODIyMjQ3OThjZGM4YjE3ZTViOSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6IjJkMjIxY2IwYzRlOTI3ZTUyYjNkNjZlZTNkNDY4ODFmZWNlN2QyNzg4MDgzMTFmYjQwZDdjNjE4OThmNmQ3OTEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uY2l0eSJ9LHsidmFsdWUiOiI5OTdhZjU5ZTJhODE5ZDYwZmFlNjVhMDI2MGNlZjg1MmM2ZWY0NDI0ZGQxZjJjZmU2NWRjODk0MWI5NWFhNzNhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLnBvc3RhbENvZGUifSx7InZhbHVlIjoiZmZjMWIzMjI5MDQxMmM3Yjg5OGU4M2E3MmYxNDE2ZmE4YzhjOGZjNTY1N2U1ODdmMmU2Mzg0MWJiZjY1YTVhZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiI5NmM0MGUwOWFiZDU4NTZhNWVjZTkyMGI4NjNiMzZmMzliMmI3ZjA4YzhjZDBhODk0YjFhOWVmZmZhYTkxYjkzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55Lm5hbWUifSx7InZhbHVlIjoiNjU3ZDJhNzJiMzFhNDExNWQwZTAzOTg4NTYxZmQ4MDgxYjI3YmM5YzljOWM2YmZmNTU3MTUzMzQwNWViMWRiMiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6ImZmZDQyOWI0YWQ2ZmU4MTAxZjJlNjMwMzQ2OWNmNTljNWFjNTU1NmU0ZDdjMjljYzU1YTkyZTM2MzBmNzRjZmEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuY2l0eSJ9LHsidmFsdWUiOiI2NjQ3ZmRiM2U5YzYwNzdmYjRjM2VkMzA2ZmIzMWQ5OGE2NzhkMTkzZDMxYWFlMDBlNGY2MjJiMzg0OWE4ZmFjIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LnBvc3RhbENvZGUifSx7InZhbHVlIjoiZDhiMjJjYzMyZDUzODBmYjFkYzE1Y2RlYzA3ZGY5YTZmOGQ3ZTljYzdiNjY1MzliOTZmOWFiYTZmMTI5MGI0ZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiJkZDkxYmEyYmUzOWNiNjY5MGVkZGQ4MTE2NmI0MDNjMDllMmI2MWJhZTVmNjc0MzBmYTUwMDdkZjcxNWNlMWVhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5uYW1lIn0seyJ2YWx1ZSI6IjFjNDcxM2NkNTRlOWNjODUyZWVkZWRiYjUxYTQ4Yzk5OWE0NGVlODZlNDdiNzUyZGZjMWU2ZWM0MTBlMWIzYTQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmVtYWlsIn0seyJ2YWx1ZSI6IjRlOTY2OWU3N2Q3MTFmMzYyZDY2MGNjYWU5ZTM3OWFiYzU3NWRlMmU0OGFlNjE3OTMxMTY2MjNhYWRkNDBkNGIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiIzN2RjYTdjOWU3M2YwNjFmYWUwMWM4NDBhOGYyNjMwYmI5NTBlOWQ3NWM3MDE2NWVjODBiM2IxNWY5NjY4MjYzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0ucXVhbnRpdHkifSx7InZhbHVlIjoiNDExNzM2MjUyZjhkMjY4MGQwZmE4NDEyNjU0ZTlhMmMwZTdiYzY1NTliMDAyNTZjZTVmM2EyNjI4YzViZGM5OSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiJmMmIzZmU3YTI3OWQwMTc0NTRhNjM0Y2ViNzRkMWJiMGRhZDk1YTM2MjViOThjYTY4MTJkYzYwYjc1ZDI3NTVlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uYW1vdW50In0seyJ2YWx1ZSI6ImUyNzE1N2ZmOTRjMDk0YTA2NmZhMzE4NGIzNGQzNTJhZWNlMGZkNDRlZWFjZjJhOTRiOGQ2N2VkMTZlOWI2OTEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiIxYzY3NzBmMmNmNjU4MmEwMWUwNjZiMzg5YTRmZjlmNjM1M2Y1NGVkMzhlMjgwZjZkZjc2NGE5YTk5N2Y3Yzk1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0ucXVhbnRpdHkifSx7InZhbHVlIjoiZWUxYjFjMzFkNzAwZWUxYjM5YWRlNmIwNjgwMTQzMzljMDE5YjQxNmU5MGU2ZmJlOGRjOTliZDE3ZTBjZTEzNCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiJjOThmZjcyMWZkZDM0NGU2OWZlM2I3Yzg1NDFlOTg4YTJhMjgyNzhmMmZkMTk2Zjk5MmVlZDQwYmIwOTBlZDZmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uYW1vdW50In0seyJ2YWx1ZSI6IjE5NzRjMjNkNzY1Zjk2NzhhYWJjNGJkMTA3Mzg3MjQwOTNiNWRiNTM1MjU2NDhhYTViZmMzMGMwZjVlNmNmZjUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiIzN2ZlMjY1ZjU0ODY4ZTA4YWIwOTcyNmIzYjljYzQxMTNlMTY4N2RhYjI5MzRhN2Q2Nzg5YjRiNzUwOTQ3NTFjIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0ucXVhbnRpdHkifSx7InZhbHVlIjoiMDgzNWRhZWJiNGVmYzQ4ZDcxYzU0MDQwMDU1NTVmOGY1ZThjNWQyZGFiMmRkMmU3NzRiNzZhNmEzZjcyY2Q5MiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiIzZmYyNDI4MjhmMzk3MDNjNzA4ZDkwMDEwMjFlNTllNGYwMTkxNDUzZmMzYmQ5YmQ2YzE1ZGE5OTA5ZWI4MWJkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uYW1vdW50In0seyJ2YWx1ZSI6IjdiZWU2ZWIyMWI1YTk0NDRjMGY3MGExNjBhYjJiMDJiOWFmN2E4ZWY1NjVmNjMzZDhjYzgyMWFhNzJiOWNkMzQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Quc3VidG90YWwifSx7InZhbHVlIjoiYTAzNWQ0MjdjYzk2NDlhOTBlOWI4MWE4YzdmMTkxNDMzZmNmMTNlMzU1ZTM5NjRjY2Q5ODdkNmI2MjZhMzQwMCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXgifSx7InZhbHVlIjoiZGQ4NDEyMzMzYTAyNzUwYzc0MTMxMzQzYmVkMDk3ZTQ5MDczMWEyMzI5M2Y3MGFlOTY4ZjZkY2ZjYzRiYWVlZSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXhUb3RhbCJ9LHsidmFsdWUiOiJiNmRkMjM3ODYyMGQ1YjlkZDljNjE1MmRmMmNmNjRhOGI3MGZhOGZhOGJjNzMwYjU5MmJlYmRiZmM5NmYwN2FjIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnRvdGFsIn1d", + "privacy": { + "obfuscated": [] + }, "key": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C#controller", - "signature": "0x49c4ca31a127b9ff04db68e25323174b0336c0c9a53fdb24678f55e7e2ab9d9f43abd8ef98f06bd54008ec2df360a0fee71e1acf9784e209a147d471db1637451c" + "signature": "0x76c3def684b98da04733f8f47c596f2ab0ba943cd1ea3b80431e2580197159ea36da3f6e95ec891eacf1fe4fcfeb2997eade29e9a0aa0da44c24ded5a3d951db1c" } -} +} \ No newline at end of file diff --git a/test/fixtures/v4/tt/did-idvc-wrapped-tampered-signature.json b/test/fixtures/v4/tt/did-idvc-wrapped-tampered-signature.json new file mode 100644 index 00000000..7f73f29d --- /dev/null +++ b/test/fixtures/v4/tt/did-idvc-wrapped-tampered-signature.json @@ -0,0 +1,129 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" + ], + "type": [ + "VerifiableCredential", + "TradeTrustCredential" + ], + "validFrom": "2021-03-08T12:00:00+08:00", + "issuer": { + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", + "type": "TradeTrustIssuer", + "name": "My Own Company Pte Ltd", + "identityProof": { + "identityProofType": "IDVC", + "identifier": "My Own Company Pte Ltd", + "identityVC": { + "type": "TradeTrustIdentityVC", + "data": { + "@context": [ + "https://w3id.org/security/bbs/v1", + "https://www.w3.org/2018/credentials/v1", + "https://stg.issuer.myinfo.gov.sg/myinfobusiness/schema/corporatebasicdetails/v1", + "https://w3id.org/vc/status-list/2021/v1" + ], + "id": "https://sbl.alwaysdata.net/oa/credentials/123456789", + "type": [ + "VerifiableCredential" + ], + "issuer": "did:web:sbl.alwaysdata.net:oa", + "credentialSubject": { + "uen": "198801234E", + "companyname": "My Own Company Pte Ltd", + "type": [ + "CorporateBasicDetails" + ], + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C" + }, + "expirationDate": "2023-11-01T06:45:43Z", + "credentialStatus": { + "id": "https://sbl.alwaysdata.net/oa/status/1#325", + "type": "StatusList2021Entry", + "statusListIndex": 325, + "statusListCredential": "https://sbl.alwaysdata.net/oa/status/1/325" + }, + "issuanceDate": "2023-22-13T01:35:08Z", + "proof": { + "type": "BbsBlsSignature2020", + "created": "2023-10-18T07:14:46Z", + "proofPurpose": "assertionMethod", + "proofValue": "tqvUVZOPaY/A+7Wu47HZIYbboPU/MPGhb1EPLUKKPRwmRe8QJ/dzjRviQ5fAbR88TjSalqLbaBeopNocjrl7TmzCOlLQxGeNC4El1TCICu5tiX0HxGSNAPY4t5CglTLMTsdu5kg4f0a5MGQTnFgwyw==", + "verificationMethod": "did:web:sbl.alwaysdata.net:oa#didkey" + } + } + } + } + }, + "credentialStatus": { + "type": "TradeTrustCredentialStatus", + "credentialStatusType": "NONE" + }, + "renderMethod": { + "type": "TradeTrustRenderMethod", + "renderMethodType": "EMBEDDED_RENDERER", + "name": "INVOICE", + "url": "https://generic-templates.tradetrust.io" + }, + "credentialSubject": { + "name": "TradeTrust Invoice", + "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "date": "2018-02-21", + "customerId": "564", + "terms": "Due Upon Receipt", + "billFrom": { + "name": "ABC Company", + "streetAddress": "Level 1, Industry Offices", + "city": "Singapore", + "postalCode": "123456", + "phoneNumber": "60305029" + }, + "billTo": { + "company": { + "name": "DEF Company", + "streetAddress": "Level 2, Industry Offices", + "city": "Singapore", + "postalCode": "612345", + "phoneNumber": "61204028" + }, + "name": "James Lee", + "email": "def@company.com" + }, + "billableItems": [ + { + "description": "Service Fee", + "quantity": "1", + "unitPrice": "200", + "amount": "200" + }, + { + "description": "Labor: 5 hours at $75/hr", + "quantity": "5", + "unitPrice": "75", + "amount": "375" + }, + { + "description": "New client discount", + "quantity": "1", + "unitPrice": "50", + "amount": "50" + } + ], + "subtotal": "625", + "tax": "0", + "taxTotal": "0", + "total": "625" + }, + "proof": { + "type": "TradeTrustMerkleProofSignature2018", + "proofPurpose": "assertionMethod", + "targetHash": "1f134a15ff584973e8074839a6e8a7dcaab580c5d688a39ed662d9efe4187678", + "proofs": [], + "merkleRoot": "1f134a15ff584973e8074839a6e8a7dcaab580c5d688a39ed662d9efe4187678", + "salts": "W3sidmFsdWUiOiI3OTMzZmNlY2NmZTA0NThhMGEwMzFiNDQ0ZDQ1YjFhYWIxOTNiNjBlMTg5MThhYmRmZjQyMjc5MzkwZTc0NmM0IiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6ImRmZjQ2NzNkMjU2MzE5YWU1MDdiODU4NDYyYmM1ODU5YTY1ZWFiNzBiYzlkZmI2OTE1OWJmZjQyZmVmMmJjOWMiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiMDIxMzI4YTFmZDg2NWYzYzU3ZWVhMGU2MDU0NjdkMDMyZmY1NmM5YmU0N2U3NjhkMzU0YjAzYWUzNTI1M2RjOCIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6ImMyNmYwOTllYmU5N2FhNjY3ODkwNTJkOTdkMjZjMjg3YzI1NDBiMDk5MTdjYWFmYjkyMmYwZjJlNzFkNDU3MmQiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiIyMGFmZjc2NDA1OWEyNzU1YWVjNWZkN2YwMDMzNzFhM2FjNzM0YjYyMGM5N2JlMTQ3MTA5NTliNzZjYTNlODhiIiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiI1OThiODRlZTAwZmY3MmRkMGIzOGM0NDJkOTZlMjk4NmFlYmRhYjE1NzAwNzVhMzA4ODI5Yjc4MDQ2ZGJiZmQ1IiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiIwYzAwMTM4NjA2OWE3N2JlNzM3MTFlY2Q5ZmY2MWMyM2ZiMTRmZDQ0ODk5ZWNhY2EyNDU0YjgxM2I2YTU1NTIxIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6IjEzMjM2ZGVmOGIzNWYwOWY5NmM3OGFlNGU1N2VlNTFlMDU0NDc5OWYxYjE4NWRhNDg1YzIzZGQzNjRmODViNjQiLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiOWM5M2NjYzk0MTBhNjQ1ZTQ4Njg0NDliOTkwZjQ2ZTdlNDhjMjI5YWUyYzI1MmFjYjdhMDI4YmQyODA3NGM4OCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiJkYzU5ZGQ2NGIwZTc2ZDlmNzE4NTIzYTRjZThmYzg5MjNjODJkMGY1ZThjNzA2NjI4MzcwNDJiNDg3MjkxZTA2IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiYTdjODEwZDZhNzY5MDczN2M3OGFlNDliMDJhMTg5NWIxNmRiNTRkNjI1MjlkMDQxMzI4ZWViZjEyYWU3MGNkNCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLnR5cGUifSx7InZhbHVlIjoiNDM3NTQ3N2M2N2U3ZDVlOGIxMjJhNGQ4NzU2Y2Q1M2Q5YjUwMmZjOWFiN2Q3YjQ2MDcyOGY5Y2NkZTAxNGFlMCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMF0ifSx7InZhbHVlIjoiMWVlYmJiYmJlZjIwZGFkOWI3MmI4NGUzYjg2OTA0MTVjZmY5YmVmMTgzZTI5NTRkMGE3MTY5MTRjYzcwMDA3MiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiZjA5ZDk1ZDVhMWM3Y2Y1MTEwMzBiMjFkY2Y5ZDhkZDJhNWEyZjQ2Mjc5MDljOGY5YjRjOWQ3NWQ2NjI4ZjAxNyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiNGQ3M2QzOGU2ZGVkZjNhNTlmMmFhMWU5MDYyZjBhZjlhNzUzOWEyYTNhMzM1OWU2NDkxMDViZGI3NWJlN2Q3YiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbM10ifSx7InZhbHVlIjoiMmYxOWExYmMzYjIwYzkyM2YxM2EwOWE4ZmJmOWI3YTAzNzU1MjExZjRlODBmZGM2OTUyZTZjNjhiNGM5ZWI5NCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuaWQifSx7InZhbHVlIjoiM2Q5ZmQyZjg4N2M5M2QyOGU2NDdhMmZlNTJlMGY0YzEzN2MwOTk3ODI4NGI5OGMyYTgzYTVlY2EwMTVjMjBmMCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEudHlwZVswXSJ9LHsidmFsdWUiOiJiMTIyYjQwYWY1MmEwYzQ3MGZkN2Y5NDdiZmQ5MjZlMjMxNGJhYWI0YTRlYWJiODhkNzJjM2ZhMzZhZDljZTJlIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1ZXIifSx7InZhbHVlIjoiYThlZmQ0Y2UxNmFmNWMxNWY3ZDk5ZmNjYzU3ZDU0YTM1NzQ1ZWM0YzViZTVlMGU3MDZiODg0OWI2NjRkZGY5OCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QudWVuIn0seyJ2YWx1ZSI6ImQ1Y2JlYjM3ZGRlMjg4YjZmNmE1NjQ4MDA1ZTVhZGFkNzE5OTBlYTI0MWZiNTEzNTAyOWEyODY1NGEzYzYyNmUiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LmNvbXBhbnluYW1lIn0seyJ2YWx1ZSI6IjNhZDkyMTgwNzgxYWExZmEwN2E2N2MwNWM1MjM3YTkzMThiNjI3NWRjYWY1YjlhYjFhYTJlZGY5YjhkMTA1NzkiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LnR5cGVbMF0ifSx7InZhbHVlIjoiYzMyNDdjOGM3YWVjMjM3ZWNjOTExYmNjYzcyZDYzYTVmMTE3NWVjZjNjYzIwNDBlODZlZDU5MTg4N2VmM2U3MSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiYWNmNWRiNmY0MjVjN2Y0NjI5NTFiMGMyMTBhMTQwYjBhMWE2NTc4ZDcwMzc2ZjdiNzExMTQ0NDc0Yzk2ZDNkZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuZXhwaXJhdGlvbkRhdGUifSx7InZhbHVlIjoiNzAyMDQxZDZmZDgwNmEyMzk4YzEyZjRhM2U5ZDBhNDRiYWQxM2FiYzJiNDgzOTFlOGU4OTY3MzI5ZDQ4Njk3ZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5pZCJ9LHsidmFsdWUiOiIyZDE5ZjdiMjU5MzdkMzliOTM0ZGMwNzk1NzgyNTA1YmU1ZjZjMzA5ZjJiM2E1ZjY5M2JiNDAxMWZjZDg0NThlIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5jcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiYmIxYWI4MGZjMTdkODMwZmIxYjY1MDZhNzAxYjUwZTM2ZTQ0YTZjNDNjNWJkNzYzOGJiNWUyN2NmZTAyOTQxMyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0SW5kZXgifSx7InZhbHVlIjoiZjEwMDEzZWQyOTBkZjczODRmYzEyNTI3MWJhOWUzYWEzYWEyOTRjYWZkMjUwMjNlNjA1NzVkZTZhMjQ1YzkyZCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0Q3JlZGVudGlhbCJ9LHsidmFsdWUiOiI3MDYwYTI4ZWUwMDEwOTU0ZWE3Nzg0ODMxOGVkOWYzZWYzYzA0OTY0MTdlY2NjYjliM2EwZGUyZDE5N2ZhZDY0IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1YW5jZURhdGUifSx7InZhbHVlIjoiOTM3ODJjNjU1MmUyMDRmMmI0MGFhY2YyMTUyNmE1MzU2MDhhNWVkNzcyNmM4OGJmMjI1Nzc3ZmM4MTEwNjI3ZSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEucHJvb2YudHlwZSJ9LHsidmFsdWUiOiI1NDVkNDAzZmEyZjJmMTY2NzFhZGE1YmE3MmNjZjZjNDQwMmYzOTI5ODRhN2FhOTliOGZjNjM5NDcxMmExODBiIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5jcmVhdGVkIn0seyJ2YWx1ZSI6ImJkOGM0MDk0NDk2MmIwMDBkMWJiN2MzZDU3MWJmMjA2ZjgzODM0MWEwYzE3MzJmYWFhNjM2Yzg3OGIwZDZmNmIiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnByb29mUHVycG9zZSJ9LHsidmFsdWUiOiI4ZDU4NTgxZGRjOTM5NDBkZTY1OWRiNjhkOWY0MDhmZDA4MDZjZDI0YmIwMzJjOTJlN2M3NjU0MzlmYzM3YjlhIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5wcm9vZlZhbHVlIn0seyJ2YWx1ZSI6ImI1ZjJiMjUwNDI5Y2ZkNmJlOWZmYWE0ZThkZmUwOTQyOTRmNGY4N2MwZmUwM2FmZTMxYTEyMTdkNjg2YzU4M2QiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnZlcmlmaWNhdGlvbk1ldGhvZCJ9LHsidmFsdWUiOiI3YjlhMWNlNTE2NDYwMjE3MTU0M2MxYjJiMTkwMzI2ZWU0MGEzZDg4N2VmMWMxMTk0NzRlYWU4YzkyNzMzZTExIiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMudHlwZSJ9LHsidmFsdWUiOiIwYmE4Zjg4MThkNTA0NjUwOGIwNWRkNmE0ZWM3ZDRjOWJiMGRhYjVlNjczNWU0NjI1OWNkNmIxZTU5NTM1YjQ5IiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMuY3JlZGVudGlhbFN0YXR1c1R5cGUifSx7InZhbHVlIjoiZTBiMjU3NzBlMmRjZTJmY2Q0NjI0NDc2MTI5YjgwNThhMWJlNWFjNTkxYmQxZjkyYTlmMjY3MDEzNmMxNjcyMiIsInBhdGgiOiJyZW5kZXJNZXRob2QudHlwZSJ9LHsidmFsdWUiOiJlOTJmMGY2OTU0OGUzMGIxYTlkMWJmYzVlNTcxNzBkNTM3MDcyMTI2NDc4MzAwMGE1ZWYxYWU4M2I4MGEyNjhiIiwicGF0aCI6InJlbmRlck1ldGhvZC5yZW5kZXJNZXRob2RUeXBlIn0seyJ2YWx1ZSI6IjE0ZGNmYWQxZmI1MmU5MTQ5NmI1NGRiNzZmYTliYjA1ZDFlNjY0NjA5OTViYjA1NmMwYmEwOGNkNDNhNGZlNDIiLCJwYXRoIjoicmVuZGVyTWV0aG9kLm5hbWUifSx7InZhbHVlIjoiMDFjNzBhN2RiMmMyNDk5Y2RlOTU1NjAwMzIzNzI1YmI3ZGUxMDA4ZDkxOWYzNmMwODcxODI1Y2FjNjliZjVhMyIsInBhdGgiOiJyZW5kZXJNZXRob2QudXJsIn0seyJ2YWx1ZSI6IjJlOTdhMjEyY2RmYTE0M2Y0ZDM5ZDgzYmY1NzI2N2FmMzVkNzFjYjU0MTc3NTU5YjViNjJlNGYwYTM3YmZlNzkiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QubmFtZSJ9LHsidmFsdWUiOiJiZjM1YmZmZmY1YWY2NzNiZDZjZjRkYTg4MmViZTIxNDE2ZGQwYjZkM2QwYzAxNThhYjA0NGMzYTA0MTAxOGNmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmlkIn0seyJ2YWx1ZSI6ImZlYmRjMzJlYzk4ZWQ5ZmQ3MDlkZDJmZDU4ZTY2NTI2OTU2ZDA3ZjAxNWU2ZTIxYTk5OTI4N2E5MmI3OWM4YjAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuZGF0ZSJ9LHsidmFsdWUiOiIzZGNiZGQ4ZjNmMjFiNzY2ZmU4YzgzNTFmYTAzYTNjOTlhMjUzNGYzYTRhZGY0ZTUwNTc1NzhhYTEzNzI2MDcyIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmN1c3RvbWVySWQifSx7InZhbHVlIjoiZmExYjRjYzRjYjc4OTQ5NTdkNGE0MzNmMmMxYmZiOWIzYWExMzQyOWZjMWEwZDg1NTNmNTZiZTJiMGFhY2IyYyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50ZXJtcyJ9LHsidmFsdWUiOiJhZGJhMTA3MTU3OTI5YTI5ZGQ4NGQwMzAxOWUxYjIwY2FhMjQ5MTZkZDgzODI5MDkzMzRjZDExOTA4ZmY3YzhmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLm5hbWUifSx7InZhbHVlIjoiYzE4NWZjOTQ1MjBiYWE3YmIzYmI5Njc4MWUwMDY0NzRiMDYxMmI1NDFlYjlkYTYzMmExMjc1ZTc2ODRmMjYwNCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6ImMwODFhZThiZjcwNDQ2Zjk0MjMwZGY0OTBmZDQwMDhkMmRjNjkwNGJhNzNhZDdhMWUxMDcyMTM3MDI1OGFjYTYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uY2l0eSJ9LHsidmFsdWUiOiJhZmNmNTBiY2EzMWIzMmM0MTA0ZWU4Mjc3NTZhZDgwZTdiZmEzMDU5ODU4MjEwOWZmYzM5OGFlMzU1M2JlMGMxIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLnBvc3RhbENvZGUifSx7InZhbHVlIjoiOTlmMGJiMGJiYjg3MjFiNTI1ODk0N2FlZDBjZmFhZTkxZmU3ZjRhMzhmYmQ1MWNiZTAwZTdmNzYyZTJmYjI3NyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiIzMGU5ODhhYjA3YmYyOTE0NGUyMGVmMjZkOTUyZTI0YmY0YmEzZjQ0MTZkZDBjNDU3NzZjMGU0ZmMzN2NlM2RlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55Lm5hbWUifSx7InZhbHVlIjoiZjJhOTU5NWJmNTBkNDliOGMzNmQxMjg4MGRiOTNhYmI1MjYwZTgzOWU3M2NmN2VmNjlmMWZmN2VhZWYxMDY2NiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6IjQzMTg2NTY2MzQxNGMyYTg3MGU3MGNlNDE4NTZkNWQzNDk2ZDc1YWVlMjhjMDQ4NzZlOTc5NTZhNzFmOGU4ODUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuY2l0eSJ9LHsidmFsdWUiOiJiNDFhZDQyZjk0NjNlZTBiODMyMDFlNWIzM2VjZjI5NjJhYzE3NjkwY2FkOGYzNzA2ZTA3NmRkNWIxMGMzOTRkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LnBvc3RhbENvZGUifSx7InZhbHVlIjoiYzI0ODNkZDdlOWRiNmNlNTQ0NTM5NjAyNTM5Yjc3ZDkzNzQ3MWU2YWUwZDllNjZiZDJkM2M3YmU1MTExMzhmZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiJjOGFlN2E0MWIwNzUwOGE3YmUyMjM1OGFkNjhhMGYyNTZlYWZlYjZiZWE5OWJjM2FiMzg0NTEyNzBkZTNkYmRhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5uYW1lIn0seyJ2YWx1ZSI6IjVhZTRiYWIyMmNkMGE1Y2QxMTcxMzRlMTM0NTZlYTRjYzk2YjdiYTRiNjIzNTIwNjg2YTNlM2Y0MzhmMDg3OTciLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmVtYWlsIn0seyJ2YWx1ZSI6IjVlM2ExZDY2YzdjZTZmNmM3MjNlZWVhMDljYWE2NjcwMWMxYzkwYTE0YzdkMjQwNjE3N2Y1OGMzNGZhM2VhMWUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiJiY2VjOWZmYjA2NjQ5MGY1NmUxMjE4MWI3ODEwNzgwNWMzZDkzODIxMjE3ZDgxNmMwNWY0MzI1Nzk1NzBlOGVmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0ucXVhbnRpdHkifSx7InZhbHVlIjoiOTI4ZWY0ZmU1YWIxMDNhYWQ1NTc4YTdjZDkwMWIzNDhlNzk1NTQ4M2IzMzM0MjNhY2IyZWM2MDBkNzNkMjEzYyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiIzYzAxMWU3ZmJmZDM2MzFkODc2MjgxODYyOTAyOWZkODVlM2MxYjIyYjI1OTNhYWJkZDM4MGQ3YjViMjc4NDdkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uYW1vdW50In0seyJ2YWx1ZSI6ImY0NjE3MTc0MDNjZTdjZWM5Njc2NGZkNmVlNmQyNTMxMTMzMjY1YmI5YzdiYjczNTQ1MmI0NWVmNDQwNTUzODYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiIwMDI3MWRkM2M0YmE0MzZmOWQ0YmJjZWZhNzBjZDcxN2ZiYzBhMWYzMDdlYWM0MmMwM2RhZjAxOTliZTFiZjBkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0ucXVhbnRpdHkifSx7InZhbHVlIjoiMTkwMGY3NTE0NTNkOTBjMDhlNjk4ZGFiMmM1YWM5YjhjNzFjNjA0NGE2NDcxMTgxNThlOGM3MTIzNWIyMDA0OSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiI3NWFiNDc2Y2ExYmIzMTU1OTFmZmE3MGU5MzQ4Mjc3YWY5ODc2OGJkN2ZmZjMwYzljNmVlM2FiYjA3NmZiZDRmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uYW1vdW50In0seyJ2YWx1ZSI6IjE5YTcyZmUyNTQ1ZTYyYjI2OTIzMGY4ZGUwNmI5ZjcxMzRiNzE1MmY2NWZmYzcxOGUwNDFhNWJlNTdmMjM3OTEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiJjZDgyN2Q4NGI5YWI1NzUxZjc3ODFhZWU3YTVjYTZmYzAyN2E5ZTc1MzU4YWY5MWQyNDdjMDljZmZkZWQ5ZGRjIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0ucXVhbnRpdHkifSx7InZhbHVlIjoiYjEwNmMxMzAzZThjYzk3MjlkMjkyZmQ0OTIxN2I4ZTI3ZTRjOWVjZjQyNTNkMDVmMDEwYTRiYjNiMjJhNTAzNiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiIwYmUyZmMyNzE4NGRiNGFjMTFkZDczOTdmZWRlMDkzYTM4M2I4ZmIwMjJlYTcwNjgyNzA3ZTQ0NjFiMjU5MDc1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uYW1vdW50In0seyJ2YWx1ZSI6Ijc4NDc3Nzc1NTgwZjExZjZjNmJiM2IwOTI2N2E5ZWE0N2JjNDM4NWQ0MDFlNDcxMzQ1MjBmNDVkZWMyZTEyNGMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Quc3VidG90YWwifSx7InZhbHVlIjoiYjQ2M2JkYmNiYThjOTgwYjcyZjA3Nzg4MmYzODk1MWYyZmU5ZjFiNDAyOTdmM2IxYWRlYTg1ZjU1ODk1ZDkwNyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXgifSx7InZhbHVlIjoiNzE4YTUxODQyMzg3NzcwNjlkMjVmYzlkMGIwZWFiZTc3MDA3MzVhMGFhMzI1YTY0MmQ0OGIxZTliZWM4ZDI4ZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXhUb3RhbCJ9LHsidmFsdWUiOiIyYTNmMzE1YTZhNGY5MDFhOTkwMDE2ZmQwY2UyNDU4MzA4MjQ5M2IzMzgzYTk0NDM3YTliMzc4MzIwMDc3NmE1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnRvdGFsIn1d", + "privacy": { + "obfuscated": [] + } + } +} \ No newline at end of file diff --git a/test/fixtures/v4/tt/did-idvc-wrapped-wrong-binding.json b/test/fixtures/v4/tt/did-idvc-wrapped-wrong-binding.json new file mode 100644 index 00000000..c9f1b297 --- /dev/null +++ b/test/fixtures/v4/tt/did-idvc-wrapped-wrong-binding.json @@ -0,0 +1,129 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" + ], + "type": [ + "VerifiableCredential", + "TradeTrustCredential" + ], + "validFrom": "2021-03-08T12:00:00+08:00", + "issuer": { + "id": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89", + "type": "TradeTrustIssuer", + "name": "My Own Company Pte Ltd", + "identityProof": { + "identityProofType": "IDVC", + "identifier": "My Own Company Pte Ltd", + "identityVC": { + "type": "TradeTrustIdentityVC", + "data": { + "@context": [ + "https://w3id.org/security/bbs/v1", + "https://www.w3.org/2018/credentials/v1", + "https://stg.issuer.myinfo.gov.sg/myinfobusiness/schema/corporatebasicdetails/v1", + "https://w3id.org/vc/status-list/2021/v1" + ], + "id": "https://sbl.alwaysdata.net/oa/credentials/123456789", + "type": [ + "VerifiableCredential" + ], + "issuer": "did:web:sbl.alwaysdata.net:oa", + "credentialSubject": { + "uen": "198801234E", + "companyname": "My Own Company Pte Ltd", + "type": [ + "CorporateBasicDetails" + ], + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C" + }, + "expirationDate": "2023-11-01T06:45:43Z", + "credentialStatus": { + "id": "https://sbl.alwaysdata.net/oa/status/1#325", + "type": "StatusList2021Entry", + "statusListIndex": 325, + "statusListCredential": "https://sbl.alwaysdata.net/oa/status/1/325" + }, + "issuanceDate": "2023-22-13T01:35:08Z", + "proof": { + "type": "BbsBlsSignature2020", + "created": "2023-10-18T07:14:46Z", + "proofPurpose": "assertionMethod", + "proofValue": "tqvUVZOPaY/A+7Wu47HZIYbboPU/MPGhb1EPLUKKPRwmRe8QJ/dzjRviQ5fAbR88TjSalqLbaBeopNocjrl7TmzCOlLQxGeNC4El1TCICu5tiX0HxGSNAPY4t5CglTLMTsdu5kg4f0a5MGQTnFgwyw==", + "verificationMethod": "did:web:sbl.alwaysdata.net:oa#didkey" + } + } + } + } + }, + "credentialStatus": { + "type": "TradeTrustCredentialStatus", + "credentialStatusType": "NONE" + }, + "renderMethod": { + "type": "TradeTrustRenderMethod", + "renderMethodType": "EMBEDDED_RENDERER", + "name": "INVOICE", + "url": "https://generic-templates.tradetrust.io" + }, + "credentialSubject": { + "name": "TradeTrust Invoice", + "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "date": "2018-02-21", + "customerId": "564", + "terms": "Due Upon Receipt", + "billFrom": { + "name": "ABC Company", + "streetAddress": "Level 1, Industry Offices", + "city": "Singapore", + "postalCode": "123456", + "phoneNumber": "60305029" + }, + "billTo": { + "company": { + "name": "DEF Company", + "streetAddress": "Level 2, Industry Offices", + "city": "Singapore", + "postalCode": "612345", + "phoneNumber": "61204028" + }, + "name": "James Lee", + "email": "def@company.com" + }, + "billableItems": [ + { + "description": "Service Fee", + "quantity": "1", + "unitPrice": "200", + "amount": "200" + }, + { + "description": "Labor: 5 hours at $75/hr", + "quantity": "5", + "unitPrice": "75", + "amount": "375" + }, + { + "description": "New client discount", + "quantity": "1", + "unitPrice": "50", + "amount": "50" + } + ], + "subtotal": "625", + "tax": "0", + "taxTotal": "0", + "total": "625" + }, + "proof": { + "type": "TradeTrustMerkleProofSignature2018", + "proofPurpose": "assertionMethod", + "targetHash": "f79bfd314da2a463564aba2f42c5e659f8945b38fae3572c7e2ada7fcd2b9926", + "proofs": [], + "merkleRoot": "f79bfd314da2a463564aba2f42c5e659f8945b38fae3572c7e2ada7fcd2b9926", + "salts": "W3sidmFsdWUiOiJhNTdjYjUzZjI1ZjE1NWY3YmZlMGZlMTk1ZjZlZDk0YTgzMzhkOGI3NzBjZGU1YjEwZjBjOGUwNGZlYTkyMjgxIiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6ImYxM2E1ODM1MTllMWM3ZDhlYmM0NWVlNDMzMDYzMDAxZDg4M2M4OTI2MDVhNDNlZDA3YmZiZmNjYjMyM2Q1ZGEiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiNzdjYTlmMGJlOTUyZDM5MjFkMDhiYzhiN2RjMGQ2YTBjZTkyOGVkMzg5Yzg5ZGQyMjZhOTExNGEzM2ZhZGNmOCIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6ImEzOTI5NzBjMWY4ZjAxZDNiMTNkYmRlMTM0MTRmMTBlYTAwOTgyNTNlZDVjNDljN2FiMjczMWY2ZWYzOThiNTAiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiJiNjBhYjBmZDIwYTYyOTliY2FiMTdjYzQ5ODBmZDYzOGI0MjQ1NWQzZTkzOTJkNzcwNjZlMGQ5NGFiYjg5YTY4IiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiIxY2Y2NTFmMTBlZDAyMTMwMzFhYTE4MDQyMmNkOGExODAxNjk3YTc1Y2NkYTdlYmE5ZTZiMmRjODY4YzMyZGY0IiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiJhNjRiMjdkNGM3NmJjYTJiOTY3YmQ2ZDZkZjMzMTY4MTFjMDhiNmMxOWFhNmYwNDBiODJmYWRmZWNkMmM5MTcyIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6Ijc1NTZiNzZhNDFiYjExOTk4MjYxYjY3ZjdkNzA1MjlkZTI2YTcxODc0MDMwMjBiYWRhN2E0NTQyY2Y3YmQxNGEiLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiMjYyZWQzMGJhODliYzZjNjZkNzU0YjYxNmRkOGE3NzZkNGZkYWY0ZDBjZTE3MjRmOWRkYTNjMWE1NDJkMDgyYSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiJlZWU3OWNkNDdiOGJmMzIwMmVhMWE0MTBjOTc1MDU0NDM1MDUyYTQ5OTM5NWQwMDYxZTExY2IxNmMyOTM0ZTBkIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiMzM3ZWVhOGUxNGU5ODA4ZTE0ZGUxYWY2YWIxNTRlMDA1MGFiMzMxNTU2OThjNzMxODRiODc4NWNiNmZjOTg3ZCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLnR5cGUifSx7InZhbHVlIjoiZTRiNTg0YjEyNmNkZGUyZDI5YzM0Y2YzMDkyYmE2MWE4MmYyYmM0YjAwNmRlYTY4Y2M5NzllOWQ4YWQ5YmVkZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMF0ifSx7InZhbHVlIjoiZjM1NTBkYjZhZTE2MDU4MTkxOWZjOTljYTI0YWUwZWE0ZjgyYTJiMmI5MzljZjBjZjZiYjhkMDgxZWY0NTY1ZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiMmI4MTEzOTdhZDQzMWYzNTI3ZDcxZGFiYTZhZDQwNDBjZThjYzRmYTliNjBhNTBjZWY0NzBkYjNmMmEwZDZmYyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiNTc3ODdlZjg4ZTE0Mjg2YzI1NjRjNTNlYmY4ODJiNTE4ODAwMmQwOWUyM2RkMmE4Mjk3NmJhYzdkYTAzYjAzNyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbM10ifSx7InZhbHVlIjoiMjhmNWZhNTYzZThhYjM1MTg0Y2QzNmNhMWFhMTI0NmI2NmY2ODAxYWMzYWE5YjU2OWJhZTJkMGIxZDZhOTM0YyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuaWQifSx7InZhbHVlIjoiYTMwMmZmYjUxMDc0ZGJmOWMyM2RlNmUzZGI1ZDIxNzA4NTA2NGU4ODU2NjM5OGIzZDcyM2Q3NDQyYzg3NzBkNyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEudHlwZVswXSJ9LHsidmFsdWUiOiJjMTVkN2NkNWUwOGQzOWFkNDExYjBlYmQxNTNhZDYzYjRmYmFmNGZiN2Q4YmIzOGRmMGFhYWJlMDM1MDk1NDQxIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1ZXIifSx7InZhbHVlIjoiN2ZiZGFmYTNhYWNjOGNhMGM3NTdkYWQ0NzliMmI2NDE3MjFmNTA3ZGZlOTY4YWNlYzhiOTVhY2ViNmZjY2VjOSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QudWVuIn0seyJ2YWx1ZSI6IjQzZTYwYWExNmQ5MTdhN2FiNGJlZGNiZDgwZTZjOWFlNDBmYmQ1ZWZhYjMwOTUyN2QwOGIyOTYxOTNjYTQ4ODgiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LmNvbXBhbnluYW1lIn0seyJ2YWx1ZSI6IjVlMDQ5MmMxYjVlZDdiMDk1NGY3ZThkZjQ1ZWRmZjkyODgyMTdmY2I3ZTE5OGQ2YzQ5N2UyZTUzZDliOTUzYTAiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LnR5cGVbMF0ifSx7InZhbHVlIjoiMzcxOWMzNjQ2YTQwMWI5MTU3NWUzMWNiM2ZjZWU5ZjkyNjMzMDU4MjBkZDc1NGY0ZDlkNzQzNTk2OWExODhmNiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiNjY4NTNkOTc5ZjFhNWY5YzYxZTVlNDc2NWJlYjljM2IwNGZkYjA5NTY0NjRmYzgyNGUyYjgyYTI2YzY5ODYyYiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuZXhwaXJhdGlvbkRhdGUifSx7InZhbHVlIjoiODU4NTUyOTc5MTYzY2JmY2JjNTg1N2I0ZjJiYmUwYzk4MmU1NzVhNWExZjExZThmOThlNTM2NzJjOWY2NTkyMiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5pZCJ9LHsidmFsdWUiOiI3ZjJmYjU5M2Y1MTAyMzkwZjZlNjNiYjc0NTkyNGVjMTNhYzJjZjg5N2M1MzkyNzAxZDFlZTQzMTQ2MGNkMGY4IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5jcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiZTQ2OTI1ZDhjODQ3YWVlMWUyMjg2ZGZhZGQ4ZjFjYWQ4M2E3N2I3ZTU1YTlhZjQ2ZDI3NjkwM2JjMThhNzljOSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0SW5kZXgifSx7InZhbHVlIjoiMjE4ZTk5MzJhOTVkZmUzYmI0OTVlMzVjOTAxNDU2NDVjNjMzMDZmODU1NDczMWUxM2Q2Njg1ZDliMTcxODYxNiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0Q3JlZGVudGlhbCJ9LHsidmFsdWUiOiI5NDNhODg4NzM5NjM3YTY4MTc3MWVjNzAwZDliZWVjYzgyMGFjY2JlZDdlZjgzOWRjNmViY2QwZjA2YTExMmE5IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1YW5jZURhdGUifSx7InZhbHVlIjoiOTIwMWFmMmZhOTQxZGI4ZTNkYzU4NDdmYzZiMzZkMDI3ZDAzODkwMTg4MmE5MGQ3ZTg4NDRlODU3MzBjZjNmOCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEucHJvb2YudHlwZSJ9LHsidmFsdWUiOiJmMzMwNGJhM2M1ODAxOTFhYmNlZTE3MDc3ODhlNDI0NGYwMjM0YzZjMDIyM2Y1NTA5NTY3MmUyYTNmM2RmMDNjIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5jcmVhdGVkIn0seyJ2YWx1ZSI6ImNiN2Q1ODczNTVhM2FhMzJkOWMyY2M4OWYzMWIwMzIzYzg2MTZmOWRmYzBkMzBmM2FiMjA3MzM0YzllZjFlODgiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnByb29mUHVycG9zZSJ9LHsidmFsdWUiOiI4NmU5NTcxN2UzZTdhMGMyNjJlOTI0MTU2NGZiMTRkZjM0YWUyZDFhMWJhM2JmMDMzNDVhYzBmOTAzMmExY2ExIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5wcm9vZlZhbHVlIn0seyJ2YWx1ZSI6IjBhMTU2YTljNmU5NmMwMGM0OTZmN2EyNThkZTg2MjQ4ZThiMzU3MDM0MDg1N2QwNGZkNzEyZDlhZWY3MzRiNjQiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnZlcmlmaWNhdGlvbk1ldGhvZCJ9LHsidmFsdWUiOiIyM2Y5ZTE4MWVjYWYwMzNlMDEyNmFhMDAzNGUwYTM5YWU1MDI5MGZiZWRkNGE5YjUxODk5Y2JkNDVhZjE2MjBjIiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMudHlwZSJ9LHsidmFsdWUiOiJjOWUwZDUxYmI0ZDA5MTdhNjZmOTliMWJkMTc5ZGM1MTRmNzJjYzgxNWFiYjBjMTIzM2NkNmYwMjU5MzZlNDY2IiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMuY3JlZGVudGlhbFN0YXR1c1R5cGUifSx7InZhbHVlIjoiNWU1MGRkMTczMjVhNjgwMTM5ZTM1ODVlODU0NTkyY2VkMzk3OTE4ODVlNmYzZjg3MTdhOTVhMWY0ZGY1MzFlNSIsInBhdGgiOiJyZW5kZXJNZXRob2QudHlwZSJ9LHsidmFsdWUiOiIwZDRlNTg5OTA5NDdiYTRjZWQzZTY4MzRlZTEzZTU5MjkwZDU5NTAyMDdhOTk2NmFhYzg4ZjJmY2Q2YmRjNjdhIiwicGF0aCI6InJlbmRlck1ldGhvZC5yZW5kZXJNZXRob2RUeXBlIn0seyJ2YWx1ZSI6ImYxYjFjZTQxNzUzMDNhODRkODZhMDU4MDE2ZjBlODBiMmZkMWExZDkyNzlkM2NlNDcyOTk5YTE2MTY4ZDQ5ZDYiLCJwYXRoIjoicmVuZGVyTWV0aG9kLm5hbWUifSx7InZhbHVlIjoiMzFkMGEyMDc4ZmQzNzdjMzkwZjIwMzJlMDU4NWU5ZmIxYjExYzk4OTQ0MDRhYWJjZmY5YWJhOTQ4ZWUyMmUzMCIsInBhdGgiOiJyZW5kZXJNZXRob2QudXJsIn0seyJ2YWx1ZSI6IjRhMTUwYzk0OGFjMGEwMjYxZTE2ZDdjMDg5MjIxNzg0ZWI2ZjY3NmJmNWRkN2YyZTgxYmM3ODIxZWJjNDhiODEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QubmFtZSJ9LHsidmFsdWUiOiI1Njg1NDJmMTg0NTI0YmE2NDg5NmFjNTBlZTc1YTk5YzUzZjkxYzU3NTdmZmQ0YjIwODI5MWIyM2MxYmZlNDE4IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmlkIn0seyJ2YWx1ZSI6IjgxYmVjMzExN2M5ODlmMmFlNmQ4M2NiNGNiMzFiZGEzZDY2YWEzZGRiNjhkYTM3N2IyNTc3OGE2NWQwNWJiNWQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuZGF0ZSJ9LHsidmFsdWUiOiJjNTZkODA3ZDI1YWMzZTA3OWU3Mjc3YWQ0NDkxODU4Mzk3YjI3M2RkNmNkYjVhZWYzMDRlOTg3MmUzNjQ0MGRlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmN1c3RvbWVySWQifSx7InZhbHVlIjoiZjhhYjUyYjVhOGFkYTJhNzRkMmJiNjllMWFhMDYwOGEwM2EzNmJhNmM3Y2Q5Y2RjYWZmOGYyNTNmNjVhYTc0NyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50ZXJtcyJ9LHsidmFsdWUiOiJmNTk2YzEzN2I0ZWUxYjJjMGY4NWQ2ODFkNDMwN2RmN2ZlMDBhMTA5ODJiMWRjZDU1ZTE4OTExNjYyMjE2NDZhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLm5hbWUifSx7InZhbHVlIjoiYzRmY2U1MDg5MTU3OGEzY2M1MmU4NzFmNjM2NDExZTdlOWU2NzAyOTA5MmE4YWE2NGMxYzAyM2YwZWZiODEyMyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6ImNiYWQ1Y2I1YWQ5NzFkM2IzZDAyNzEzYzRhMzYxYTlkOTUxMTE5OThkMjQwYTM1YjAxOTc5Y2RhYWYyNjc5MmUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uY2l0eSJ9LHsidmFsdWUiOiIxODQ0MDIyZWIzYjI5NDM5NzllYjI5MjdlYjJiMjcxZDk4NzZmNDc4ZWExN2ZhMjA1MzhkMjU1OGVkMDUxM2YxIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLnBvc3RhbENvZGUifSx7InZhbHVlIjoiMWM0YzA2NTdkNTRlMTg2NGMwMWI3MTA4ZjljYWZlODI5MDBjMmQ2NDA2ZjhmZTdjZTQwYjFmMTUyODhmZTY5MCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiJkMjkxMGY5NDMzYTg1Mzk5ODQyNzk5ZmVhMTI3ODE5MDM0NGNiMTE4ZGJlMWU3YTM0YzVmZTAxNWQ2MWNkMTk1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55Lm5hbWUifSx7InZhbHVlIjoiNDAwNDllMmUwMWEyMzdmZjA3NjdiN2Q4YjQ4OTFkMmQ2MWQ3MmEyOTA3N2M2MGI2M2E0NzlhZjlmMDcwOWI2ZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6IjQ3YzcxNjQ1OWEzMTEwYWI1YjY1MTI2ZDlkZWM0MGQ4MDBjOWU0NzcxYWFlOGI0YThkMGZlYjQ0NjdlM2NmYTYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuY2l0eSJ9LHsidmFsdWUiOiIwODU4YzQ0MGVlYTI0ZTU3ZTg4YjY3NzQzODIxZTM3Zjg3MWVlYWViNjdiYTJiMGNkZjRlNWNmMzVjNjJkYmY3IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LnBvc3RhbENvZGUifSx7InZhbHVlIjoiZTkwZWJiZWY5YTg3Mzc5MTJiNWMzMDk3YjU4ZTQ0N2Q3YzA1NTEzMjMzYmNiN2FjMDIxOTE3MzJjNzRmYzhmYiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiI2MmVhYTYwZGNkZTUzNDNmNTdhY2Y2MWE2ZmY5ZThlODgxM2UxZjRkYmQ2OGY2N2RjMzRhNmJkZmQ3N2JhNTdlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5uYW1lIn0seyJ2YWx1ZSI6IjU2YzRjMWQ4MjIwNmNkNzgxOTg5MGI1N2FmMWZjMTBhZjZmYjE3ZDBmODE1MDAwY2IyNzM4YjVlYjY2Njg1ZWQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmVtYWlsIn0seyJ2YWx1ZSI6IjA1MmY3MTUwYTgzYzUwMjU1MzA4MDMyMWRhZDJhOGUxMTMwMjJhZDMyNWZmYTk1NTYxZmI2ODk4YTJjZGUyZTEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiIwNTI4NDFlNGQxYzA3MDBlN2VjYzE1MjgzNzE4YTQwOTA0MzQyNjM1MzY1N2Q2ODAxNGZhYjQ1ZDZkODY2MmZlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0ucXVhbnRpdHkifSx7InZhbHVlIjoiNWEyZTc1YjVlODg3NjI1ZmE5MzEwOGNlZDIzZmVlNjA2MDg5Nzk0OWJhYWJkNDZkZTM4YjBiNmZiMjYzNWY5OSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiI1Yzc3NDcwYzJlOTQ1MTk5OThjYjFhODhhOTZlNTMxOWM3NDhmYWNmNmU3Y2ExMzViOTYyMWJiMzQ0ZGY0YThiIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uYW1vdW50In0seyJ2YWx1ZSI6ImVmMDUyZDE5ZTIzNmNjNzU3ODlkNGM5NTAxMDU1YWZkNjk1ZDY2YTEwYTI1YTY4YmFjZDFlMDJhNjBkMmNkMjEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiI1YzVjMWY4ZjZhM2M5YWUzZWZjM2IyOWQ3ZjQ0NjQ5OTc4NmYxMjUxZDdjNWIyNzk4ODBhNDQ4NzQ5MDRjMjEzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0ucXVhbnRpdHkifSx7InZhbHVlIjoiMDllMDg0NzA4MTczMjIzZmJkYzA1NTQwM2YwMzUyMDNkMTE1M2RmNzVmZWE5N2E5ZTNjMWJjMGRiMzRmZTFlZSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiI0MGJlNGRlMDBlOWZkYTBhODY2MzM4ZjczZmI1OWNlNzFkNDg0ZTcyYWE5YTg2ZmE3MjA2YWRiNjYzNWI1YmQyIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uYW1vdW50In0seyJ2YWx1ZSI6ImMxZGRjN2FjMDkyY2Q4YTY4MGE0NGUzMjBmMzNmZmVkN2NjZTdkZTFiNjc5OGMyMjY4MTViOGMxOGIzODAzMjAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiIxMzM3OTBiYTI1YTI3YzA3MzZkZmViMGU1YWQ5MDMxMWRlYzM2NmYwMmZjYTM3MDQ1ZDdmNmJlY2E1ZjU1YWE2IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0ucXVhbnRpdHkifSx7InZhbHVlIjoiNGY3NGFiZTMwMTIzYzNhMWNmZTZjZDQ1NWY0ODdmYzk2ZjAwNzhlMzY5OTY2YzZiYTdkMTcxYmQ0YzU2MjhmYiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiJjZGI3NGE4MjZhNzg0YWEyMTVjNmQyZTFjYjJiMjA2ODdhMmNmYWJjMmMzNzQ0ZmFlZjUwMWQ2OWNiOGNkMDdlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uYW1vdW50In0seyJ2YWx1ZSI6IjE5M2ExYmYzY2U2YWI0NzA5MTRiOTk2ZThmZTQ3ODNkNjViMDczNWFkOWM4MTAyM2RjMTRkZTc5NzgxNWEwY2QiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Quc3VidG90YWwifSx7InZhbHVlIjoiYzRlZjdmNDgwZjlkMjY5OTQ5YWExYTMzM2Q1OGI3MDg5NzA1YzY0YTg4Zjk2OGYyODBiY2VkYTA3YWFmYzk4ZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXgifSx7InZhbHVlIjoiNTBkNzI4NTZkYTNlNzczNjhmZDg1YTc2ZjBkZTczNjgyZjlkNzI1Mjg3MGMxNWIxODljMGVkZTMzZmQ2Yjc5NyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXhUb3RhbCJ9LHsidmFsdWUiOiI4OGFiOGYzODU4MjM1ZWU2NGVkOTcxYThjODUzYWNlZjBjOGE2NDMzODI0NGQwODQxZDBlNjBmYTk0OWUyYmIxIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnRvdGFsIn1d", + "privacy": { + "obfuscated": [] + } + } +} \ No newline at end of file diff --git a/test/fixtures/v4/tt/did-idvc-wrapped.json b/test/fixtures/v4/tt/did-idvc-wrapped.json index 2b814075..e71affea 100644 --- a/test/fixtures/v4/tt/did-idvc-wrapped.json +++ b/test/fixtures/v4/tt/did-idvc-wrapped.json @@ -1,6 +1,12 @@ { - "@context": ["https://www.w3.org/2018/credentials/v1", "http://localhost:8080/alpha-context.json"], - "type": ["VerifiableCredential", "TradeTrustCredential"], + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" + ], + "type": [ + "VerifiableCredential", + "TradeTrustCredential" + ], "validFrom": "2021-03-08T12:00:00+08:00", "issuer": { "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", @@ -19,12 +25,16 @@ "https://w3id.org/vc/status-list/2021/v1" ], "id": "https://sbl.alwaysdata.net/oa/credentials/123456789", - "type": ["VerifiableCredential"], + "type": [ + "VerifiableCredential" + ], "issuer": "did:web:sbl.alwaysdata.net:oa", "credentialSubject": { "uen": "198801234E", "companyname": "My Own Company Pte Ltd", - "type": ["CorporateBasicDetails"], + "type": [ + "CorporateBasicDetails" + ], "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C" }, "expirationDate": "2023-11-01T06:45:43Z", @@ -46,7 +56,10 @@ } } }, - "credentialStatus": { "type": "TradeTrustCredentialStatus", "credentialStatusType": "NONE" }, + "credentialStatus": { + "type": "TradeTrustCredentialStatus", + "credentialStatusType": "NONE" + }, "renderMethod": { "type": "TradeTrustRenderMethod", "renderMethodType": "EMBEDDED_RENDERER", @@ -78,9 +91,24 @@ "email": "def@company.com" }, "billableItems": [ - { "description": "Service Fee", "quantity": "1", "unitPrice": "200", "amount": "200" }, - { "description": "Labor: 5 hours at $75/hr", "quantity": "5", "unitPrice": "75", "amount": "375" }, - { "description": "New client discount", "quantity": "1", "unitPrice": "50", "amount": "50" } + { + "description": "Service Fee", + "quantity": "1", + "unitPrice": "200", + "amount": "200" + }, + { + "description": "Labor: 5 hours at $75/hr", + "quantity": "5", + "unitPrice": "75", + "amount": "375" + }, + { + "description": "New client discount", + "quantity": "1", + "unitPrice": "50", + "amount": "50" + } ], "subtotal": "625", "tax": "0", @@ -90,10 +118,12 @@ "proof": { "type": "TradeTrustMerkleProofSignature2018", "proofPurpose": "assertionMethod", - "targetHash": "84edabc618b2a5a7bad7eee9b58c287e9a39959d231eef3ab9270bd99922e54c", + "targetHash": "841c8d1fb121bf7baab0b1677c91dc47cca6aa1e8ac772f38e96f8b4315d1150", "proofs": [], - "merkleRoot": "84edabc618b2a5a7bad7eee9b58c287e9a39959d231eef3ab9270bd99922e54c", - "salts": "W3sidmFsdWUiOiJlMTJhNTk0ZjkyYmNjZjhlYTkwOWIwZmQzZjg3NTMzOGFkOTEwNTM3YjFhMTUwOTQzZTk2MTM2MWI4MzEzMzM3IiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6ImYxMmQ0MDFjY2YyOTk4ZDQxMzBhZTc1ZWQzMWI3MjI3MjA0MTBjYzEyZTRhYWY1MjEyM2MwNzdhOWJkNmUzM2QiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiZDYwN2NhMmM2NDk1MTNjZDliNTQ2YTA1OTdiMzNkOGE4MTkzNWYxNzE1MTYzMTY0YzQ5ZGU4NTBkMDY1NTE5MCIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6ImJkMWIxYzQ1M2I5MTFiMjQ3Zjk0OGM0NmRhNDRmMjFkNjYxYzMwYWMyNTkwNzgwYTM2YjYwNmE3YjY1Y2I2ZTciLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiI0NWQyNzNiZTJlNzc5YTA0YjQxNmVkZjhjZjBhMTVlYTEyOWM1MzIyMmJmZDFjNmUzZTgyMTJkYzhjYjQxMGZiIiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiJhNzYzY2M3YjkxN2ZjODc4N2Q5ZmIzMWM4YWQ3ZjUxYmQzNTQ0OTU1ZDg3ODEyZTFmN2FiZWM5MTI0YzhjYzM0IiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiI5MWVlOGZkYTY2Y2EzMmJmNmFmY2RiMDEzMzJjMDMzNGRhN2EwODZkNTZjYzg2NzhlMTUxZDM5ZjFlNjQxYzhlIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6Ijg2NDQ1NzUzMjlhMGEwOTdmYmIzZTE1ZGEwOThjNTc2OTUyZDYzMWNhOWFhNDU4MjZkMzk1NTYzNzI3YThmN2IiLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiYTEzYmNjYTBjODZhMjljOGZjZTM2MTgzMWU0Y2Y2MWJmMzAxYTg5MTY4MGMxNzRiNjc5NTQ5NDE2MTczYjI1ZCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiI5NTU4ODY0NmUwYjBlY2Y5MzgyYjExZjEyYTI0MjdiY2M1ZDczNDQxZGExMDQ3ZTI5OGNjN2RmMDdjYzEzZjNiIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiMTQ2ODY5YTlhNGU2MDNiYjUyYTI0N2M1MzFmYWM5N2RjMDIyMmY0YmQzNjY5ZWRlZjc4NTEyOTgyY2UwYjNkZSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLnR5cGUifSx7InZhbHVlIjoiN2NiYzNiZTI4ZDkwMDc3NzIyOGNhZDVhYWYwMjc4ZTkwMzE1YTIzNTExNjdjOTgwMDExMGRhN2ViYmZkOGRmYiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMF0ifSx7InZhbHVlIjoiOWU0MjJlZWUxNTk4MDljZjcyNmQ4MzIyYmVlMDE2YWI1ZWRmZDIxM2QwZDllNWNiOGFiMDgzYWMyZjRjMjU1MiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiMjYzMjdkZjVkNmQwYjRmZWQxZjkxZWExY2U3YzZhYWU2M2ZlOGNmYjhhZjExOTg4NzA3YmFkNGNmYzE5MjVmYSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiMWE2OTI0ZDQ1ZjZhMzEyYThiMDVlYzlmZmVlMjBmMzVlODZiYWUwMmNlNjk3ZjdhZTNmOTBiYzkyMGQwNzA4YyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbM10ifSx7InZhbHVlIjoiZjEzNTJhZTIyZWVmNmI2YzhkNzM0MWRjMzNjNWMxYjIxMmE4NzEwZDU3MzM1Njg2N2YwYTQ5N2UxMzkwNGRkYiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuaWQifSx7InZhbHVlIjoiZDBkNzQ4OGY1MmFjYTRlYjc3OTQ4MTNhZThlMjYxYjBkYWQzOTBlMjgyYjUyYThjYTU4ZDViMDk0NTM5MmZmNiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEudHlwZVswXSJ9LHsidmFsdWUiOiI2YmJkYzhiNjNiYjU1ZmEyNzEzZGE5Y2IzMzcxOWNkNTZlMjgxYTE3NjE0ZmVlNTVjZTUxM2U5MzlhNjdiNzdlIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1ZXIifSx7InZhbHVlIjoiZjBmNTM1ODA4OTMzMWQwNGVkMTUxMzVlMWNkMzEwZGJlMjdmMGFiMDQ2OWNmNTY1MmQ1Yzc4ZjUwODM5Y2RiZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QudWVuIn0seyJ2YWx1ZSI6Ijc0YzczOGY1YjYyM2E2YjhmNjVlMDM3MGQ5ODBiM2YyMzU1ZTQwYjhkZjk4ODRlMzMzMGM3NTU5NmFkYjk3MTQiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LmNvbXBhbnluYW1lIn0seyJ2YWx1ZSI6ImM1ZTFhYjkzNTIwYWRlNjFkMGZmZWExMGQ2YmU0ZGY5NTVjNzc2MGY4NzdhNzMyOGY2Y2U4NzYyYzhkNWIzODQiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LnR5cGVbMF0ifSx7InZhbHVlIjoiMGYzMmZiYzE5NTRjMjVjNmUzYmY1ODg3MjVjNmQwOGQ3OGE2MGQzYzA5NWMyNjBiZTZkODRkNDc1N2YyMzc3OCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiOWJjOTk3MDFkNmRlYjM4OTY1OGE3N2Y2ZDg2ZmQzZTAzNDhmYzQ1MGZiOWM1ODA0MTJmNGRmYjVjNmYxMzBlYyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuZXhwaXJhdGlvbkRhdGUifSx7InZhbHVlIjoiNDFkMjA3ZTY3OGUwYzQ0YTRhMGU2MTgxZDFlNzg4NzY1NThhNmY3MmY2MWFjYjRmZDhiYzhhZjYzNWJiOTUzYiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5pZCJ9LHsidmFsdWUiOiI4MmY1YjM3ZjczMmQwZThkNGUyOTdiZDJjOTA4YWM3NmQzYzQ4MTg1MjBlMjJjMmIxMjMwMjk3ZTNjMDg4ZjFhIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5jcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiMDExZWE5MjA4MmJjZmMxNTM5MTU4ZGY4ZjFkZTlkMWMzMjVhNmU1NjM1YTA4NTk0NDE3MGEwNGVhNmQ1M2U1OSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0SW5kZXgifSx7InZhbHVlIjoiZGEyNjgwMjc3MmUyYTIwODMwZWYyYWNmNjU5OTI3NDcwMjhhNzlmOGE5ZDExYjAxZDlmNDVhNzdmZmQ5NDhhYiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0Q3JlZGVudGlhbCJ9LHsidmFsdWUiOiIwNjVkZTU1MTliNjZmNTBjYTc1YTNmY2RkZjRhNWM0NzRjMzhhZDM2MWIyMWU1YjI5ZWVjYzU3Y2ZiYWNlZTQ4IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1YW5jZURhdGUifSx7InZhbHVlIjoiNDJhNDU1MmRlZmIwYjI5MDcyYjE2ZWUzY2UwODA2OTJiYTMyN2QwZDQ2NDI2ZThlY2FkNTcxNzc4ZGViZGQwMCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEucHJvb2YudHlwZSJ9LHsidmFsdWUiOiI0MzJjNGE2YzExNjYwMDJjOGRiYjMzMDkyYTBmMmE4YzgxNzllMjE1MTk3ZjVlMTgzZmI1MmQ0Mzk3OTlhYTVmIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5jcmVhdGVkIn0seyJ2YWx1ZSI6ImRhZTIxYjhlODZiMGMwMmYwYjg3Y2UzMGQ4NTMxYmNiMzI4NTNhZDQ2NWY4NmYzNTliYWIzNGY2NjllNjJmYjQiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnByb29mUHVycG9zZSJ9LHsidmFsdWUiOiJlNzRkNWQ1YjFkYTdkZTQ5ZGQxZmUwMGY5MWYyMzRmN2U2ODZmYWVmNjU4MzI0MjQzNDZkMGVmYzBiYmEyMmFiIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5wcm9vZlZhbHVlIn0seyJ2YWx1ZSI6IjM4NjgxNWFiMjIyMmM2Yzg5N2JlNDRlYWRiZmUxYmE3NTkxYzdmYzkyMjJmY2ZiZDA3YTZkZTE3NzA5MTgyYTciLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnZlcmlmaWNhdGlvbk1ldGhvZCJ9LHsidmFsdWUiOiJlNTQzNDY2ZTVhNzVjN2QxMDczNjVkZThhMzcwNGM2MmIwNGVmYzliN2I5YWRiYjdiYWMwMWUwNzBiNjE0MzNkIiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMudHlwZSJ9LHsidmFsdWUiOiIwZTM5YjA5OTdhMWRiYjkyMmQ1OTBkMGIxNjVlMmUxYjQzMGJkZjYxNmIzMmUzOGVhMWE5ZmU5ZDc3MDA2YzQyIiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMuY3JlZGVudGlhbFN0YXR1c1R5cGUifSx7InZhbHVlIjoiNDNjMjFmN2I2YzdhNmUyZjA3NWIxODk5ODMzMzQ4ZmFjZjk5MWVmMjc1MzQxMTI1MzhhYWUyYzc2Yjc4N2MxZiIsInBhdGgiOiJyZW5kZXJNZXRob2QudHlwZSJ9LHsidmFsdWUiOiI5ZDliMzkxMWVkM2Q2OTU4ZDdiOWY3ZGE5Zjk0NGNmMDY1N2Q5OGE5NzVmNjgwZTU3YzJlMjQ3NjRiZWE1YTNmIiwicGF0aCI6InJlbmRlck1ldGhvZC5yZW5kZXJNZXRob2RUeXBlIn0seyJ2YWx1ZSI6IjcwMTc4ZGE4ODVkNGE4MmEyNjJhOGNlYjcyY2I1ZjA3Y2FlMzdlZDUzYzI4ZTliZWM4MTBhNzdiMzZjOWFkMzkiLCJwYXRoIjoicmVuZGVyTWV0aG9kLm5hbWUifSx7InZhbHVlIjoiMTg3Y2MwNmNkNGJmOGZjYWZhMTQyMGJmMzI5YTIzMTRjZjJmZjk1NzkzNTkzZjY2MWZjZmY3ZGMxZDA4YTNlNyIsInBhdGgiOiJyZW5kZXJNZXRob2QudXJsIn0seyJ2YWx1ZSI6IjAyMDU2ZmQyODI5ZTIxNzEwY2QyZTRlYzVmZWUxNjVmMTcyMDY1MTA0NWNlYzdhZGVjNGIwMDYyYjllYTI0MmYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QubmFtZSJ9LHsidmFsdWUiOiI5ODVlYjU0YWYwMmUwOGIyZTRkMDk0YjE2NTgwYjFmMWE5MWRkMzk5Y2JmNjZkZDIwOTI5OTMxY2ZiMDdjZDBmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmlkIn0seyJ2YWx1ZSI6ImE0NDdjODA0ZTdmZjBjMTBlYjFiN2JiMzU4ZjYwNWRmNmIzNzBlN2M3NjI1MzZhMmE0NDg2ZjUyNDVkMDk0ZmIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuZGF0ZSJ9LHsidmFsdWUiOiI5YzIzODdiNjUwNTUyYmU5MWQyYzg0ODdmZWQyYTI0MTQ0NmFkZjM2NDM3MDY4NmZjNjVjMzY0Y2ZjMGEyZDU4IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmN1c3RvbWVySWQifSx7InZhbHVlIjoiYzExYzNjNmVhODM1N2EzNTRjOTMxZDk2MzZkNWIxNTBkMmRhMzFjNDllODAxNWE2YzUyOGVhYzQwZWNjMTk4YiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50ZXJtcyJ9LHsidmFsdWUiOiJlMmFkMzg5YmE3Zjc4ZmE3YjBmNzkxOWUyYTM0NTAxODllNDlhNDI2YzU1ODFlOGVjZThhOWFhYzI1MTVmNjUyIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLm5hbWUifSx7InZhbHVlIjoiNThjMDlmMzI4MzNkOGQwYWY0YTRkZTc0OTRkYjk5NzJiZWQwNzVkOTkzMDQ0MjExMWM4ZmQ2ZTA4YTcyMzM0OSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6ImQ3MTY2YTVlODBiNzAxMjQyZTZjYWI4YTI3YzE2YjdiZTkzMGJmZTkxY2EyNGYxMTVjZTk2YjRlZjllZjE1NzEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uY2l0eSJ9LHsidmFsdWUiOiJiZmVjN2U2M2M2YWUyMTkzZGJjY2EyOWQwYTQ0Y2U1ZTk4MWNjNmFhNmM1Yjk4ZjY3NjBkMjk2MWE4ODRlYjYzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLnBvc3RhbENvZGUifSx7InZhbHVlIjoiMTBiYjFkY2FiY2YxN2EwYmFjMzg2NzdmMjNkNDU0Y2UwNDczZjUxMDYwZGZkOWQyMDVmNGUyMWU0OTA3MzJmZSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiIzNTdjZDk1ZjE3OTBkMjE0NWRhNDZlMzk1ZDI5MjcyMWQ2ZGQzZjkwMzY1ZDEyZWJhZjRhZWUxZDQzYzVjY2NjIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55Lm5hbWUifSx7InZhbHVlIjoiMDg5NDFhZGQ3YTU4MzBiOTE1MjBlYmVkNTY4YTQ2MTc5NjI5NjAzZGMzMjZkMDZiY2I0ODcxYmI2ZDVmZThhYSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6IjgzYjY5ZjEzZTQyNGY4NGY4YTAwMzBmNzljYzMxZjc0NjkwMzM2ZjhmNDllNWNhYTIxYTFmNWVlOWQ0ZjBiZWEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuY2l0eSJ9LHsidmFsdWUiOiJkMTRiODY4OTVmZTU2OGY3Yzc3NmRjOTUwMjc3NGE4OTQzYmNkODVhM2ZhNGNhOTM0NmVlMDAyNzFlMGVjOTA5IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LnBvc3RhbENvZGUifSx7InZhbHVlIjoiMDgxMjYzMjQxZDQ1YzY2NGJhMjEwZTQ0Njk1MmYyNTliNmFlMDA4NjVhZDk0YjliZGNiOTJhMmNjY2Y4ZTFhZSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiIzYmY2NDA0MjM1Y2Y5YjkxYjlhZmQ4ZjdkNTE5YzY3NWJhYzdmNTc0N2M5NTIwZWViZTYzY2VmM2VlNzZkNzQwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5uYW1lIn0seyJ2YWx1ZSI6ImExZjA0MjExM2JlMjEyZThjZTZjNTZjMDllMjkyOTk3OWMzOWRkZTk3Mzg4OTVjMDI2ODA2YjQ2MzQyNDRlNjAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmVtYWlsIn0seyJ2YWx1ZSI6IjY4MDc3M2Q1M2U5YjEyYTE1NzA5ZTM0NjYxNDY0MzlmM2FlM2Q0NGVjZTQ0YjhmZTY4MjY3MTYyYTc5ODRiYzMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiI3NjNhOTNhMTNlNmMxZmE3YWU0YzEzNzIyMTU5ZjIxMDk4YWMyODg5NGZmMWI3ODRlMTVlYzZhMjI0NDExNjAwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0ucXVhbnRpdHkifSx7InZhbHVlIjoiOTdjZGQ2MzE2NjljMjQ3ZWFiZGU2OTdiM2M5MTkwZTMxOTk5M2Y0NDU2MjFmODEwNTU2MDdhYjgwOGYyZTY4NyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiJkZjM5Mjk5YjZjMzFmYTU3YzVjOWU2OGY5NGMzNDA5OTIyOGZkZWE1M2ZhZGY5N2RiMjExYjQxMGVhMzI1MDQ1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uYW1vdW50In0seyJ2YWx1ZSI6ImRmNTZhZjU4OTRhZmI3OGY0Y2IwOTRiYzVhNWJjNmQ5Njg2MzY5YWZjYmUyYTM0NDE2YThmNWNhMmYxMjQwY2EiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiJhZTkxZTc5NTdlODNlN2M0NDgwMDU1MzEyZWU1NWYwNDcxMjQwOGY5YWVkYmNiNTBhNWRmY2NjZjFlMmYwOTMwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0ucXVhbnRpdHkifSx7InZhbHVlIjoiZWZjMzA5M2U0YmUzMTc0NzYyZmRiMGI2Y2Q0MmY5NmI2YjJlNDUyZmQxYjY2NzQxMjRjNWVhZjU5ODJiOTQ5YSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiJmMjllNjA5YTRlMjM3OTkzNWU5NmM4NTVkZDk0MjQ3YzhjMmRjMTJkMDEyYzQ1NWQwZjNhYTJkMTQyN2EyMmE2IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uYW1vdW50In0seyJ2YWx1ZSI6IjA0OTBmNjViMDdmOTRkMmFlMTUxOGIwODAyYjdjNTMyZDk1YzhmZjMxYzk4MDRjZTQ0NDJhYjM5MDJhZjcyNTciLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiI2OTU2ZjczMDhhMTFlMDVhYzBmYTYwZDFhNTMzMGYwNjZiMDQ4NjUwY2I2MWQ1YjQ1Nzg4NjE0ZjBjNWFiYTZlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0ucXVhbnRpdHkifSx7InZhbHVlIjoiYWI2MGI4MzM2MjllZjA3MGU1YzZkYzRlODNlOWRhMmJhYTU0NTg2Nzc5ZGE1ZGIyMmI0NzQ0ODhmZWNmMmJjYSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiJjNTlhOGZjMGIzMTYyZmI2ZGY5YjM0MjE5ZTQ2NmVkYTkyMWU5NjVlYzY1MzMzMGE1NDc0ZWFiODRjZTVjNjExIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uYW1vdW50In0seyJ2YWx1ZSI6IjMyMmI4YTcyZDJkNTY2YTc5NmJhZDYzNTFmZGZkN2JkOGNmZDIxYWJjNzJiZTZlZGRlNmYyZWVkNTFlN2IyNTQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Quc3VidG90YWwifSx7InZhbHVlIjoiNTE2OTJjNzc3NTFiMTljZjY4ODRlOTY1YmYxZDRlZTY4M2NkZGVkYzM5MjgyZTQ5YWE4NTZmNTkwNjA5MWI1OSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXgifSx7InZhbHVlIjoiMGFjNDQ4NmVkYzIxNzUyYjNkOGRkZDQ0MDExNWM5MDM2NmMwNjc3MDNlNDEzZjM5MTI2ZTQ0NGRmYjNkM2JmMyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXhUb3RhbCJ9LHsidmFsdWUiOiIyMzUzZDJhZGIyMDBhMTc0YjVmOTFhOTA5NWQxZWEzYmE0MGZkMzRmNzk3Nzc3NWNmNzU4NGE3YTllZDNjZTNjIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnRvdGFsIn1d", - "privacy": { "obfuscated": [] } + "merkleRoot": "841c8d1fb121bf7baab0b1677c91dc47cca6aa1e8ac772f38e96f8b4315d1150", + "salts": "W3sidmFsdWUiOiJiYjMyNjdiNGRkZGY0ZWRkMzJlZDNmY2YxYTlhOWM5NzY3NGFiYjBlMjk5MDc3ZTgxNjA0MzIyYjA0Y2IyZjg3IiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6ImZiNzJiODdmNGRjMTM3MmFmNGQzOTcxYWQ3OWFiNzMxNDIwNGU0ZWU5YmU4NmE4N2NhNDQwYzdjMmU1OTY0ZGIiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiN2EzMTliZTQ4Nzk1ZDRlMjAxYjAyMDE0YzlmMjFkZmJlZjM3YWE2ODZlMzViNWM2Y2YyMjMwYTExMGRjNDJiNiIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6ImQ2MzlhNzI4MGVjNjNlYzc2N2MwYTFiZmRmZGQ3MTQxYjVjNWNlZTg5NzU2ZmIxMGYzMTZhZGM3MTA3MGU4OTAiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiIyN2M5YzYwMzUzMGFmYWExZTdjYmFjNTI4Y2VmM2ZiZjJhNTA5NTNjNjg2MzY0NTgyNWY2MzhmMDAwOWZlNjg5IiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiI1ZGMwNmM2ZWZiZTMyYzAzODgyMmRmYzNlMGI5NjJiMzc4YzI4MjE0MzdkZTU0NjU4MzUyZWVmYWJlNGM0OTUxIiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiI1ZjBhZTFmM2ZjODYzMjFmZmYwMGRkMzZiN2QxNDBhOGY3Y2U2Y2FiOGQ1ZmIwZDE3NDcxNThkMTQ3NWJkNmZhIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6ImUxMDZmZTFlMzZhYzA1YzZiYzgyNDg2NWVmYmI5YzM5MGNkZWI2OTQ3NjZjZGYzNDIyZTEwZWE4OTEzMDVmNjgiLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiOWJjZDE3YzRiNDQ1MjE0YjMwYTMxMGNjZDIyMWQ1MzcxNjY1NGQxZDBmZjc3YmZjNzI5YjZkODE1ZmU1MGJmZCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiIwM2FmYzQzNTViNTQyYTc2ZDM4MTQ5NDlhNjMyZjEzYTM0YzcyOTE4MWM4MmI5ODRiMmFhM2RiMDgxN2FjMzRhIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiMTFkYjMzODJmMzI0OTNjOTViMjYwNWY4NWQ0MWVmMmJkMTcwMTlhMDFkNTM3NTk5Y2M3Y2Y2OGI3NGNjNjdlYSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLnR5cGUifSx7InZhbHVlIjoiZmZkOTQ5ZDRiMDA1ZjhlMjRiYzI4ODgyNjQ4YzM2NjE3NDM1NzA5MDI0ZDU4M2M2ZTE3NmYxY2JmY2Q5NzZmMyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMF0ifSx7InZhbHVlIjoiZjNkNDgzY2YyMmI2YmVlMTUzN2RiMjlhYThkOWE2OTYyNWIyM2E2N2Y0ZmIxZjg4ODNjNWMzNmMzOTA3MjkyMiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiYzA5ZDZlMjBlZmQzZjg5ODM3ZTg1YTczMjYwZWRiZGEzNmUyYmZmODhlNTk0YzZmMGIxMzljOTZjOTg0YTdiMyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiYTc0ZDRmODc2ZmI5NGMyZjI5Yjc4ZTRlMmRhMDY2ZjIxNTE0OWVlYTY3ZmJjM2RhZTgzYTE0OTZiZTllZWUyNCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbM10ifSx7InZhbHVlIjoiOTM2ZTQzMzgwMjI1Y2FmMWViNTE1NmYzNTBmODBmNjIxYzk4YWVlMjAxMWU3YzdlODE1ZmUzMTM5NmQ1YzlhYiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuaWQifSx7InZhbHVlIjoiMDkxYThjM2I4OTIwMjM1NzdlYjIwNzIwM2VkZWQ5YWU3NDFjYjQwYjJhYWNjZjJjNzAxM2UzNjJlMzRhNDhhZSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEudHlwZVswXSJ9LHsidmFsdWUiOiJhMTVmYmQ4MTdiNjQ4Y2U3MTVmNGY5ZmRjNDU3YmZjMTI4ZmExMjg3ZjJjOWQyY2Y5NDlhN2I5NGQwZWRhYTY1IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1ZXIifSx7InZhbHVlIjoiYTcwYmE3YjJlNTI2MjRkZTQzYjljODRmYjIwMzc0ODY0NmUwZTcxYTVhODJjNjk2YzA0M2VmYWY2MjI5ZDEzZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QudWVuIn0seyJ2YWx1ZSI6ImJlOGJhZDU4MTRhYWM3OGY3Njk5N2ZiY2U1NGJhMmJmYjk4MWU2ODAwNWU4ZTY4MzkzNjA2MGM0MmQ1MTUzZDEiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LmNvbXBhbnluYW1lIn0seyJ2YWx1ZSI6ImY5MTkxMjFkMmU4ODA0MTc3Y2M2MmJjZDMwYzMxZGQ1M2JhNDY2ZTlhZDQwNDNmNTZiZWZmNGM0MzYzZTE1ZDgiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LnR5cGVbMF0ifSx7InZhbHVlIjoiMmY3NmE4ZWUyYTI3MjgxOGNmOTIzYjg4YmVhOGRmYzUxNmIwZWU4OTNjMjI4OTIzZWExNDJkN2E4YWVmODA3YyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiNzg1ZDc5OGE3M2Y2NjU5YTc2M2E0MzUzOTRlYTE1NGM3Y2RmNDRmNjA3YTM1YmZjYWZhMWZhYWE4N2VlZGZiZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuZXhwaXJhdGlvbkRhdGUifSx7InZhbHVlIjoiM2E3MjAwZGU4NWRjOTlkMjQyMWQwYjEwZTUxNDg0ZDk2ZTdhODIxYzMxMmViZjllZWY2ZDIzMmJlNjJlZjJiOSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5pZCJ9LHsidmFsdWUiOiI2MTY3NzRjMjE3YWZjN2UwZjZmMjkwOTNjYWZkMzM2ODNmODVjNzVkNmE4ZDdjYjMwM2Q5MGYyMDljNTUyOGY5IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5jcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiMmI4NWY5NWVmZGQ2ODViNzM5ODcxZjVmNzhiZDUwMTZlZDAyNTMxNDIwMjNkZDczM2ZjOWEwNzI1ZWFmZTBkMCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0SW5kZXgifSx7InZhbHVlIjoiZDU3YzQ3NGYwN2Q4YTExMjNhMzk0YmZiMGYyNzRjOTYxZDUwMzQwMjEzN2IyYzkwNmZjODhmZjRkNWEzYWE5MSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0Q3JlZGVudGlhbCJ9LHsidmFsdWUiOiJiZjMxYWIzNmVlNjUwNGNkZmUzYTgxMTg2ZDdlZTk5MGI0MTczZjA4MGEwZTZhMTVlYzk3YmUyZGU5NTU2MTM2IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1YW5jZURhdGUifSx7InZhbHVlIjoiZDljNmYxNTFiNDU4NTI0OWZjNmY1YzBhZDhiZGVmYmM2NjFkN2VhN2U3YzFmZWI4MGFhMTZkNzNhYzg1MGRjZSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEucHJvb2YudHlwZSJ9LHsidmFsdWUiOiI4YmIyMzFmYzJkMmIxOGMxOWJiYmZhMzA2YzlkMWQ3ZWNhYjcyMTE0NTI3Zjk0NTNjYTY1MjkyMDc3N2Y1NTIzIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5jcmVhdGVkIn0seyJ2YWx1ZSI6IjNmNGNkYWM1NDg5NzA0M2VjYThmOWZjNzUwNmYyYjUxOGU5NzU2YTljMTVhNmJmM2E0NWRjNDkzZDUyN2Y1MzIiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnByb29mUHVycG9zZSJ9LHsidmFsdWUiOiJlNDVhNTA0NzY4OTA3MDE0YmU2ZjRiMDc5ZDZkZTNkYjZhY2MxMzNhMzRmYTg2ZWU4MjgxNmUwMzE3ZDFkOGE5IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5wcm9vZlZhbHVlIn0seyJ2YWx1ZSI6IjQ1YmM3NTY5MTJmZWZkNjFjNTViYmY2ZDc3MGY5OGZiZDVhNWQyMDI4ZWE5ZDUxMDQyMzY1OGQzOTQ3N2MzYTAiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnZlcmlmaWNhdGlvbk1ldGhvZCJ9LHsidmFsdWUiOiI4MzUwOGI0N2Q5NDkzOTM1MGJkYzBlMGIxNGI3MGQyYjUwYTc1ZmI5ZmFlNzdhYTA0MWViZjQ1YjJhNzFlYWRjIiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMudHlwZSJ9LHsidmFsdWUiOiI1M2QyM2RmM2ZkYTc3YWU3MzQwMDg2MTY5YTgzYjE1YjY3Y2Q1ODdhMDU5NWQzMWRlOTI5YjAxZDQxZTE5OTQzIiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMuY3JlZGVudGlhbFN0YXR1c1R5cGUifSx7InZhbHVlIjoiNDg2NGUxYWJjOTBkZGFmNDk0YmUxMTkyOGEyYzI2YmJlODNjMGY0ZmMxNWQ1YWJiY2NlNTJmNTE1NGVkNTQ0YyIsInBhdGgiOiJyZW5kZXJNZXRob2QudHlwZSJ9LHsidmFsdWUiOiJmZmQxMzg5NmFiMWJkNjg0ZGNhNzA3N2JjNDljNzE0ZjNjNzIwMjMwNTY5ODYzMmI5NTYzMmZmNWU2MjBiZmI2IiwicGF0aCI6InJlbmRlck1ldGhvZC5yZW5kZXJNZXRob2RUeXBlIn0seyJ2YWx1ZSI6ImI0NDUyNzAwZjE0ZDg5ZGFlOTQzNGZkNzRlN2MzMmNlNjUyMGI3YjY5ODYxYjVmZTc3YTJlZTQ0MGMyZjEyYzAiLCJwYXRoIjoicmVuZGVyTWV0aG9kLm5hbWUifSx7InZhbHVlIjoiNzU5NDFkOTFmMjRmYTgyMDhmNWRmZTdhMWMwOGI0ZWJlZjA1OGQ4MWYzZjJjNzQ0YTZkZDk1MGY3Mzc2ZjY3YyIsInBhdGgiOiJyZW5kZXJNZXRob2QudXJsIn0seyJ2YWx1ZSI6IjVkN2E2NGUwOThhOWQxYjA2MjljYjRkZjE4YjE5ZWQ1NTQwMGQ5ZjRkZTcwY2U2Mzk1ZjlmYmM3NDc4YzdiZWEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QubmFtZSJ9LHsidmFsdWUiOiIxNDM1MzFhMDA0ZDNjZjBmOGYyZGE2NGY5OTIwNjA1MDcwYzlhZmViNTk5YTg1MTZjNWZlM2NhN2I5M2M5NzBhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmlkIn0seyJ2YWx1ZSI6ImZjYWFjODY4MDdjNDRhNjI5ZmEwYTdhZWNlYjk0NjRlN2Y0MDYxNGFjYWI5YTZjMzVlNGQ1MGUxNWE5ZGQ4MDYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuZGF0ZSJ9LHsidmFsdWUiOiIyN2ZkNDRhYTI2ZWM1MzE2MzM5OWRiMzE4MzkxZTAzNzdlODdlNjIxOGRmZDU1N2VlOGFhZDhhZjY3M2U4MGViIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmN1c3RvbWVySWQifSx7InZhbHVlIjoiMTNlMDc4NjMzZmU2MWViOGYzMmM1N2U1MjU3NmQ0NzMxZDUxMzEzMjJjNmNmYzFiZDRiMDkyN2Y4NTIwZGVlNCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50ZXJtcyJ9LHsidmFsdWUiOiI0YzcxNWU5YTFhZmI3N2MwMDNmYTk3M2M2MGI3MzYzMWI0N2ViNjM2N2MyYTMzNWFhNjlkMWFkOWY5NmM3NjljIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLm5hbWUifSx7InZhbHVlIjoiOTIxNWUwOTdjNDc3MjhiOTc5NGVlZjg4YjMxODJjYmUxMGUwMmVjNDA4YTYzODIyMjQ3OThjZGM4YjE3ZTViOSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6IjJkMjIxY2IwYzRlOTI3ZTUyYjNkNjZlZTNkNDY4ODFmZWNlN2QyNzg4MDgzMTFmYjQwZDdjNjE4OThmNmQ3OTEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uY2l0eSJ9LHsidmFsdWUiOiI5OTdhZjU5ZTJhODE5ZDYwZmFlNjVhMDI2MGNlZjg1MmM2ZWY0NDI0ZGQxZjJjZmU2NWRjODk0MWI5NWFhNzNhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLnBvc3RhbENvZGUifSx7InZhbHVlIjoiZmZjMWIzMjI5MDQxMmM3Yjg5OGU4M2E3MmYxNDE2ZmE4YzhjOGZjNTY1N2U1ODdmMmU2Mzg0MWJiZjY1YTVhZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiI5NmM0MGUwOWFiZDU4NTZhNWVjZTkyMGI4NjNiMzZmMzliMmI3ZjA4YzhjZDBhODk0YjFhOWVmZmZhYTkxYjkzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55Lm5hbWUifSx7InZhbHVlIjoiNjU3ZDJhNzJiMzFhNDExNWQwZTAzOTg4NTYxZmQ4MDgxYjI3YmM5YzljOWM2YmZmNTU3MTUzMzQwNWViMWRiMiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6ImZmZDQyOWI0YWQ2ZmU4MTAxZjJlNjMwMzQ2OWNmNTljNWFjNTU1NmU0ZDdjMjljYzU1YTkyZTM2MzBmNzRjZmEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuY2l0eSJ9LHsidmFsdWUiOiI2NjQ3ZmRiM2U5YzYwNzdmYjRjM2VkMzA2ZmIzMWQ5OGE2NzhkMTkzZDMxYWFlMDBlNGY2MjJiMzg0OWE4ZmFjIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LnBvc3RhbENvZGUifSx7InZhbHVlIjoiZDhiMjJjYzMyZDUzODBmYjFkYzE1Y2RlYzA3ZGY5YTZmOGQ3ZTljYzdiNjY1MzliOTZmOWFiYTZmMTI5MGI0ZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiJkZDkxYmEyYmUzOWNiNjY5MGVkZGQ4MTE2NmI0MDNjMDllMmI2MWJhZTVmNjc0MzBmYTUwMDdkZjcxNWNlMWVhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5uYW1lIn0seyJ2YWx1ZSI6IjFjNDcxM2NkNTRlOWNjODUyZWVkZWRiYjUxYTQ4Yzk5OWE0NGVlODZlNDdiNzUyZGZjMWU2ZWM0MTBlMWIzYTQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmVtYWlsIn0seyJ2YWx1ZSI6IjRlOTY2OWU3N2Q3MTFmMzYyZDY2MGNjYWU5ZTM3OWFiYzU3NWRlMmU0OGFlNjE3OTMxMTY2MjNhYWRkNDBkNGIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiIzN2RjYTdjOWU3M2YwNjFmYWUwMWM4NDBhOGYyNjMwYmI5NTBlOWQ3NWM3MDE2NWVjODBiM2IxNWY5NjY4MjYzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0ucXVhbnRpdHkifSx7InZhbHVlIjoiNDExNzM2MjUyZjhkMjY4MGQwZmE4NDEyNjU0ZTlhMmMwZTdiYzY1NTliMDAyNTZjZTVmM2EyNjI4YzViZGM5OSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiJmMmIzZmU3YTI3OWQwMTc0NTRhNjM0Y2ViNzRkMWJiMGRhZDk1YTM2MjViOThjYTY4MTJkYzYwYjc1ZDI3NTVlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uYW1vdW50In0seyJ2YWx1ZSI6ImUyNzE1N2ZmOTRjMDk0YTA2NmZhMzE4NGIzNGQzNTJhZWNlMGZkNDRlZWFjZjJhOTRiOGQ2N2VkMTZlOWI2OTEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiIxYzY3NzBmMmNmNjU4MmEwMWUwNjZiMzg5YTRmZjlmNjM1M2Y1NGVkMzhlMjgwZjZkZjc2NGE5YTk5N2Y3Yzk1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0ucXVhbnRpdHkifSx7InZhbHVlIjoiZWUxYjFjMzFkNzAwZWUxYjM5YWRlNmIwNjgwMTQzMzljMDE5YjQxNmU5MGU2ZmJlOGRjOTliZDE3ZTBjZTEzNCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiJjOThmZjcyMWZkZDM0NGU2OWZlM2I3Yzg1NDFlOTg4YTJhMjgyNzhmMmZkMTk2Zjk5MmVlZDQwYmIwOTBlZDZmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uYW1vdW50In0seyJ2YWx1ZSI6IjE5NzRjMjNkNzY1Zjk2NzhhYWJjNGJkMTA3Mzg3MjQwOTNiNWRiNTM1MjU2NDhhYTViZmMzMGMwZjVlNmNmZjUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiIzN2ZlMjY1ZjU0ODY4ZTA4YWIwOTcyNmIzYjljYzQxMTNlMTY4N2RhYjI5MzRhN2Q2Nzg5YjRiNzUwOTQ3NTFjIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0ucXVhbnRpdHkifSx7InZhbHVlIjoiMDgzNWRhZWJiNGVmYzQ4ZDcxYzU0MDQwMDU1NTVmOGY1ZThjNWQyZGFiMmRkMmU3NzRiNzZhNmEzZjcyY2Q5MiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiIzZmYyNDI4MjhmMzk3MDNjNzA4ZDkwMDEwMjFlNTllNGYwMTkxNDUzZmMzYmQ5YmQ2YzE1ZGE5OTA5ZWI4MWJkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uYW1vdW50In0seyJ2YWx1ZSI6IjdiZWU2ZWIyMWI1YTk0NDRjMGY3MGExNjBhYjJiMDJiOWFmN2E4ZWY1NjVmNjMzZDhjYzgyMWFhNzJiOWNkMzQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Quc3VidG90YWwifSx7InZhbHVlIjoiYTAzNWQ0MjdjYzk2NDlhOTBlOWI4MWE4YzdmMTkxNDMzZmNmMTNlMzU1ZTM5NjRjY2Q5ODdkNmI2MjZhMzQwMCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXgifSx7InZhbHVlIjoiZGQ4NDEyMzMzYTAyNzUwYzc0MTMxMzQzYmVkMDk3ZTQ5MDczMWEyMzI5M2Y3MGFlOTY4ZjZkY2ZjYzRiYWVlZSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXhUb3RhbCJ9LHsidmFsdWUiOiJiNmRkMjM3ODYyMGQ1YjlkZDljNjE1MmRmMmNmNjRhOGI3MGZhOGZhOGJjNzMwYjU5MmJlYmRiZmM5NmYwN2FjIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnRvdGFsIn1d", + "privacy": { + "obfuscated": [] + } } -} +} \ No newline at end of file diff --git a/test/fixtures/v4/tt/did-raw.json b/test/fixtures/v4/tt/did-raw.json index 85de0b6d..3c2412c8 100644 --- a/test/fixtures/v4/tt/did-raw.json +++ b/test/fixtures/v4/tt/did-raw.json @@ -1,5 +1,8 @@ { - "@context": ["https://www.w3.org/2018/credentials/v1", "http://localhost:8080/alpha-context.json"], + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" + ], "type": ["VerifiableCredential", "TradeTrustCredential"], "validFrom": "2021-03-08T12:00:00+08:00", "issuer": { diff --git a/test/fixtures/v4/tt/did-raw2.json b/test/fixtures/v4/tt/did-raw2.json index f2fb1681..bb97f3e3 100644 --- a/test/fixtures/v4/tt/did-raw2.json +++ b/test/fixtures/v4/tt/did-raw2.json @@ -1,5 +1,8 @@ { - "@context": ["https://www.w3.org/2018/credentials/v1", "http://localhost:8080/alpha-context.json"], + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" + ], "type": ["VerifiableCredential", "TradeTrustCredential"], "validFrom": "2021-03-08T12:00:00+08:00", "issuer": { diff --git a/test/fixtures/v4/tt/did-wrapped-obfuscated.json b/test/fixtures/v4/tt/did-wrapped-obfuscated.json index f9b6ec54..a891d6c3 100644 --- a/test/fixtures/v4/tt/did-wrapped-obfuscated.json +++ b/test/fixtures/v4/tt/did-wrapped-obfuscated.json @@ -1,5 +1,5 @@ { - "@context": ["https://www.w3.org/2018/credentials/v1", "http://localhost:8080/alpha-context.json"], + "@context": ["https://www.w3.org/2018/credentials/v1", "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json"], "type": ["VerifiableCredential", "TradeTrustCredential"], "validFrom": "2021-03-08T12:00:00+08:00", "issuer": { diff --git a/test/fixtures/v4/tt/did-wrapped-signed.json b/test/fixtures/v4/tt/did-wrapped-signed.json index 162eb647..2078ff12 100644 --- a/test/fixtures/v4/tt/did-wrapped-signed.json +++ b/test/fixtures/v4/tt/did-wrapped-signed.json @@ -1,14 +1,26 @@ { - "@context": ["https://www.w3.org/2018/credentials/v1", "http://localhost:8080/alpha-context.json"], - "type": ["VerifiableCredential", "TradeTrustCredential"], + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" + ], + "type": [ + "VerifiableCredential", + "TradeTrustCredential" + ], "validFrom": "2021-03-08T12:00:00+08:00", "issuer": { "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", "type": "TradeTrustIssuer", "name": "My Own Company Pte Ltd", - "identityProof": { "identityProofType": "DNS-DID", "identifier": "example.tradetrust.io" } + "identityProof": { + "identityProofType": "DNS-DID", + "identifier": "example.tradetrust.io" + } + }, + "credentialStatus": { + "type": "TradeTrustCredentialStatus", + "credentialStatusType": "NONE" }, - "credentialStatus": { "type": "TradeTrustCredentialStatus", "credentialStatusType": "NONE" }, "renderMethod": { "type": "TradeTrustRenderMethod", "renderMethodType": "EMBEDDED_RENDERER", @@ -40,9 +52,24 @@ "email": "def@company.com" }, "billableItems": [ - { "description": "Service Fee", "quantity": "1", "unitPrice": "200", "amount": "200" }, - { "description": "Labor: 5 hours at $75/hr", "quantity": "5", "unitPrice": "75", "amount": "375" }, - { "description": "New client discount", "quantity": "1", "unitPrice": "50", "amount": "50" } + { + "description": "Service Fee", + "quantity": "1", + "unitPrice": "200", + "amount": "200" + }, + { + "description": "Labor: 5 hours at $75/hr", + "quantity": "5", + "unitPrice": "75", + "amount": "375" + }, + { + "description": "New client discount", + "quantity": "1", + "unitPrice": "50", + "amount": "50" + } ], "subtotal": "625", "tax": "0", @@ -52,12 +79,14 @@ "proof": { "type": "TradeTrustMerkleProofSignature2018", "proofPurpose": "assertionMethod", - "targetHash": "ed9284455e904ef10e261a674cdcf7bf1cd14e443b98bcbebc570b553ac9a6e2", + "targetHash": "7f042395cc9a589a3957d54393675ff592af5aa9ed0fb768eec18c78f285cbdb", "proofs": [], - "merkleRoot": "ed9284455e904ef10e261a674cdcf7bf1cd14e443b98bcbebc570b553ac9a6e2", - "salts": "W3sidmFsdWUiOiJjOTYzODQ2ZGRiMjFmMDU3MzRhMjMyYjhiM2U2NWJhMTA0YTRiNjU0NDc5MjJhNTUzNzU1MjJhNGQyZDBjN2QxIiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6ImRmZTYzNWZkYjRhNTRjNGQ1NzhlOTMyOWU4ZTE5YzFhNTg1YWZmOWFlYzNjMTBhYTg1YzYyZGU5ZDU5YmQ0ZjAiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiZjViOGJlOGQ0NWE0MGE4Yzk1MzUxYTVlZGZmOTBjY2VhYWU0YjNhNzdmZDRlZDBiNWUxNDUyNjk2OTliNjEyYiIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6ImYyMDk4MTczY2RkNWE3Mzk1MmFkZWNhYmZlNjEwN2MzMDAyMjM4MDM1YmJkMmRlZjNmNmYzZWU0ODRiN2MyMWIiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiI3YzcyNWQyODdhNDhkNmViYzlhZjA5NWI0ZWRkNWQyMDZkNTQ2NTNhMmRhYmM3NmZlOTM2ZDZlZWI5ZDAxYWE0IiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiJiODRlNmQxYTYyYjA1OGI0OGYwMmQzM2VhNGMxMjQzYmU4Y2ZjZWVhMzRlNjQzYWU0NjA0NTlhMjM1YWE2N2U0IiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiI2ZDk5ZmQ2OTVlYTM0NzIxMGE5YzAyOTIyODJhOTJjNGQ2MWY0OTBkNjZkMjBkOWE3NTJlMDZmMDEwOGJmNzYyIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6IjMzOTYyYmQ3Y2JhMWM4MDk4NDM4ZGJjNWQwYTRmZmYwN2NlNzYyOGVjY2JmODM4ZTA1Y2YxNjg3YmRlNjg0MzciLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiYjM5MjA2MzY1MWNiMTMwYTcyZTYyM2M3YzVmZjRkNWZlNWUzNmVmNGZhNWVjMDA0MTNhM2NiOTU5OWI1NjQwOCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiJhZmZjYzg5MjNhZTYwOWIyOTg3MDY2YmU0MjYwY2RhNTk2NTc3MzY0ZjI0MDY4YTk1ZGE1YTlhYWM0NGFjOWQ5IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiZTUwNmY4ZmQ3NDNlZWI4Yzc2ZWFlZGNkODQxM2RmYzQwNDQ1ZDk4ZDZmZWNiNGNhMmUwMzRhMDY2Y2YzNzk5MCIsInBhdGgiOiJjcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiZmRkMzczMGVmZDM2MTZiMjYyZWQ1NmU2ZWIxOWE3ZmU0MjMyZDU4NjI5NGRiZDkwOTkzY2QwMGIzYWZiNWE0OSIsInBhdGgiOiJjcmVkZW50aWFsU3RhdHVzLmNyZWRlbnRpYWxTdGF0dXNUeXBlIn0seyJ2YWx1ZSI6ImE1ZThkN2E3YTIwY2ZlYWY0ZjhkZTAyNDQ4ZWY5YTVjYTRlZDc4ZDY4MDJmOWY3NGFmY2YzNTZiMjBmMGZkMDgiLCJwYXRoIjoicmVuZGVyTWV0aG9kLnR5cGUifSx7InZhbHVlIjoiNDU1YWMzYTE1MTBjMzM5NTE4NGVjNzJlOTI5NmNlNzk5M2UwNWYwODUxYzBiYzU1YTdhNzVhY2EzMDI3NDM0NiIsInBhdGgiOiJyZW5kZXJNZXRob2QucmVuZGVyTWV0aG9kVHlwZSJ9LHsidmFsdWUiOiJmMDMyOGI5ZTE4YzY4NzM1MjI5YTZhNDgzZGRmNmNkYjllYzhmMjA3YTQ0MWYzZTM1Y2I2MGViOWJiN2Y5NjI4IiwicGF0aCI6InJlbmRlck1ldGhvZC5uYW1lIn0seyJ2YWx1ZSI6ImRiYzk4MmRhMWJhMzhjMmVjYjUzY2Y0ZTliNmM5MzRkMGYyNGFhYjZjZDAyMmQ0ZTk0NTc0NTY4OGM1NmE1ODciLCJwYXRoIjoicmVuZGVyTWV0aG9kLnVybCJ9LHsidmFsdWUiOiI3ZjczNDQyMDIzNzJlYWZlMzc5ZWRkZTY1ZGQ5Nzk1MWJmYmQ3Yjg1NTBjNjkyYmNhNTM3NzkyYzZkYjY2MGIwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0Lm5hbWUifSx7InZhbHVlIjoiYmMxYmU0NzBjODJkYzFmYjgzMGNiZmViMWQ4MmViYzA4NzZjM2NkMzM3ODIyYzk4N2Q5ZWQxZmEwYzE5OGQ4YyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5pZCJ9LHsidmFsdWUiOiIyYmVlMzk0MGU2M2FkZjQ3MzgzNzE2ZjFmODI5NDM5MGM2OTk2OTUxZTM1Mzg5NjllNmI0NTgyNmJkYzBiYTNkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmRhdGUifSx7InZhbHVlIjoiODI1YmJlOWE4NWE3YjM3ZWQ0MmUyOTdjYjZhNmUxODZhYTdmMGZlOThiODg1OGQ2NDk4MjM2NGZhY2FlMWQ5MiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jdXN0b21lcklkIn0seyJ2YWx1ZSI6Ijk4ZGJjZGEyN2ZmMTIxOWRhY2VhMTkxNTZhZjFlZWY1YmNmYTg0MjY5NzEzM2MxOGZhMjc2ZTEwMDM2MDgyNzkiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGVybXMifSx7InZhbHVlIjoiNDRlZDBmY2QyOGEwNjg5ODAyZjQwNzBjMjVjMDIzMjBmZjA2NTIwYjE1NzEzYWQ0NWY0OTYxNWJkZDEyMTcwNCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5uYW1lIn0seyJ2YWx1ZSI6IjBkMGMzMDIzNjJmOTYxMzQ4MTA4MmI4NmE5ZmQxYThiZWY3MTIwMzg0MjUyZWIwOWJmYzdjYTMzYTAxYzZlN2EiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uc3RyZWV0QWRkcmVzcyJ9LHsidmFsdWUiOiIwZGFjYzk2OTQ0NzRhZmU2NTcyOGFkMWEyODA2NzM0Njc3MDgzMjI5YjY5MDVkMGZjOGNhNGZiZDMzYjdlNGYwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLmNpdHkifSx7InZhbHVlIjoiODYwNTVjMTEyOGI2ZWE5Y2Y4MzgzMTJiZWEzMGZjMDdjMTBjNWMzM2RmYmVlOTdiNTBjZDQ2MmRkOTBiNWRiYiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5wb3N0YWxDb2RlIn0seyJ2YWx1ZSI6IjM4NDc1ZTA5NzEyMDMzNmEzNjhjMGExNjRiOTUwN2U3ZWNlZmQ3MmExMjU4OGE5NDVjMDQyMTM5N2FkYTI5NmMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20ucGhvbmVOdW1iZXIifSx7InZhbHVlIjoiNThiNTdkNDM4ODFkYzBjYzk5ZTI3NTJhN2U4YWM3NTFjMmZhM2NjMjllODA4YmRlM2Y0NDA1ZmY5ZTZhZjRiNiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5uYW1lIn0seyJ2YWx1ZSI6ImQ1MDBkZjVkNDU4ZWRiYzBmMzRiNDY2OTkyNzEyYTZiNjJhNDRjZWEyYzg1ZmU2MjIyNDA1NDQyNTlhNGY3NGIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuc3RyZWV0QWRkcmVzcyJ9LHsidmFsdWUiOiI4OGNkZjM1MGRlOWYwYjUyYWNhNWI2MTI0YTQxNDdkZWFhZTMxNjU3ZDJjZDc3MzA4ODczYjU2YWEyOTYzNzUyIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LmNpdHkifSx7InZhbHVlIjoiNWFmNTkwYTAzOGMxMzAzOWJlNTQ2YzIyMzk4MjBmNzg2MWU0YjRhMDNjMjdmYmNlMTkwMzU3ZTk4MWNkYzA1YyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5wb3N0YWxDb2RlIn0seyJ2YWx1ZSI6IjA2MWY0ZTYxNjMzNDllNzExYTM0ZGUwZWQ2YjI1YTg3MmQ2NDRiZWUwYTUxOTZiMzY0MTg5ZmQ4ZDU4MTBhYmIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkucGhvbmVOdW1iZXIifSx7InZhbHVlIjoiMTNiYmI0ZWY1MTgwMzBjYTViMTZmZTg2NjQ5ZDcyZTcxYWZhYTVjODIwNjNkMWM2N2JjOGQ4NWFiY2RmZDBmZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8ubmFtZSJ9LHsidmFsdWUiOiJmMDU3NTNkNmY5NTBkNDIwNDhmYzMwYTlkZGVlMzlhNDFmZWVmMGRhYzQwOGE4OWJmZDU4ZTJlZWZhNDM0NTY3IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5lbWFpbCJ9LHsidmFsdWUiOiJlMTY3M2Y3ZTEyOTk4ZWZiNzc2ZmEzOWY4NDJkNWNkM2Y1YWY5YmQ0YzJmNzI4NjM3Mzc4MDE0NjgwNDAzYjU2IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiYzk1YTYxYmY1YjU0ZjJhY2U1MzJhMjJlMWUyYTA4Y2ZjMTk2YzExYjhhYjFjOThjZjQyNmNjNWY2OGNlYzM2YyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnF1YW50aXR5In0seyJ2YWx1ZSI6IjFiNjcyYjg5YjgxZjkwNWI3YTZiN2NhMzA5MTgxODZmZTdlNmVmZjEzOGQ3MjY0ZmMzY2NkOGM2Y2ExYjk1NWIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS51bml0UHJpY2UifSx7InZhbHVlIjoiYmM4MjdkNTJmMjkxMmM5MTNjNzk1NDBhNDIyMDg3NTE3YzIxNWQwNDczMzYyMTk1YjEwYjNmNGEzYWJhNDNkYyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLmFtb3VudCJ9LHsidmFsdWUiOiI5Y2Y3MzFjZThmMjQ1NWY4ZWI1ZTdiMmZiMDJjNzBjZWNmZTY3ZThmNWM1MjRkNDk3MzRmNjc0NWE3YWU0MDRiIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiMjdiZmY5NGQzMDc0OTUwZjFhODZkNTRiYzA4NmRhNmZmN2FjZjIyZGViOGVhYTVlOWVkNzUxZjhjN2FiYTAzOCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnF1YW50aXR5In0seyJ2YWx1ZSI6ImFiOGFhOGM5NDY1MGY3YmVmYmJhZDE2ODAyMDZkMGZkNDA3MjllNzVkMWNjY2FmZTA5NTMzMDgzOTk5MWZkZTIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS51bml0UHJpY2UifSx7InZhbHVlIjoiODkxNGE4OWU5MTAyMWVlNTZiNTk5OGZmNGU0MDVlYWU0OTc4ZmYwNDRjNTY3ZWM0ZTljNzBhODYyZDE0NzhlNiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLmFtb3VudCJ9LHsidmFsdWUiOiI3YWIxN2EyMTYxNzMyNmI0M2M2NzliZDc1MGYwNjg2Y2FhNmFhYmM1YzMzNGE2MzE2NjczODc0YmQ4NGQ3MzVkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiOWU0NmU1MmE3MzExMzI3MDEyNWQ3ZThkMDYwNDJlOTRlMDkyMTE1ZTA1OTIwODE4NGRkZDAwNTE5ODUxYTM3OSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnF1YW50aXR5In0seyJ2YWx1ZSI6IjAzNWM2OWRlMTc2ZTQ1NTdjOGEzNjQ0NmFlMjg2MjRkMjQwNWFhMzhlNjVlYjdmMzMwMDRiZDczY2JiOTM3NmEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS51bml0UHJpY2UifSx7InZhbHVlIjoiZDYwZDdjNDUzZDk2ZTZmZjE4NjRjNWY3ZDVhNDU5ODg3MGU3NTk0OTEyODZkZGYzZjQ5YTZjOTAxODBmNzg2YSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLmFtb3VudCJ9LHsidmFsdWUiOiJkMGI1YmUzYjYzNzUzYmQyZTQyYzZkNzc5NTcyNjAxZjY4NDVhMTNjYWRmYzhhM2JkYWE5ZmRiNDkwMmQzMGVlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnN1YnRvdGFsIn0seyJ2YWx1ZSI6IjcwOTJkNjg3YzVhMDM5ZjUxOWE4NDljNDJlMDEyMTY1MWI3ZDg1NTlmZDhiYzBlNGFjNzczNDBiZmM1NjQ4MDAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGF4In0seyJ2YWx1ZSI6ImE3ZjlmODQxNGM5NWJmY2RhYWIzNzg3YjJjNGE2NTQxOWE5ZDI4M2ZiN2U3YTVlZDQ1NDgyNDlhNDE2NzExMTkiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGF4VG90YWwifSx7InZhbHVlIjoiZjI0Yjg1MDkzYmEzYWU3MzVhMzlmYzkxMGY0MmUxN2UyNWMwNmNkYTUxZmU5YTZlNDQxMjI0OGY4NmE0MWVjMCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50b3RhbCJ9XQ==", - "privacy": { "obfuscated": [] }, + "merkleRoot": "7f042395cc9a589a3957d54393675ff592af5aa9ed0fb768eec18c78f285cbdb", + "salts": "W3sidmFsdWUiOiJiOWM1NGJmNmVhZjg2ODI0MjlmYWNhNTMyNDE5NjU4ZmIzNTFjZWViOGQyNzM5ZTFjODFhMzMxNjkyNWU2NGQ3IiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6IjRhN2E0YjMxZTk4MjgyOGNmNzYyMmZmZGUwMDg1MGM2NmJiZmRlY2JjNjNmMWM0YmMxYTVmYzhjZDlkODJjNzUiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiMTQxMzYxMWVkZDM1ZTc2ODE1ZTU1OGIzYzNkYzYwZTczN2NlMmI3ZTQ1MThmYzE2Y2M5ZTNlM2Y0ZTA0Y2RiMCIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6IjNhNDViNjA3YjAyNGI2MmIzZTBiMDEyYTY4ZjdmNDhhOTNjYjNiNzRiZjYwZmRhM2MzMmM5ZmY0MGJkYmYyMDMiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiI5NzJhNTg1NzFlOTc4OGJmMzNmOTIxN2IxNDJiNzQwNDg1OWQwNjIzMDBhZTJhODgxZGNhZWUwNTgyYTM1YjQ3IiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiJjMmJkM2M0ZTU0NjlkYTZiY2I2M2MwNmQyZGMzYjI0ZGRhYWZhY2NmNTljZDMwNDg0NDk1MWJlMmIyMGNmYTVkIiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiJjNTVkZjcxYzM5YzFmMWY1YzE5ZmE0ZjkwYzBmNGU0YzZiNTJhZWI1YWY2Mzg3Yjg5OTU5YjY0NjgyNmFlNGQ0IiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6IjljMGFmMzMwZGUwMjEzNTY4Nzk1YmY0Yzg4MGM2MjVhN2Q3YzA0ZTRmMmMwYjA1MTU2ODcxYWNmYTU0MTBmMzciLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiZGIxNGRjZTMzYmQ0ZGFjNzc1NTJiYTkwZDM3YjVmMWE3OWU4YWQ3NDFjMTgwNWQwNDZjZDRhODk5OTcyMGE3OSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiI1YjQyZDZkNzZkNWM4ODkxNjcwYTA5ZjRlYTk0NWRjMjc3OGQxNmZlODJlNDhlYWVmZThiODMyOWRiZDg5M2UwIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiYjc4ZDQwN2E0MDE5YjQzODIyZDg4NjhlYWY2NzZlNzc5NjdkNzBlODYwZmVkYzNiZTZhZWRmMzI2MDZjZDAxMiIsInBhdGgiOiJjcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiOGRkMzI2ZjQ0NGQ1YTQ3OGYxZTZhZjhkNjA3NTM1NWQwOWViYjNiZGY3MDkyMDE3NTM4M2JjZGVmMGRjYTA1MyIsInBhdGgiOiJjcmVkZW50aWFsU3RhdHVzLmNyZWRlbnRpYWxTdGF0dXNUeXBlIn0seyJ2YWx1ZSI6ImZlNDU0NjFkMjhmNmU5ZTRiMGMzNDI4ZDI1YjI0ODI5MmU3NGRlMDRhNjY0YjA5MjQ1OGE3YTc1ODEzOWZmZTgiLCJwYXRoIjoicmVuZGVyTWV0aG9kLnR5cGUifSx7InZhbHVlIjoiNjU1YjM5ODdiODVhNTg3MWM1YjJlNDllNDI5ZWYwNTFkODdiNDdkYzk5MjgwODk3MTkxMzk4ZjZlNGI1ZjczMCIsInBhdGgiOiJyZW5kZXJNZXRob2QucmVuZGVyTWV0aG9kVHlwZSJ9LHsidmFsdWUiOiJiMDEzZjY0M2QxOWE2NmRjY2IzN2ZkOTY2MjI2YmQ3YmRkNjU5OWE1YzE3OGZlNmQwODc5ODA5MzRiOWZiMzliIiwicGF0aCI6InJlbmRlck1ldGhvZC5uYW1lIn0seyJ2YWx1ZSI6IjBhMTZmN2ZkN2IzNTU2MjVlZTIyYzc4NGM2YWI3YTEyMWNhZTViZDlmODVhNzFlMGEyMjMzNGJjOWYzZTlkMjEiLCJwYXRoIjoicmVuZGVyTWV0aG9kLnVybCJ9LHsidmFsdWUiOiJiN2M5ZDc3YTFiNjFjNDljZmRlZGY5N2Q4YWRjNTdlMGNjOTE4MDlhZWJjZGIxYjk1N2E1MTA2NDI5NjFlMTRjIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0Lm5hbWUifSx7InZhbHVlIjoiMWVlNTgwMjllOTdiODFlMDhkYjNmMjBmYWE0M2JmOTUxZDE1NzRlYjU2MTIxNjhmMzJhNzUzNjQ1ZmM3MTcyYyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5pZCJ9LHsidmFsdWUiOiI1YjUwNWFlNTgwMTY4MDZmZWZjZmRkNDI0YjkxZDI2N2E4MjBhZDJiYmQzOTcwNmNjMzUzZTQzMjJkNWM3MmIwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmRhdGUifSx7InZhbHVlIjoiZjdmNmM0NDQzMGE2NzBhYmQ5OTRmNjM3NDYyMTA3ZGFlZTI4NWIzNmVjNzg3YmY3ZWI5ZTY1NTRhMDk2Y2RmOSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jdXN0b21lcklkIn0seyJ2YWx1ZSI6IjEzZDM5MGVmZGYwYjkwMzZmYmIwNWI4MmE3N2Q0NzFjYzZiOTkxN2RhNTJhODA4NDg0ZDEwMGQ1NTE2ZWM3ODUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGVybXMifSx7InZhbHVlIjoiZDhlNjRmNzlkMWRjNDAzNWZjNmViZmU3NDdmYTAyOTc4Mjg1NDFlNWQ2ZmMwZWYyZmM4NTVjM2ZlZDBjNWRlYyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5uYW1lIn0seyJ2YWx1ZSI6IjAxODc3YjQyMjMxZDNhMmI2OThhZTgxY2NlMTE0ZDEyYWZkNmUyMzg1NzUxOTg4N2QwNzRhMzJkYTc2NWU5ZTUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uc3RyZWV0QWRkcmVzcyJ9LHsidmFsdWUiOiJlNDZlODc5NTQzYmFiMjU1NmFkNTNjZDdjN2FkNjRhYjA2M2IxNjdlODRiMDE5YzUzZTQ0NzMxZmU1OWRlN2E0IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLmNpdHkifSx7InZhbHVlIjoiODc0YmNjODFhNzM0MDk5ZjdjZGJhNjhjZTlkYWNiOTM0ODYwNzQ2OTNmOTQ2NmQwOTdiZjgyMWQ0ZGQ5OGI4MiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5wb3N0YWxDb2RlIn0seyJ2YWx1ZSI6ImFlNWQ2M2U0ZjdmYmExNzljN2JmODE0NTY5ODEwMzk0OWVlNDdkM2Q0NGE0OWM4ODRiMjNkNmFiM2JiNjc2ZDYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20ucGhvbmVOdW1iZXIifSx7InZhbHVlIjoiYTNiY2IwYTJkZjUyODVkZmFkNzdiODM1YzFlYjNmYjZmMjczYTM1ODNjNzRmZDY2MzMyMmRjMDkwMGY5YmEyZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5uYW1lIn0seyJ2YWx1ZSI6ImQyNzE1YzEyZjg2ZjRmOWQ0ZmVhZTExMTFkNzA1NTNjMjk5ZDc3ZGQwMTFiNTQ3ZjlmMmZiNTE4ZjNhY2ZlNzMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuc3RyZWV0QWRkcmVzcyJ9LHsidmFsdWUiOiI3OTA0NDFkNDVmMzY1NmM5N2U2YmY3YzAwYTI2ZmMwNDg0ZWUxYzgyODdlNDlhZWIwMjNiMTdhMzkzZDk4M2E5IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LmNpdHkifSx7InZhbHVlIjoiYTQ4YjMwYTE0MjhjMzY1MjViMDVhNzRhMDJkYjBlMDI0ZTE4NWNkMDc1M2I3ZTFlZjlmOGQ4YWFkMDBiMDdkYSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5wb3N0YWxDb2RlIn0seyJ2YWx1ZSI6IjQ4ZDkxYTBlNWE2NTUyODFhMjhlMTExOTk1MmEzNmY0YWFlNzQxOWJiNDFhOTkxOWY5MGY0YzE3OGU2Yjc5ZjciLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkucGhvbmVOdW1iZXIifSx7InZhbHVlIjoiMGY4MDdhYjE0NTQyNjkxZGE0MGYwY2FiNWY2ZmI1MzkxN2Y0NjMyMWUyOWJhYTBkMzk0MDhlZGU2NmI4OWE4YiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8ubmFtZSJ9LHsidmFsdWUiOiJjNmEwZjI3YmNhMmJmZmQ4MWRhZjdmODQ5MjU3NjUyMmQ2ZmYwNTZhZDY3YWRkOTU0Yjc5MDVhYjg2OGIzYjNmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5lbWFpbCJ9LHsidmFsdWUiOiIwZDBkYjAxZDBkZTUxODcwYWZlYzFhYzU5Yjg3NzFjMmExNzY3YWQwMzhjYTIzMDFlMDMwOTY2OTljMjEwMTg5IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiZjM5M2YyNWY2NzA0OGMxN2E0ZmM2NzFmNjQzMzRiOGYwYzc5YzEzOTQzMGM4NWEzOGRjNjYzYTc5NTkwNjkwMiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnF1YW50aXR5In0seyJ2YWx1ZSI6IjI3Nzk4ODY1OGQ1Y2NkYWYxMGFjM2MxNjE5YjUxMWFlMjc0NTViYWM0MzE2YjYxM2JjOGUzZTY5YjVmZGFlYjIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS51bml0UHJpY2UifSx7InZhbHVlIjoiMDFhZmY0MDAxYTNlYjk1ODVhZDQ1YzNhMjlmN2QxNGVkMmFjMzBlN2FiZDY5MzViMTdlY2UzODQwYWEwM2E2ZSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLmFtb3VudCJ9LHsidmFsdWUiOiIyNjVmOTdmY2RkMzRkZjljMGYxMGMxYWY1ZjY0NjdlNDY3MDkxZjI2YWIyNjlmYTk4YWJlNWNlY2FiOGJmN2E3IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiYjBhZmE3YWM1MDIwZDEzNWQyN2EyZWEyMjUxYjhlZTIwYjI0YmY0M2ExMTFmNzMyZjAzYjQ4YmI5NmE2YmUzMiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnF1YW50aXR5In0seyJ2YWx1ZSI6IjY2ODFjYmQxZjQ1ZWY5ZDhmOGE3YTY0M2NmNTc0MTY0M2JmMDJjN2VmYjY4MTI4ZDZkNGU5ZWM1OGY3YjJmNGQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS51bml0UHJpY2UifSx7InZhbHVlIjoiY2I0ZThiOTgyNGVjNjRmOTU4MzQ4MzJkOTU1OGFmZThjNjIyNzM5ZDNkYjMwNzI1NGFmMDE0ODNmMzZhYjY3MCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLmFtb3VudCJ9LHsidmFsdWUiOiI0N2FjN2FkY2VkMzM3Y2ZkMWEzZTE2NDJlNDMxZWY5YzU4YTRjNmI0MzFiMGZiYTBlODQzYzg2M2I3MTlhYTQwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiMzA0MzA3M2MxZGJiMjQyNGYwNjcxNjZmZjFjN2IxMzkwODI5M2FhNmQyN2FjMDM0NDMxY2RhYjM0ZGJmMDcxNSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnF1YW50aXR5In0seyJ2YWx1ZSI6ImQ2ZDlhYWVkZmZiNzYxMjYzZjU1YzJiYjBmNWM1OGYyMjA0YTUwYzZmYWJlZjNjZjc1YzNiMzEwM2ZlZDNhZjUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS51bml0UHJpY2UifSx7InZhbHVlIjoiNjNkNGFkMGY3Y2NjMGM3MjNjMGRiMjg3OTZjNjU2N2FkMjlkZTRjZTBkYjQyYmEzY2NlYWQ1ZjhmZTdlNjA1NiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLmFtb3VudCJ9LHsidmFsdWUiOiIxMTdmZTFhZGJiZDgzMzdhNmE4MGE5NGNjODEwYjVjYThkMjVhN2Y3ODUwMGU0YTYyODhkNmU4NDZmZTJlY2E5IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnN1YnRvdGFsIn0seyJ2YWx1ZSI6ImZiMDE3MTUzNjgxNzU5N2U5YWMxMWVkNTljMjEwMGEzM2ZiYTdiNjE2ZDRkZmM5OTljNzc2NWU5OGQyMjU4YmQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGF4In0seyJ2YWx1ZSI6IjJkOTI3ZDQwNzEwYTM0ZGU4ZGNlODcwNzAzMmE4ZDQ4ODViNjcwNTA1MDkzZDI0NmMyZTI2MWRjYjQzMDgyZDQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGF4VG90YWwifSx7InZhbHVlIjoiODFjMjhhODMwMTJhMGE4YmYzMGNlYzg5ZWRiMjIwOTIxYjQ4ZGE4NTIyYmI2YjAxNDFlMDI1NTE4OWQzOTM3NCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50b3RhbCJ9XQ==", + "privacy": { + "obfuscated": [] + }, "key": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C#controller", - "signature": "0x9a3a1b83eb71f9c2cbcf3a2c326cc0c34519d5e9305aef7a410c03a3e09a155076501df6c06a3c4124de22e861eb9a74ca9bdb4ebb18c268ad6bfde58d78e6e01b" + "signature": "0xcc742d34d671685108c00af431eba635c5631ddc6fc9a23c1d0c58e5375dbaac2e4ee90951eeb4a9d8757a647bcc5549717e0bd2a310f82fca23ab8a9a11c8851b" } -} +} \ No newline at end of file diff --git a/test/fixtures/v4/tt/did-wrapped-signed2.json b/test/fixtures/v4/tt/did-wrapped-signed2.json new file mode 100644 index 00000000..065d37d4 --- /dev/null +++ b/test/fixtures/v4/tt/did-wrapped-signed2.json @@ -0,0 +1,92 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" + ], + "type": [ + "VerifiableCredential", + "TradeTrustCredential" + ], + "validFrom": "2021-03-08T12:00:00+08:00", + "issuer": { + "id": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89", + "type": "TradeTrustIssuer", + "name": "My Own Company Pte Ltd", + "identityProof": { + "identityProofType": "DNS-DID", + "identifier": "example.tradetrust.io" + } + }, + "credentialStatus": { + "type": "TradeTrustCredentialStatus", + "credentialStatusType": "NONE" + }, + "renderMethod": { + "type": "TradeTrustRenderMethod", + "renderMethodType": "EMBEDDED_RENDERER", + "name": "INVOICE", + "url": "https://generic-templates.tradetrust.io" + }, + "credentialSubject": { + "name": "TradeTrust Invoice", + "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "date": "2018-02-21", + "customerId": "564", + "terms": "Due Upon Receipt", + "billFrom": { + "name": "ABC Company", + "streetAddress": "Level 1, Industry Offices", + "city": "Singapore", + "postalCode": "123456", + "phoneNumber": "60305029" + }, + "billTo": { + "company": { + "name": "DEF Company", + "streetAddress": "Level 2, Industry Offices", + "city": "Singapore", + "postalCode": "612345", + "phoneNumber": "61204028" + }, + "name": "James Lee", + "email": "def@company.com" + }, + "billableItems": [ + { + "description": "Service Fee", + "quantity": "1", + "unitPrice": "200", + "amount": "200" + }, + { + "description": "Labor: 5 hours at $75/hr", + "quantity": "5", + "unitPrice": "75", + "amount": "375" + }, + { + "description": "New client discount", + "quantity": "1", + "unitPrice": "50", + "amount": "50" + } + ], + "subtotal": "625", + "tax": "0", + "taxTotal": "0", + "total": "625" + }, + "proof": { + "type": "TradeTrustMerkleProofSignature2018", + "proofPurpose": "assertionMethod", + "targetHash": "658922b226f74eee3bad881048ad4ae56f305e9b43e9eedd71da51b2aa338d39", + "proofs": [], + "merkleRoot": "658922b226f74eee3bad881048ad4ae56f305e9b43e9eedd71da51b2aa338d39", + "salts": "W3sidmFsdWUiOiI4OTYzYmQ3OWNhNzhlNzQxNGI3YTczYjVkMjJiNzE2MzY3MGE2ODk1NWMxYmI0NjY5MzJmYzFkOWVlYTE5OGVhIiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6IjVmY2E2NWM3MDljNWE2Njk5Nzk4OGNhYWU2ODVhMGNkMzk2NWRhYWIzMzVmYzY4NmFmYjliNzA5YmM4MjNjMzMiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiZmQwYTY2NDVhNzBlNmNjMWQxYmY0NWE0NGNlZDBkODljYjk0OTQ2YWQyMWI3NTBiNjU3MDg0MTQ5YWZmZjVkYyIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6ImZiM2EzNDg3MWVlYTVlYzU2MjBmMTNjZTEwZjZmOTI0YTJiMjI1YTliZWY4YTQ3MTgzZTJjODBlOGE0ODZlMWMiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiJkYjgzNTcwODZhY2NhYjlmOTI5NjAwNGY2NGE2ZDlkNGQ5ZDU3MTcwMDhhM2Y5MDMzY2Q5MzBjZGFmYWM2OGVlIiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiJhMDA0Y2Y2ZTQxNjIyNGQxNTNkOGY1Mzg4ZDhkYzUxMmJhODRhZDA1NjE0NDE4Mzc4ZjdiY2RjOGM1NWRmZWUzIiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiJlYjNhMjk5MWNlMzcwNjY4OTA1MmQ4NTYwZWFmMjcxMmJmNDU0N2UwNDViNWZjNGQ4ODY2YjhkYTY3ZGVhOTgzIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6Ijc1N2NhMzYzODAzMjg0YTBmMjEwZGM3NDgzOGI1ZmZjMWJjZGVmOTc5MDU0MzdjMzcxNzY4ODFjYTM2YzFmMTkiLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiN2QyNDkwNDk4M2ZhMGEwZDViM2FiMWI2YmU3ZjY5OTQ4NGNlYzdiZGQzZmQwMGFiZjU1OGIxMmNkMDJhMWUwYyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiIzNThmNDVjODJmMDcxZGM1MmE1NmJhZTFhZWIyNmM1Y2ZjYjdhYmNmYTdlMGU3NmJlMDFkZmRhN2UyYzU5ZWYyIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiN2I2MTQzNGI2MWJiNDM2NzIwMTlkOTU5OWI0YTJmMjgxZGM5ZTAzNzYzNmUyZjk0MzVlMTUyMDY1ZWVkYmJlNyIsInBhdGgiOiJjcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiNzA4OGM1MDdmZTM3MmExNDc5MTI2M2QwYjk1MTRjMDBmNGE2Nzk4MDlmMWIyZTA3Mzg1NTBlN2Y1ZGRiZGIwOSIsInBhdGgiOiJjcmVkZW50aWFsU3RhdHVzLmNyZWRlbnRpYWxTdGF0dXNUeXBlIn0seyJ2YWx1ZSI6Ijk0MjZkMzlkY2I2YjIyOWY0YjdkMDliYzNiNWQ4NTQyMzJmNDE0MDNjZDE5OGZlZmMwMGNmYjE4MDU1NTM4YWEiLCJwYXRoIjoicmVuZGVyTWV0aG9kLnR5cGUifSx7InZhbHVlIjoiZmIzNDM4MjBiZjVlNmZmZDY1YWNkY2Y0ZjA0ZDJiNTg3YmRiODFkZDAwMTExODA3MTU0OWE1NGNmZmM0N2U4ZSIsInBhdGgiOiJyZW5kZXJNZXRob2QucmVuZGVyTWV0aG9kVHlwZSJ9LHsidmFsdWUiOiI2MDA4MDYxNGMxOTU4MDdhYmQxMDZjM2U1MjUwMmI2YTJiNzIyNmM1YjA2MmVhZWMwMDEyYWI5MGI3YzE3MGE5IiwicGF0aCI6InJlbmRlck1ldGhvZC5uYW1lIn0seyJ2YWx1ZSI6ImQ2ZGJiZWI1YzBiODY0NjU3MjljNjRlMzVkZTFiZjY0ODVkZTBhZDcwMGMxYjBiMWI1YzcyYzZlZGUyYmY1NDgiLCJwYXRoIjoicmVuZGVyTWV0aG9kLnVybCJ9LHsidmFsdWUiOiI3YWE2NGU0ZmY3NDk0MDg5ZGZiYTEwODM1ZjUyMTZiNTJmNDk0YzkwNWZlNTgxODQ3NTgxMjg2YWRiMTc1MzQ1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0Lm5hbWUifSx7InZhbHVlIjoiMDMwZjlkYmEwOTFhZjVmZTMyZGNiN2QwYTFkODVlYmM1ODRhZjA5NWVhODU5YjFmN2YzMDJiZGYzZmVlMGQ4ZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5pZCJ9LHsidmFsdWUiOiJjMmMzZGFlZDJkMzc2MWY1Y2NlNDUwMzliNzliZjJkMzNkZDNlZTI1ZTZmMzVlZjU5YWE4Y2IwYjM3MjEyOTgwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmRhdGUifSx7InZhbHVlIjoiZjdhZDIxOGY3NmQxNzlkZmExNDk3OGNmOTkyY2MzNGQ3YzM2ZDhmOTIxYmI0Y2JmNjE4YTJhMTFiZjQwZTU3YiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jdXN0b21lcklkIn0seyJ2YWx1ZSI6ImI5NjM4MjBiOGJlNjVlYTUyZTU4NGNkNjg2MjlhNzk0MDNjNGUwYTRkNTg2ZjIwYjNkYjQyZjRkMWVjZGI5NWUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGVybXMifSx7InZhbHVlIjoiNDViYjA2NzNjNTU3NGJhNTMxMjg0OWVlZTk0OGU1NjE2NmEwNTQ1ZDA3ZWE3YjhlYjgwNTQyMzE2ZGZkZTZkOSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5uYW1lIn0seyJ2YWx1ZSI6ImNiYTI1OWQ1NTczMjQyODMzOGUwY2FlMTgzN2RlZDk4NjFlNjQ1YTZiYWFhMTNmNGM0ZDYxMGQzNzRmN2U2NjYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uc3RyZWV0QWRkcmVzcyJ9LHsidmFsdWUiOiJiNjQ5YTBhMTFkM2EyYTE1ZDFkZjJjNTNmNWI1NDNhYzIxNTE5NjZkMDFhMzFmNmNiMWYzZjdiMmQyNTM4MzQ3IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLmNpdHkifSx7InZhbHVlIjoiNzE3MzNkMmZjNzY2OWVhNWEyZGE3OTNjYmQwMjk5NWUxOTNlNDk5ZmJhOTA3YjI5Mjg3ZjNlYzU4M2EwYTBhMSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5wb3N0YWxDb2RlIn0seyJ2YWx1ZSI6IjdiMTcwNDI3NzY1MDQ4MGUxNzJiMWI5YzIxYjA5MWYyYmZlMWJjMzcyMGY0MTA4ZDhkZTk4NDExYzIyOWIwYWEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20ucGhvbmVOdW1iZXIifSx7InZhbHVlIjoiNjVlZTFjYTU1YzI2Yjc0NmRhNmVlN2NlMGY1ZTllOTJjNTI3OTRkYThkMTkxZTMzY2ZlZDhmNGI1ZmExY2RkNCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5uYW1lIn0seyJ2YWx1ZSI6IjMxNDIwNWU1NGZkNmM2NTBhNmE5MWJiNTZiNDYyNTc0M2JhODE3MGQyMjc3ODVlZmRmMWQ3OTg3N2JmOTEwZDkiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuc3RyZWV0QWRkcmVzcyJ9LHsidmFsdWUiOiIzMWZhYzY1MmMzNDMyYTZjNzk1Zjk3NjIyZjU2ZWQ3ZjM4NTMxMzJiNTFjMDZhNmQ2YzcwMjNlYmQzNDRkMmI2IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LmNpdHkifSx7InZhbHVlIjoiNmJjNGM4NDU4MDQ5MDg0YWJhMGY0ZDdhZjkxYTY0Y2VkNWM3YzJjY2YyYzZlMDBjOGQ0YzI2MmRlOGMxZTViYiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5wb3N0YWxDb2RlIn0seyJ2YWx1ZSI6IjNlZWQ0OTM1MzJkNGE5MjJlZjhkZGMyOTdmNzdiMTczZmYwMjg0MTRkZDNlNTNkY2I2NDVkNzcxOWZlN2I2NjciLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkucGhvbmVOdW1iZXIifSx7InZhbHVlIjoiM2IyYmM4ZTk5NWQ3NDY4ODRiZjcxZjNhOWU1MTgwNWIyMzgwNjNkYjJmYjQzMGNjNWE0ODVhMWU3MGU4NDgzMCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8ubmFtZSJ9LHsidmFsdWUiOiJmMjk0ZGNhZTc2NjQwNTQ5ZDhlZTI1YjY4ZTViY2M4NThlMzI0NDkyODQ3NTU5YzNkY2YwY2Q1MGEwMzEwZWY0IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5lbWFpbCJ9LHsidmFsdWUiOiIyN2IxZGYxZDI4OTZiZTIyODg5Y2ZjZjc2MDNhNzhjYWE4MjNjMDBhYjU0YmNlYjkyYzJlN2EwZjQyNDZhMjg3IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiZTIyYTZhNzY0ZjczMTA3MDAzMGY3YzIwNGExNTAwNTQyYmExOTE3OWU2ZDBhNjQ1MmU4YTlmODgwYWU5M2YyMyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnF1YW50aXR5In0seyJ2YWx1ZSI6IjQ4ODhlODY1OGFmZGQ1N2E3MGI3NTkzYzg2MjBiOTlhYzc4NTc5OGJlOWQ4N2QzNWU2OGYwMzY0NmJlYTU0NWYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS51bml0UHJpY2UifSx7InZhbHVlIjoiOGU4ZDFmN2Y5ZjI5MGI1OThlZmQ0YjMzNDc3NDJmMTlmODg1ZDc0OTdjODZiNzZmMDNlMDRiM2FmZTAwNmIzMiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLmFtb3VudCJ9LHsidmFsdWUiOiI1ODk1NzJkOGMwNjhlZWQ5MjAwOWFkMzQyMzMyNTRlNGJhMjAwZDgyZDFjZWJlMGE4YTM4MWUxM2FkODUzY2IwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiZDY0MDg4MGQ4ZDFkZDQxYjEyOGYyYzhjZjBhYTJlMThmNDgyNjlhOGYyZGMwOTY1MjdkN2QwMjMwNDM4NDNmNSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnF1YW50aXR5In0seyJ2YWx1ZSI6IjBlYjA4OWE2M2VjYjdjYzg5MmY3MmEzNGQwZjAwN2JiOWY5NWIzYzZmMjNjMzE1MDVmYjIyNDAwYjI2Mjk1MjEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS51bml0UHJpY2UifSx7InZhbHVlIjoiMzU4NjM0NWI3ZGJhMzFlMzRhM2M3YjNiODBkMzRmZTUwOWI1NDdiNGNhODE2YzljZjZmOWVkZDMwYTE1ZmM3YyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLmFtb3VudCJ9LHsidmFsdWUiOiJmNjNmNWE3NjU5MjdhNTk1YWY2NzFhY2EyOWQ0MTM4NDhjNTBhZTAxYmRmNTM3NDQ1M2UyYzRhZmJmM2MxMTQxIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiNDBjNTNiZDYxMDMwMWVmZDEwYWZiMmFlMjRjNTNmNjUxMjFlZjZiM2Y4MWIzNWRmMjRhOTFhNmFmMDgyNzM5MiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnF1YW50aXR5In0seyJ2YWx1ZSI6IjMxNzllMDljNGU0ODQ3ZTY2MmM1MTk0Njg1MzcwNWJjNDJkZTZmYjExYjExYzZhNTlmNWUwNzAwNDgwM2ZhMmIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS51bml0UHJpY2UifSx7InZhbHVlIjoiNDg0MWVhNDc2NDhhMWJiYWRiMjgwYjVhMGIwMzRjMzM2NTgzNzhjZmZkMzhlZWQ0N2U5YWVkNDg3MTlhYzEzYSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLmFtb3VudCJ9LHsidmFsdWUiOiI1ZjFlYTU3NmFlMTlhNmFiNjk4YzVkYWJjMTdjYzNkM2JlM2I1ZDZmZWM5MTRhYTk4ZmQ2MDdmMzA4ODkwN2VmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnN1YnRvdGFsIn0seyJ2YWx1ZSI6IjU5YzQ0YzAzMTk1ZDhiZmYxYmNmNjkyNTAyZDU5MDI2ODVlZjg5OTllYmIxMWNhNDFmOTBmOGZlYzMwMTc2NjkiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGF4In0seyJ2YWx1ZSI6ImUwZTgwMjhlODNmMWM3OTZkMzQ1MWQxZjk1YWM5YjI4NTc1MjIxMjU2NWY4YTFjNjA3MWRiMjNmNGZiZDQ4ZTgiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGF4VG90YWwifSx7InZhbHVlIjoiZTU2NjRjN2UxMzI4Yjg0YTNlYmZmNTQzZWRlMTBjNzBlMTczMGJiNGM4OGU0MWY2NGVlMzhjYmY3NGRmNDdiOCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50b3RhbCJ9XQ==", + "privacy": { + "obfuscated": [] + }, + "key": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller", + "signature": "0x98f3d0f71671efc478eb3b3df7d301a520bcdcd8c08f9066ec8b8a4616ea397528d84f764462209f85659715501d7e2ddd63443653c77d6f66cc21331781b90e1b" + } +} \ No newline at end of file diff --git a/test/fixtures/v4/tt/did-wrapped.json b/test/fixtures/v4/tt/did-wrapped.json index 56551065..e4fa0ef0 100644 --- a/test/fixtures/v4/tt/did-wrapped.json +++ b/test/fixtures/v4/tt/did-wrapped.json @@ -1,14 +1,26 @@ { - "@context": ["https://www.w3.org/2018/credentials/v1", "http://localhost:8080/alpha-context.json"], - "type": ["VerifiableCredential", "TradeTrustCredential"], + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" + ], + "type": [ + "VerifiableCredential", + "TradeTrustCredential" + ], "validFrom": "2021-03-08T12:00:00+08:00", "issuer": { "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", "type": "TradeTrustIssuer", "name": "My Own Company Pte Ltd", - "identityProof": { "identityProofType": "DNS-DID", "identifier": "example.tradetrust.io" } + "identityProof": { + "identityProofType": "DNS-DID", + "identifier": "example.tradetrust.io" + } + }, + "credentialStatus": { + "type": "TradeTrustCredentialStatus", + "credentialStatusType": "NONE" }, - "credentialStatus": { "type": "TradeTrustCredentialStatus", "credentialStatusType": "NONE" }, "renderMethod": { "type": "TradeTrustRenderMethod", "renderMethodType": "EMBEDDED_RENDERER", @@ -40,9 +52,24 @@ "email": "def@company.com" }, "billableItems": [ - { "description": "Service Fee", "quantity": "1", "unitPrice": "200", "amount": "200" }, - { "description": "Labor: 5 hours at $75/hr", "quantity": "5", "unitPrice": "75", "amount": "375" }, - { "description": "New client discount", "quantity": "1", "unitPrice": "50", "amount": "50" } + { + "description": "Service Fee", + "quantity": "1", + "unitPrice": "200", + "amount": "200" + }, + { + "description": "Labor: 5 hours at $75/hr", + "quantity": "5", + "unitPrice": "75", + "amount": "375" + }, + { + "description": "New client discount", + "quantity": "1", + "unitPrice": "50", + "amount": "50" + } ], "subtotal": "625", "tax": "0", @@ -52,10 +79,12 @@ "proof": { "type": "TradeTrustMerkleProofSignature2018", "proofPurpose": "assertionMethod", - "targetHash": "ed9284455e904ef10e261a674cdcf7bf1cd14e443b98bcbebc570b553ac9a6e2", + "targetHash": "7f042395cc9a589a3957d54393675ff592af5aa9ed0fb768eec18c78f285cbdb", "proofs": [], - "merkleRoot": "ed9284455e904ef10e261a674cdcf7bf1cd14e443b98bcbebc570b553ac9a6e2", - "salts": "W3sidmFsdWUiOiJjOTYzODQ2ZGRiMjFmMDU3MzRhMjMyYjhiM2U2NWJhMTA0YTRiNjU0NDc5MjJhNTUzNzU1MjJhNGQyZDBjN2QxIiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6ImRmZTYzNWZkYjRhNTRjNGQ1NzhlOTMyOWU4ZTE5YzFhNTg1YWZmOWFlYzNjMTBhYTg1YzYyZGU5ZDU5YmQ0ZjAiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiZjViOGJlOGQ0NWE0MGE4Yzk1MzUxYTVlZGZmOTBjY2VhYWU0YjNhNzdmZDRlZDBiNWUxNDUyNjk2OTliNjEyYiIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6ImYyMDk4MTczY2RkNWE3Mzk1MmFkZWNhYmZlNjEwN2MzMDAyMjM4MDM1YmJkMmRlZjNmNmYzZWU0ODRiN2MyMWIiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiI3YzcyNWQyODdhNDhkNmViYzlhZjA5NWI0ZWRkNWQyMDZkNTQ2NTNhMmRhYmM3NmZlOTM2ZDZlZWI5ZDAxYWE0IiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiJiODRlNmQxYTYyYjA1OGI0OGYwMmQzM2VhNGMxMjQzYmU4Y2ZjZWVhMzRlNjQzYWU0NjA0NTlhMjM1YWE2N2U0IiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiI2ZDk5ZmQ2OTVlYTM0NzIxMGE5YzAyOTIyODJhOTJjNGQ2MWY0OTBkNjZkMjBkOWE3NTJlMDZmMDEwOGJmNzYyIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6IjMzOTYyYmQ3Y2JhMWM4MDk4NDM4ZGJjNWQwYTRmZmYwN2NlNzYyOGVjY2JmODM4ZTA1Y2YxNjg3YmRlNjg0MzciLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiYjM5MjA2MzY1MWNiMTMwYTcyZTYyM2M3YzVmZjRkNWZlNWUzNmVmNGZhNWVjMDA0MTNhM2NiOTU5OWI1NjQwOCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiJhZmZjYzg5MjNhZTYwOWIyOTg3MDY2YmU0MjYwY2RhNTk2NTc3MzY0ZjI0MDY4YTk1ZGE1YTlhYWM0NGFjOWQ5IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiZTUwNmY4ZmQ3NDNlZWI4Yzc2ZWFlZGNkODQxM2RmYzQwNDQ1ZDk4ZDZmZWNiNGNhMmUwMzRhMDY2Y2YzNzk5MCIsInBhdGgiOiJjcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiZmRkMzczMGVmZDM2MTZiMjYyZWQ1NmU2ZWIxOWE3ZmU0MjMyZDU4NjI5NGRiZDkwOTkzY2QwMGIzYWZiNWE0OSIsInBhdGgiOiJjcmVkZW50aWFsU3RhdHVzLmNyZWRlbnRpYWxTdGF0dXNUeXBlIn0seyJ2YWx1ZSI6ImE1ZThkN2E3YTIwY2ZlYWY0ZjhkZTAyNDQ4ZWY5YTVjYTRlZDc4ZDY4MDJmOWY3NGFmY2YzNTZiMjBmMGZkMDgiLCJwYXRoIjoicmVuZGVyTWV0aG9kLnR5cGUifSx7InZhbHVlIjoiNDU1YWMzYTE1MTBjMzM5NTE4NGVjNzJlOTI5NmNlNzk5M2UwNWYwODUxYzBiYzU1YTdhNzVhY2EzMDI3NDM0NiIsInBhdGgiOiJyZW5kZXJNZXRob2QucmVuZGVyTWV0aG9kVHlwZSJ9LHsidmFsdWUiOiJmMDMyOGI5ZTE4YzY4NzM1MjI5YTZhNDgzZGRmNmNkYjllYzhmMjA3YTQ0MWYzZTM1Y2I2MGViOWJiN2Y5NjI4IiwicGF0aCI6InJlbmRlck1ldGhvZC5uYW1lIn0seyJ2YWx1ZSI6ImRiYzk4MmRhMWJhMzhjMmVjYjUzY2Y0ZTliNmM5MzRkMGYyNGFhYjZjZDAyMmQ0ZTk0NTc0NTY4OGM1NmE1ODciLCJwYXRoIjoicmVuZGVyTWV0aG9kLnVybCJ9LHsidmFsdWUiOiI3ZjczNDQyMDIzNzJlYWZlMzc5ZWRkZTY1ZGQ5Nzk1MWJmYmQ3Yjg1NTBjNjkyYmNhNTM3NzkyYzZkYjY2MGIwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0Lm5hbWUifSx7InZhbHVlIjoiYmMxYmU0NzBjODJkYzFmYjgzMGNiZmViMWQ4MmViYzA4NzZjM2NkMzM3ODIyYzk4N2Q5ZWQxZmEwYzE5OGQ4YyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5pZCJ9LHsidmFsdWUiOiIyYmVlMzk0MGU2M2FkZjQ3MzgzNzE2ZjFmODI5NDM5MGM2OTk2OTUxZTM1Mzg5NjllNmI0NTgyNmJkYzBiYTNkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmRhdGUifSx7InZhbHVlIjoiODI1YmJlOWE4NWE3YjM3ZWQ0MmUyOTdjYjZhNmUxODZhYTdmMGZlOThiODg1OGQ2NDk4MjM2NGZhY2FlMWQ5MiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jdXN0b21lcklkIn0seyJ2YWx1ZSI6Ijk4ZGJjZGEyN2ZmMTIxOWRhY2VhMTkxNTZhZjFlZWY1YmNmYTg0MjY5NzEzM2MxOGZhMjc2ZTEwMDM2MDgyNzkiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGVybXMifSx7InZhbHVlIjoiNDRlZDBmY2QyOGEwNjg5ODAyZjQwNzBjMjVjMDIzMjBmZjA2NTIwYjE1NzEzYWQ0NWY0OTYxNWJkZDEyMTcwNCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5uYW1lIn0seyJ2YWx1ZSI6IjBkMGMzMDIzNjJmOTYxMzQ4MTA4MmI4NmE5ZmQxYThiZWY3MTIwMzg0MjUyZWIwOWJmYzdjYTMzYTAxYzZlN2EiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uc3RyZWV0QWRkcmVzcyJ9LHsidmFsdWUiOiIwZGFjYzk2OTQ0NzRhZmU2NTcyOGFkMWEyODA2NzM0Njc3MDgzMjI5YjY5MDVkMGZjOGNhNGZiZDMzYjdlNGYwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLmNpdHkifSx7InZhbHVlIjoiODYwNTVjMTEyOGI2ZWE5Y2Y4MzgzMTJiZWEzMGZjMDdjMTBjNWMzM2RmYmVlOTdiNTBjZDQ2MmRkOTBiNWRiYiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5wb3N0YWxDb2RlIn0seyJ2YWx1ZSI6IjM4NDc1ZTA5NzEyMDMzNmEzNjhjMGExNjRiOTUwN2U3ZWNlZmQ3MmExMjU4OGE5NDVjMDQyMTM5N2FkYTI5NmMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20ucGhvbmVOdW1iZXIifSx7InZhbHVlIjoiNThiNTdkNDM4ODFkYzBjYzk5ZTI3NTJhN2U4YWM3NTFjMmZhM2NjMjllODA4YmRlM2Y0NDA1ZmY5ZTZhZjRiNiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5uYW1lIn0seyJ2YWx1ZSI6ImQ1MDBkZjVkNDU4ZWRiYzBmMzRiNDY2OTkyNzEyYTZiNjJhNDRjZWEyYzg1ZmU2MjIyNDA1NDQyNTlhNGY3NGIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuc3RyZWV0QWRkcmVzcyJ9LHsidmFsdWUiOiI4OGNkZjM1MGRlOWYwYjUyYWNhNWI2MTI0YTQxNDdkZWFhZTMxNjU3ZDJjZDc3MzA4ODczYjU2YWEyOTYzNzUyIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LmNpdHkifSx7InZhbHVlIjoiNWFmNTkwYTAzOGMxMzAzOWJlNTQ2YzIyMzk4MjBmNzg2MWU0YjRhMDNjMjdmYmNlMTkwMzU3ZTk4MWNkYzA1YyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5wb3N0YWxDb2RlIn0seyJ2YWx1ZSI6IjA2MWY0ZTYxNjMzNDllNzExYTM0ZGUwZWQ2YjI1YTg3MmQ2NDRiZWUwYTUxOTZiMzY0MTg5ZmQ4ZDU4MTBhYmIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkucGhvbmVOdW1iZXIifSx7InZhbHVlIjoiMTNiYmI0ZWY1MTgwMzBjYTViMTZmZTg2NjQ5ZDcyZTcxYWZhYTVjODIwNjNkMWM2N2JjOGQ4NWFiY2RmZDBmZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8ubmFtZSJ9LHsidmFsdWUiOiJmMDU3NTNkNmY5NTBkNDIwNDhmYzMwYTlkZGVlMzlhNDFmZWVmMGRhYzQwOGE4OWJmZDU4ZTJlZWZhNDM0NTY3IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5lbWFpbCJ9LHsidmFsdWUiOiJlMTY3M2Y3ZTEyOTk4ZWZiNzc2ZmEzOWY4NDJkNWNkM2Y1YWY5YmQ0YzJmNzI4NjM3Mzc4MDE0NjgwNDAzYjU2IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiYzk1YTYxYmY1YjU0ZjJhY2U1MzJhMjJlMWUyYTA4Y2ZjMTk2YzExYjhhYjFjOThjZjQyNmNjNWY2OGNlYzM2YyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnF1YW50aXR5In0seyJ2YWx1ZSI6IjFiNjcyYjg5YjgxZjkwNWI3YTZiN2NhMzA5MTgxODZmZTdlNmVmZjEzOGQ3MjY0ZmMzY2NkOGM2Y2ExYjk1NWIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS51bml0UHJpY2UifSx7InZhbHVlIjoiYmM4MjdkNTJmMjkxMmM5MTNjNzk1NDBhNDIyMDg3NTE3YzIxNWQwNDczMzYyMTk1YjEwYjNmNGEzYWJhNDNkYyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLmFtb3VudCJ9LHsidmFsdWUiOiI5Y2Y3MzFjZThmMjQ1NWY4ZWI1ZTdiMmZiMDJjNzBjZWNmZTY3ZThmNWM1MjRkNDk3MzRmNjc0NWE3YWU0MDRiIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiMjdiZmY5NGQzMDc0OTUwZjFhODZkNTRiYzA4NmRhNmZmN2FjZjIyZGViOGVhYTVlOWVkNzUxZjhjN2FiYTAzOCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnF1YW50aXR5In0seyJ2YWx1ZSI6ImFiOGFhOGM5NDY1MGY3YmVmYmJhZDE2ODAyMDZkMGZkNDA3MjllNzVkMWNjY2FmZTA5NTMzMDgzOTk5MWZkZTIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS51bml0UHJpY2UifSx7InZhbHVlIjoiODkxNGE4OWU5MTAyMWVlNTZiNTk5OGZmNGU0MDVlYWU0OTc4ZmYwNDRjNTY3ZWM0ZTljNzBhODYyZDE0NzhlNiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLmFtb3VudCJ9LHsidmFsdWUiOiI3YWIxN2EyMTYxNzMyNmI0M2M2NzliZDc1MGYwNjg2Y2FhNmFhYmM1YzMzNGE2MzE2NjczODc0YmQ4NGQ3MzVkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiOWU0NmU1MmE3MzExMzI3MDEyNWQ3ZThkMDYwNDJlOTRlMDkyMTE1ZTA1OTIwODE4NGRkZDAwNTE5ODUxYTM3OSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnF1YW50aXR5In0seyJ2YWx1ZSI6IjAzNWM2OWRlMTc2ZTQ1NTdjOGEzNjQ0NmFlMjg2MjRkMjQwNWFhMzhlNjVlYjdmMzMwMDRiZDczY2JiOTM3NmEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS51bml0UHJpY2UifSx7InZhbHVlIjoiZDYwZDdjNDUzZDk2ZTZmZjE4NjRjNWY3ZDVhNDU5ODg3MGU3NTk0OTEyODZkZGYzZjQ5YTZjOTAxODBmNzg2YSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLmFtb3VudCJ9LHsidmFsdWUiOiJkMGI1YmUzYjYzNzUzYmQyZTQyYzZkNzc5NTcyNjAxZjY4NDVhMTNjYWRmYzhhM2JkYWE5ZmRiNDkwMmQzMGVlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnN1YnRvdGFsIn0seyJ2YWx1ZSI6IjcwOTJkNjg3YzVhMDM5ZjUxOWE4NDljNDJlMDEyMTY1MWI3ZDg1NTlmZDhiYzBlNGFjNzczNDBiZmM1NjQ4MDAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGF4In0seyJ2YWx1ZSI6ImE3ZjlmODQxNGM5NWJmY2RhYWIzNzg3YjJjNGE2NTQxOWE5ZDI4M2ZiN2U3YTVlZDQ1NDgyNDlhNDE2NzExMTkiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGF4VG90YWwifSx7InZhbHVlIjoiZjI0Yjg1MDkzYmEzYWU3MzVhMzlmYzkxMGY0MmUxN2UyNWMwNmNkYTUxZmU5YTZlNDQxMjI0OGY4NmE0MWVjMCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50b3RhbCJ9XQ==", - "privacy": { "obfuscated": [] } + "merkleRoot": "7f042395cc9a589a3957d54393675ff592af5aa9ed0fb768eec18c78f285cbdb", + "salts": "W3sidmFsdWUiOiJiOWM1NGJmNmVhZjg2ODI0MjlmYWNhNTMyNDE5NjU4ZmIzNTFjZWViOGQyNzM5ZTFjODFhMzMxNjkyNWU2NGQ3IiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6IjRhN2E0YjMxZTk4MjgyOGNmNzYyMmZmZGUwMDg1MGM2NmJiZmRlY2JjNjNmMWM0YmMxYTVmYzhjZDlkODJjNzUiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiMTQxMzYxMWVkZDM1ZTc2ODE1ZTU1OGIzYzNkYzYwZTczN2NlMmI3ZTQ1MThmYzE2Y2M5ZTNlM2Y0ZTA0Y2RiMCIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6IjNhNDViNjA3YjAyNGI2MmIzZTBiMDEyYTY4ZjdmNDhhOTNjYjNiNzRiZjYwZmRhM2MzMmM5ZmY0MGJkYmYyMDMiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiI5NzJhNTg1NzFlOTc4OGJmMzNmOTIxN2IxNDJiNzQwNDg1OWQwNjIzMDBhZTJhODgxZGNhZWUwNTgyYTM1YjQ3IiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiJjMmJkM2M0ZTU0NjlkYTZiY2I2M2MwNmQyZGMzYjI0ZGRhYWZhY2NmNTljZDMwNDg0NDk1MWJlMmIyMGNmYTVkIiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiJjNTVkZjcxYzM5YzFmMWY1YzE5ZmE0ZjkwYzBmNGU0YzZiNTJhZWI1YWY2Mzg3Yjg5OTU5YjY0NjgyNmFlNGQ0IiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6IjljMGFmMzMwZGUwMjEzNTY4Nzk1YmY0Yzg4MGM2MjVhN2Q3YzA0ZTRmMmMwYjA1MTU2ODcxYWNmYTU0MTBmMzciLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiZGIxNGRjZTMzYmQ0ZGFjNzc1NTJiYTkwZDM3YjVmMWE3OWU4YWQ3NDFjMTgwNWQwNDZjZDRhODk5OTcyMGE3OSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiI1YjQyZDZkNzZkNWM4ODkxNjcwYTA5ZjRlYTk0NWRjMjc3OGQxNmZlODJlNDhlYWVmZThiODMyOWRiZDg5M2UwIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiYjc4ZDQwN2E0MDE5YjQzODIyZDg4NjhlYWY2NzZlNzc5NjdkNzBlODYwZmVkYzNiZTZhZWRmMzI2MDZjZDAxMiIsInBhdGgiOiJjcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiOGRkMzI2ZjQ0NGQ1YTQ3OGYxZTZhZjhkNjA3NTM1NWQwOWViYjNiZGY3MDkyMDE3NTM4M2JjZGVmMGRjYTA1MyIsInBhdGgiOiJjcmVkZW50aWFsU3RhdHVzLmNyZWRlbnRpYWxTdGF0dXNUeXBlIn0seyJ2YWx1ZSI6ImZlNDU0NjFkMjhmNmU5ZTRiMGMzNDI4ZDI1YjI0ODI5MmU3NGRlMDRhNjY0YjA5MjQ1OGE3YTc1ODEzOWZmZTgiLCJwYXRoIjoicmVuZGVyTWV0aG9kLnR5cGUifSx7InZhbHVlIjoiNjU1YjM5ODdiODVhNTg3MWM1YjJlNDllNDI5ZWYwNTFkODdiNDdkYzk5MjgwODk3MTkxMzk4ZjZlNGI1ZjczMCIsInBhdGgiOiJyZW5kZXJNZXRob2QucmVuZGVyTWV0aG9kVHlwZSJ9LHsidmFsdWUiOiJiMDEzZjY0M2QxOWE2NmRjY2IzN2ZkOTY2MjI2YmQ3YmRkNjU5OWE1YzE3OGZlNmQwODc5ODA5MzRiOWZiMzliIiwicGF0aCI6InJlbmRlck1ldGhvZC5uYW1lIn0seyJ2YWx1ZSI6IjBhMTZmN2ZkN2IzNTU2MjVlZTIyYzc4NGM2YWI3YTEyMWNhZTViZDlmODVhNzFlMGEyMjMzNGJjOWYzZTlkMjEiLCJwYXRoIjoicmVuZGVyTWV0aG9kLnVybCJ9LHsidmFsdWUiOiJiN2M5ZDc3YTFiNjFjNDljZmRlZGY5N2Q4YWRjNTdlMGNjOTE4MDlhZWJjZGIxYjk1N2E1MTA2NDI5NjFlMTRjIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0Lm5hbWUifSx7InZhbHVlIjoiMWVlNTgwMjllOTdiODFlMDhkYjNmMjBmYWE0M2JmOTUxZDE1NzRlYjU2MTIxNjhmMzJhNzUzNjQ1ZmM3MTcyYyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5pZCJ9LHsidmFsdWUiOiI1YjUwNWFlNTgwMTY4MDZmZWZjZmRkNDI0YjkxZDI2N2E4MjBhZDJiYmQzOTcwNmNjMzUzZTQzMjJkNWM3MmIwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmRhdGUifSx7InZhbHVlIjoiZjdmNmM0NDQzMGE2NzBhYmQ5OTRmNjM3NDYyMTA3ZGFlZTI4NWIzNmVjNzg3YmY3ZWI5ZTY1NTRhMDk2Y2RmOSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jdXN0b21lcklkIn0seyJ2YWx1ZSI6IjEzZDM5MGVmZGYwYjkwMzZmYmIwNWI4MmE3N2Q0NzFjYzZiOTkxN2RhNTJhODA4NDg0ZDEwMGQ1NTE2ZWM3ODUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGVybXMifSx7InZhbHVlIjoiZDhlNjRmNzlkMWRjNDAzNWZjNmViZmU3NDdmYTAyOTc4Mjg1NDFlNWQ2ZmMwZWYyZmM4NTVjM2ZlZDBjNWRlYyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5uYW1lIn0seyJ2YWx1ZSI6IjAxODc3YjQyMjMxZDNhMmI2OThhZTgxY2NlMTE0ZDEyYWZkNmUyMzg1NzUxOTg4N2QwNzRhMzJkYTc2NWU5ZTUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uc3RyZWV0QWRkcmVzcyJ9LHsidmFsdWUiOiJlNDZlODc5NTQzYmFiMjU1NmFkNTNjZDdjN2FkNjRhYjA2M2IxNjdlODRiMDE5YzUzZTQ0NzMxZmU1OWRlN2E0IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLmNpdHkifSx7InZhbHVlIjoiODc0YmNjODFhNzM0MDk5ZjdjZGJhNjhjZTlkYWNiOTM0ODYwNzQ2OTNmOTQ2NmQwOTdiZjgyMWQ0ZGQ5OGI4MiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5wb3N0YWxDb2RlIn0seyJ2YWx1ZSI6ImFlNWQ2M2U0ZjdmYmExNzljN2JmODE0NTY5ODEwMzk0OWVlNDdkM2Q0NGE0OWM4ODRiMjNkNmFiM2JiNjc2ZDYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20ucGhvbmVOdW1iZXIifSx7InZhbHVlIjoiYTNiY2IwYTJkZjUyODVkZmFkNzdiODM1YzFlYjNmYjZmMjczYTM1ODNjNzRmZDY2MzMyMmRjMDkwMGY5YmEyZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5uYW1lIn0seyJ2YWx1ZSI6ImQyNzE1YzEyZjg2ZjRmOWQ0ZmVhZTExMTFkNzA1NTNjMjk5ZDc3ZGQwMTFiNTQ3ZjlmMmZiNTE4ZjNhY2ZlNzMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuc3RyZWV0QWRkcmVzcyJ9LHsidmFsdWUiOiI3OTA0NDFkNDVmMzY1NmM5N2U2YmY3YzAwYTI2ZmMwNDg0ZWUxYzgyODdlNDlhZWIwMjNiMTdhMzkzZDk4M2E5IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LmNpdHkifSx7InZhbHVlIjoiYTQ4YjMwYTE0MjhjMzY1MjViMDVhNzRhMDJkYjBlMDI0ZTE4NWNkMDc1M2I3ZTFlZjlmOGQ4YWFkMDBiMDdkYSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5wb3N0YWxDb2RlIn0seyJ2YWx1ZSI6IjQ4ZDkxYTBlNWE2NTUyODFhMjhlMTExOTk1MmEzNmY0YWFlNzQxOWJiNDFhOTkxOWY5MGY0YzE3OGU2Yjc5ZjciLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkucGhvbmVOdW1iZXIifSx7InZhbHVlIjoiMGY4MDdhYjE0NTQyNjkxZGE0MGYwY2FiNWY2ZmI1MzkxN2Y0NjMyMWUyOWJhYTBkMzk0MDhlZGU2NmI4OWE4YiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8ubmFtZSJ9LHsidmFsdWUiOiJjNmEwZjI3YmNhMmJmZmQ4MWRhZjdmODQ5MjU3NjUyMmQ2ZmYwNTZhZDY3YWRkOTU0Yjc5MDVhYjg2OGIzYjNmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5lbWFpbCJ9LHsidmFsdWUiOiIwZDBkYjAxZDBkZTUxODcwYWZlYzFhYzU5Yjg3NzFjMmExNzY3YWQwMzhjYTIzMDFlMDMwOTY2OTljMjEwMTg5IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiZjM5M2YyNWY2NzA0OGMxN2E0ZmM2NzFmNjQzMzRiOGYwYzc5YzEzOTQzMGM4NWEzOGRjNjYzYTc5NTkwNjkwMiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnF1YW50aXR5In0seyJ2YWx1ZSI6IjI3Nzk4ODY1OGQ1Y2NkYWYxMGFjM2MxNjE5YjUxMWFlMjc0NTViYWM0MzE2YjYxM2JjOGUzZTY5YjVmZGFlYjIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS51bml0UHJpY2UifSx7InZhbHVlIjoiMDFhZmY0MDAxYTNlYjk1ODVhZDQ1YzNhMjlmN2QxNGVkMmFjMzBlN2FiZDY5MzViMTdlY2UzODQwYWEwM2E2ZSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLmFtb3VudCJ9LHsidmFsdWUiOiIyNjVmOTdmY2RkMzRkZjljMGYxMGMxYWY1ZjY0NjdlNDY3MDkxZjI2YWIyNjlmYTk4YWJlNWNlY2FiOGJmN2E3IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiYjBhZmE3YWM1MDIwZDEzNWQyN2EyZWEyMjUxYjhlZTIwYjI0YmY0M2ExMTFmNzMyZjAzYjQ4YmI5NmE2YmUzMiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnF1YW50aXR5In0seyJ2YWx1ZSI6IjY2ODFjYmQxZjQ1ZWY5ZDhmOGE3YTY0M2NmNTc0MTY0M2JmMDJjN2VmYjY4MTI4ZDZkNGU5ZWM1OGY3YjJmNGQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS51bml0UHJpY2UifSx7InZhbHVlIjoiY2I0ZThiOTgyNGVjNjRmOTU4MzQ4MzJkOTU1OGFmZThjNjIyNzM5ZDNkYjMwNzI1NGFmMDE0ODNmMzZhYjY3MCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLmFtb3VudCJ9LHsidmFsdWUiOiI0N2FjN2FkY2VkMzM3Y2ZkMWEzZTE2NDJlNDMxZWY5YzU4YTRjNmI0MzFiMGZiYTBlODQzYzg2M2I3MTlhYTQwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiMzA0MzA3M2MxZGJiMjQyNGYwNjcxNjZmZjFjN2IxMzkwODI5M2FhNmQyN2FjMDM0NDMxY2RhYjM0ZGJmMDcxNSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnF1YW50aXR5In0seyJ2YWx1ZSI6ImQ2ZDlhYWVkZmZiNzYxMjYzZjU1YzJiYjBmNWM1OGYyMjA0YTUwYzZmYWJlZjNjZjc1YzNiMzEwM2ZlZDNhZjUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS51bml0UHJpY2UifSx7InZhbHVlIjoiNjNkNGFkMGY3Y2NjMGM3MjNjMGRiMjg3OTZjNjU2N2FkMjlkZTRjZTBkYjQyYmEzY2NlYWQ1ZjhmZTdlNjA1NiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLmFtb3VudCJ9LHsidmFsdWUiOiIxMTdmZTFhZGJiZDgzMzdhNmE4MGE5NGNjODEwYjVjYThkMjVhN2Y3ODUwMGU0YTYyODhkNmU4NDZmZTJlY2E5IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnN1YnRvdGFsIn0seyJ2YWx1ZSI6ImZiMDE3MTUzNjgxNzU5N2U5YWMxMWVkNTljMjEwMGEzM2ZiYTdiNjE2ZDRkZmM5OTljNzc2NWU5OGQyMjU4YmQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGF4In0seyJ2YWx1ZSI6IjJkOTI3ZDQwNzEwYTM0ZGU4ZGNlODcwNzAzMmE4ZDQ4ODViNjcwNTA1MDkzZDI0NmMyZTI2MWRjYjQzMDgyZDQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGF4VG90YWwifSx7InZhbHVlIjoiODFjMjhhODMwMTJhMGE4YmYzMGNlYzg5ZWRiMjIwOTIxYjQ4ZGE4NTIyYmI2YjAxNDFlMDI1NTE4OWQzOTM3NCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50b3RhbCJ9XQ==", + "privacy": { + "obfuscated": [] + } } -} +} \ No newline at end of file diff --git a/test/fixtures/v4/tt/did-wrapped2.json b/test/fixtures/v4/tt/did-wrapped2.json index f5a96e99..e50b6ed2 100644 --- a/test/fixtures/v4/tt/did-wrapped2.json +++ b/test/fixtures/v4/tt/did-wrapped2.json @@ -1,14 +1,26 @@ { - "@context": ["https://www.w3.org/2018/credentials/v1", "http://localhost:8080/alpha-context.json"], - "type": ["VerifiableCredential", "TradeTrustCredential"], + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" + ], + "type": [ + "VerifiableCredential", + "TradeTrustCredential" + ], "validFrom": "2021-03-08T12:00:00+08:00", "issuer": { "id": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89", "type": "TradeTrustIssuer", "name": "My Own Company Pte Ltd", - "identityProof": { "identityProofType": "DNS-DID", "identifier": "example.tradetrust.io" } + "identityProof": { + "identityProofType": "DNS-DID", + "identifier": "example.tradetrust.io" + } + }, + "credentialStatus": { + "type": "TradeTrustCredentialStatus", + "credentialStatusType": "NONE" }, - "credentialStatus": { "type": "TradeTrustCredentialStatus", "credentialStatusType": "NONE" }, "renderMethod": { "type": "TradeTrustRenderMethod", "renderMethodType": "EMBEDDED_RENDERER", @@ -40,9 +52,24 @@ "email": "def@company.com" }, "billableItems": [ - { "description": "Service Fee", "quantity": "1", "unitPrice": "200", "amount": "200" }, - { "description": "Labor: 5 hours at $75/hr", "quantity": "5", "unitPrice": "75", "amount": "375" }, - { "description": "New client discount", "quantity": "1", "unitPrice": "50", "amount": "50" } + { + "description": "Service Fee", + "quantity": "1", + "unitPrice": "200", + "amount": "200" + }, + { + "description": "Labor: 5 hours at $75/hr", + "quantity": "5", + "unitPrice": "75", + "amount": "375" + }, + { + "description": "New client discount", + "quantity": "1", + "unitPrice": "50", + "amount": "50" + } ], "subtotal": "625", "tax": "0", @@ -52,10 +79,12 @@ "proof": { "type": "TradeTrustMerkleProofSignature2018", "proofPurpose": "assertionMethod", - "targetHash": "27595bf33718176498bf16b0d61090c8928888c9037c4b508f96afad24c03841", + "targetHash": "658922b226f74eee3bad881048ad4ae56f305e9b43e9eedd71da51b2aa338d39", "proofs": [], - "merkleRoot": "27595bf33718176498bf16b0d61090c8928888c9037c4b508f96afad24c03841", - "salts": "W3sidmFsdWUiOiI0NTk1MzI1MjQwMTg4N2NkNjYxODIxODZhNTU1YWVlMTVjYzEzYmY5NGNiMWIzYTJkMmFkMGYyNmQxZjMzMjBhIiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6IjlhZTE5MDRlNzA2OTIyNGY1MzA2MjYyYzAyMDA2OWU1MjJiNDEwNWM3ZmVjNGYyN2NjODkxMWJmMjQ4OTA1NDQiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiYmNmMDMxZmJlZjAwMmIxNGYxNDcxNDI5YjAyZjQ3MGIwNTg0YmU4Mzc2ZmEwYTFmYmY2MDU5Y2EyZDEyZmI2OCIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6IjFjNTFkN2I1MWMxMTM5ZjNjYTQyMjY5ZDE1NGZiNTc4NjgwY2M5MjcxMzQ1OTBlNWZiMzVhNDE1MDQ2ZGM4N2MiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiI4MTVmMTRiZjg3NzgwNTczN2NhZmE1YTliYmI3NWI3MjA3ZGFhNDAwOTU5NjI1NWE3NmFlYjczOGQ4YjJjN2M0IiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiJkNWNkNTRiMTAyM2ZhYTY0NTdlODcxMzA4MmJkZDU0ZjMxNmI4ODU1OWMyMmE0YzY3MTNmOWU1NzAyOTNhNTA3IiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiJlZTk1NmFjOWU4ZTFhMWI4ZDM1OTdiZTQwNWNmZTljNjNlODQ3ODA4Y2JlOWJkMjVjZGFkODRkZWQzYjQ2ZmFhIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6ImJkZWFkZWQzNGIzNzBiY2UwMDU1ZGUwMDFlODA4OWNmMDIyN2ZlY2M2NTgwNjdiOTQxMGFkZmZmYjAxYjAzY2MiLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiMzIyOTg1NmI2NjM4M2U4NmE1YWFhZWQwMjNlNDYyMDlmMTRkYTVkOGFkNGJhN2E4NTk1M2MzZjZlZDhmZTM1MiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiI1MGQxOGI4NGExMGQ4NWExOGQ1ZTEwYzQ1MTUxM2MyYzZjNjUzMTk0MDQ3ZjZhZWI1YzgwY2NmNzBlN2M0YmUzIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiZWQwZWM0NWY4NWExMzMwMDZmYjY5ODY5NjEzZjZhMjRhMjk3MTY0OGM0YjllY2Y4NWQ5NWRjMWMwMDJlMDE4OCIsInBhdGgiOiJjcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiMDJlZjVhNjNmMmFlNTg3ZjdmOWNiNTAwZjcxZGYyZTE5NDQ5MWVjMmVkMzg5ZDdhOTA5ZGQ0ZDJkYjg2ZjYzMyIsInBhdGgiOiJjcmVkZW50aWFsU3RhdHVzLmNyZWRlbnRpYWxTdGF0dXNUeXBlIn0seyJ2YWx1ZSI6IjNmYWU0MTUxYTc3NDY1OTMyYjRlYTM5M2IwYTQ5NTNkOWQyMGU0YTNiZmU4MWRlZTBiOGIzNTM1M2UwNjhkZGYiLCJwYXRoIjoicmVuZGVyTWV0aG9kLnR5cGUifSx7InZhbHVlIjoiNTJmNjE0ODMzZGI4YWYyNDAxZTk0YjFmMzI3ZTdhNjk0MTk5NjM2MjU5OTNkYjQ0MmJjNjdhOWJhMDkwZjU1MSIsInBhdGgiOiJyZW5kZXJNZXRob2QucmVuZGVyTWV0aG9kVHlwZSJ9LHsidmFsdWUiOiI2M2U2Nzc2MmVmM2Y3MWYzNDdkYjJjYjdiNDY4ODQwMGMyZDc5N2ZmMTQwMjlmYjBjOTdmYjAyNzY0Mjk1YzhjIiwicGF0aCI6InJlbmRlck1ldGhvZC5uYW1lIn0seyJ2YWx1ZSI6IjhiYjViNDY2NGU4N2RhMWZiYWE5OTllMjc0ZWI0MGM0MDFhMzU5OWNhMzE1OGIxNGEwODcyODczYmYxZmFlYWEiLCJwYXRoIjoicmVuZGVyTWV0aG9kLnVybCJ9LHsidmFsdWUiOiI0YWQ1ZmJlYWZmYjJiZmY3MTI0MmY5NDZmYjlmMjY3YTk0NzUwOTU1ZmE3Y2Y5ZTExZTZhMzc5YWZiOTYzN2MwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0Lm5hbWUifSx7InZhbHVlIjoiMjgzZGNjZTA0YTVkOGU3NGU3Y2Y3ODFkMjBiMjMzYTEyMmRiYmQxMjliZmM5N2JhMjllNTg4NDY1MGFjYzUxMSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5pZCJ9LHsidmFsdWUiOiJiYmRlNjQ4NzViY2I4N2ExMDAxNmJmYWJiOTZjNjc2ZGYwMzE5OGRiYTVhZjIwM2I5YTgzMTA1MTM2ZGM5M2E1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmRhdGUifSx7InZhbHVlIjoiNGUwZjNmMDgwNDc1ODhhM2I2YTQ3ODAyY2IzNjgwZmI0NjdjMTk1OWE2ZmU5N2I3OWMzNDNjYTg5NzhhMzFhZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jdXN0b21lcklkIn0seyJ2YWx1ZSI6ImFjMTA1YTRjNzM3MzRjZjE4NmJkYTRlMzI3MzBlYzhhMmRiMmE2ZDZkZTVjNTg1MDk0Y2VmNDEyMWZiMzNkYTUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGVybXMifSx7InZhbHVlIjoiMGI5NzRmNWViNTI1YWEyMjM5MDEzMmViOWVmMWNkZTJmODIyODcyZGRjMzgxZDIzZDk3ZDdkZDk1MzI2M2VmMSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5uYW1lIn0seyJ2YWx1ZSI6ImVjZDkzOGJmYjFmODI3NzQwMzgyZmU1Nzc4ZjhlYmQ3M2NkNTdhODhkZWZmNDIzNGE3ZDc2NDgyNjI5Y2RiZjciLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uc3RyZWV0QWRkcmVzcyJ9LHsidmFsdWUiOiJlZGY0OTY1ZWI0MGJjNWMyNGFhMGFlOTU1MjQ3YmU5NTYzZGEwZDAzNGZkYmMzNmJmMmNmNDI5YWJlMTRkMDlkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLmNpdHkifSx7InZhbHVlIjoiODM3MjQzNTlhZWM3YjU5ZDY2NzhjMjVkOTliODkxZGIxNzFjNWQ2MTMyMmFlZDhhNjRlMzY0ZGU4YTUyMzYzOCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5wb3N0YWxDb2RlIn0seyJ2YWx1ZSI6Ijc1MTQxZWY3ZGFmNzczMDUxNWNmOGRmNjE0NWVkMDEwMmQ3YjRjMmM0M2I1Njc5NzRjZjY3NjNiYjhkYjJkNmUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20ucGhvbmVOdW1iZXIifSx7InZhbHVlIjoiOTVlYjU4ZjA3NWIwMGU4ZWI3NmRkNjJmYjQ5YTQzYjJmZDBhOGM5MWU5ODVlZjdlMTZiYmY3YTBjMDE1NTY0MyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5uYW1lIn0seyJ2YWx1ZSI6IjE0NmI2ZjhhYTYyNTVhZGY3MjIxZDg5MWVhMmE1NWNhNTQyZTliODI2MGRmN2I1NTI3NDhkMzQ5OTM0NjQyOGUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuc3RyZWV0QWRkcmVzcyJ9LHsidmFsdWUiOiJhODYxZDE4YTAzODE3ZDc3YWMxYmQ2ZjU3ODEwNzhiOTI5NWUwMjYwYTA5OTJhNWFkM2QxNjJkOTU3OTY2ZTIxIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LmNpdHkifSx7InZhbHVlIjoiY2RiZWU4NTI0Y2NkY2YwZThlZGExNzYyNjUwNzA1ZTI3Y2VlNjBhOGUyNWQyZjY3MTI2OTgzYWVkMDI3NWYxZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5wb3N0YWxDb2RlIn0seyJ2YWx1ZSI6ImFiYmI0M2JkNGM5MDA1YWRhOThjMGFkMzQwM2FmOTAyYTkwM2Y2NDk2ZWM1ZGU0NGI0ZmU2OTczNzg5MGY4NTgiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkucGhvbmVOdW1iZXIifSx7InZhbHVlIjoiZmFjMjg1YTFkZTA5ZjlmZWI1NDAxY2NkMTU2YjFlOGZiYWY2ODU5MjZiYWU0YWRkYzJjNmE5MWZhN2U1Y2I0ZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8ubmFtZSJ9LHsidmFsdWUiOiJlYzRmN2I3MmZhYTE2NjUyNzE2YThkMDEzYWFkYjcwMWJhYWRkYzg1MzNkODNiYjEwNWM0NzVkZTdiMmY1OTNkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5lbWFpbCJ9LHsidmFsdWUiOiIwYzU0NGI2ZmU4ZGU0M2RiYjc1NTA5MDgzMjY5ZjU3MTgzNjllODdiMTkyYjgwNzkwNDg5MTljOWZjNmY0NjY4IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiOTQ4ZjZmYTQ4ZmY3YjFkNTE5MDYyMDA3YThhOGUzOGM3MWUxOWY1MWU5NWUxY2NiNTdhMDYzNDIxOGRlOTBlMCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnF1YW50aXR5In0seyJ2YWx1ZSI6IjY1MzJlNTE4NDkxMjNhOGJjZDlmYjJiYmJhZjZkZjc2ODE3ZmM4MmUyNzkyNTNmOWE1ODNjMTExOTM5YTMzY2EiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS51bml0UHJpY2UifSx7InZhbHVlIjoiODZjMDE3MDY3ZmM5NTkyNDg1ZTVhY2RlYjUwN2QyZDkxMDRmNWQ4MmQ2Y2JjNDUwNjRhNGUwYWNiNmYxNzYzZSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLmFtb3VudCJ9LHsidmFsdWUiOiIwN2ZiYTI3MDg1OTgwOTllOGUzZGI3MDk0YTQyYTQzNDRmNzM1NTFjOGFiMmU2ZGZhYjlhMTZhZGE0NTRmNGI5IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiYTc1NGRkNzU2N2VlYzFiYzMyMTg4YzVlZjhhMjJmOTdjNDA5NzU3NjU5MjAwNjBjYjYxNWVlY2Q0ZThlMzc1NSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnF1YW50aXR5In0seyJ2YWx1ZSI6IjJiZGE5N2IwMGI1M2JjZTZmYjRmZmJhNDY4ZWIyYmMyYThhNGUyMjcxNzNlZDA4ZTM5NjUxMmJhOTAwOWIyYjMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS51bml0UHJpY2UifSx7InZhbHVlIjoiYzAxMDllY2I1MWRjZjUwZWU2MjFkZjJmNTBhNWJhYWE2OWY1MWIzNGE3ZTE1MjJkMWI5NjJlN2Y5YjAzY2JhZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLmFtb3VudCJ9LHsidmFsdWUiOiI5ZTM0YzI1Mjk5ZDQwY2I1NTk4ZWUyNGM5MTgwYTk2NDMzMWFkMjIwM2FiOTE3MTkxYTMzMTQxZmY1MzVlZjIxIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiMWExZTZiN2FlZmQ0N2E3YzdmYmM2OTQ5OWVkYmY3MzQyYmQ3ZDA4ODZlMzM4YzgzN2Y0M2ZmNjEwNGYwNGMxMCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnF1YW50aXR5In0seyJ2YWx1ZSI6Ijk4NDBjZTQ1MDY0OTVkNzMxODdkMDhiNWY3ODA3ODVjMDM5YjEwZjc3ZGJmYTBmMjNhNmEyMDZmYjJiOGU2ZDciLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS51bml0UHJpY2UifSx7InZhbHVlIjoiYzhhZWE0OTJkYTAxMWIyMTNlMGIyZjhmNTRlNzkwMjVmYmNlYmI2ZGExZmE0MjQyOGM5MzJlNmM4N2Y3ZmI2OCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLmFtb3VudCJ9LHsidmFsdWUiOiI5NWE1YjAxNjg4ZmIyNjg2Njk1YmJlNTA1OGE5NGNhNTY1MjA4NGE5NDdlYTMyYWVlYmM2NzlmM2FjNTcyMzE2IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnN1YnRvdGFsIn0seyJ2YWx1ZSI6ImQwMjRhMjRlZTM4NGFkNTgwYzJlMDk0YTIwMzgwOTIyMDY3ZGQ5ZWQyNmFmZmY4MmMxOTA3YmVhZjJiM2ExNTEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGF4In0seyJ2YWx1ZSI6IjYzOTdhYjU3NTUzMzBiZWNjOGQ1MjdhMzc2NDgwZjJjOWU5ODg1ZjUyZjg0NTlhYTVhNDEyNGI2YWY4MTQyNTAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGF4VG90YWwifSx7InZhbHVlIjoiZWFhMTE1ZTdjNjkwMGM3OTIzOTU4NjM4OTkzODhlZDUzMDJlNDdlNTZjZTkyYjViZTY5NWM2NWQzN2EwNDA0MSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50b3RhbCJ9XQ==", - "privacy": { "obfuscated": [] } + "merkleRoot": "658922b226f74eee3bad881048ad4ae56f305e9b43e9eedd71da51b2aa338d39", + "salts": "W3sidmFsdWUiOiI4OTYzYmQ3OWNhNzhlNzQxNGI3YTczYjVkMjJiNzE2MzY3MGE2ODk1NWMxYmI0NjY5MzJmYzFkOWVlYTE5OGVhIiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6IjVmY2E2NWM3MDljNWE2Njk5Nzk4OGNhYWU2ODVhMGNkMzk2NWRhYWIzMzVmYzY4NmFmYjliNzA5YmM4MjNjMzMiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiZmQwYTY2NDVhNzBlNmNjMWQxYmY0NWE0NGNlZDBkODljYjk0OTQ2YWQyMWI3NTBiNjU3MDg0MTQ5YWZmZjVkYyIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6ImZiM2EzNDg3MWVlYTVlYzU2MjBmMTNjZTEwZjZmOTI0YTJiMjI1YTliZWY4YTQ3MTgzZTJjODBlOGE0ODZlMWMiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiJkYjgzNTcwODZhY2NhYjlmOTI5NjAwNGY2NGE2ZDlkNGQ5ZDU3MTcwMDhhM2Y5MDMzY2Q5MzBjZGFmYWM2OGVlIiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiJhMDA0Y2Y2ZTQxNjIyNGQxNTNkOGY1Mzg4ZDhkYzUxMmJhODRhZDA1NjE0NDE4Mzc4ZjdiY2RjOGM1NWRmZWUzIiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiJlYjNhMjk5MWNlMzcwNjY4OTA1MmQ4NTYwZWFmMjcxMmJmNDU0N2UwNDViNWZjNGQ4ODY2YjhkYTY3ZGVhOTgzIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6Ijc1N2NhMzYzODAzMjg0YTBmMjEwZGM3NDgzOGI1ZmZjMWJjZGVmOTc5MDU0MzdjMzcxNzY4ODFjYTM2YzFmMTkiLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiN2QyNDkwNDk4M2ZhMGEwZDViM2FiMWI2YmU3ZjY5OTQ4NGNlYzdiZGQzZmQwMGFiZjU1OGIxMmNkMDJhMWUwYyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiIzNThmNDVjODJmMDcxZGM1MmE1NmJhZTFhZWIyNmM1Y2ZjYjdhYmNmYTdlMGU3NmJlMDFkZmRhN2UyYzU5ZWYyIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiN2I2MTQzNGI2MWJiNDM2NzIwMTlkOTU5OWI0YTJmMjgxZGM5ZTAzNzYzNmUyZjk0MzVlMTUyMDY1ZWVkYmJlNyIsInBhdGgiOiJjcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiNzA4OGM1MDdmZTM3MmExNDc5MTI2M2QwYjk1MTRjMDBmNGE2Nzk4MDlmMWIyZTA3Mzg1NTBlN2Y1ZGRiZGIwOSIsInBhdGgiOiJjcmVkZW50aWFsU3RhdHVzLmNyZWRlbnRpYWxTdGF0dXNUeXBlIn0seyJ2YWx1ZSI6Ijk0MjZkMzlkY2I2YjIyOWY0YjdkMDliYzNiNWQ4NTQyMzJmNDE0MDNjZDE5OGZlZmMwMGNmYjE4MDU1NTM4YWEiLCJwYXRoIjoicmVuZGVyTWV0aG9kLnR5cGUifSx7InZhbHVlIjoiZmIzNDM4MjBiZjVlNmZmZDY1YWNkY2Y0ZjA0ZDJiNTg3YmRiODFkZDAwMTExODA3MTU0OWE1NGNmZmM0N2U4ZSIsInBhdGgiOiJyZW5kZXJNZXRob2QucmVuZGVyTWV0aG9kVHlwZSJ9LHsidmFsdWUiOiI2MDA4MDYxNGMxOTU4MDdhYmQxMDZjM2U1MjUwMmI2YTJiNzIyNmM1YjA2MmVhZWMwMDEyYWI5MGI3YzE3MGE5IiwicGF0aCI6InJlbmRlck1ldGhvZC5uYW1lIn0seyJ2YWx1ZSI6ImQ2ZGJiZWI1YzBiODY0NjU3MjljNjRlMzVkZTFiZjY0ODVkZTBhZDcwMGMxYjBiMWI1YzcyYzZlZGUyYmY1NDgiLCJwYXRoIjoicmVuZGVyTWV0aG9kLnVybCJ9LHsidmFsdWUiOiI3YWE2NGU0ZmY3NDk0MDg5ZGZiYTEwODM1ZjUyMTZiNTJmNDk0YzkwNWZlNTgxODQ3NTgxMjg2YWRiMTc1MzQ1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0Lm5hbWUifSx7InZhbHVlIjoiMDMwZjlkYmEwOTFhZjVmZTMyZGNiN2QwYTFkODVlYmM1ODRhZjA5NWVhODU5YjFmN2YzMDJiZGYzZmVlMGQ4ZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5pZCJ9LHsidmFsdWUiOiJjMmMzZGFlZDJkMzc2MWY1Y2NlNDUwMzliNzliZjJkMzNkZDNlZTI1ZTZmMzVlZjU5YWE4Y2IwYjM3MjEyOTgwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmRhdGUifSx7InZhbHVlIjoiZjdhZDIxOGY3NmQxNzlkZmExNDk3OGNmOTkyY2MzNGQ3YzM2ZDhmOTIxYmI0Y2JmNjE4YTJhMTFiZjQwZTU3YiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jdXN0b21lcklkIn0seyJ2YWx1ZSI6ImI5NjM4MjBiOGJlNjVlYTUyZTU4NGNkNjg2MjlhNzk0MDNjNGUwYTRkNTg2ZjIwYjNkYjQyZjRkMWVjZGI5NWUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGVybXMifSx7InZhbHVlIjoiNDViYjA2NzNjNTU3NGJhNTMxMjg0OWVlZTk0OGU1NjE2NmEwNTQ1ZDA3ZWE3YjhlYjgwNTQyMzE2ZGZkZTZkOSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5uYW1lIn0seyJ2YWx1ZSI6ImNiYTI1OWQ1NTczMjQyODMzOGUwY2FlMTgzN2RlZDk4NjFlNjQ1YTZiYWFhMTNmNGM0ZDYxMGQzNzRmN2U2NjYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uc3RyZWV0QWRkcmVzcyJ9LHsidmFsdWUiOiJiNjQ5YTBhMTFkM2EyYTE1ZDFkZjJjNTNmNWI1NDNhYzIxNTE5NjZkMDFhMzFmNmNiMWYzZjdiMmQyNTM4MzQ3IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLmNpdHkifSx7InZhbHVlIjoiNzE3MzNkMmZjNzY2OWVhNWEyZGE3OTNjYmQwMjk5NWUxOTNlNDk5ZmJhOTA3YjI5Mjg3ZjNlYzU4M2EwYTBhMSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5wb3N0YWxDb2RlIn0seyJ2YWx1ZSI6IjdiMTcwNDI3NzY1MDQ4MGUxNzJiMWI5YzIxYjA5MWYyYmZlMWJjMzcyMGY0MTA4ZDhkZTk4NDExYzIyOWIwYWEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20ucGhvbmVOdW1iZXIifSx7InZhbHVlIjoiNjVlZTFjYTU1YzI2Yjc0NmRhNmVlN2NlMGY1ZTllOTJjNTI3OTRkYThkMTkxZTMzY2ZlZDhmNGI1ZmExY2RkNCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5uYW1lIn0seyJ2YWx1ZSI6IjMxNDIwNWU1NGZkNmM2NTBhNmE5MWJiNTZiNDYyNTc0M2JhODE3MGQyMjc3ODVlZmRmMWQ3OTg3N2JmOTEwZDkiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuc3RyZWV0QWRkcmVzcyJ9LHsidmFsdWUiOiIzMWZhYzY1MmMzNDMyYTZjNzk1Zjk3NjIyZjU2ZWQ3ZjM4NTMxMzJiNTFjMDZhNmQ2YzcwMjNlYmQzNDRkMmI2IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LmNpdHkifSx7InZhbHVlIjoiNmJjNGM4NDU4MDQ5MDg0YWJhMGY0ZDdhZjkxYTY0Y2VkNWM3YzJjY2YyYzZlMDBjOGQ0YzI2MmRlOGMxZTViYiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5wb3N0YWxDb2RlIn0seyJ2YWx1ZSI6IjNlZWQ0OTM1MzJkNGE5MjJlZjhkZGMyOTdmNzdiMTczZmYwMjg0MTRkZDNlNTNkY2I2NDVkNzcxOWZlN2I2NjciLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkucGhvbmVOdW1iZXIifSx7InZhbHVlIjoiM2IyYmM4ZTk5NWQ3NDY4ODRiZjcxZjNhOWU1MTgwNWIyMzgwNjNkYjJmYjQzMGNjNWE0ODVhMWU3MGU4NDgzMCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8ubmFtZSJ9LHsidmFsdWUiOiJmMjk0ZGNhZTc2NjQwNTQ5ZDhlZTI1YjY4ZTViY2M4NThlMzI0NDkyODQ3NTU5YzNkY2YwY2Q1MGEwMzEwZWY0IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5lbWFpbCJ9LHsidmFsdWUiOiIyN2IxZGYxZDI4OTZiZTIyODg5Y2ZjZjc2MDNhNzhjYWE4MjNjMDBhYjU0YmNlYjkyYzJlN2EwZjQyNDZhMjg3IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiZTIyYTZhNzY0ZjczMTA3MDAzMGY3YzIwNGExNTAwNTQyYmExOTE3OWU2ZDBhNjQ1MmU4YTlmODgwYWU5M2YyMyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnF1YW50aXR5In0seyJ2YWx1ZSI6IjQ4ODhlODY1OGFmZGQ1N2E3MGI3NTkzYzg2MjBiOTlhYzc4NTc5OGJlOWQ4N2QzNWU2OGYwMzY0NmJlYTU0NWYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS51bml0UHJpY2UifSx7InZhbHVlIjoiOGU4ZDFmN2Y5ZjI5MGI1OThlZmQ0YjMzNDc3NDJmMTlmODg1ZDc0OTdjODZiNzZmMDNlMDRiM2FmZTAwNmIzMiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLmFtb3VudCJ9LHsidmFsdWUiOiI1ODk1NzJkOGMwNjhlZWQ5MjAwOWFkMzQyMzMyNTRlNGJhMjAwZDgyZDFjZWJlMGE4YTM4MWUxM2FkODUzY2IwIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiZDY0MDg4MGQ4ZDFkZDQxYjEyOGYyYzhjZjBhYTJlMThmNDgyNjlhOGYyZGMwOTY1MjdkN2QwMjMwNDM4NDNmNSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnF1YW50aXR5In0seyJ2YWx1ZSI6IjBlYjA4OWE2M2VjYjdjYzg5MmY3MmEzNGQwZjAwN2JiOWY5NWIzYzZmMjNjMzE1MDVmYjIyNDAwYjI2Mjk1MjEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS51bml0UHJpY2UifSx7InZhbHVlIjoiMzU4NjM0NWI3ZGJhMzFlMzRhM2M3YjNiODBkMzRmZTUwOWI1NDdiNGNhODE2YzljZjZmOWVkZDMwYTE1ZmM3YyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLmFtb3VudCJ9LHsidmFsdWUiOiJmNjNmNWE3NjU5MjdhNTk1YWY2NzFhY2EyOWQ0MTM4NDhjNTBhZTAxYmRmNTM3NDQ1M2UyYzRhZmJmM2MxMTQxIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiNDBjNTNiZDYxMDMwMWVmZDEwYWZiMmFlMjRjNTNmNjUxMjFlZjZiM2Y4MWIzNWRmMjRhOTFhNmFmMDgyNzM5MiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnF1YW50aXR5In0seyJ2YWx1ZSI6IjMxNzllMDljNGU0ODQ3ZTY2MmM1MTk0Njg1MzcwNWJjNDJkZTZmYjExYjExYzZhNTlmNWUwNzAwNDgwM2ZhMmIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS51bml0UHJpY2UifSx7InZhbHVlIjoiNDg0MWVhNDc2NDhhMWJiYWRiMjgwYjVhMGIwMzRjMzM2NTgzNzhjZmZkMzhlZWQ0N2U5YWVkNDg3MTlhYzEzYSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLmFtb3VudCJ9LHsidmFsdWUiOiI1ZjFlYTU3NmFlMTlhNmFiNjk4YzVkYWJjMTdjYzNkM2JlM2I1ZDZmZWM5MTRhYTk4ZmQ2MDdmMzA4ODkwN2VmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnN1YnRvdGFsIn0seyJ2YWx1ZSI6IjU5YzQ0YzAzMTk1ZDhiZmYxYmNmNjkyNTAyZDU5MDI2ODVlZjg5OTllYmIxMWNhNDFmOTBmOGZlYzMwMTc2NjkiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGF4In0seyJ2YWx1ZSI6ImUwZTgwMjhlODNmMWM3OTZkMzQ1MWQxZjk1YWM5YjI4NTc1MjIxMjU2NWY4YTFjNjA3MWRiMjNmNGZiZDQ4ZTgiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGF4VG90YWwifSx7InZhbHVlIjoiZTU2NjRjN2UxMzI4Yjg0YTNlYmZmNTQzZWRlMTBjNzBlMTczMGJiNGM4OGU0MWY2NGVlMzhjYmY3NGRmNDdiOCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50b3RhbCJ9XQ==", + "privacy": { + "obfuscated": [] + } } -} +} \ No newline at end of file From 935f34ab9a78083e870b4525083164dc769169d7 Mon Sep 17 00:00:00 2001 From: cavacado Date: Wed, 1 Nov 2023 12:10:40 +0800 Subject: [PATCH 08/13] fix: lint errors --- scripts/generate.ts | 28 +++++++++---------- src/4.0/tt/__tests__/e2e.test.ts | 5 +++- .../v4/tt/did-idvc-wrapped-idvc-revoked.json | 15 +++------- .../did-idvc-wrapped-signed-idvc-revoked.json | 15 +++------- ...dvc-wrapped-signed-tampered-signature.json | 15 +++------- ...did-idvc-wrapped-signed-wrong-binding.json | 10 +++---- .../v4/tt/did-idvc-wrapped-signed.json | 15 +++------- .../did-idvc-wrapped-tampered-signature.json | 15 +++------- .../v4/tt/did-idvc-wrapped-wrong-binding.json | 6 ++-- test/fixtures/v4/tt/did-idvc-wrapped.json | 15 +++------- .../v4/tt/did-wrapped-obfuscated.json | 5 +++- test/fixtures/v4/tt/did-wrapped-signed.json | 7 ++--- test/fixtures/v4/tt/did-wrapped-signed2.json | 7 ++--- test/fixtures/v4/tt/did-wrapped.json | 7 ++--- test/fixtures/v4/tt/did-wrapped2.json | 7 ++--- 15 files changed, 62 insertions(+), 110 deletions(-) diff --git a/scripts/generate.ts b/scripts/generate.ts index b7db0d2a..7ddc27cc 100644 --- a/scripts/generate.ts +++ b/scripts/generate.ts @@ -20,23 +20,23 @@ interface IRun { keys?: [string, string]; } const run = async ({ location, keys }: IRun) => { - let resolved = path.resolve(location); - let name = path.basename(resolved); - let dirName = path.dirname(resolved); - let document = readFile(resolved); + const resolved = path.resolve(location); + const name = path.basename(resolved); + const dirName = path.dirname(resolved); + const document = readFile(resolved); if (utils.isRawOAV4Document(document)) { - let wrapName = name.replace("raw", "wrapped"); - let wrapped = await OAwrapDocumentV4(document); + const wrapName = name.replace("raw", "wrapped"); + const wrapped = await OAwrapDocumentV4(document); fs.writeFileSync(`${dirName}/${wrapName}`, JSON.stringify(wrapped, null, 2)); - let signName = wrapName.replace("wrapped", "signed"); - let signed = await signDocument(wrapped, SUPPORTED_SIGNING_ALGORITHM.Secp256k1VerificationKey2018, { + const signName = wrapName.replace("wrapped", "signed"); + const signed = await signDocument(wrapped, SUPPORTED_SIGNING_ALGORITHM.Secp256k1VerificationKey2018, { public: "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller", private: "0x497c85ed89f1874ba37532d1e33519aba15bd533cdcb90774cc497bfe3cde655", }); fs.writeFileSync(`${dirName}/${signName}`, JSON.stringify(signed, null, 2)); } else if (utils.isRawTTV4Document(document)) { - let wrapName = name.replace("raw", "wrapped"); - let wrapped = await TTwrapDocumentV4(document); + const wrapName = name.replace("raw", "wrapped"); + const wrapped = await TTwrapDocumentV4(document); fs.writeFileSync(`${dirName}/${wrapName}`, JSON.stringify(wrapped, null, 2)); let pub, pte; if (keys) { @@ -45,9 +45,9 @@ const run = async ({ location, keys }: IRun) => { pub = "0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89"; pte = "0x497c85ed89f1874ba37532d1e33519aba15bd533cdcb90774cc497bfe3cde655"; } - let signName = wrapName.replace("wrapped", "wrapped-signed"); + const signName = wrapName.replace("wrapped", "wrapped-signed"); // rmb to replace the signing keys before committing!!! - let signed = await signDocument(wrapped, SUPPORTED_SIGNING_ALGORITHM.Secp256k1VerificationKey2018, { + const signed = await signDocument(wrapped, SUPPORTED_SIGNING_ALGORITHM.Secp256k1VerificationKey2018, { public: `did:ethr:${pub}#controller`, private: `${pte}`, }); @@ -56,7 +56,7 @@ const run = async ({ location, keys }: IRun) => { }; async function main() { - let paths = [ + const paths = [ "./test/fixtures/v4/tt/did-idvc-raw.json", "./test/fixtures/v4/tt/did-idvc-raw-idvc-revoked.json", "./test/fixtures/v4/tt/did-idvc-raw-tampered-signature.json", @@ -80,4 +80,4 @@ async function main() { }); } -main() \ No newline at end of file +main(); diff --git a/src/4.0/tt/__tests__/e2e.test.ts b/src/4.0/tt/__tests__/e2e.test.ts index 5bc9a903..f90cd1b6 100644 --- a/src/4.0/tt/__tests__/e2e.test.ts +++ b/src/4.0/tt/__tests__/e2e.test.ts @@ -22,7 +22,10 @@ import sampleWrappedSigned from "../../../../test/fixtures/v4/tt/did-wrapped-sig const documentDid = sample as TradeTrustDocument; const sampleTradeTrustDoc: TradeTrustDocument = { - "@context": ["https://www.w3.org/2018/credentials/v1", "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json"], + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json", + ], id: "http://example.edu/credentials/58473", type: ["VerifiableCredential", "TradeTrustCredential", "AlumniCredential"], issuer: { diff --git a/test/fixtures/v4/tt/did-idvc-wrapped-idvc-revoked.json b/test/fixtures/v4/tt/did-idvc-wrapped-idvc-revoked.json index cad1d330..7990ffd1 100644 --- a/test/fixtures/v4/tt/did-idvc-wrapped-idvc-revoked.json +++ b/test/fixtures/v4/tt/did-idvc-wrapped-idvc-revoked.json @@ -3,10 +3,7 @@ "https://www.w3.org/2018/credentials/v1", "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" ], - "type": [ - "VerifiableCredential", - "TradeTrustCredential" - ], + "type": ["VerifiableCredential", "TradeTrustCredential"], "validFrom": "2021-03-08T12:00:00+08:00", "issuer": { "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", @@ -25,16 +22,12 @@ "https://w3id.org/vc/status-list/2021/v1" ], "id": "https://sbl.alwaysdata.net/oa/credentials/123456789", - "type": [ - "VerifiableCredential" - ], + "type": ["VerifiableCredential"], "issuer": "did:web:sbl.alwaysdata.net:oa", "credentialSubject": { "uen": "198801234E", "companyname": "My Own Company Pte Ltd", - "type": [ - "CorporateBasicDetails" - ], + "type": ["CorporateBasicDetails"], "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C" }, "expirationDate": "2023-11-01T06:45:43Z", @@ -126,4 +119,4 @@ "obfuscated": [] } } -} \ No newline at end of file +} diff --git a/test/fixtures/v4/tt/did-idvc-wrapped-signed-idvc-revoked.json b/test/fixtures/v4/tt/did-idvc-wrapped-signed-idvc-revoked.json index eed255d8..e44f965b 100644 --- a/test/fixtures/v4/tt/did-idvc-wrapped-signed-idvc-revoked.json +++ b/test/fixtures/v4/tt/did-idvc-wrapped-signed-idvc-revoked.json @@ -3,10 +3,7 @@ "https://www.w3.org/2018/credentials/v1", "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" ], - "type": [ - "VerifiableCredential", - "TradeTrustCredential" - ], + "type": ["VerifiableCredential", "TradeTrustCredential"], "validFrom": "2021-03-08T12:00:00+08:00", "issuer": { "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", @@ -25,16 +22,12 @@ "https://w3id.org/vc/status-list/2021/v1" ], "id": "https://sbl.alwaysdata.net/oa/credentials/123456789", - "type": [ - "VerifiableCredential" - ], + "type": ["VerifiableCredential"], "issuer": "did:web:sbl.alwaysdata.net:oa", "credentialSubject": { "uen": "198801234E", "companyname": "My Own Company Pte Ltd", - "type": [ - "CorporateBasicDetails" - ], + "type": ["CorporateBasicDetails"], "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C" }, "expirationDate": "2023-11-01T06:45:43Z", @@ -128,4 +121,4 @@ "key": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C#controller", "signature": "0x0086fa6e7d0810a918aef7c75edfe57f42099db6f03632f1a6c926c214ad5cd02f8d389df39bd660db0331ff34b953ed55b1776e627c41bf89bec3457efec0b11c" } -} \ No newline at end of file +} diff --git a/test/fixtures/v4/tt/did-idvc-wrapped-signed-tampered-signature.json b/test/fixtures/v4/tt/did-idvc-wrapped-signed-tampered-signature.json index 8274f22b..74bfcd30 100644 --- a/test/fixtures/v4/tt/did-idvc-wrapped-signed-tampered-signature.json +++ b/test/fixtures/v4/tt/did-idvc-wrapped-signed-tampered-signature.json @@ -3,10 +3,7 @@ "https://www.w3.org/2018/credentials/v1", "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" ], - "type": [ - "VerifiableCredential", - "TradeTrustCredential" - ], + "type": ["VerifiableCredential", "TradeTrustCredential"], "validFrom": "2021-03-08T12:00:00+08:00", "issuer": { "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", @@ -25,16 +22,12 @@ "https://w3id.org/vc/status-list/2021/v1" ], "id": "https://sbl.alwaysdata.net/oa/credentials/123456789", - "type": [ - "VerifiableCredential" - ], + "type": ["VerifiableCredential"], "issuer": "did:web:sbl.alwaysdata.net:oa", "credentialSubject": { "uen": "198801234E", "companyname": "My Own Company Pte Ltd", - "type": [ - "CorporateBasicDetails" - ], + "type": ["CorporateBasicDetails"], "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C" }, "expirationDate": "2023-11-01T06:45:43Z", @@ -128,4 +121,4 @@ "key": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C#controller", "signature": "0x725dc1af3ec48a3b1a279c6b09e96a69d92c9f20f1570c3a00984bce20240d591782ab1b36de4fb57f445811c3e41805f1663bcbddfa842e00b85370127f9b1d1b" } -} \ No newline at end of file +} diff --git a/test/fixtures/v4/tt/did-idvc-wrapped-signed-wrong-binding.json b/test/fixtures/v4/tt/did-idvc-wrapped-signed-wrong-binding.json index 43660bea..2f127a5e 100644 --- a/test/fixtures/v4/tt/did-idvc-wrapped-signed-wrong-binding.json +++ b/test/fixtures/v4/tt/did-idvc-wrapped-signed-wrong-binding.json @@ -118,14 +118,14 @@ "proof": { "type": "TradeTrustMerkleProofSignature2018", "proofPurpose": "assertionMethod", - "targetHash": "f79bfd314da2a463564aba2f42c5e659f8945b38fae3572c7e2ada7fcd2b9926", + "targetHash": "88f867091f5c30fe0f3784affacbf8f1b68b0fb88a7cc099886deb056806088f", "proofs": [], - "merkleRoot": "f79bfd314da2a463564aba2f42c5e659f8945b38fae3572c7e2ada7fcd2b9926", - "salts": "W3sidmFsdWUiOiJhNTdjYjUzZjI1ZjE1NWY3YmZlMGZlMTk1ZjZlZDk0YTgzMzhkOGI3NzBjZGU1YjEwZjBjOGUwNGZlYTkyMjgxIiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6ImYxM2E1ODM1MTllMWM3ZDhlYmM0NWVlNDMzMDYzMDAxZDg4M2M4OTI2MDVhNDNlZDA3YmZiZmNjYjMyM2Q1ZGEiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiNzdjYTlmMGJlOTUyZDM5MjFkMDhiYzhiN2RjMGQ2YTBjZTkyOGVkMzg5Yzg5ZGQyMjZhOTExNGEzM2ZhZGNmOCIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6ImEzOTI5NzBjMWY4ZjAxZDNiMTNkYmRlMTM0MTRmMTBlYTAwOTgyNTNlZDVjNDljN2FiMjczMWY2ZWYzOThiNTAiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiJiNjBhYjBmZDIwYTYyOTliY2FiMTdjYzQ5ODBmZDYzOGI0MjQ1NWQzZTkzOTJkNzcwNjZlMGQ5NGFiYjg5YTY4IiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiIxY2Y2NTFmMTBlZDAyMTMwMzFhYTE4MDQyMmNkOGExODAxNjk3YTc1Y2NkYTdlYmE5ZTZiMmRjODY4YzMyZGY0IiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiJhNjRiMjdkNGM3NmJjYTJiOTY3YmQ2ZDZkZjMzMTY4MTFjMDhiNmMxOWFhNmYwNDBiODJmYWRmZWNkMmM5MTcyIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6Ijc1NTZiNzZhNDFiYjExOTk4MjYxYjY3ZjdkNzA1MjlkZTI2YTcxODc0MDMwMjBiYWRhN2E0NTQyY2Y3YmQxNGEiLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiMjYyZWQzMGJhODliYzZjNjZkNzU0YjYxNmRkOGE3NzZkNGZkYWY0ZDBjZTE3MjRmOWRkYTNjMWE1NDJkMDgyYSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiJlZWU3OWNkNDdiOGJmMzIwMmVhMWE0MTBjOTc1MDU0NDM1MDUyYTQ5OTM5NWQwMDYxZTExY2IxNmMyOTM0ZTBkIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiMzM3ZWVhOGUxNGU5ODA4ZTE0ZGUxYWY2YWIxNTRlMDA1MGFiMzMxNTU2OThjNzMxODRiODc4NWNiNmZjOTg3ZCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLnR5cGUifSx7InZhbHVlIjoiZTRiNTg0YjEyNmNkZGUyZDI5YzM0Y2YzMDkyYmE2MWE4MmYyYmM0YjAwNmRlYTY4Y2M5NzllOWQ4YWQ5YmVkZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMF0ifSx7InZhbHVlIjoiZjM1NTBkYjZhZTE2MDU4MTkxOWZjOTljYTI0YWUwZWE0ZjgyYTJiMmI5MzljZjBjZjZiYjhkMDgxZWY0NTY1ZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiMmI4MTEzOTdhZDQzMWYzNTI3ZDcxZGFiYTZhZDQwNDBjZThjYzRmYTliNjBhNTBjZWY0NzBkYjNmMmEwZDZmYyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiNTc3ODdlZjg4ZTE0Mjg2YzI1NjRjNTNlYmY4ODJiNTE4ODAwMmQwOWUyM2RkMmE4Mjk3NmJhYzdkYTAzYjAzNyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbM10ifSx7InZhbHVlIjoiMjhmNWZhNTYzZThhYjM1MTg0Y2QzNmNhMWFhMTI0NmI2NmY2ODAxYWMzYWE5YjU2OWJhZTJkMGIxZDZhOTM0YyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuaWQifSx7InZhbHVlIjoiYTMwMmZmYjUxMDc0ZGJmOWMyM2RlNmUzZGI1ZDIxNzA4NTA2NGU4ODU2NjM5OGIzZDcyM2Q3NDQyYzg3NzBkNyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEudHlwZVswXSJ9LHsidmFsdWUiOiJjMTVkN2NkNWUwOGQzOWFkNDExYjBlYmQxNTNhZDYzYjRmYmFmNGZiN2Q4YmIzOGRmMGFhYWJlMDM1MDk1NDQxIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1ZXIifSx7InZhbHVlIjoiN2ZiZGFmYTNhYWNjOGNhMGM3NTdkYWQ0NzliMmI2NDE3MjFmNTA3ZGZlOTY4YWNlYzhiOTVhY2ViNmZjY2VjOSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QudWVuIn0seyJ2YWx1ZSI6IjQzZTYwYWExNmQ5MTdhN2FiNGJlZGNiZDgwZTZjOWFlNDBmYmQ1ZWZhYjMwOTUyN2QwOGIyOTYxOTNjYTQ4ODgiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LmNvbXBhbnluYW1lIn0seyJ2YWx1ZSI6IjVlMDQ5MmMxYjVlZDdiMDk1NGY3ZThkZjQ1ZWRmZjkyODgyMTdmY2I3ZTE5OGQ2YzQ5N2UyZTUzZDliOTUzYTAiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LnR5cGVbMF0ifSx7InZhbHVlIjoiMzcxOWMzNjQ2YTQwMWI5MTU3NWUzMWNiM2ZjZWU5ZjkyNjMzMDU4MjBkZDc1NGY0ZDlkNzQzNTk2OWExODhmNiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiNjY4NTNkOTc5ZjFhNWY5YzYxZTVlNDc2NWJlYjljM2IwNGZkYjA5NTY0NjRmYzgyNGUyYjgyYTI2YzY5ODYyYiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuZXhwaXJhdGlvbkRhdGUifSx7InZhbHVlIjoiODU4NTUyOTc5MTYzY2JmY2JjNTg1N2I0ZjJiYmUwYzk4MmU1NzVhNWExZjExZThmOThlNTM2NzJjOWY2NTkyMiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5pZCJ9LHsidmFsdWUiOiI3ZjJmYjU5M2Y1MTAyMzkwZjZlNjNiYjc0NTkyNGVjMTNhYzJjZjg5N2M1MzkyNzAxZDFlZTQzMTQ2MGNkMGY4IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5jcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiZTQ2OTI1ZDhjODQ3YWVlMWUyMjg2ZGZhZGQ4ZjFjYWQ4M2E3N2I3ZTU1YTlhZjQ2ZDI3NjkwM2JjMThhNzljOSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0SW5kZXgifSx7InZhbHVlIjoiMjE4ZTk5MzJhOTVkZmUzYmI0OTVlMzVjOTAxNDU2NDVjNjMzMDZmODU1NDczMWUxM2Q2Njg1ZDliMTcxODYxNiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0Q3JlZGVudGlhbCJ9LHsidmFsdWUiOiI5NDNhODg4NzM5NjM3YTY4MTc3MWVjNzAwZDliZWVjYzgyMGFjY2JlZDdlZjgzOWRjNmViY2QwZjA2YTExMmE5IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1YW5jZURhdGUifSx7InZhbHVlIjoiOTIwMWFmMmZhOTQxZGI4ZTNkYzU4NDdmYzZiMzZkMDI3ZDAzODkwMTg4MmE5MGQ3ZTg4NDRlODU3MzBjZjNmOCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEucHJvb2YudHlwZSJ9LHsidmFsdWUiOiJmMzMwNGJhM2M1ODAxOTFhYmNlZTE3MDc3ODhlNDI0NGYwMjM0YzZjMDIyM2Y1NTA5NTY3MmUyYTNmM2RmMDNjIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5jcmVhdGVkIn0seyJ2YWx1ZSI6ImNiN2Q1ODczNTVhM2FhMzJkOWMyY2M4OWYzMWIwMzIzYzg2MTZmOWRmYzBkMzBmM2FiMjA3MzM0YzllZjFlODgiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnByb29mUHVycG9zZSJ9LHsidmFsdWUiOiI4NmU5NTcxN2UzZTdhMGMyNjJlOTI0MTU2NGZiMTRkZjM0YWUyZDFhMWJhM2JmMDMzNDVhYzBmOTAzMmExY2ExIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5wcm9vZlZhbHVlIn0seyJ2YWx1ZSI6IjBhMTU2YTljNmU5NmMwMGM0OTZmN2EyNThkZTg2MjQ4ZThiMzU3MDM0MDg1N2QwNGZkNzEyZDlhZWY3MzRiNjQiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnZlcmlmaWNhdGlvbk1ldGhvZCJ9LHsidmFsdWUiOiIyM2Y5ZTE4MWVjYWYwMzNlMDEyNmFhMDAzNGUwYTM5YWU1MDI5MGZiZWRkNGE5YjUxODk5Y2JkNDVhZjE2MjBjIiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMudHlwZSJ9LHsidmFsdWUiOiJjOWUwZDUxYmI0ZDA5MTdhNjZmOTliMWJkMTc5ZGM1MTRmNzJjYzgxNWFiYjBjMTIzM2NkNmYwMjU5MzZlNDY2IiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMuY3JlZGVudGlhbFN0YXR1c1R5cGUifSx7InZhbHVlIjoiNWU1MGRkMTczMjVhNjgwMTM5ZTM1ODVlODU0NTkyY2VkMzk3OTE4ODVlNmYzZjg3MTdhOTVhMWY0ZGY1MzFlNSIsInBhdGgiOiJyZW5kZXJNZXRob2QudHlwZSJ9LHsidmFsdWUiOiIwZDRlNTg5OTA5NDdiYTRjZWQzZTY4MzRlZTEzZTU5MjkwZDU5NTAyMDdhOTk2NmFhYzg4ZjJmY2Q2YmRjNjdhIiwicGF0aCI6InJlbmRlck1ldGhvZC5yZW5kZXJNZXRob2RUeXBlIn0seyJ2YWx1ZSI6ImYxYjFjZTQxNzUzMDNhODRkODZhMDU4MDE2ZjBlODBiMmZkMWExZDkyNzlkM2NlNDcyOTk5YTE2MTY4ZDQ5ZDYiLCJwYXRoIjoicmVuZGVyTWV0aG9kLm5hbWUifSx7InZhbHVlIjoiMzFkMGEyMDc4ZmQzNzdjMzkwZjIwMzJlMDU4NWU5ZmIxYjExYzk4OTQ0MDRhYWJjZmY5YWJhOTQ4ZWUyMmUzMCIsInBhdGgiOiJyZW5kZXJNZXRob2QudXJsIn0seyJ2YWx1ZSI6IjRhMTUwYzk0OGFjMGEwMjYxZTE2ZDdjMDg5MjIxNzg0ZWI2ZjY3NmJmNWRkN2YyZTgxYmM3ODIxZWJjNDhiODEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QubmFtZSJ9LHsidmFsdWUiOiI1Njg1NDJmMTg0NTI0YmE2NDg5NmFjNTBlZTc1YTk5YzUzZjkxYzU3NTdmZmQ0YjIwODI5MWIyM2MxYmZlNDE4IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmlkIn0seyJ2YWx1ZSI6IjgxYmVjMzExN2M5ODlmMmFlNmQ4M2NiNGNiMzFiZGEzZDY2YWEzZGRiNjhkYTM3N2IyNTc3OGE2NWQwNWJiNWQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuZGF0ZSJ9LHsidmFsdWUiOiJjNTZkODA3ZDI1YWMzZTA3OWU3Mjc3YWQ0NDkxODU4Mzk3YjI3M2RkNmNkYjVhZWYzMDRlOTg3MmUzNjQ0MGRlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmN1c3RvbWVySWQifSx7InZhbHVlIjoiZjhhYjUyYjVhOGFkYTJhNzRkMmJiNjllMWFhMDYwOGEwM2EzNmJhNmM3Y2Q5Y2RjYWZmOGYyNTNmNjVhYTc0NyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50ZXJtcyJ9LHsidmFsdWUiOiJmNTk2YzEzN2I0ZWUxYjJjMGY4NWQ2ODFkNDMwN2RmN2ZlMDBhMTA5ODJiMWRjZDU1ZTE4OTExNjYyMjE2NDZhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLm5hbWUifSx7InZhbHVlIjoiYzRmY2U1MDg5MTU3OGEzY2M1MmU4NzFmNjM2NDExZTdlOWU2NzAyOTA5MmE4YWE2NGMxYzAyM2YwZWZiODEyMyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6ImNiYWQ1Y2I1YWQ5NzFkM2IzZDAyNzEzYzRhMzYxYTlkOTUxMTE5OThkMjQwYTM1YjAxOTc5Y2RhYWYyNjc5MmUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uY2l0eSJ9LHsidmFsdWUiOiIxODQ0MDIyZWIzYjI5NDM5NzllYjI5MjdlYjJiMjcxZDk4NzZmNDc4ZWExN2ZhMjA1MzhkMjU1OGVkMDUxM2YxIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLnBvc3RhbENvZGUifSx7InZhbHVlIjoiMWM0YzA2NTdkNTRlMTg2NGMwMWI3MTA4ZjljYWZlODI5MDBjMmQ2NDA2ZjhmZTdjZTQwYjFmMTUyODhmZTY5MCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiJkMjkxMGY5NDMzYTg1Mzk5ODQyNzk5ZmVhMTI3ODE5MDM0NGNiMTE4ZGJlMWU3YTM0YzVmZTAxNWQ2MWNkMTk1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55Lm5hbWUifSx7InZhbHVlIjoiNDAwNDllMmUwMWEyMzdmZjA3NjdiN2Q4YjQ4OTFkMmQ2MWQ3MmEyOTA3N2M2MGI2M2E0NzlhZjlmMDcwOWI2ZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6IjQ3YzcxNjQ1OWEzMTEwYWI1YjY1MTI2ZDlkZWM0MGQ4MDBjOWU0NzcxYWFlOGI0YThkMGZlYjQ0NjdlM2NmYTYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuY2l0eSJ9LHsidmFsdWUiOiIwODU4YzQ0MGVlYTI0ZTU3ZTg4YjY3NzQzODIxZTM3Zjg3MWVlYWViNjdiYTJiMGNkZjRlNWNmMzVjNjJkYmY3IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LnBvc3RhbENvZGUifSx7InZhbHVlIjoiZTkwZWJiZWY5YTg3Mzc5MTJiNWMzMDk3YjU4ZTQ0N2Q3YzA1NTEzMjMzYmNiN2FjMDIxOTE3MzJjNzRmYzhmYiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiI2MmVhYTYwZGNkZTUzNDNmNTdhY2Y2MWE2ZmY5ZThlODgxM2UxZjRkYmQ2OGY2N2RjMzRhNmJkZmQ3N2JhNTdlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5uYW1lIn0seyJ2YWx1ZSI6IjU2YzRjMWQ4MjIwNmNkNzgxOTg5MGI1N2FmMWZjMTBhZjZmYjE3ZDBmODE1MDAwY2IyNzM4YjVlYjY2Njg1ZWQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmVtYWlsIn0seyJ2YWx1ZSI6IjA1MmY3MTUwYTgzYzUwMjU1MzA4MDMyMWRhZDJhOGUxMTMwMjJhZDMyNWZmYTk1NTYxZmI2ODk4YTJjZGUyZTEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiIwNTI4NDFlNGQxYzA3MDBlN2VjYzE1MjgzNzE4YTQwOTA0MzQyNjM1MzY1N2Q2ODAxNGZhYjQ1ZDZkODY2MmZlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0ucXVhbnRpdHkifSx7InZhbHVlIjoiNWEyZTc1YjVlODg3NjI1ZmE5MzEwOGNlZDIzZmVlNjA2MDg5Nzk0OWJhYWJkNDZkZTM4YjBiNmZiMjYzNWY5OSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiI1Yzc3NDcwYzJlOTQ1MTk5OThjYjFhODhhOTZlNTMxOWM3NDhmYWNmNmU3Y2ExMzViOTYyMWJiMzQ0ZGY0YThiIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uYW1vdW50In0seyJ2YWx1ZSI6ImVmMDUyZDE5ZTIzNmNjNzU3ODlkNGM5NTAxMDU1YWZkNjk1ZDY2YTEwYTI1YTY4YmFjZDFlMDJhNjBkMmNkMjEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiI1YzVjMWY4ZjZhM2M5YWUzZWZjM2IyOWQ3ZjQ0NjQ5OTc4NmYxMjUxZDdjNWIyNzk4ODBhNDQ4NzQ5MDRjMjEzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0ucXVhbnRpdHkifSx7InZhbHVlIjoiMDllMDg0NzA4MTczMjIzZmJkYzA1NTQwM2YwMzUyMDNkMTE1M2RmNzVmZWE5N2E5ZTNjMWJjMGRiMzRmZTFlZSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiI0MGJlNGRlMDBlOWZkYTBhODY2MzM4ZjczZmI1OWNlNzFkNDg0ZTcyYWE5YTg2ZmE3MjA2YWRiNjYzNWI1YmQyIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uYW1vdW50In0seyJ2YWx1ZSI6ImMxZGRjN2FjMDkyY2Q4YTY4MGE0NGUzMjBmMzNmZmVkN2NjZTdkZTFiNjc5OGMyMjY4MTViOGMxOGIzODAzMjAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiIxMzM3OTBiYTI1YTI3YzA3MzZkZmViMGU1YWQ5MDMxMWRlYzM2NmYwMmZjYTM3MDQ1ZDdmNmJlY2E1ZjU1YWE2IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0ucXVhbnRpdHkifSx7InZhbHVlIjoiNGY3NGFiZTMwMTIzYzNhMWNmZTZjZDQ1NWY0ODdmYzk2ZjAwNzhlMzY5OTY2YzZiYTdkMTcxYmQ0YzU2MjhmYiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiJjZGI3NGE4MjZhNzg0YWEyMTVjNmQyZTFjYjJiMjA2ODdhMmNmYWJjMmMzNzQ0ZmFlZjUwMWQ2OWNiOGNkMDdlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uYW1vdW50In0seyJ2YWx1ZSI6IjE5M2ExYmYzY2U2YWI0NzA5MTRiOTk2ZThmZTQ3ODNkNjViMDczNWFkOWM4MTAyM2RjMTRkZTc5NzgxNWEwY2QiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Quc3VidG90YWwifSx7InZhbHVlIjoiYzRlZjdmNDgwZjlkMjY5OTQ5YWExYTMzM2Q1OGI3MDg5NzA1YzY0YTg4Zjk2OGYyODBiY2VkYTA3YWFmYzk4ZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXgifSx7InZhbHVlIjoiNTBkNzI4NTZkYTNlNzczNjhmZDg1YTc2ZjBkZTczNjgyZjlkNzI1Mjg3MGMxNWIxODljMGVkZTMzZmQ2Yjc5NyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXhUb3RhbCJ9LHsidmFsdWUiOiI4OGFiOGYzODU4MjM1ZWU2NGVkOTcxYThjODUzYWNlZjBjOGE2NDMzODI0NGQwODQxZDBlNjBmYTk0OWUyYmIxIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnRvdGFsIn1d", + "merkleRoot": "88f867091f5c30fe0f3784affacbf8f1b68b0fb88a7cc099886deb056806088f", + "salts": "W3sidmFsdWUiOiIzYTllZTY0M2EyYmRiYjIwNTM0NWUxYWNkYjBkMTg5MTc5ZDQ2NDkxZGMxZDYwYzU2ODM3ZWIxMzBkYWQ2OGVjIiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6IjIzNzRlOWZiZTViZDY5YzhkYzIyNGIyZjk4NzNkMTY0YWYwMjcxMjViM2VjYTYzYWU3MWM2OTE5ODBhZDdhZTgiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiZTM4MTMwZmM5MjJmYTQwMzBhYzEyZGI1M2YwNmVjYzRmNzljODhmOTViNzk1ZWI4N2U2MGEwNjc1OWUyNWE1MiIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6IjY1NWI5MTgzYTQwYTYwNzc3Zjc0MTlhN2FkYTM5ZGMzMTIzNjIzMzA5MjE0NmM4NzlhMGZhYWQ1MzVjOTc3YWYiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiIwZWMwMDU1NGJhMjI3YmU3OTgyMTg3YjRlYWVhYWVkOWE2OWEwMGEwNjA4MjhmNDUzODcyYjBjOTdjNDcyMTRiIiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiIxNjIxNmUyOWJkYmQ3YmI4ODliYTFhY2ZjNTE4NTM1Y2Y1ZWYyM2M1NzBjM2FlN2Y1NjY3MDFlNWE4MjJmNzgyIiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiIyYWIzOTMyMTdlZTNhNmNjZGE0OTNjMjEwNjc1YjZjNzM4Y2E5YzI0ODcwMjE0ZmRmMzYzYzEwZmU1N2FiZWRiIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6IjBlOTA2ODAwNTc1YmEyNGJiZjhjZDI0NzE3MGJiOGU0MGYwOTE1MTQ1YjNkNWQyNmQzZDNkMDkyYjVkNDMzM2QiLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiZDMxZjc5OTY5YzRhOTU1N2QzYTkwY2FmN2ViZTIyZmZiYmJhM2Q0M2YyNGE4MDFkOGI0YTFkZmU1Njc5NjIwMSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiI2OGI0YTQ4ZjUzMGI2YWUwMTI5NmExOTFhODUyZGZlMmRjMDM4MGYxOWRiYTI1ZGE5NWU1NDE2ZjM0MmQ4NWQ1IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiZjk4YTMzNWFkMmNlZDNhYWExMjIwZGJlYjYyMmY2YTJiZjhkNzQ3MzBiZjk3ZjI2N2NkZTVlZTdhYmFhNWQ5ZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLnR5cGUifSx7InZhbHVlIjoiYjNlMDI5MjBjMDZkZjgwZjUyMjFjMjQ4ZWI4YTgwMTg0OTg1ZTkwYmQ1MTRjNzU1NzM5ZDk0NGE2MTE4YTRhZSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMF0ifSx7InZhbHVlIjoiMTNhN2Q4M2Q5ODVlMjg1Njc0MDA0Mjg5ODI4MDBiMDA2ZWNhNDExMjFlMWI3MjczNzFlNGI0YmRlMTQyOWIwZCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiNjQ3NTY0MDcxZWY5MDBlMTdkZGUwNDdjNmRmMDUzZWRjNmNmZDgxMjZlY2Y3NGY1NjBjZmI5NWUzNWM0NTMzNSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiMDdmYjhiZTUwNjg5YzllN2Y1NDFiYjQ1ZjBmOWEzNjA0YjBlNDNjYWVjOWY5ZmFjOWRlMjA0MzJhMTIxYmEzNCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbM10ifSx7InZhbHVlIjoiZGY3NDkzZDEwZTUzYWZmYjM2YzMzYWY4NWUzOTMxZjcyN2IxYmJhNDFiNjlmMzEyOTE1YjA0MGZhOTQ4ZGU3YyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuaWQifSx7InZhbHVlIjoiMDcwMGQ5NmRlNGEyYThhMzY2YjUwMzFmNDJhZTM2Y2M4MjRiZTE2YWE5MmM4YmQxMDVlOWVhYmFmOTY3OWRhZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEudHlwZVswXSJ9LHsidmFsdWUiOiI1YjU2ODg3YzljYzE5NmY5NTFhMWQyMjE4ZDE2N2I3OTI3Njk5MmRlMjBhYWMwODZmOWVjNmM3YWFjYjc1NjA2IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1ZXIifSx7InZhbHVlIjoiNTA0MTgwZDQwNjJjYTI2OTE1ZTJkNjY5ZDM4YWY1Njc4ODQ1MDg1NzUxZDY4ODliMjk4ZDgxNDMxNTIzOTQ2ZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QudWVuIn0seyJ2YWx1ZSI6IjEzNTQyOWZiMjVhYTcwZTU5ODQ0OWI4NjQ0NWIxY2YxYzliMmFmYTgxYzEyODVhNzRkZTZiMGY4OTRlOTgxZmQiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LmNvbXBhbnluYW1lIn0seyJ2YWx1ZSI6IjE0ZmFkZGY2OWY1MDdlNTU5ZTAxODNiZWY4NThkNjZmNmVhZDU4ZmJkMjBhNzkxMjg1ZWZmYTI3NzI1ZTIwYjUiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LnR5cGVbMF0ifSx7InZhbHVlIjoiMGNmM2I3MGU5NmJmNDgyZDliYTcxM2UzMDA5MzhmYjgxMmJkOGU4YTIwNzcyNDg0ZTMxZjZlNTBiNWI1ODI5NSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiYWJkMTIyZDdmOGU1MTI1Mjk0ODVkYjc1NjM0NzBlYTZkNjg4ZGM3ODIzNWNiMzRmODNmNGUwM2YyMmYwMjk1MCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuZXhwaXJhdGlvbkRhdGUifSx7InZhbHVlIjoiYmFlODZjN2RiOWFjNGRlOTkzNjIzMzE2YTkxNjI3ODUxYWM0MTVlN2ZlMDJlOTVkMDQ0NjBkN2UwNDA4ZGQyMCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5pZCJ9LHsidmFsdWUiOiIxNmZmYWI1NjNhMWM3ZWZmNTA1ZDQ3MTY5NTA4NmE0NmQ0YmE2YjBlMzk1Mjc2MjgyNzQ2NmU3Yzk0YTE5NWRjIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5jcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiODhkZmJmZTY0YTE1MzcwYjUwNTg2YjRhYWY0NTY1NjZlMGQ5MzBmMjgyMDY1NDUxMTBhN2U0ZjE5OWJmM2E5MSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0SW5kZXgifSx7InZhbHVlIjoiZjcwZTAxNjFhMGIzOTQxMTAxZjc1MTYxYTYzN2ViYjA0MzU2NzNiY2IyMGIzNmQ2ZDA4NjY3YTdhMmE3YTJmMCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0Q3JlZGVudGlhbCJ9LHsidmFsdWUiOiI5MTNiNTkwNWI4ZmE1Y2QzOGVmODM4ZjcxMmEzNTNiNzllZmE5ODZjMjM0ZWM5YWY4OGQzNjY2NjU3MGE4NWQzIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1YW5jZURhdGUifSx7InZhbHVlIjoiMjQ2ZDUwYTk2NGNhYTRjMmViMTcyZmE4ZjEyNmExYTUwNWZmZDg5MGUxOTUzZTRmNzcyZWMwMDYyZWVjMzljNyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEucHJvb2YudHlwZSJ9LHsidmFsdWUiOiIxMzUzYjIyNmI0NDk3YzM3MmUyYTAyYzFmNGY1ZjIzODQ0MzA2ZDkxMzBjMDRhMmJjZjhiZjhiY2VkY2EwZDljIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5jcmVhdGVkIn0seyJ2YWx1ZSI6Ijk1OTI2MjcxM2Y1ZDA4YTkxMzgyMGE0ZDM4ZDY4NzNhYzU2ZjZhYWU3ZjczYjE2OTNiMTFhMGQ3MGNhMzI0MjgiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnByb29mUHVycG9zZSJ9LHsidmFsdWUiOiI1M2FjYWEzNzY3OTYyZDg5YTRlNWQxNTBjMmEzODc2Y2NiMzVjYjlkNWY1ZGJlZjAyMGVlOGZhMDgyMzM2MDQ3IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5wcm9vZlZhbHVlIn0seyJ2YWx1ZSI6IjIzYzU5MDUwZWNmZDQwZDRlYTI5YmQ5YjRmYjdlNjJlM2I3N2MxZjk4NDBiZmMwOGU3OGM2ZWU0YTNiOGZiZWMiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnZlcmlmaWNhdGlvbk1ldGhvZCJ9LHsidmFsdWUiOiIwYTJmZjE4OGJmOTUxNGRiZmM5YWJlMjgwMDJlNGU5NGZiM2NjNWViNTlhZmNjZWVkMDY1OTAyYjdhZWE1N2FhIiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMudHlwZSJ9LHsidmFsdWUiOiIxODAwYWE5MTE0Y2I3NDJmNDA2MTY5MzQ3N2I1MjM5MWYyODY2NTgxOWYxOWM3MDMxMjUxZTc5MWEwZjNjODFkIiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMuY3JlZGVudGlhbFN0YXR1c1R5cGUifSx7InZhbHVlIjoiODRlMGFlODM4MjNlOTcyYzNhYWNjNDM4Y2M5MTgxNjRiNmE0ZjA2Zjc1M2Q0YjYxYjg2ZmM5ZGE5N2QyMTdlZSIsInBhdGgiOiJyZW5kZXJNZXRob2QudHlwZSJ9LHsidmFsdWUiOiI5MmMwNDY3NDU0YjJmMmY0OWJhNzczNjgxZGUzZTNkZjY5NGQ1ZjllYTU1YzY1YmMwZWFjN2Y5ZmQ1MTQ1ZjhiIiwicGF0aCI6InJlbmRlck1ldGhvZC5yZW5kZXJNZXRob2RUeXBlIn0seyJ2YWx1ZSI6IjA1Yzk3OWQyN2Q2ZDU0ZGRmY2E2ZTE3Y2RjZGNjYzIyZWFkYzk4YjM4OTdlNDI4ZjMxMTFkZDY5Y2I5N2QwYWQiLCJwYXRoIjoicmVuZGVyTWV0aG9kLm5hbWUifSx7InZhbHVlIjoiNWM0YTFmZjYyNGFlOGRhZjQ1YmRmYjFlYmVjNTAxNTVjMzM1NmY5M2NiMWE0M2E1OWI4M2E5ODFkN2Q3MjFjMCIsInBhdGgiOiJyZW5kZXJNZXRob2QudXJsIn0seyJ2YWx1ZSI6IjgzMjg1YTcyNTMzMDMzZjhiN2YzZmQyYTA0MTRkNDkxZDBlMjYyYzQ4NTM0ZDM1M2UxMDc1NjhlNzNhOGEwODMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QubmFtZSJ9LHsidmFsdWUiOiJlZGEyZjg4YzE2NTYwYWEwYTQ4NTgwZmEwNDgzZjBhMWNiZWY2MjYyMGJmOTgzOWRhOGFiM2RhY2MyODM5YTc4IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmlkIn0seyJ2YWx1ZSI6ImUyMzFmM2RlNGFjZjg5MTU5N2VhNWRjNWYwNWQ4NzA4MzI4ZTkzNWVlNDNkMWRkNWI3YWU1M2I4ZjZjOWUxNjciLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuZGF0ZSJ9LHsidmFsdWUiOiJhMDgwMDY4MmZkYzdiMDAwYjkyYTM3MzZkOTk0MDA4YzY2MGYxYTFiMzI1OWExNjljNjFkYWYwYmVhNmZiNmM5IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmN1c3RvbWVySWQifSx7InZhbHVlIjoiMzk5ZDY0Mjc3ZDg0YTAxMGM1M2U5YjQyYzdiMGQwYWJiZjRmOGY1ODQ0MTBjNDE4NTcxZjZjMjNlOWJhOGNjNiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50ZXJtcyJ9LHsidmFsdWUiOiJjMzRkN2U5OTRhYzQ4Yjk5NTVmYWUxNzAxMzUwNThlMGE5YzQ3M2JjNjI0MWYwMTRkMDk4ZjFkMWY0YWY0MmYxIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLm5hbWUifSx7InZhbHVlIjoiZGZmMjUzYWUzYTZiMmQ3NDY2MWEzOTM5NjAwMDQ1NDc2OWJmZDFlYzZjMDFmYTk2NGY2NGZhN2NhNjBmMTJiOSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6Ijk5MTBkM2IxM2U5MDA3YWMwOGY4MjI5MzhjMzAzYzU0OTIzMmRhNDI0OGYyYjJjZGVmMTBmMzBhYzhjYTdlOTIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uY2l0eSJ9LHsidmFsdWUiOiIyMDRmMTA4ZDkyYTk1MmQ1MmNkZTkzNDMwOTg5MjJlYTA0MmFjMzcyOTllMzBiYjEzZTBhNzcyNGY1ODA5YzU2IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLnBvc3RhbENvZGUifSx7InZhbHVlIjoiZWRlNDBjZTRmMGI2ZjIzNmYyYzY2OTU2YmY4YThiMWYxZjRmMjgzYTUxNjJhYTZlNWZkMWU5MjA1MDNlMjBlMSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiIwZGY3ZWE4NDJjODMxMDUwNjU0MDRhN2Q0NjE1MDlhNDg5OGY4ZGM1OGY0ZTkwZTJmZDBkYjFjY2JjNGRlNWMzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55Lm5hbWUifSx7InZhbHVlIjoiYTMzNzVlMTY4NmQ5YzhlYWE4Nzk0YmE1MDQwYjliOWRlNDAwMDQ3NWI5MTFkNTllOWY4YTVlNmVjYmM0YjVhNyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6IjZkNTU3NzI1Mjg1OTFiNjk0YzMwMGNhMWE4MWJkYWRlMzk5ZDQ3Yjg0MTFmOWVhM2YzNmEyOTliMzU0ZGUxMGYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuY2l0eSJ9LHsidmFsdWUiOiJlNmY0YzQ3MjA3MTQzNGY1NmUwMzM2NzIxYmI4MzgzMjZlZjE0MTg5YWNiZWYwZDE2N2IxNjYxOWUyYzJjNWViIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LnBvc3RhbENvZGUifSx7InZhbHVlIjoiN2QyMjg1NjYyZTk1NTQwOTVhOWMwOGM1NzFlMDAzZDkzNzU3NGU4ZDc0MWI1MjhmYTlhNzVlZmRkZTdkNGM5OSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiI4YzZmNzA5ZGQ5MGU0NmJiN2VhMTc0ZTVmYzI3MGEzZjQyZTRjYTRmYmJkYzI1MTg0NjFlMDliMDE4OTliNjEzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5uYW1lIn0seyJ2YWx1ZSI6IjI3ZWRiNTY4MTA2NzdjNTBlNDc2Mzc5ZjBjMWU0NmRjZjUyNDFhZDkwMzg1OWJiYjY3NTJiYzk4YTM2Zjc1N2IiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmVtYWlsIn0seyJ2YWx1ZSI6IjExNzU1YjcyNDBkNmY5ZTlkMWMyODFkMGI0MDFjYzQyZWQ3ZDhlMGRiMDAzODUyMTdlNmZkYTM4ZDI1MGZkMDIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiJmZDM1ODM1NjNiZDZhNzA1ZjA1YWY4MTU1MDUwNDcyOWExZjg3MmU3N2M0ZWRhZWUxMTIyNWU2ODJlZWE1NjZhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0ucXVhbnRpdHkifSx7InZhbHVlIjoiMmE4YWE3OTA0Y2NlYzkyNGFjYTllZjRhYWY3MGQwODFhNGYxZDllMTRmNGU2ZTZmMWNlNDM2MjRjYzY4NGY5NSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiJlZWNiZmNiMzJkZjgxOTMzZDk0YjVjN2Y1ZmFjM2IzZWZkZDM1ZGVmYzI1NjFhMGRiNmViZDM4YTdjZmZlNjg0IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uYW1vdW50In0seyJ2YWx1ZSI6IjEzMGJjYmM4MGU1YWNhZTliODNkZDlkMzk2ODliMTkyZTk2MDEyOWYxYjBlNmQwOGU2MjI2Y2E2OTA0ODA3MDgiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiJhNDlhZmM5MDQxODZlMTk1ZTIxODQ3MmYwYzg4MGUyY2I2NjA1NGFmYTU0MjBlYzVjMTZiYzVlZjAwZmNiZWQ4IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0ucXVhbnRpdHkifSx7InZhbHVlIjoiOTA1OTMzOWFmN2UxMWU5N2RkMDk3YWU5NTllZjE3YzkwNmRlMDZmZTllZDExYTVkN2NiY2E3Y2FhZjU3MzhlMyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiJjYzE2MTk5MGVhYjc4N2M0N2NlMGE1ZmJiZjU2Yzg5NzdhY2Q3ODNhOWIzZjY4MWU2NzlmODM5OWM2ZGE4ZDQ5IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uYW1vdW50In0seyJ2YWx1ZSI6ImYwM2I5NTJjNWRmZTgyYjYwZGI5Nzc1MDgxY2U1YjEyMDViNjVjY2QxNDIzNzZkYmRhNjZmM2RmNDVmZjUyNzAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiIyZmQ1M2EwM2M4ZGJjODIyZjAyNjUyNjlhYjhmZWU0NWZkMjY2NjFkMWNmZGY2N2VlNGM2OWNjNzY5YzM0MmM5IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0ucXVhbnRpdHkifSx7InZhbHVlIjoiZTA0MGJiOGI0MWM1MDk0YzAyMWQwN2IyYTJlODI4YTg2MGM5MmUxNTU0ZTFlMzZmZjQ0YzgzYjA1YzU0OWNiOSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiJkOWFkMDljMjY4OGJmMWY3MmIzNjgxNWNlNjBkMzA3NTE1Y2UzN2EzMTRhMTg0MTFiMGVmY2NiYTE4Mzc1ZDRlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uYW1vdW50In0seyJ2YWx1ZSI6ImQ3YTNhNzQ4YmQzZjJmYTg0ZWQ5ODBlZmU0ZGEyZmFjODZlMDRhMjRkMDY5MjA1OGRjNzhjYWFhOGZmZGY1NzciLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Quc3VidG90YWwifSx7InZhbHVlIjoiMGE3NjMyODdlZTZmM2MwMzdhNWFmMzUyMjcxYjAyNmYwOWVjZTIzNmRlMDA3YjZlNDA2MzRjOGIwMjRhNzU4MiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXgifSx7InZhbHVlIjoiZGNkYjE3YTE3N2M4MjQ5NGRlODU0N2ViMWU2NTBlOTVhNTVlMTg4MTNhZTYzMmRiODVhN2Y4YTExOTA0MDY2OSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXhUb3RhbCJ9LHsidmFsdWUiOiJjMDViODMxNzljN2E5MmFlZDM4YjE1OTUzMjY2ZjVjYjNlNDFiMWY3MDQxZTBjMDgyZDQ2MzU1MmVkMDhkYTYxIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnRvdGFsIn1d", "privacy": { "obfuscated": [] }, - "key": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C#controller", - "signature": "0x54fd94d1e350982ad6c9d0494db89ffabdc601650d9e3c68d71ad484572cf6f22d8da8aab95ad5751302e3a444e6598c7a30658ae699acea0aea9ed1de0ec2221b" + "key": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller", + "signature": "0x7b66bf13d7f8c7c4ea71b102525ff5ea3a052097d3be31cf0650804407067efd5d7f0e985377d0d4aa19ca975f15dfd7093b4e1ab6c87e7e1e0ce5c430fc0bdf1c" } } \ No newline at end of file diff --git a/test/fixtures/v4/tt/did-idvc-wrapped-signed.json b/test/fixtures/v4/tt/did-idvc-wrapped-signed.json index 2c2848ff..3d495991 100644 --- a/test/fixtures/v4/tt/did-idvc-wrapped-signed.json +++ b/test/fixtures/v4/tt/did-idvc-wrapped-signed.json @@ -3,10 +3,7 @@ "https://www.w3.org/2018/credentials/v1", "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" ], - "type": [ - "VerifiableCredential", - "TradeTrustCredential" - ], + "type": ["VerifiableCredential", "TradeTrustCredential"], "validFrom": "2021-03-08T12:00:00+08:00", "issuer": { "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", @@ -25,16 +22,12 @@ "https://w3id.org/vc/status-list/2021/v1" ], "id": "https://sbl.alwaysdata.net/oa/credentials/123456789", - "type": [ - "VerifiableCredential" - ], + "type": ["VerifiableCredential"], "issuer": "did:web:sbl.alwaysdata.net:oa", "credentialSubject": { "uen": "198801234E", "companyname": "My Own Company Pte Ltd", - "type": [ - "CorporateBasicDetails" - ], + "type": ["CorporateBasicDetails"], "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C" }, "expirationDate": "2023-11-01T06:45:43Z", @@ -128,4 +121,4 @@ "key": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C#controller", "signature": "0x76c3def684b98da04733f8f47c596f2ab0ba943cd1ea3b80431e2580197159ea36da3f6e95ec891eacf1fe4fcfeb2997eade29e9a0aa0da44c24ded5a3d951db1c" } -} \ No newline at end of file +} diff --git a/test/fixtures/v4/tt/did-idvc-wrapped-tampered-signature.json b/test/fixtures/v4/tt/did-idvc-wrapped-tampered-signature.json index 7f73f29d..d7a299b5 100644 --- a/test/fixtures/v4/tt/did-idvc-wrapped-tampered-signature.json +++ b/test/fixtures/v4/tt/did-idvc-wrapped-tampered-signature.json @@ -3,10 +3,7 @@ "https://www.w3.org/2018/credentials/v1", "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" ], - "type": [ - "VerifiableCredential", - "TradeTrustCredential" - ], + "type": ["VerifiableCredential", "TradeTrustCredential"], "validFrom": "2021-03-08T12:00:00+08:00", "issuer": { "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", @@ -25,16 +22,12 @@ "https://w3id.org/vc/status-list/2021/v1" ], "id": "https://sbl.alwaysdata.net/oa/credentials/123456789", - "type": [ - "VerifiableCredential" - ], + "type": ["VerifiableCredential"], "issuer": "did:web:sbl.alwaysdata.net:oa", "credentialSubject": { "uen": "198801234E", "companyname": "My Own Company Pte Ltd", - "type": [ - "CorporateBasicDetails" - ], + "type": ["CorporateBasicDetails"], "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C" }, "expirationDate": "2023-11-01T06:45:43Z", @@ -126,4 +119,4 @@ "obfuscated": [] } } -} \ No newline at end of file +} diff --git a/test/fixtures/v4/tt/did-idvc-wrapped-wrong-binding.json b/test/fixtures/v4/tt/did-idvc-wrapped-wrong-binding.json index c9f1b297..74775749 100644 --- a/test/fixtures/v4/tt/did-idvc-wrapped-wrong-binding.json +++ b/test/fixtures/v4/tt/did-idvc-wrapped-wrong-binding.json @@ -118,10 +118,10 @@ "proof": { "type": "TradeTrustMerkleProofSignature2018", "proofPurpose": "assertionMethod", - "targetHash": "f79bfd314da2a463564aba2f42c5e659f8945b38fae3572c7e2ada7fcd2b9926", + "targetHash": "88f867091f5c30fe0f3784affacbf8f1b68b0fb88a7cc099886deb056806088f", "proofs": [], - "merkleRoot": "f79bfd314da2a463564aba2f42c5e659f8945b38fae3572c7e2ada7fcd2b9926", - "salts": "W3sidmFsdWUiOiJhNTdjYjUzZjI1ZjE1NWY3YmZlMGZlMTk1ZjZlZDk0YTgzMzhkOGI3NzBjZGU1YjEwZjBjOGUwNGZlYTkyMjgxIiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6ImYxM2E1ODM1MTllMWM3ZDhlYmM0NWVlNDMzMDYzMDAxZDg4M2M4OTI2MDVhNDNlZDA3YmZiZmNjYjMyM2Q1ZGEiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiNzdjYTlmMGJlOTUyZDM5MjFkMDhiYzhiN2RjMGQ2YTBjZTkyOGVkMzg5Yzg5ZGQyMjZhOTExNGEzM2ZhZGNmOCIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6ImEzOTI5NzBjMWY4ZjAxZDNiMTNkYmRlMTM0MTRmMTBlYTAwOTgyNTNlZDVjNDljN2FiMjczMWY2ZWYzOThiNTAiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiJiNjBhYjBmZDIwYTYyOTliY2FiMTdjYzQ5ODBmZDYzOGI0MjQ1NWQzZTkzOTJkNzcwNjZlMGQ5NGFiYjg5YTY4IiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiIxY2Y2NTFmMTBlZDAyMTMwMzFhYTE4MDQyMmNkOGExODAxNjk3YTc1Y2NkYTdlYmE5ZTZiMmRjODY4YzMyZGY0IiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiJhNjRiMjdkNGM3NmJjYTJiOTY3YmQ2ZDZkZjMzMTY4MTFjMDhiNmMxOWFhNmYwNDBiODJmYWRmZWNkMmM5MTcyIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6Ijc1NTZiNzZhNDFiYjExOTk4MjYxYjY3ZjdkNzA1MjlkZTI2YTcxODc0MDMwMjBiYWRhN2E0NTQyY2Y3YmQxNGEiLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiMjYyZWQzMGJhODliYzZjNjZkNzU0YjYxNmRkOGE3NzZkNGZkYWY0ZDBjZTE3MjRmOWRkYTNjMWE1NDJkMDgyYSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiJlZWU3OWNkNDdiOGJmMzIwMmVhMWE0MTBjOTc1MDU0NDM1MDUyYTQ5OTM5NWQwMDYxZTExY2IxNmMyOTM0ZTBkIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiMzM3ZWVhOGUxNGU5ODA4ZTE0ZGUxYWY2YWIxNTRlMDA1MGFiMzMxNTU2OThjNzMxODRiODc4NWNiNmZjOTg3ZCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLnR5cGUifSx7InZhbHVlIjoiZTRiNTg0YjEyNmNkZGUyZDI5YzM0Y2YzMDkyYmE2MWE4MmYyYmM0YjAwNmRlYTY4Y2M5NzllOWQ4YWQ5YmVkZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMF0ifSx7InZhbHVlIjoiZjM1NTBkYjZhZTE2MDU4MTkxOWZjOTljYTI0YWUwZWE0ZjgyYTJiMmI5MzljZjBjZjZiYjhkMDgxZWY0NTY1ZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiMmI4MTEzOTdhZDQzMWYzNTI3ZDcxZGFiYTZhZDQwNDBjZThjYzRmYTliNjBhNTBjZWY0NzBkYjNmMmEwZDZmYyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiNTc3ODdlZjg4ZTE0Mjg2YzI1NjRjNTNlYmY4ODJiNTE4ODAwMmQwOWUyM2RkMmE4Mjk3NmJhYzdkYTAzYjAzNyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbM10ifSx7InZhbHVlIjoiMjhmNWZhNTYzZThhYjM1MTg0Y2QzNmNhMWFhMTI0NmI2NmY2ODAxYWMzYWE5YjU2OWJhZTJkMGIxZDZhOTM0YyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuaWQifSx7InZhbHVlIjoiYTMwMmZmYjUxMDc0ZGJmOWMyM2RlNmUzZGI1ZDIxNzA4NTA2NGU4ODU2NjM5OGIzZDcyM2Q3NDQyYzg3NzBkNyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEudHlwZVswXSJ9LHsidmFsdWUiOiJjMTVkN2NkNWUwOGQzOWFkNDExYjBlYmQxNTNhZDYzYjRmYmFmNGZiN2Q4YmIzOGRmMGFhYWJlMDM1MDk1NDQxIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1ZXIifSx7InZhbHVlIjoiN2ZiZGFmYTNhYWNjOGNhMGM3NTdkYWQ0NzliMmI2NDE3MjFmNTA3ZGZlOTY4YWNlYzhiOTVhY2ViNmZjY2VjOSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QudWVuIn0seyJ2YWx1ZSI6IjQzZTYwYWExNmQ5MTdhN2FiNGJlZGNiZDgwZTZjOWFlNDBmYmQ1ZWZhYjMwOTUyN2QwOGIyOTYxOTNjYTQ4ODgiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LmNvbXBhbnluYW1lIn0seyJ2YWx1ZSI6IjVlMDQ5MmMxYjVlZDdiMDk1NGY3ZThkZjQ1ZWRmZjkyODgyMTdmY2I3ZTE5OGQ2YzQ5N2UyZTUzZDliOTUzYTAiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LnR5cGVbMF0ifSx7InZhbHVlIjoiMzcxOWMzNjQ2YTQwMWI5MTU3NWUzMWNiM2ZjZWU5ZjkyNjMzMDU4MjBkZDc1NGY0ZDlkNzQzNTk2OWExODhmNiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiNjY4NTNkOTc5ZjFhNWY5YzYxZTVlNDc2NWJlYjljM2IwNGZkYjA5NTY0NjRmYzgyNGUyYjgyYTI2YzY5ODYyYiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuZXhwaXJhdGlvbkRhdGUifSx7InZhbHVlIjoiODU4NTUyOTc5MTYzY2JmY2JjNTg1N2I0ZjJiYmUwYzk4MmU1NzVhNWExZjExZThmOThlNTM2NzJjOWY2NTkyMiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5pZCJ9LHsidmFsdWUiOiI3ZjJmYjU5M2Y1MTAyMzkwZjZlNjNiYjc0NTkyNGVjMTNhYzJjZjg5N2M1MzkyNzAxZDFlZTQzMTQ2MGNkMGY4IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5jcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiZTQ2OTI1ZDhjODQ3YWVlMWUyMjg2ZGZhZGQ4ZjFjYWQ4M2E3N2I3ZTU1YTlhZjQ2ZDI3NjkwM2JjMThhNzljOSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0SW5kZXgifSx7InZhbHVlIjoiMjE4ZTk5MzJhOTVkZmUzYmI0OTVlMzVjOTAxNDU2NDVjNjMzMDZmODU1NDczMWUxM2Q2Njg1ZDliMTcxODYxNiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0Q3JlZGVudGlhbCJ9LHsidmFsdWUiOiI5NDNhODg4NzM5NjM3YTY4MTc3MWVjNzAwZDliZWVjYzgyMGFjY2JlZDdlZjgzOWRjNmViY2QwZjA2YTExMmE5IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1YW5jZURhdGUifSx7InZhbHVlIjoiOTIwMWFmMmZhOTQxZGI4ZTNkYzU4NDdmYzZiMzZkMDI3ZDAzODkwMTg4MmE5MGQ3ZTg4NDRlODU3MzBjZjNmOCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEucHJvb2YudHlwZSJ9LHsidmFsdWUiOiJmMzMwNGJhM2M1ODAxOTFhYmNlZTE3MDc3ODhlNDI0NGYwMjM0YzZjMDIyM2Y1NTA5NTY3MmUyYTNmM2RmMDNjIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5jcmVhdGVkIn0seyJ2YWx1ZSI6ImNiN2Q1ODczNTVhM2FhMzJkOWMyY2M4OWYzMWIwMzIzYzg2MTZmOWRmYzBkMzBmM2FiMjA3MzM0YzllZjFlODgiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnByb29mUHVycG9zZSJ9LHsidmFsdWUiOiI4NmU5NTcxN2UzZTdhMGMyNjJlOTI0MTU2NGZiMTRkZjM0YWUyZDFhMWJhM2JmMDMzNDVhYzBmOTAzMmExY2ExIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5wcm9vZlZhbHVlIn0seyJ2YWx1ZSI6IjBhMTU2YTljNmU5NmMwMGM0OTZmN2EyNThkZTg2MjQ4ZThiMzU3MDM0MDg1N2QwNGZkNzEyZDlhZWY3MzRiNjQiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnZlcmlmaWNhdGlvbk1ldGhvZCJ9LHsidmFsdWUiOiIyM2Y5ZTE4MWVjYWYwMzNlMDEyNmFhMDAzNGUwYTM5YWU1MDI5MGZiZWRkNGE5YjUxODk5Y2JkNDVhZjE2MjBjIiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMudHlwZSJ9LHsidmFsdWUiOiJjOWUwZDUxYmI0ZDA5MTdhNjZmOTliMWJkMTc5ZGM1MTRmNzJjYzgxNWFiYjBjMTIzM2NkNmYwMjU5MzZlNDY2IiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMuY3JlZGVudGlhbFN0YXR1c1R5cGUifSx7InZhbHVlIjoiNWU1MGRkMTczMjVhNjgwMTM5ZTM1ODVlODU0NTkyY2VkMzk3OTE4ODVlNmYzZjg3MTdhOTVhMWY0ZGY1MzFlNSIsInBhdGgiOiJyZW5kZXJNZXRob2QudHlwZSJ9LHsidmFsdWUiOiIwZDRlNTg5OTA5NDdiYTRjZWQzZTY4MzRlZTEzZTU5MjkwZDU5NTAyMDdhOTk2NmFhYzg4ZjJmY2Q2YmRjNjdhIiwicGF0aCI6InJlbmRlck1ldGhvZC5yZW5kZXJNZXRob2RUeXBlIn0seyJ2YWx1ZSI6ImYxYjFjZTQxNzUzMDNhODRkODZhMDU4MDE2ZjBlODBiMmZkMWExZDkyNzlkM2NlNDcyOTk5YTE2MTY4ZDQ5ZDYiLCJwYXRoIjoicmVuZGVyTWV0aG9kLm5hbWUifSx7InZhbHVlIjoiMzFkMGEyMDc4ZmQzNzdjMzkwZjIwMzJlMDU4NWU5ZmIxYjExYzk4OTQ0MDRhYWJjZmY5YWJhOTQ4ZWUyMmUzMCIsInBhdGgiOiJyZW5kZXJNZXRob2QudXJsIn0seyJ2YWx1ZSI6IjRhMTUwYzk0OGFjMGEwMjYxZTE2ZDdjMDg5MjIxNzg0ZWI2ZjY3NmJmNWRkN2YyZTgxYmM3ODIxZWJjNDhiODEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QubmFtZSJ9LHsidmFsdWUiOiI1Njg1NDJmMTg0NTI0YmE2NDg5NmFjNTBlZTc1YTk5YzUzZjkxYzU3NTdmZmQ0YjIwODI5MWIyM2MxYmZlNDE4IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmlkIn0seyJ2YWx1ZSI6IjgxYmVjMzExN2M5ODlmMmFlNmQ4M2NiNGNiMzFiZGEzZDY2YWEzZGRiNjhkYTM3N2IyNTc3OGE2NWQwNWJiNWQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuZGF0ZSJ9LHsidmFsdWUiOiJjNTZkODA3ZDI1YWMzZTA3OWU3Mjc3YWQ0NDkxODU4Mzk3YjI3M2RkNmNkYjVhZWYzMDRlOTg3MmUzNjQ0MGRlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmN1c3RvbWVySWQifSx7InZhbHVlIjoiZjhhYjUyYjVhOGFkYTJhNzRkMmJiNjllMWFhMDYwOGEwM2EzNmJhNmM3Y2Q5Y2RjYWZmOGYyNTNmNjVhYTc0NyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50ZXJtcyJ9LHsidmFsdWUiOiJmNTk2YzEzN2I0ZWUxYjJjMGY4NWQ2ODFkNDMwN2RmN2ZlMDBhMTA5ODJiMWRjZDU1ZTE4OTExNjYyMjE2NDZhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLm5hbWUifSx7InZhbHVlIjoiYzRmY2U1MDg5MTU3OGEzY2M1MmU4NzFmNjM2NDExZTdlOWU2NzAyOTA5MmE4YWE2NGMxYzAyM2YwZWZiODEyMyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6ImNiYWQ1Y2I1YWQ5NzFkM2IzZDAyNzEzYzRhMzYxYTlkOTUxMTE5OThkMjQwYTM1YjAxOTc5Y2RhYWYyNjc5MmUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uY2l0eSJ9LHsidmFsdWUiOiIxODQ0MDIyZWIzYjI5NDM5NzllYjI5MjdlYjJiMjcxZDk4NzZmNDc4ZWExN2ZhMjA1MzhkMjU1OGVkMDUxM2YxIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLnBvc3RhbENvZGUifSx7InZhbHVlIjoiMWM0YzA2NTdkNTRlMTg2NGMwMWI3MTA4ZjljYWZlODI5MDBjMmQ2NDA2ZjhmZTdjZTQwYjFmMTUyODhmZTY5MCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiJkMjkxMGY5NDMzYTg1Mzk5ODQyNzk5ZmVhMTI3ODE5MDM0NGNiMTE4ZGJlMWU3YTM0YzVmZTAxNWQ2MWNkMTk1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55Lm5hbWUifSx7InZhbHVlIjoiNDAwNDllMmUwMWEyMzdmZjA3NjdiN2Q4YjQ4OTFkMmQ2MWQ3MmEyOTA3N2M2MGI2M2E0NzlhZjlmMDcwOWI2ZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6IjQ3YzcxNjQ1OWEzMTEwYWI1YjY1MTI2ZDlkZWM0MGQ4MDBjOWU0NzcxYWFlOGI0YThkMGZlYjQ0NjdlM2NmYTYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuY2l0eSJ9LHsidmFsdWUiOiIwODU4YzQ0MGVlYTI0ZTU3ZTg4YjY3NzQzODIxZTM3Zjg3MWVlYWViNjdiYTJiMGNkZjRlNWNmMzVjNjJkYmY3IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LnBvc3RhbENvZGUifSx7InZhbHVlIjoiZTkwZWJiZWY5YTg3Mzc5MTJiNWMzMDk3YjU4ZTQ0N2Q3YzA1NTEzMjMzYmNiN2FjMDIxOTE3MzJjNzRmYzhmYiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiI2MmVhYTYwZGNkZTUzNDNmNTdhY2Y2MWE2ZmY5ZThlODgxM2UxZjRkYmQ2OGY2N2RjMzRhNmJkZmQ3N2JhNTdlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5uYW1lIn0seyJ2YWx1ZSI6IjU2YzRjMWQ4MjIwNmNkNzgxOTg5MGI1N2FmMWZjMTBhZjZmYjE3ZDBmODE1MDAwY2IyNzM4YjVlYjY2Njg1ZWQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmVtYWlsIn0seyJ2YWx1ZSI6IjA1MmY3MTUwYTgzYzUwMjU1MzA4MDMyMWRhZDJhOGUxMTMwMjJhZDMyNWZmYTk1NTYxZmI2ODk4YTJjZGUyZTEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiIwNTI4NDFlNGQxYzA3MDBlN2VjYzE1MjgzNzE4YTQwOTA0MzQyNjM1MzY1N2Q2ODAxNGZhYjQ1ZDZkODY2MmZlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0ucXVhbnRpdHkifSx7InZhbHVlIjoiNWEyZTc1YjVlODg3NjI1ZmE5MzEwOGNlZDIzZmVlNjA2MDg5Nzk0OWJhYWJkNDZkZTM4YjBiNmZiMjYzNWY5OSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiI1Yzc3NDcwYzJlOTQ1MTk5OThjYjFhODhhOTZlNTMxOWM3NDhmYWNmNmU3Y2ExMzViOTYyMWJiMzQ0ZGY0YThiIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uYW1vdW50In0seyJ2YWx1ZSI6ImVmMDUyZDE5ZTIzNmNjNzU3ODlkNGM5NTAxMDU1YWZkNjk1ZDY2YTEwYTI1YTY4YmFjZDFlMDJhNjBkMmNkMjEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiI1YzVjMWY4ZjZhM2M5YWUzZWZjM2IyOWQ3ZjQ0NjQ5OTc4NmYxMjUxZDdjNWIyNzk4ODBhNDQ4NzQ5MDRjMjEzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0ucXVhbnRpdHkifSx7InZhbHVlIjoiMDllMDg0NzA4MTczMjIzZmJkYzA1NTQwM2YwMzUyMDNkMTE1M2RmNzVmZWE5N2E5ZTNjMWJjMGRiMzRmZTFlZSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiI0MGJlNGRlMDBlOWZkYTBhODY2MzM4ZjczZmI1OWNlNzFkNDg0ZTcyYWE5YTg2ZmE3MjA2YWRiNjYzNWI1YmQyIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uYW1vdW50In0seyJ2YWx1ZSI6ImMxZGRjN2FjMDkyY2Q4YTY4MGE0NGUzMjBmMzNmZmVkN2NjZTdkZTFiNjc5OGMyMjY4MTViOGMxOGIzODAzMjAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiIxMzM3OTBiYTI1YTI3YzA3MzZkZmViMGU1YWQ5MDMxMWRlYzM2NmYwMmZjYTM3MDQ1ZDdmNmJlY2E1ZjU1YWE2IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0ucXVhbnRpdHkifSx7InZhbHVlIjoiNGY3NGFiZTMwMTIzYzNhMWNmZTZjZDQ1NWY0ODdmYzk2ZjAwNzhlMzY5OTY2YzZiYTdkMTcxYmQ0YzU2MjhmYiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiJjZGI3NGE4MjZhNzg0YWEyMTVjNmQyZTFjYjJiMjA2ODdhMmNmYWJjMmMzNzQ0ZmFlZjUwMWQ2OWNiOGNkMDdlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uYW1vdW50In0seyJ2YWx1ZSI6IjE5M2ExYmYzY2U2YWI0NzA5MTRiOTk2ZThmZTQ3ODNkNjViMDczNWFkOWM4MTAyM2RjMTRkZTc5NzgxNWEwY2QiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Quc3VidG90YWwifSx7InZhbHVlIjoiYzRlZjdmNDgwZjlkMjY5OTQ5YWExYTMzM2Q1OGI3MDg5NzA1YzY0YTg4Zjk2OGYyODBiY2VkYTA3YWFmYzk4ZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXgifSx7InZhbHVlIjoiNTBkNzI4NTZkYTNlNzczNjhmZDg1YTc2ZjBkZTczNjgyZjlkNzI1Mjg3MGMxNWIxODljMGVkZTMzZmQ2Yjc5NyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXhUb3RhbCJ9LHsidmFsdWUiOiI4OGFiOGYzODU4MjM1ZWU2NGVkOTcxYThjODUzYWNlZjBjOGE2NDMzODI0NGQwODQxZDBlNjBmYTk0OWUyYmIxIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnRvdGFsIn1d", + "merkleRoot": "88f867091f5c30fe0f3784affacbf8f1b68b0fb88a7cc099886deb056806088f", + "salts": "W3sidmFsdWUiOiIzYTllZTY0M2EyYmRiYjIwNTM0NWUxYWNkYjBkMTg5MTc5ZDQ2NDkxZGMxZDYwYzU2ODM3ZWIxMzBkYWQ2OGVjIiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6IjIzNzRlOWZiZTViZDY5YzhkYzIyNGIyZjk4NzNkMTY0YWYwMjcxMjViM2VjYTYzYWU3MWM2OTE5ODBhZDdhZTgiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiZTM4MTMwZmM5MjJmYTQwMzBhYzEyZGI1M2YwNmVjYzRmNzljODhmOTViNzk1ZWI4N2U2MGEwNjc1OWUyNWE1MiIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6IjY1NWI5MTgzYTQwYTYwNzc3Zjc0MTlhN2FkYTM5ZGMzMTIzNjIzMzA5MjE0NmM4NzlhMGZhYWQ1MzVjOTc3YWYiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiIwZWMwMDU1NGJhMjI3YmU3OTgyMTg3YjRlYWVhYWVkOWE2OWEwMGEwNjA4MjhmNDUzODcyYjBjOTdjNDcyMTRiIiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiIxNjIxNmUyOWJkYmQ3YmI4ODliYTFhY2ZjNTE4NTM1Y2Y1ZWYyM2M1NzBjM2FlN2Y1NjY3MDFlNWE4MjJmNzgyIiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiIyYWIzOTMyMTdlZTNhNmNjZGE0OTNjMjEwNjc1YjZjNzM4Y2E5YzI0ODcwMjE0ZmRmMzYzYzEwZmU1N2FiZWRiIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6IjBlOTA2ODAwNTc1YmEyNGJiZjhjZDI0NzE3MGJiOGU0MGYwOTE1MTQ1YjNkNWQyNmQzZDNkMDkyYjVkNDMzM2QiLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiZDMxZjc5OTY5YzRhOTU1N2QzYTkwY2FmN2ViZTIyZmZiYmJhM2Q0M2YyNGE4MDFkOGI0YTFkZmU1Njc5NjIwMSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiI2OGI0YTQ4ZjUzMGI2YWUwMTI5NmExOTFhODUyZGZlMmRjMDM4MGYxOWRiYTI1ZGE5NWU1NDE2ZjM0MmQ4NWQ1IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiZjk4YTMzNWFkMmNlZDNhYWExMjIwZGJlYjYyMmY2YTJiZjhkNzQ3MzBiZjk3ZjI2N2NkZTVlZTdhYmFhNWQ5ZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLnR5cGUifSx7InZhbHVlIjoiYjNlMDI5MjBjMDZkZjgwZjUyMjFjMjQ4ZWI4YTgwMTg0OTg1ZTkwYmQ1MTRjNzU1NzM5ZDk0NGE2MTE4YTRhZSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMF0ifSx7InZhbHVlIjoiMTNhN2Q4M2Q5ODVlMjg1Njc0MDA0Mjg5ODI4MDBiMDA2ZWNhNDExMjFlMWI3MjczNzFlNGI0YmRlMTQyOWIwZCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiNjQ3NTY0MDcxZWY5MDBlMTdkZGUwNDdjNmRmMDUzZWRjNmNmZDgxMjZlY2Y3NGY1NjBjZmI5NWUzNWM0NTMzNSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiMDdmYjhiZTUwNjg5YzllN2Y1NDFiYjQ1ZjBmOWEzNjA0YjBlNDNjYWVjOWY5ZmFjOWRlMjA0MzJhMTIxYmEzNCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbM10ifSx7InZhbHVlIjoiZGY3NDkzZDEwZTUzYWZmYjM2YzMzYWY4NWUzOTMxZjcyN2IxYmJhNDFiNjlmMzEyOTE1YjA0MGZhOTQ4ZGU3YyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuaWQifSx7InZhbHVlIjoiMDcwMGQ5NmRlNGEyYThhMzY2YjUwMzFmNDJhZTM2Y2M4MjRiZTE2YWE5MmM4YmQxMDVlOWVhYmFmOTY3OWRhZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEudHlwZVswXSJ9LHsidmFsdWUiOiI1YjU2ODg3YzljYzE5NmY5NTFhMWQyMjE4ZDE2N2I3OTI3Njk5MmRlMjBhYWMwODZmOWVjNmM3YWFjYjc1NjA2IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1ZXIifSx7InZhbHVlIjoiNTA0MTgwZDQwNjJjYTI2OTE1ZTJkNjY5ZDM4YWY1Njc4ODQ1MDg1NzUxZDY4ODliMjk4ZDgxNDMxNTIzOTQ2ZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QudWVuIn0seyJ2YWx1ZSI6IjEzNTQyOWZiMjVhYTcwZTU5ODQ0OWI4NjQ0NWIxY2YxYzliMmFmYTgxYzEyODVhNzRkZTZiMGY4OTRlOTgxZmQiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LmNvbXBhbnluYW1lIn0seyJ2YWx1ZSI6IjE0ZmFkZGY2OWY1MDdlNTU5ZTAxODNiZWY4NThkNjZmNmVhZDU4ZmJkMjBhNzkxMjg1ZWZmYTI3NzI1ZTIwYjUiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LnR5cGVbMF0ifSx7InZhbHVlIjoiMGNmM2I3MGU5NmJmNDgyZDliYTcxM2UzMDA5MzhmYjgxMmJkOGU4YTIwNzcyNDg0ZTMxZjZlNTBiNWI1ODI5NSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiYWJkMTIyZDdmOGU1MTI1Mjk0ODVkYjc1NjM0NzBlYTZkNjg4ZGM3ODIzNWNiMzRmODNmNGUwM2YyMmYwMjk1MCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuZXhwaXJhdGlvbkRhdGUifSx7InZhbHVlIjoiYmFlODZjN2RiOWFjNGRlOTkzNjIzMzE2YTkxNjI3ODUxYWM0MTVlN2ZlMDJlOTVkMDQ0NjBkN2UwNDA4ZGQyMCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5pZCJ9LHsidmFsdWUiOiIxNmZmYWI1NjNhMWM3ZWZmNTA1ZDQ3MTY5NTA4NmE0NmQ0YmE2YjBlMzk1Mjc2MjgyNzQ2NmU3Yzk0YTE5NWRjIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5jcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiODhkZmJmZTY0YTE1MzcwYjUwNTg2YjRhYWY0NTY1NjZlMGQ5MzBmMjgyMDY1NDUxMTBhN2U0ZjE5OWJmM2E5MSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0SW5kZXgifSx7InZhbHVlIjoiZjcwZTAxNjFhMGIzOTQxMTAxZjc1MTYxYTYzN2ViYjA0MzU2NzNiY2IyMGIzNmQ2ZDA4NjY3YTdhMmE3YTJmMCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0Q3JlZGVudGlhbCJ9LHsidmFsdWUiOiI5MTNiNTkwNWI4ZmE1Y2QzOGVmODM4ZjcxMmEzNTNiNzllZmE5ODZjMjM0ZWM5YWY4OGQzNjY2NjU3MGE4NWQzIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1YW5jZURhdGUifSx7InZhbHVlIjoiMjQ2ZDUwYTk2NGNhYTRjMmViMTcyZmE4ZjEyNmExYTUwNWZmZDg5MGUxOTUzZTRmNzcyZWMwMDYyZWVjMzljNyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEucHJvb2YudHlwZSJ9LHsidmFsdWUiOiIxMzUzYjIyNmI0NDk3YzM3MmUyYTAyYzFmNGY1ZjIzODQ0MzA2ZDkxMzBjMDRhMmJjZjhiZjhiY2VkY2EwZDljIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5jcmVhdGVkIn0seyJ2YWx1ZSI6Ijk1OTI2MjcxM2Y1ZDA4YTkxMzgyMGE0ZDM4ZDY4NzNhYzU2ZjZhYWU3ZjczYjE2OTNiMTFhMGQ3MGNhMzI0MjgiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnByb29mUHVycG9zZSJ9LHsidmFsdWUiOiI1M2FjYWEzNzY3OTYyZDg5YTRlNWQxNTBjMmEzODc2Y2NiMzVjYjlkNWY1ZGJlZjAyMGVlOGZhMDgyMzM2MDQ3IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5wcm9vZlZhbHVlIn0seyJ2YWx1ZSI6IjIzYzU5MDUwZWNmZDQwZDRlYTI5YmQ5YjRmYjdlNjJlM2I3N2MxZjk4NDBiZmMwOGU3OGM2ZWU0YTNiOGZiZWMiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnZlcmlmaWNhdGlvbk1ldGhvZCJ9LHsidmFsdWUiOiIwYTJmZjE4OGJmOTUxNGRiZmM5YWJlMjgwMDJlNGU5NGZiM2NjNWViNTlhZmNjZWVkMDY1OTAyYjdhZWE1N2FhIiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMudHlwZSJ9LHsidmFsdWUiOiIxODAwYWE5MTE0Y2I3NDJmNDA2MTY5MzQ3N2I1MjM5MWYyODY2NTgxOWYxOWM3MDMxMjUxZTc5MWEwZjNjODFkIiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMuY3JlZGVudGlhbFN0YXR1c1R5cGUifSx7InZhbHVlIjoiODRlMGFlODM4MjNlOTcyYzNhYWNjNDM4Y2M5MTgxNjRiNmE0ZjA2Zjc1M2Q0YjYxYjg2ZmM5ZGE5N2QyMTdlZSIsInBhdGgiOiJyZW5kZXJNZXRob2QudHlwZSJ9LHsidmFsdWUiOiI5MmMwNDY3NDU0YjJmMmY0OWJhNzczNjgxZGUzZTNkZjY5NGQ1ZjllYTU1YzY1YmMwZWFjN2Y5ZmQ1MTQ1ZjhiIiwicGF0aCI6InJlbmRlck1ldGhvZC5yZW5kZXJNZXRob2RUeXBlIn0seyJ2YWx1ZSI6IjA1Yzk3OWQyN2Q2ZDU0ZGRmY2E2ZTE3Y2RjZGNjYzIyZWFkYzk4YjM4OTdlNDI4ZjMxMTFkZDY5Y2I5N2QwYWQiLCJwYXRoIjoicmVuZGVyTWV0aG9kLm5hbWUifSx7InZhbHVlIjoiNWM0YTFmZjYyNGFlOGRhZjQ1YmRmYjFlYmVjNTAxNTVjMzM1NmY5M2NiMWE0M2E1OWI4M2E5ODFkN2Q3MjFjMCIsInBhdGgiOiJyZW5kZXJNZXRob2QudXJsIn0seyJ2YWx1ZSI6IjgzMjg1YTcyNTMzMDMzZjhiN2YzZmQyYTA0MTRkNDkxZDBlMjYyYzQ4NTM0ZDM1M2UxMDc1NjhlNzNhOGEwODMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QubmFtZSJ9LHsidmFsdWUiOiJlZGEyZjg4YzE2NTYwYWEwYTQ4NTgwZmEwNDgzZjBhMWNiZWY2MjYyMGJmOTgzOWRhOGFiM2RhY2MyODM5YTc4IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmlkIn0seyJ2YWx1ZSI6ImUyMzFmM2RlNGFjZjg5MTU5N2VhNWRjNWYwNWQ4NzA4MzI4ZTkzNWVlNDNkMWRkNWI3YWU1M2I4ZjZjOWUxNjciLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuZGF0ZSJ9LHsidmFsdWUiOiJhMDgwMDY4MmZkYzdiMDAwYjkyYTM3MzZkOTk0MDA4YzY2MGYxYTFiMzI1OWExNjljNjFkYWYwYmVhNmZiNmM5IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmN1c3RvbWVySWQifSx7InZhbHVlIjoiMzk5ZDY0Mjc3ZDg0YTAxMGM1M2U5YjQyYzdiMGQwYWJiZjRmOGY1ODQ0MTBjNDE4NTcxZjZjMjNlOWJhOGNjNiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50ZXJtcyJ9LHsidmFsdWUiOiJjMzRkN2U5OTRhYzQ4Yjk5NTVmYWUxNzAxMzUwNThlMGE5YzQ3M2JjNjI0MWYwMTRkMDk4ZjFkMWY0YWY0MmYxIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLm5hbWUifSx7InZhbHVlIjoiZGZmMjUzYWUzYTZiMmQ3NDY2MWEzOTM5NjAwMDQ1NDc2OWJmZDFlYzZjMDFmYTk2NGY2NGZhN2NhNjBmMTJiOSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6Ijk5MTBkM2IxM2U5MDA3YWMwOGY4MjI5MzhjMzAzYzU0OTIzMmRhNDI0OGYyYjJjZGVmMTBmMzBhYzhjYTdlOTIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uY2l0eSJ9LHsidmFsdWUiOiIyMDRmMTA4ZDkyYTk1MmQ1MmNkZTkzNDMwOTg5MjJlYTA0MmFjMzcyOTllMzBiYjEzZTBhNzcyNGY1ODA5YzU2IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLnBvc3RhbENvZGUifSx7InZhbHVlIjoiZWRlNDBjZTRmMGI2ZjIzNmYyYzY2OTU2YmY4YThiMWYxZjRmMjgzYTUxNjJhYTZlNWZkMWU5MjA1MDNlMjBlMSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiIwZGY3ZWE4NDJjODMxMDUwNjU0MDRhN2Q0NjE1MDlhNDg5OGY4ZGM1OGY0ZTkwZTJmZDBkYjFjY2JjNGRlNWMzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55Lm5hbWUifSx7InZhbHVlIjoiYTMzNzVlMTY4NmQ5YzhlYWE4Nzk0YmE1MDQwYjliOWRlNDAwMDQ3NWI5MTFkNTllOWY4YTVlNmVjYmM0YjVhNyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6IjZkNTU3NzI1Mjg1OTFiNjk0YzMwMGNhMWE4MWJkYWRlMzk5ZDQ3Yjg0MTFmOWVhM2YzNmEyOTliMzU0ZGUxMGYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuY2l0eSJ9LHsidmFsdWUiOiJlNmY0YzQ3MjA3MTQzNGY1NmUwMzM2NzIxYmI4MzgzMjZlZjE0MTg5YWNiZWYwZDE2N2IxNjYxOWUyYzJjNWViIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LnBvc3RhbENvZGUifSx7InZhbHVlIjoiN2QyMjg1NjYyZTk1NTQwOTVhOWMwOGM1NzFlMDAzZDkzNzU3NGU4ZDc0MWI1MjhmYTlhNzVlZmRkZTdkNGM5OSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiI4YzZmNzA5ZGQ5MGU0NmJiN2VhMTc0ZTVmYzI3MGEzZjQyZTRjYTRmYmJkYzI1MTg0NjFlMDliMDE4OTliNjEzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5uYW1lIn0seyJ2YWx1ZSI6IjI3ZWRiNTY4MTA2NzdjNTBlNDc2Mzc5ZjBjMWU0NmRjZjUyNDFhZDkwMzg1OWJiYjY3NTJiYzk4YTM2Zjc1N2IiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmVtYWlsIn0seyJ2YWx1ZSI6IjExNzU1YjcyNDBkNmY5ZTlkMWMyODFkMGI0MDFjYzQyZWQ3ZDhlMGRiMDAzODUyMTdlNmZkYTM4ZDI1MGZkMDIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiJmZDM1ODM1NjNiZDZhNzA1ZjA1YWY4MTU1MDUwNDcyOWExZjg3MmU3N2M0ZWRhZWUxMTIyNWU2ODJlZWE1NjZhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0ucXVhbnRpdHkifSx7InZhbHVlIjoiMmE4YWE3OTA0Y2NlYzkyNGFjYTllZjRhYWY3MGQwODFhNGYxZDllMTRmNGU2ZTZmMWNlNDM2MjRjYzY4NGY5NSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiJlZWNiZmNiMzJkZjgxOTMzZDk0YjVjN2Y1ZmFjM2IzZWZkZDM1ZGVmYzI1NjFhMGRiNmViZDM4YTdjZmZlNjg0IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uYW1vdW50In0seyJ2YWx1ZSI6IjEzMGJjYmM4MGU1YWNhZTliODNkZDlkMzk2ODliMTkyZTk2MDEyOWYxYjBlNmQwOGU2MjI2Y2E2OTA0ODA3MDgiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiJhNDlhZmM5MDQxODZlMTk1ZTIxODQ3MmYwYzg4MGUyY2I2NjA1NGFmYTU0MjBlYzVjMTZiYzVlZjAwZmNiZWQ4IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0ucXVhbnRpdHkifSx7InZhbHVlIjoiOTA1OTMzOWFmN2UxMWU5N2RkMDk3YWU5NTllZjE3YzkwNmRlMDZmZTllZDExYTVkN2NiY2E3Y2FhZjU3MzhlMyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiJjYzE2MTk5MGVhYjc4N2M0N2NlMGE1ZmJiZjU2Yzg5NzdhY2Q3ODNhOWIzZjY4MWU2NzlmODM5OWM2ZGE4ZDQ5IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uYW1vdW50In0seyJ2YWx1ZSI6ImYwM2I5NTJjNWRmZTgyYjYwZGI5Nzc1MDgxY2U1YjEyMDViNjVjY2QxNDIzNzZkYmRhNjZmM2RmNDVmZjUyNzAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiIyZmQ1M2EwM2M4ZGJjODIyZjAyNjUyNjlhYjhmZWU0NWZkMjY2NjFkMWNmZGY2N2VlNGM2OWNjNzY5YzM0MmM5IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0ucXVhbnRpdHkifSx7InZhbHVlIjoiZTA0MGJiOGI0MWM1MDk0YzAyMWQwN2IyYTJlODI4YTg2MGM5MmUxNTU0ZTFlMzZmZjQ0YzgzYjA1YzU0OWNiOSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiJkOWFkMDljMjY4OGJmMWY3MmIzNjgxNWNlNjBkMzA3NTE1Y2UzN2EzMTRhMTg0MTFiMGVmY2NiYTE4Mzc1ZDRlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uYW1vdW50In0seyJ2YWx1ZSI6ImQ3YTNhNzQ4YmQzZjJmYTg0ZWQ5ODBlZmU0ZGEyZmFjODZlMDRhMjRkMDY5MjA1OGRjNzhjYWFhOGZmZGY1NzciLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Quc3VidG90YWwifSx7InZhbHVlIjoiMGE3NjMyODdlZTZmM2MwMzdhNWFmMzUyMjcxYjAyNmYwOWVjZTIzNmRlMDA3YjZlNDA2MzRjOGIwMjRhNzU4MiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXgifSx7InZhbHVlIjoiZGNkYjE3YTE3N2M4MjQ5NGRlODU0N2ViMWU2NTBlOTVhNTVlMTg4MTNhZTYzMmRiODVhN2Y4YTExOTA0MDY2OSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXhUb3RhbCJ9LHsidmFsdWUiOiJjMDViODMxNzljN2E5MmFlZDM4YjE1OTUzMjY2ZjVjYjNlNDFiMWY3MDQxZTBjMDgyZDQ2MzU1MmVkMDhkYTYxIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnRvdGFsIn1d", "privacy": { "obfuscated": [] } diff --git a/test/fixtures/v4/tt/did-idvc-wrapped.json b/test/fixtures/v4/tt/did-idvc-wrapped.json index e71affea..7193010a 100644 --- a/test/fixtures/v4/tt/did-idvc-wrapped.json +++ b/test/fixtures/v4/tt/did-idvc-wrapped.json @@ -3,10 +3,7 @@ "https://www.w3.org/2018/credentials/v1", "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" ], - "type": [ - "VerifiableCredential", - "TradeTrustCredential" - ], + "type": ["VerifiableCredential", "TradeTrustCredential"], "validFrom": "2021-03-08T12:00:00+08:00", "issuer": { "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", @@ -25,16 +22,12 @@ "https://w3id.org/vc/status-list/2021/v1" ], "id": "https://sbl.alwaysdata.net/oa/credentials/123456789", - "type": [ - "VerifiableCredential" - ], + "type": ["VerifiableCredential"], "issuer": "did:web:sbl.alwaysdata.net:oa", "credentialSubject": { "uen": "198801234E", "companyname": "My Own Company Pte Ltd", - "type": [ - "CorporateBasicDetails" - ], + "type": ["CorporateBasicDetails"], "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C" }, "expirationDate": "2023-11-01T06:45:43Z", @@ -126,4 +119,4 @@ "obfuscated": [] } } -} \ No newline at end of file +} diff --git a/test/fixtures/v4/tt/did-wrapped-obfuscated.json b/test/fixtures/v4/tt/did-wrapped-obfuscated.json index a891d6c3..1f653d6a 100644 --- a/test/fixtures/v4/tt/did-wrapped-obfuscated.json +++ b/test/fixtures/v4/tt/did-wrapped-obfuscated.json @@ -1,5 +1,8 @@ { - "@context": ["https://www.w3.org/2018/credentials/v1", "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json"], + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" + ], "type": ["VerifiableCredential", "TradeTrustCredential"], "validFrom": "2021-03-08T12:00:00+08:00", "issuer": { diff --git a/test/fixtures/v4/tt/did-wrapped-signed.json b/test/fixtures/v4/tt/did-wrapped-signed.json index 2078ff12..92535584 100644 --- a/test/fixtures/v4/tt/did-wrapped-signed.json +++ b/test/fixtures/v4/tt/did-wrapped-signed.json @@ -3,10 +3,7 @@ "https://www.w3.org/2018/credentials/v1", "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" ], - "type": [ - "VerifiableCredential", - "TradeTrustCredential" - ], + "type": ["VerifiableCredential", "TradeTrustCredential"], "validFrom": "2021-03-08T12:00:00+08:00", "issuer": { "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", @@ -89,4 +86,4 @@ "key": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C#controller", "signature": "0xcc742d34d671685108c00af431eba635c5631ddc6fc9a23c1d0c58e5375dbaac2e4ee90951eeb4a9d8757a647bcc5549717e0bd2a310f82fca23ab8a9a11c8851b" } -} \ No newline at end of file +} diff --git a/test/fixtures/v4/tt/did-wrapped-signed2.json b/test/fixtures/v4/tt/did-wrapped-signed2.json index 065d37d4..e17c5e68 100644 --- a/test/fixtures/v4/tt/did-wrapped-signed2.json +++ b/test/fixtures/v4/tt/did-wrapped-signed2.json @@ -3,10 +3,7 @@ "https://www.w3.org/2018/credentials/v1", "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" ], - "type": [ - "VerifiableCredential", - "TradeTrustCredential" - ], + "type": ["VerifiableCredential", "TradeTrustCredential"], "validFrom": "2021-03-08T12:00:00+08:00", "issuer": { "id": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89", @@ -89,4 +86,4 @@ "key": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller", "signature": "0x98f3d0f71671efc478eb3b3df7d301a520bcdcd8c08f9066ec8b8a4616ea397528d84f764462209f85659715501d7e2ddd63443653c77d6f66cc21331781b90e1b" } -} \ No newline at end of file +} diff --git a/test/fixtures/v4/tt/did-wrapped.json b/test/fixtures/v4/tt/did-wrapped.json index e4fa0ef0..39817591 100644 --- a/test/fixtures/v4/tt/did-wrapped.json +++ b/test/fixtures/v4/tt/did-wrapped.json @@ -3,10 +3,7 @@ "https://www.w3.org/2018/credentials/v1", "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" ], - "type": [ - "VerifiableCredential", - "TradeTrustCredential" - ], + "type": ["VerifiableCredential", "TradeTrustCredential"], "validFrom": "2021-03-08T12:00:00+08:00", "issuer": { "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", @@ -87,4 +84,4 @@ "obfuscated": [] } } -} \ No newline at end of file +} diff --git a/test/fixtures/v4/tt/did-wrapped2.json b/test/fixtures/v4/tt/did-wrapped2.json index e50b6ed2..b62cab43 100644 --- a/test/fixtures/v4/tt/did-wrapped2.json +++ b/test/fixtures/v4/tt/did-wrapped2.json @@ -3,10 +3,7 @@ "https://www.w3.org/2018/credentials/v1", "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" ], - "type": [ - "VerifiableCredential", - "TradeTrustCredential" - ], + "type": ["VerifiableCredential", "TradeTrustCredential"], "validFrom": "2021-03-08T12:00:00+08:00", "issuer": { "id": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89", @@ -87,4 +84,4 @@ "obfuscated": [] } } -} \ No newline at end of file +} From e52655dc6f02588b3356b7f6ecd809e10cc54f1a Mon Sep 17 00:00:00 2001 From: cavacado Date: Fri, 3 Nov 2023 10:00:45 +0800 Subject: [PATCH 09/13] chore: update readme --- README.md | 64 +++++++++++++++++++++++-------------------------------- 1 file changed, 27 insertions(+), 37 deletions(-) diff --git a/README.md b/README.md index 4393f667..1edf500f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ -[![CircleCI](https://circleci.com/gh/Open-Attestation/open-attestation.svg?style=svg)](https://circleci.com/gh/Open-Attestation/open-attestation) +![Release] +(https://github.com/TradeTrust/open-attestation/actions/workflows/release.yml/badge.svg) # Open Attestation @@ -8,12 +9,12 @@ OpenAttestation allows any entity to prove the existence of a document or a batc Alternatively, OpenAttestation can be used to make digitally verifiable documents using digital signatures, forgoing the need to pay for Ethereum transactions. -The [Open Attestation](https://github.com/Open-Attestation/open-attestation) repository allows you to batch the documents to obtain the merkle root of the batch to be committed to the blockchain. It also allows you to verify the signature of the document wrapped using the OpenAttestation framework. +The [Open Attestation](https://github.com/TradeTrust/open-attestation) repository allows you to batch the documents to obtain the merkle root of the batch to be committed to the blockchain. It also allows you to verify the signature of the document wrapped using the OpenAttestation framework. ## Installation ```bash -npm i @govtechsg/open-attestation +npm i @tradetrust/open-attestation ``` --- @@ -24,12 +25,14 @@ npm i @govtechsg/open-attestation `wrapDocuments` takes in an array of documents and returns the wrapped batch. Each document must be valid regarding the version of the schema used (see below) It computes the Merkle root of the batch and appends it to each document. This Merkle root can be published on the blockchain and queried against to prove the provenance of the document issued this way. Alternatively, the Merkle root may be signed by the document issuer's private key, which may be cryptographically verified using the issuer's public key or Ethereum account. -In the future, this function may accept a second optional parameter to specify the version of open-attestation you want to use. Currently, open-attestation will use schema 2.0. See [Additional Information](#additional-information) for information on using experimental v3.0 documents, which aim to be compatible with the W3C's data model for [Verifiable Credentials](https://www.w3.org/TR/vc-data-model/). +In the future, this function may accept a second optional parameter to specify the version of open-attestation you want to use. Currently, open-attestation will use schema 2.0. + +See [Additional Information](#additional-information) for information on using experimental v4.0-alpha documents, which aim to be compatible with the W3C's data model for [Verifiable Credentials](https://www.w3.org/TR/vc-data-model/). The `wrapDocument` function is identical but accepts only one document. ```js -import { wrapDocuments } from "@govtechsg/open-attestation"; +import { wrapDocuments } from "@tradetrust/open-attestation"; const document = { id: "SERIAL_NUMBER_123", $template: { @@ -84,7 +87,7 @@ console.log(wrappedDocuments); #### Example with public/private key pair ```js -import { signDocument, SUPPORTED_SIGNING_ALGORITHM } from "@govtechsg/open-attestation"; +import { signDocument, SUPPORTED_SIGNING_ALGORITHM } from "@tradetrust/open-attestation"; await signDocument(wrappedV2Document, SUPPORTED_SIGNING_ALGORITHM.Secp256k1VerificationKey2018, { public: "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller", private: "0x497c85ed89f1874ba37532d1e33519aba15bd533cdcb90774cc497bfe3cde655", @@ -94,7 +97,7 @@ await signDocument(wrappedV2Document, SUPPORTED_SIGNING_ALGORITHM.Secp256k1Verif #### Example with signer ```js -import { signDocument, SUPPORTED_SIGNING_ALGORITHM } from "@govtechsg/open-attestation"; +import { signDocument, SUPPORTED_SIGNING_ALGORITHM } from "@tradetrust/open-attestation"; import { Wallet } from "ethers"; const wallet = Wallet.fromMnemonic("tourist quality multiply denial diary height funny calm disease buddy speed gold"); @@ -110,19 +113,19 @@ const { proof } = await signDocument( `validateSchema` checks that the document conforms to open attestation data structure. ```js -import { validateSchema } from "@govtechsg/open-attestation"; +import { validateSchema } from "@tradetrust/open-attestation"; const validatedSchema = validateSchema(wrappedDocument); console.log(validatedSchema); ``` ### Verify signature of document -`verifysignature` checks that the signature of the document corresponds to the actual content in the document. In addition, it checks that the target hash (hash of the document content), is part of the set of documents wrapped in the batch using the proofs. +`verifySignature` checks that the signature of the document corresponds to the actual content in the document. In addition, it checks that the target hash (hash of the document content), is part of the set of documents wrapped in the batch using the proofs. Note that this method does not check against the blockchain or any registry if this document has been published. The merkle root of this document need to be checked against a publicly accessible document store (can be a smart contract on the blockchain). ```js -import { verifySignature } from "@govtechsg/open-attestation"; +import { verifySignature } from "@tradetrust/open-attestation"; const verified = verifySignature(wrappedDocument); console.log(verified); ``` @@ -132,7 +135,7 @@ console.log(verified); `getData` returns the original data stored in the document, in a readable format. ```js -import { getData } from "@govtechsg/open-attestation"; +import { getData } from "@tradetrust/open-attestation"; const data = getData(wrappedDocument); console.log(data); ``` @@ -140,7 +143,7 @@ console.log(data); ### Utils ```js -import { utils } from "@govtechsg/open-attestation"; +import { utils } from "@tradetrust/open-attestation"; utils.isWrappedV3Document(document); ``` @@ -148,6 +151,10 @@ utils.isWrappedV3Document(document); - `isSignedWrappedV2Document` type guard for signed v2 document - `isSignedWrappedV3Document` type guard for signed v3 document - `isWrappedV3Document` type guard for wrapped v3 document +- `isSignedWrappedOAV4Document` type guard for signed OA v4 document +- `isWrappedOAV4Document` type guard for wrapped OA v4 document +- `isSignedWrappedTTV4Document` type guard for signed TT v4 document +- `isWrappedTTV4Document` type guard for wrapped TT v4 document - `diagnose` tool to find out why a document is not a valid open attestation file (wrapped or signed document) ### Obfuscating data @@ -167,32 +174,15 @@ To run tests npm run test ``` -### vc-test-suite - -You can run the vc-test-suite against `open-attestation` by running `npm run test:vc`. This command will: - -- clone https://github.com/w3c/vc-test-suite.git -- copy the local configuration (`vc-test-suite-config.json`) into the cloned repository -- install the latest version of `@govtechsg/open-attestation-cli` -- monkey patch `open-attestation` in `@govtechsg/open-attestation-cli`. That means that the current version of the project will be built and replace the one installed with `@govtechsg/open-attestation-cli`. - -#### Local debug - -In the event you face a problem with one test and want to debug locally: - -1. Ensure the folder `vc-test-suite` is available from the root of the project. If that's not the case, run `npm run test:vc` first. -1. Open `runVcTest.sh` and update `install_vc_test_suite=true` to `install_vc_test_suite=false`. This line will help to preserve the `vc-test-suite` folder untouched. - -You can now debug from the `vc-test-suite` folder the way you need it. - ## Additional information - Found a bug? Have a question? Want to share an idea? Reach us at our [Github repository](https://github.com/Open-Attestation/open-attestation). -- We are currently building a new version of the schema, compatible with W3C VC. This is very experimental and whatever is available for v2 documents are also available for v3 documents: - - [OA schema v3](https://schema.openattestation.com/3.0/schema.json) - - Typings: `import {v3} from "@govtechsg/open-attestation"`. - - Type guard: `utils.isWrappedV3Document`. - - Wrapping: `__unsafe__use__it__at__your__own__risks__wrapDocument` (future usage: `wrapDocument(document, {version: "open-attestation/3.0"})` - - Example docs in `tests/fixtures/v3` +- We are currently building a new version of the schema, compatible with W3C VC. This is very experimental and whatever is available for v2 documents are also available for v4 documents: + - [OA schema v4](https://schemata.openattestation.com/io/tradetrust/4.0/alpha-schema.json) + - [TT schema v4](https://schemata.openattestation.com/com/openattestation/4.0/alpha-schema.json) + - Typings: `import {OAv4, TTv4} from "@tradetrust/open-attestation"`. + - Type guard: `utils.isWrappedOAV4Document`, `utils.isWrappedTTV4Document`. + - Wrapping: `_unsafe_use_it_at_your_own_risk_v4_alpha_oa_wrapDocument`, `_unsafe_use_it_at_your_own_risk_v4_alpha_tt_wrapDocument` + - Example docs in `tests/fixtures/v4` - There are extra utilities available: - - Refer to the [utils](https://github.com/Open-Attestation/open-attestation/blob/master/src/shared/utils/utils.ts) component for the full list of utilities. + - Refer to the [utils](https://github.com/TradeTrust/open-attestation/blob/master/src/shared/utils/utils.ts) component for the full list of utilities. From 2728d5522943a84934a3cf2e718d0860c2454eef Mon Sep 17 00:00:00 2001 From: cavacado Date: Fri, 3 Nov 2023 10:01:38 +0800 Subject: [PATCH 10/13] chore: fix lint errors --- .../tt/did-idvc-wrapped-signed-wrong-binding.json | 15 ++++----------- .../v4/tt/did-idvc-wrapped-wrong-binding.json | 15 ++++----------- 2 files changed, 8 insertions(+), 22 deletions(-) diff --git a/test/fixtures/v4/tt/did-idvc-wrapped-signed-wrong-binding.json b/test/fixtures/v4/tt/did-idvc-wrapped-signed-wrong-binding.json index 2f127a5e..e24b517e 100644 --- a/test/fixtures/v4/tt/did-idvc-wrapped-signed-wrong-binding.json +++ b/test/fixtures/v4/tt/did-idvc-wrapped-signed-wrong-binding.json @@ -3,10 +3,7 @@ "https://www.w3.org/2018/credentials/v1", "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" ], - "type": [ - "VerifiableCredential", - "TradeTrustCredential" - ], + "type": ["VerifiableCredential", "TradeTrustCredential"], "validFrom": "2021-03-08T12:00:00+08:00", "issuer": { "id": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89", @@ -25,16 +22,12 @@ "https://w3id.org/vc/status-list/2021/v1" ], "id": "https://sbl.alwaysdata.net/oa/credentials/123456789", - "type": [ - "VerifiableCredential" - ], + "type": ["VerifiableCredential"], "issuer": "did:web:sbl.alwaysdata.net:oa", "credentialSubject": { "uen": "198801234E", "companyname": "My Own Company Pte Ltd", - "type": [ - "CorporateBasicDetails" - ], + "type": ["CorporateBasicDetails"], "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C" }, "expirationDate": "2023-11-01T06:45:43Z", @@ -128,4 +121,4 @@ "key": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller", "signature": "0x7b66bf13d7f8c7c4ea71b102525ff5ea3a052097d3be31cf0650804407067efd5d7f0e985377d0d4aa19ca975f15dfd7093b4e1ab6c87e7e1e0ce5c430fc0bdf1c" } -} \ No newline at end of file +} diff --git a/test/fixtures/v4/tt/did-idvc-wrapped-wrong-binding.json b/test/fixtures/v4/tt/did-idvc-wrapped-wrong-binding.json index 74775749..dc57045c 100644 --- a/test/fixtures/v4/tt/did-idvc-wrapped-wrong-binding.json +++ b/test/fixtures/v4/tt/did-idvc-wrapped-wrong-binding.json @@ -3,10 +3,7 @@ "https://www.w3.org/2018/credentials/v1", "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" ], - "type": [ - "VerifiableCredential", - "TradeTrustCredential" - ], + "type": ["VerifiableCredential", "TradeTrustCredential"], "validFrom": "2021-03-08T12:00:00+08:00", "issuer": { "id": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89", @@ -25,16 +22,12 @@ "https://w3id.org/vc/status-list/2021/v1" ], "id": "https://sbl.alwaysdata.net/oa/credentials/123456789", - "type": [ - "VerifiableCredential" - ], + "type": ["VerifiableCredential"], "issuer": "did:web:sbl.alwaysdata.net:oa", "credentialSubject": { "uen": "198801234E", "companyname": "My Own Company Pte Ltd", - "type": [ - "CorporateBasicDetails" - ], + "type": ["CorporateBasicDetails"], "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C" }, "expirationDate": "2023-11-01T06:45:43Z", @@ -126,4 +119,4 @@ "obfuscated": [] } } -} \ No newline at end of file +} From 8daf204ed43e48d0245bf43375977a5e3440a798 Mon Sep 17 00:00:00 2001 From: cavacado Date: Tue, 7 Nov 2023 09:39:51 +0800 Subject: [PATCH 11/13] feat: add additional fixtures for invalid idvc case --- .../v4/tt/did-idvc-raw-idvc-invalid.json | 111 ++++++++++++++++ .../v4/tt/did-idvc-wrapped-idvc-invalid.json | 122 +++++++++++++++++ .../did-idvc-wrapped-signed-idvc-invalid.json | 124 ++++++++++++++++++ 3 files changed, 357 insertions(+) create mode 100644 test/fixtures/v4/tt/did-idvc-raw-idvc-invalid.json create mode 100644 test/fixtures/v4/tt/did-idvc-wrapped-idvc-invalid.json create mode 100644 test/fixtures/v4/tt/did-idvc-wrapped-signed-idvc-invalid.json diff --git a/test/fixtures/v4/tt/did-idvc-raw-idvc-invalid.json b/test/fixtures/v4/tt/did-idvc-raw-idvc-invalid.json new file mode 100644 index 00000000..db082cea --- /dev/null +++ b/test/fixtures/v4/tt/did-idvc-raw-idvc-invalid.json @@ -0,0 +1,111 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" + ], + "type": ["VerifiableCredential", "TradeTrustCredential"], + "validFrom": "2021-03-08T12:00:00+08:00", + "issuer": { + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", + "type": "TradeTrustIssuer", + "name": "My Own Company Pte Ltd", + "identityProof": { + "identityProofType": "IDVC", + "identifier": "My Own Company Pte Ltd", + "identityVC": { + "type": "TradeTrustIdentityVC", + "data": { + "@context": [ + "https://w3id.org/security/bbs/v1", + "https://www.w3.org/2018/credentials/v1", + "https://stg.issuer.myinfo.gov.sg/myinfobusiness/schema/corporatebasicdetails/v1", + "https://w3id.org/vc/status-list/2021/v1" + ], + "id": "https://sbl.alwaysdata.net/oa/credentials/123456789", + "type": ["VerifiableCredential"], + "issuer": "did:web:did.actor:alice", + "credentialSubject": { + "uen": "198801234E", + "companyname": "My Own Company Pte Ltd", + "type": ["CorporateBasicDetails"], + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C" + }, + "expirationDate": "2023-11-01T06:45:43Z", + "credentialStatus": { + "id": "https://sbl.alwaysdata.net/oa/status/1#325", + "type": "StatusList2021Entry", + "statusListIndex": 325, + "statusListCredential": "https://sbl.alwaysdata.net/oa/status/1/325" + }, + "issuanceDate": "2023-22-13T01:35:08Z", + "proof": { + "type": "BbsBlsSignature2020", + "created": "2023-10-18T07:14:46Z", + "proofPurpose": "assertionMethod", + "proofValue": "tqvUVZOPaY/A+7Wu47HZIYbboPU/MPGhb1EPLUKKPRwmRe8QJ/dzjRviQ5fAbR88TjSalqLbaBeopNocjrl7TmzCOlLQxGeNC4El1TCICu5tiX0HxGSNAPY4t5CglTLMTsdu5kg4f0a5MGQTnFgwyw==", + "verificationMethod": "did:web:sbl.alwaysdata.net:oa#didkey" + } + } + } + } + }, + "credentialStatus": { + "type": "TradeTrustCredentialStatus", + "credentialStatusType": "NONE" + }, + "renderMethod": { + "type": "TradeTrustRenderMethod", + "renderMethodType": "EMBEDDED_RENDERER", + "name": "INVOICE", + "url": "https://generic-templates.tradetrust.io" + }, + "credentialSubject": { + "name": "TradeTrust Invoice", + "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "date": "2018-02-21", + "customerId": "564", + "terms": "Due Upon Receipt", + "billFrom": { + "name": "ABC Company", + "streetAddress": "Level 1, Industry Offices", + "city": "Singapore", + "postalCode": "123456", + "phoneNumber": "60305029" + }, + "billTo": { + "company": { + "name": "DEF Company", + "streetAddress": "Level 2, Industry Offices", + "city": "Singapore", + "postalCode": "612345", + "phoneNumber": "61204028" + }, + "name": "James Lee", + "email": "def@company.com" + }, + "billableItems": [ + { + "description": "Service Fee", + "quantity": "1", + "unitPrice": "200", + "amount": "200" + }, + { + "description": "Labor: 5 hours at $75/hr", + "quantity": "5", + "unitPrice": "75", + "amount": "375" + }, + { + "description": "New client discount", + "quantity": "1", + "unitPrice": "50", + "amount": "50" + } + ], + "subtotal": "625", + "tax": "0", + "taxTotal": "0", + "total": "625" + } +} diff --git a/test/fixtures/v4/tt/did-idvc-wrapped-idvc-invalid.json b/test/fixtures/v4/tt/did-idvc-wrapped-idvc-invalid.json new file mode 100644 index 00000000..7db3dbbf --- /dev/null +++ b/test/fixtures/v4/tt/did-idvc-wrapped-idvc-invalid.json @@ -0,0 +1,122 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" + ], + "type": ["VerifiableCredential", "TradeTrustCredential"], + "validFrom": "2021-03-08T12:00:00+08:00", + "issuer": { + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", + "type": "TradeTrustIssuer", + "name": "My Own Company Pte Ltd", + "identityProof": { + "identityProofType": "IDVC", + "identifier": "My Own Company Pte Ltd", + "identityVC": { + "type": "TradeTrustIdentityVC", + "data": { + "@context": [ + "https://w3id.org/security/bbs/v1", + "https://www.w3.org/2018/credentials/v1", + "https://stg.issuer.myinfo.gov.sg/myinfobusiness/schema/corporatebasicdetails/v1", + "https://w3id.org/vc/status-list/2021/v1" + ], + "id": "https://sbl.alwaysdata.net/oa/credentials/123456789", + "type": ["VerifiableCredential"], + "issuer": "did:web:did.actor:alice", + "credentialSubject": { + "uen": "198801234E", + "companyname": "My Own Company Pte Ltd", + "type": ["CorporateBasicDetails"], + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C" + }, + "expirationDate": "2023-11-01T06:45:43Z", + "credentialStatus": { + "id": "https://sbl.alwaysdata.net/oa/status/1#325", + "type": "StatusList2021Entry", + "statusListIndex": 325, + "statusListCredential": "https://sbl.alwaysdata.net/oa/status/1/325" + }, + "issuanceDate": "2023-22-13T01:35:08Z", + "proof": { + "type": "BbsBlsSignature2020", + "created": "2023-10-18T07:14:46Z", + "proofPurpose": "assertionMethod", + "proofValue": "tqvUVZOPaY/A+7Wu47HZIYbboPU/MPGhb1EPLUKKPRwmRe8QJ/dzjRviQ5fAbR88TjSalqLbaBeopNocjrl7TmzCOlLQxGeNC4El1TCICu5tiX0HxGSNAPY4t5CglTLMTsdu5kg4f0a5MGQTnFgwyw==", + "verificationMethod": "did:web:sbl.alwaysdata.net:oa#didkey" + } + } + } + } + }, + "credentialStatus": { + "type": "TradeTrustCredentialStatus", + "credentialStatusType": "NONE" + }, + "renderMethod": { + "type": "TradeTrustRenderMethod", + "renderMethodType": "EMBEDDED_RENDERER", + "name": "INVOICE", + "url": "https://generic-templates.tradetrust.io" + }, + "credentialSubject": { + "name": "TradeTrust Invoice", + "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "date": "2018-02-21", + "customerId": "564", + "terms": "Due Upon Receipt", + "billFrom": { + "name": "ABC Company", + "streetAddress": "Level 1, Industry Offices", + "city": "Singapore", + "postalCode": "123456", + "phoneNumber": "60305029" + }, + "billTo": { + "company": { + "name": "DEF Company", + "streetAddress": "Level 2, Industry Offices", + "city": "Singapore", + "postalCode": "612345", + "phoneNumber": "61204028" + }, + "name": "James Lee", + "email": "def@company.com" + }, + "billableItems": [ + { + "description": "Service Fee", + "quantity": "1", + "unitPrice": "200", + "amount": "200" + }, + { + "description": "Labor: 5 hours at $75/hr", + "quantity": "5", + "unitPrice": "75", + "amount": "375" + }, + { + "description": "New client discount", + "quantity": "1", + "unitPrice": "50", + "amount": "50" + } + ], + "subtotal": "625", + "tax": "0", + "taxTotal": "0", + "total": "625" + }, + "proof": { + "type": "TradeTrustMerkleProofSignature2018", + "proofPurpose": "assertionMethod", + "targetHash": "63916680ddbb78c9baba77133480af7f696720568ba60b27b726a17b9a708c3a", + "proofs": [], + "merkleRoot": "63916680ddbb78c9baba77133480af7f696720568ba60b27b726a17b9a708c3a", + "salts": "W3sidmFsdWUiOiI0MGMwNTRiZjYxOGEwNGVkOTQwNGJmZTRmZDViMzhiMzYxNTc5MmUxMWIxMjZkM2RkMDU1M2E3N2E2YWRhZjIzIiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6IjczZDQ4MTI0OGI1N2QxMWU4YjUwNDQyMWQ2NzgyMjgwZTdkN2ZhM2M3MmIwZGIxMzhkYTdlZGMwNTM4MDA2MGUiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiNTdhOTI4NzdiYWJhYmUyZDQzZmUyZjcwNTM4MDhlZjA2MmEyMGYxMTA4MzZlYmU2YTZiMzA0MzkxYzAzNGRlMiIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6IjFjNTllNmRkOTRlMDQ2ZDZiNzczYzhmOWIwYzE5Y2Y4NDViYWE0ZGMwZjM2NDkwNWRjZDc1NzVjOTY0ZGNhYjAiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiJiMTNiMjA4YjIxM2Q0ZDg3NWE0NzRlOGI1OTk4OGNlMGJiYjJlYTg2Mjc0NGYzNzE5MDJmMTg2YjEzOTg4YzQyIiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiIzZTRkOGVkYjM1Njk5OWMxODc5OTczNzc3NGUxN2Y0YWUyY2FkOWFlM2U4NTE2ODYzNzE0ZjQyNzk4M2NhNjdjIiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiIzYThiYWNiMGY3MWU0NGJiNWRkNzk1NzRiYWM0OWUxMjNjNWEzNDcxZTczNDYyZmYyYjY1MmZmOWEwMGIyZWJiIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6IjMyOWExNTZmZjI4ZjliYWRhMDYxMDc0ZGJiYjQ0OTFhODI3ZDUzMGFhZWMxZjk2ZGIxZmU4NjE2MzdmN2Q1MzIiLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiMmU0NjNkNjFiZmU1ZTJlMTlmNzg4MDI2YjBhZjA1NTk0Y2VkMTRhZTVjOGE3OWExZTcxNDRhNTMxNmEzMTU2YSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiI2YjhhNjY1MjZjZGQ5NTM1MDViNDY3ZjFkNGRjZThiNzhjYzI1ZDk2NmRlNTNhMjJiYWM1NTRiMzgxYmUxMzZlIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiODUxYzRlOTBiMTAzNDc2ODRjNzM2ZWJiOWM5ZTFlOWNlZjRlNTMxYTYxMWQ2Nzk4ZDFhMmQ0N2U0OTEyOWRkYSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLnR5cGUifSx7InZhbHVlIjoiNjQyNWEwZDU2YzlmZDcwMTUzNTcyNjQ3Nzc5ZDNkMDc2YWNiMGYzZmY5MWZiYjFlZmNjNzcwMzU1ZjA5ZmU3OCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMF0ifSx7InZhbHVlIjoiYzhjOWNiZTRiZDdkZTQwNWRkZjM5NzAzZTgxNDA0ZWQ0MzVkNGRmYjZiYWE1NGM4OWQwODI1OTFmNGVlNGQzOCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiZTJiOGIzZDRkMzY2MTE1Y2M4Yzc0NDI0MWZiOTExZTQ4N2E5OWMwY2MwNDNhOGY2MGVjYTAyOTBlZjM4NGUzNyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiY2RjZjUzYWU2ZjA0N2U4ZGQxYTE1MDFiMjkxNjllNGNmOWMxNzk3ZWU4NWIyYmQxYjAyMGU5NWY5ZTc4YWExNCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbM10ifSx7InZhbHVlIjoiOWI0YzE3ODVkYTdjODJlYzlhYjg0OTYwY2I4YmE2OTQ3NGEwYjljMmQ1YmViNDkzMDEzNTIwNTk0MGJhYjg4NSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuaWQifSx7InZhbHVlIjoiODBjMWJkZDIzZGZhNGZhMGI1MTZhYmMxZTZjMzJlMTcxNmJjNjIyNWE5ZDQyZjkzNmJmNzQ2OWY5MGJiYTI4ZCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEudHlwZVswXSJ9LHsidmFsdWUiOiI3YjE3NzUyZjM3MGZiYTY0ZDQ0MTVjYmQyMTllNDMzMWJkYjI2OWY5ZTdhNzhkMTRhZGViZGZjNTQ5MTQ4ZWEwIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1ZXIifSx7InZhbHVlIjoiODRmZGRiNjQ0YTZlYjExZmFjNjZiZDFlMTc5ZTI4Y2UzYWM0MDhmMzFjNzMzYmU0YmIxNWNmMTZiMWE4MDA1ZSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QudWVuIn0seyJ2YWx1ZSI6ImVhMGIyOTVhNjQ2M2RmZGZiNjBjNWI2MmIzZmZiYmEzODYxMTcxMzhlNzViZDUxNmJmMzhiYjU3NzczYzgzODkiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LmNvbXBhbnluYW1lIn0seyJ2YWx1ZSI6IjNlNTNiNTRkMDY3ZTBhMGY2ZWQ1YzY2MWM5NzQyZmNlZjVjZGIwZDA3Njk3NWRkYWY1NjkyMGJkZWEzZDY1ZDIiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LnR5cGVbMF0ifSx7InZhbHVlIjoiY2FjNzQwZGE5M2NmMzJlODE2M2YzZjJmNGE4YTQ4YmFlMzNkZTJiNDE1ZjY4ZmM0N2NiMGY3Mjg4ZGZhOTM0NSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiYjViN2M1ZGI3ZWRkMDFhNDdmNmM4N2Q4YmNiZDk4ZTY3OGU1OTBlZDQ3MTBhYjMyYjRkZGNhMDFjNzA5MWY1NSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuZXhwaXJhdGlvbkRhdGUifSx7InZhbHVlIjoiNjc5ODVhOGYyZTBhNDkzMjg5YTZiZTNiYzc4NWUzOWRjZjVlMjZmYWI1MWZjNzczOGZhMzgzOTE1MDgyZGM5YSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5pZCJ9LHsidmFsdWUiOiI3YWNhNjVhYWQ3ZGRmYmYxOWMzNDVlZTdhNWY4OTc0MTRkNzk2NjFjNGY3MDljYmYxZWQ4ZWJlNmI3NDQ4ODRjIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5jcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiOWY1NWZmMzljZTAwYTM1YzE4OGE2ZDc3NjllMTQxYTNlZWVkODg2NWZhY2EzMmJiMTVkMjNmN2Y3OWRiM2QyMyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0SW5kZXgifSx7InZhbHVlIjoiNDg0NzYxYTc0NjVjNmRiMTg4ZTM5MDJlMTY2ZTgwNzhlODI3NTkxYTIxZjgwZjZjMmM0NDEwMTQ1NzM5YTU4MCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0Q3JlZGVudGlhbCJ9LHsidmFsdWUiOiIzZDhkMDc3N2QwNWRiNGVhN2NlMDk1MGQ3N2YxOGFjNjc1MzJiYWQ3ZDIyYTk2ZmEyYzJhNjhlNTZlNzdiMjMyIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1YW5jZURhdGUifSx7InZhbHVlIjoiMjljZTNhMjNiMDUxNTlkOTAxZDg5NzMyMGFiMjU3YjIzMTRjNjIzODk1M2QyOTI1NDA1YmQ5MmI4NTY1MjI5ZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEucHJvb2YudHlwZSJ9LHsidmFsdWUiOiJlY2EwMjNhYzI0MTQ4YjM0NWVhMzgwMmY2NWU2ZWI3MjY3NDU1NTRlYWI3NzBjODFkZDkwMmJjMDUwOWRiZTU5IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5jcmVhdGVkIn0seyJ2YWx1ZSI6IjRjMDE1OGJiNDcyNjViZTI2OTU5YTY3NjJlYTUzZTRhYjViMjFhMWQxNWUxYjQzMDgwMzA2OTU5MzllY2I3YjMiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnByb29mUHVycG9zZSJ9LHsidmFsdWUiOiJlMzM4YTJmNzQ3YzE0NTI0ZGU5YWU4NzhjNGIzM2E4MjdiYjI4MDE1MmVlOWIyNzViYTRmYzcwMWFiZmM5ZmI3IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5wcm9vZlZhbHVlIn0seyJ2YWx1ZSI6IjcxMTA5NGM5MmZkYTdkOTUzN2M1ZmI3ZWM4NTZjOTJhZjMwOGY4MGQ2NWIwNmI5ZDI1YjQ3ZTMzZTk5MzA2OTciLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnZlcmlmaWNhdGlvbk1ldGhvZCJ9LHsidmFsdWUiOiIwYTg2Mjc0NzFmMzQyYWJmMGY4MzY3MDBlNjZkYTdjMDAxNzE0ODU0YTM4Yzc0MWE0MmI2YThhZDA1NjgxM2I4IiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMudHlwZSJ9LHsidmFsdWUiOiJmOTM0N2FmNDE2ZjgxMjgwMTBlMThlZDA1Yzk5OTYyYmFjMDllYjdlZGU2MmU1NWQ4YzY3NDQ3OTk1OTNkZmJjIiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMuY3JlZGVudGlhbFN0YXR1c1R5cGUifSx7InZhbHVlIjoiZGY2MDY2Zjg4M2VlY2M0YjI5YzgxM2IxNmRkZjYxMmY1NDhiNTA5MDRjMjkwMDQ4MzFkMWJhY2Y5ZjQwMWEyYyIsInBhdGgiOiJyZW5kZXJNZXRob2QudHlwZSJ9LHsidmFsdWUiOiIxZWVkNGIyZGZhMjMzNWFlZDk3MDc1Nzg4NDhiYWJhZGUxOGYyM2IzNDYyN2JiNmIwMDgwMDJlM2E5OGNjYWU4IiwicGF0aCI6InJlbmRlck1ldGhvZC5yZW5kZXJNZXRob2RUeXBlIn0seyJ2YWx1ZSI6ImQ5MGRkOTVlYzBkYzNmYTlhZDc2OWY1MzUyZTM0NDFlMWNmYTYwYTViZmU4NDdhMDQxMzk4ODFhZDU3NTdkY2YiLCJwYXRoIjoicmVuZGVyTWV0aG9kLm5hbWUifSx7InZhbHVlIjoiODc2YzkyNzQwYzc4ZjhlYjA3NWIxZTI0ODUxOTY1MmM3YTYzYzY5ZDBiYTA0YzhkZmE0N2M0Nzc3ZDUyMGIzYyIsInBhdGgiOiJyZW5kZXJNZXRob2QudXJsIn0seyJ2YWx1ZSI6IjAxYjJhMDA1Y2M4ZWFmODU5MmI0N2MxN2VjZmRhNzI0MTgwNGE0ZTVkYmZmMWExNmUwNjM0YjlhZDY2ZTA2NWEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QubmFtZSJ9LHsidmFsdWUiOiI0YWViOGViZjE0MDc1Mzg5M2M4MmI1N2I1ZjkwY2JiYzYyODQ1YmQ2NTA3MTkyNWI2ZmE3YjAyY2QzMTk0OWY0IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmlkIn0seyJ2YWx1ZSI6ImQ5MjdkYTBlNTU4ZjU5Yzk4NjM2YzQ0NTA1ZDIxNzRkNjQ5NTM4MjkzMzBjZGMzNTRjMTUzYzQ3YzZhNWU4NDAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuZGF0ZSJ9LHsidmFsdWUiOiI1MGQ0ZTdjNGQyYmJkMWI3ODY4YTYwYTgxYWFiMzU2M2RiNmE5Zjg1N2UwMzU5NTM3MWVmN2E4YzAyNjY4MjY3IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmN1c3RvbWVySWQifSx7InZhbHVlIjoiMjBhOGU0YTIyODRjOTUyNmVlOWM0YTBkZGJmZjExY2YwNDE2MzdlZDRlYWY3NjkyY2JlNDg5ODAwZGU2ZjliNyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50ZXJtcyJ9LHsidmFsdWUiOiIwZTg3NmEyODZjOTY4NzMzMjhmYjIxMzQwMTg4YzZjNjMzOGEwM2JjOWMyZDhhNjI1Zjc2MDVmZDg5Y2E0NDVlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLm5hbWUifSx7InZhbHVlIjoiY2JhYTMxZmU2NDEzOGY1Zjc5ODhkOWYwMGNmZWM1MGNjOTE4YjQzNGYwYjIwNjI3OTk0NGUyMzRmNWM5ZTA0OCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6IjZjZGFlYzUyNjM3MmJhMzJiZjRkMDM4YTJmMDIxNmU0ZTE0MzczMzllODAyYjk0MTBhNDIxZTZlZWE0MDZjODIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uY2l0eSJ9LHsidmFsdWUiOiIwMmQ2NjAzNmI2NjhhNWM2NzFmODgyODI4Y2M1MTNlODY3MDIzOTBlYzViNGM5MDc1Y2Q0OGNmMzZhMTZkN2IyIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLnBvc3RhbENvZGUifSx7InZhbHVlIjoiYWViNzVhNWQ3NTMxY2ViOWE3M2Y5ZjVmMTBlY2Y1ZjFhMTE5MjcwM2FlYjNkZTcxMmVjM2Y3MzI2ODEzZDQzZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiIwY2ZlMDIxOTAxMzE5OWFhYjU2YTYzNTJkMDM5ZTFmNGE5ZTdhN2JhZDVlYzcxMWI3YzgyNzQ2ODYwMjljZjNiIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55Lm5hbWUifSx7InZhbHVlIjoiNTM1MzQ2MmU0NTI4ZWY2N2MzY2I4YzM4YmNmZjg1NzJmMzA1ZDFkYzAzOTE5ODhlMzBmZGVjMDRjNTI5ODAxMCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6ImNlMjM3YmU0ODYzNjZlNDljYTE5MjJlM2ZlY2Y2YTgyZmVmMjQyMGU0OTA0NDQxNjBkODJjNDc0MDhmZDJiZWYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuY2l0eSJ9LHsidmFsdWUiOiJjOTc3ZDBlNWE1YTZhMWQ3YzIwMmQyN2RhODk1MWFhZTUzZGEwMGQ0ZWUwY2VhNzMzOWRhMDU1YTRiODE3ZTU4IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LnBvc3RhbENvZGUifSx7InZhbHVlIjoiNjIzM2RkZWUxMjJjZGU2YTdhMzg2ZGJjYWJiM2U2NzU3YTE2ZGZhNDQ2ZTNjMDVlNzEwYTc0NDFiOWE2MGNkZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiIwNjU1ZWU5ZGYyMzlhMDRiNGEyYmVkM2MyYzdkYmVmNjViYWRlMTQxNzg5NGFhM2U2NjhkNTIzOWUxMzY1ZjBkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5uYW1lIn0seyJ2YWx1ZSI6IjllZWM4YmE1ZGZkNjdlNjQ0N2FmMGVhN2IwMmRkN2JhM2U0ODE2NzA2YzkzN2U1NmZlMzQ3MDZmMWQ0YTYwZGUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmVtYWlsIn0seyJ2YWx1ZSI6IjNlOGUyNjlhM2JhNDEwN2ZiZmZhYjZiYWZmNzFmOGRmMDA5Y2NlYmVkMjZlM2YxYzU5NGMzZTVkZTVlMWEwYTgiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiJiYzhlODljYmExNzEzNzEyNGQ1YmUxNzA0NjVhMjJiNTJjODBhNzlmNTgzYjNiMjlhNGIxMGViZjBlZWQzNjk4IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0ucXVhbnRpdHkifSx7InZhbHVlIjoiNjlkMmYxNzMzY2VlNGEzMmQ2YjYxYjlkOWRjNmVmNDYyYWUzODhjYWEyMjBkZmQ3MmUzMzFhOGVkMmM0MGYxYyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiJiZWE4Zjk4YjQwMmM3YjM2ZjRjNWRmNTUxZDk2YzhjOGYzZWI4OTMxN2VlZTc5OGFhZTA2MmI2N2Y3ZjM4NjgzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uYW1vdW50In0seyJ2YWx1ZSI6IjZlMDUwOTcyYzBmNDcyNTdkOTNjODM1ZGY2M2RkMDIwNzNkNDRiMzM2Y2I2OWYyZTQ3NzdkNzE5Y2M1ZGU1NzUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiI4MzM2YjZlYzljMjhiOTUzM2NhZWQxMDdjOWUxNjlhYzIyNWMzNzUzMDMyN2M2NzRhNGQ3ZjU3ZWYwNWY4NGZjIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0ucXVhbnRpdHkifSx7InZhbHVlIjoiNzhmOTk4ZmFkMDcwM2ZkZmYwNTUwMGNjYTIzMjgxOTk3NDAxNDVlZTEyMzgxZmYwYWUyNDJmMmE0Yzc5YmViOCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiI0MDU5YzIyMzk1YTdhZTUxNDJhNWVhNDFmZTYxNzljMzkzOTRlODI5MjlhNmRiMWNiOGJlOWY0Zjc3Nzk4MWU2IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uYW1vdW50In0seyJ2YWx1ZSI6ImUxYTU2YjM1ZWM1ZTE2OTVlOGU4ZDhlZmUwYzRjNDE1ODY0Zjk1ZmViZDA1ZWU0MDQxMDViODYwZDNkNmQzM2UiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiJmMjgyZGJiZDAxNTJhNzliM2EwNjNjMjMwZjAxZTVkNzVlNTVmZGJiMzJiMDljNTg3NWIyMDIyNTJlNDBlZWU4IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0ucXVhbnRpdHkifSx7InZhbHVlIjoiMDY2ZTgyOTg5NGZiNmRkMTcxNTVhZDhiY2M1OTNhMDgyYmEzODUzMWQ3Zjg2Y2ZlNWVlMzBjNzA2MDI0N2JjMSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiIxNjI4OGQzM2NlZjdhM2NkYjM0NjEyMWY1MjU2N2E3ZWFmOWJjNDEwMDExZTU3MzAwNmE0MzExNzdjMDVlNjY1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uYW1vdW50In0seyJ2YWx1ZSI6IjliZDc1YzY5YTRhMWQ0ODFhNTE3NjNmYjgwZjMxYTk3Mjg5OGZiNzU4YWIzNGVjNWEzODg1ODg3MThiNTMxMmIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Quc3VidG90YWwifSx7InZhbHVlIjoiNDEzNTdmOTZlNDRhYThlMWE3Mjg5NDZiODZlZGY1YWI2OWI2ZWM5ZmRkYmY1ODgwMjQ4YTBlYjkwNThkNzFiYSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXgifSx7InZhbHVlIjoiMTBiNzE3ZTA2YTg5ZjNkNWRjNzg1ODRhOGFhMzVkOGY3MTNmMmUzMmE1MjBjNDIxNTRjYzEzNzRlNGI0NWJiYiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXhUb3RhbCJ9LHsidmFsdWUiOiJiNGFhNDNlZDAwMjJiYjM0ZjIwZmU3MTk2Mzk4ZWFkYzVjNTY3Zjc1OTgwMzM5ZTYwMzIzZTZmYzMwOTBiYjk3IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnRvdGFsIn1d", + "privacy": { + "obfuscated": [] + } + } +} diff --git a/test/fixtures/v4/tt/did-idvc-wrapped-signed-idvc-invalid.json b/test/fixtures/v4/tt/did-idvc-wrapped-signed-idvc-invalid.json new file mode 100644 index 00000000..cf54fa89 --- /dev/null +++ b/test/fixtures/v4/tt/did-idvc-wrapped-signed-idvc-invalid.json @@ -0,0 +1,124 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" + ], + "type": ["VerifiableCredential", "TradeTrustCredential"], + "validFrom": "2021-03-08T12:00:00+08:00", + "issuer": { + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", + "type": "TradeTrustIssuer", + "name": "My Own Company Pte Ltd", + "identityProof": { + "identityProofType": "IDVC", + "identifier": "My Own Company Pte Ltd", + "identityVC": { + "type": "TradeTrustIdentityVC", + "data": { + "@context": [ + "https://w3id.org/security/bbs/v1", + "https://www.w3.org/2018/credentials/v1", + "https://stg.issuer.myinfo.gov.sg/myinfobusiness/schema/corporatebasicdetails/v1", + "https://w3id.org/vc/status-list/2021/v1" + ], + "id": "https://sbl.alwaysdata.net/oa/credentials/123456789", + "type": ["VerifiableCredential"], + "issuer": "did:web:did.actor:alice", + "credentialSubject": { + "uen": "198801234E", + "companyname": "My Own Company Pte Ltd", + "type": ["CorporateBasicDetails"], + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C" + }, + "expirationDate": "2023-11-01T06:45:43Z", + "credentialStatus": { + "id": "https://sbl.alwaysdata.net/oa/status/1#325", + "type": "StatusList2021Entry", + "statusListIndex": 325, + "statusListCredential": "https://sbl.alwaysdata.net/oa/status/1/325" + }, + "issuanceDate": "2023-22-13T01:35:08Z", + "proof": { + "type": "BbsBlsSignature2020", + "created": "2023-10-18T07:14:46Z", + "proofPurpose": "assertionMethod", + "proofValue": "tqvUVZOPaY/A+7Wu47HZIYbboPU/MPGhb1EPLUKKPRwmRe8QJ/dzjRviQ5fAbR88TjSalqLbaBeopNocjrl7TmzCOlLQxGeNC4El1TCICu5tiX0HxGSNAPY4t5CglTLMTsdu5kg4f0a5MGQTnFgwyw==", + "verificationMethod": "did:web:sbl.alwaysdata.net:oa#didkey" + } + } + } + } + }, + "credentialStatus": { + "type": "TradeTrustCredentialStatus", + "credentialStatusType": "NONE" + }, + "renderMethod": { + "type": "TradeTrustRenderMethod", + "renderMethodType": "EMBEDDED_RENDERER", + "name": "INVOICE", + "url": "https://generic-templates.tradetrust.io" + }, + "credentialSubject": { + "name": "TradeTrust Invoice", + "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "date": "2018-02-21", + "customerId": "564", + "terms": "Due Upon Receipt", + "billFrom": { + "name": "ABC Company", + "streetAddress": "Level 1, Industry Offices", + "city": "Singapore", + "postalCode": "123456", + "phoneNumber": "60305029" + }, + "billTo": { + "company": { + "name": "DEF Company", + "streetAddress": "Level 2, Industry Offices", + "city": "Singapore", + "postalCode": "612345", + "phoneNumber": "61204028" + }, + "name": "James Lee", + "email": "def@company.com" + }, + "billableItems": [ + { + "description": "Service Fee", + "quantity": "1", + "unitPrice": "200", + "amount": "200" + }, + { + "description": "Labor: 5 hours at $75/hr", + "quantity": "5", + "unitPrice": "75", + "amount": "375" + }, + { + "description": "New client discount", + "quantity": "1", + "unitPrice": "50", + "amount": "50" + } + ], + "subtotal": "625", + "tax": "0", + "taxTotal": "0", + "total": "625" + }, + "proof": { + "type": "TradeTrustMerkleProofSignature2018", + "proofPurpose": "assertionMethod", + "targetHash": "63916680ddbb78c9baba77133480af7f696720568ba60b27b726a17b9a708c3a", + "proofs": [], + "merkleRoot": "63916680ddbb78c9baba77133480af7f696720568ba60b27b726a17b9a708c3a", + "salts": "W3sidmFsdWUiOiI0MGMwNTRiZjYxOGEwNGVkOTQwNGJmZTRmZDViMzhiMzYxNTc5MmUxMWIxMjZkM2RkMDU1M2E3N2E2YWRhZjIzIiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6IjczZDQ4MTI0OGI1N2QxMWU4YjUwNDQyMWQ2NzgyMjgwZTdkN2ZhM2M3MmIwZGIxMzhkYTdlZGMwNTM4MDA2MGUiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiNTdhOTI4NzdiYWJhYmUyZDQzZmUyZjcwNTM4MDhlZjA2MmEyMGYxMTA4MzZlYmU2YTZiMzA0MzkxYzAzNGRlMiIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6IjFjNTllNmRkOTRlMDQ2ZDZiNzczYzhmOWIwYzE5Y2Y4NDViYWE0ZGMwZjM2NDkwNWRjZDc1NzVjOTY0ZGNhYjAiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiJiMTNiMjA4YjIxM2Q0ZDg3NWE0NzRlOGI1OTk4OGNlMGJiYjJlYTg2Mjc0NGYzNzE5MDJmMTg2YjEzOTg4YzQyIiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiIzZTRkOGVkYjM1Njk5OWMxODc5OTczNzc3NGUxN2Y0YWUyY2FkOWFlM2U4NTE2ODYzNzE0ZjQyNzk4M2NhNjdjIiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiIzYThiYWNiMGY3MWU0NGJiNWRkNzk1NzRiYWM0OWUxMjNjNWEzNDcxZTczNDYyZmYyYjY1MmZmOWEwMGIyZWJiIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6IjMyOWExNTZmZjI4ZjliYWRhMDYxMDc0ZGJiYjQ0OTFhODI3ZDUzMGFhZWMxZjk2ZGIxZmU4NjE2MzdmN2Q1MzIiLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiMmU0NjNkNjFiZmU1ZTJlMTlmNzg4MDI2YjBhZjA1NTk0Y2VkMTRhZTVjOGE3OWExZTcxNDRhNTMxNmEzMTU2YSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiI2YjhhNjY1MjZjZGQ5NTM1MDViNDY3ZjFkNGRjZThiNzhjYzI1ZDk2NmRlNTNhMjJiYWM1NTRiMzgxYmUxMzZlIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiODUxYzRlOTBiMTAzNDc2ODRjNzM2ZWJiOWM5ZTFlOWNlZjRlNTMxYTYxMWQ2Nzk4ZDFhMmQ0N2U0OTEyOWRkYSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLnR5cGUifSx7InZhbHVlIjoiNjQyNWEwZDU2YzlmZDcwMTUzNTcyNjQ3Nzc5ZDNkMDc2YWNiMGYzZmY5MWZiYjFlZmNjNzcwMzU1ZjA5ZmU3OCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMF0ifSx7InZhbHVlIjoiYzhjOWNiZTRiZDdkZTQwNWRkZjM5NzAzZTgxNDA0ZWQ0MzVkNGRmYjZiYWE1NGM4OWQwODI1OTFmNGVlNGQzOCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiZTJiOGIzZDRkMzY2MTE1Y2M4Yzc0NDI0MWZiOTExZTQ4N2E5OWMwY2MwNDNhOGY2MGVjYTAyOTBlZjM4NGUzNyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiY2RjZjUzYWU2ZjA0N2U4ZGQxYTE1MDFiMjkxNjllNGNmOWMxNzk3ZWU4NWIyYmQxYjAyMGU5NWY5ZTc4YWExNCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuQGNvbnRleHRbM10ifSx7InZhbHVlIjoiOWI0YzE3ODVkYTdjODJlYzlhYjg0OTYwY2I4YmE2OTQ3NGEwYjljMmQ1YmViNDkzMDEzNTIwNTk0MGJhYjg4NSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuaWQifSx7InZhbHVlIjoiODBjMWJkZDIzZGZhNGZhMGI1MTZhYmMxZTZjMzJlMTcxNmJjNjIyNWE5ZDQyZjkzNmJmNzQ2OWY5MGJiYTI4ZCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEudHlwZVswXSJ9LHsidmFsdWUiOiI3YjE3NzUyZjM3MGZiYTY0ZDQ0MTVjYmQyMTllNDMzMWJkYjI2OWY5ZTdhNzhkMTRhZGViZGZjNTQ5MTQ4ZWEwIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1ZXIifSx7InZhbHVlIjoiODRmZGRiNjQ0YTZlYjExZmFjNjZiZDFlMTc5ZTI4Y2UzYWM0MDhmMzFjNzMzYmU0YmIxNWNmMTZiMWE4MDA1ZSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QudWVuIn0seyJ2YWx1ZSI6ImVhMGIyOTVhNjQ2M2RmZGZiNjBjNWI2MmIzZmZiYmEzODYxMTcxMzhlNzViZDUxNmJmMzhiYjU3NzczYzgzODkiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LmNvbXBhbnluYW1lIn0seyJ2YWx1ZSI6IjNlNTNiNTRkMDY3ZTBhMGY2ZWQ1YzY2MWM5NzQyZmNlZjVjZGIwZDA3Njk3NWRkYWY1NjkyMGJkZWEzZDY1ZDIiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLmNyZWRlbnRpYWxTdWJqZWN0LnR5cGVbMF0ifSx7InZhbHVlIjoiY2FjNzQwZGE5M2NmMzJlODE2M2YzZjJmNGE4YTQ4YmFlMzNkZTJiNDE1ZjY4ZmM0N2NiMGY3Mjg4ZGZhOTM0NSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN1YmplY3QuaWQifSx7InZhbHVlIjoiYjViN2M1ZGI3ZWRkMDFhNDdmNmM4N2Q4YmNiZDk4ZTY3OGU1OTBlZDQ3MTBhYjMyYjRkZGNhMDFjNzA5MWY1NSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuZXhwaXJhdGlvbkRhdGUifSx7InZhbHVlIjoiNjc5ODVhOGYyZTBhNDkzMjg5YTZiZTNiYzc4NWUzOWRjZjVlMjZmYWI1MWZjNzczOGZhMzgzOTE1MDgyZGM5YSIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5pZCJ9LHsidmFsdWUiOiI3YWNhNjVhYWQ3ZGRmYmYxOWMzNDVlZTdhNWY4OTc0MTRkNzk2NjFjNGY3MDljYmYxZWQ4ZWJlNmI3NDQ4ODRjIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5jcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiOWY1NWZmMzljZTAwYTM1YzE4OGE2ZDc3NjllMTQxYTNlZWVkODg2NWZhY2EzMmJiMTVkMjNmN2Y3OWRiM2QyMyIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0SW5kZXgifSx7InZhbHVlIjoiNDg0NzYxYTc0NjVjNmRiMTg4ZTM5MDJlMTY2ZTgwNzhlODI3NTkxYTIxZjgwZjZjMmM0NDEwMTQ1NzM5YTU4MCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEuY3JlZGVudGlhbFN0YXR1cy5zdGF0dXNMaXN0Q3JlZGVudGlhbCJ9LHsidmFsdWUiOiIzZDhkMDc3N2QwNWRiNGVhN2NlMDk1MGQ3N2YxOGFjNjc1MzJiYWQ3ZDIyYTk2ZmEyYzJhNjhlNTZlNzdiMjMyIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5pc3N1YW5jZURhdGUifSx7InZhbHVlIjoiMjljZTNhMjNiMDUxNTlkOTAxZDg5NzMyMGFiMjU3YjIzMTRjNjIzODk1M2QyOTI1NDA1YmQ5MmI4NTY1MjI5ZiIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVZDLmRhdGEucHJvb2YudHlwZSJ9LHsidmFsdWUiOiJlY2EwMjNhYzI0MTQ4YjM0NWVhMzgwMmY2NWU2ZWI3MjY3NDU1NTRlYWI3NzBjODFkZDkwMmJjMDUwOWRiZTU5IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5jcmVhdGVkIn0seyJ2YWx1ZSI6IjRjMDE1OGJiNDcyNjViZTI2OTU5YTY3NjJlYTUzZTRhYjViMjFhMWQxNWUxYjQzMDgwMzA2OTU5MzllY2I3YjMiLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnByb29mUHVycG9zZSJ9LHsidmFsdWUiOiJlMzM4YTJmNzQ3YzE0NTI0ZGU5YWU4NzhjNGIzM2E4MjdiYjI4MDE1MmVlOWIyNzViYTRmYzcwMWFiZmM5ZmI3IiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aXR5VkMuZGF0YS5wcm9vZi5wcm9vZlZhbHVlIn0seyJ2YWx1ZSI6IjcxMTA5NGM5MmZkYTdkOTUzN2M1ZmI3ZWM4NTZjOTJhZjMwOGY4MGQ2NWIwNmI5ZDI1YjQ3ZTMzZTk5MzA2OTciLCJwYXRoIjoiaXNzdWVyLmlkZW50aXR5UHJvb2YuaWRlbnRpdHlWQy5kYXRhLnByb29mLnZlcmlmaWNhdGlvbk1ldGhvZCJ9LHsidmFsdWUiOiIwYTg2Mjc0NzFmMzQyYWJmMGY4MzY3MDBlNjZkYTdjMDAxNzE0ODU0YTM4Yzc0MWE0MmI2YThhZDA1NjgxM2I4IiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMudHlwZSJ9LHsidmFsdWUiOiJmOTM0N2FmNDE2ZjgxMjgwMTBlMThlZDA1Yzk5OTYyYmFjMDllYjdlZGU2MmU1NWQ4YzY3NDQ3OTk1OTNkZmJjIiwicGF0aCI6ImNyZWRlbnRpYWxTdGF0dXMuY3JlZGVudGlhbFN0YXR1c1R5cGUifSx7InZhbHVlIjoiZGY2MDY2Zjg4M2VlY2M0YjI5YzgxM2IxNmRkZjYxMmY1NDhiNTA5MDRjMjkwMDQ4MzFkMWJhY2Y5ZjQwMWEyYyIsInBhdGgiOiJyZW5kZXJNZXRob2QudHlwZSJ9LHsidmFsdWUiOiIxZWVkNGIyZGZhMjMzNWFlZDk3MDc1Nzg4NDhiYWJhZGUxOGYyM2IzNDYyN2JiNmIwMDgwMDJlM2E5OGNjYWU4IiwicGF0aCI6InJlbmRlck1ldGhvZC5yZW5kZXJNZXRob2RUeXBlIn0seyJ2YWx1ZSI6ImQ5MGRkOTVlYzBkYzNmYTlhZDc2OWY1MzUyZTM0NDFlMWNmYTYwYTViZmU4NDdhMDQxMzk4ODFhZDU3NTdkY2YiLCJwYXRoIjoicmVuZGVyTWV0aG9kLm5hbWUifSx7InZhbHVlIjoiODc2YzkyNzQwYzc4ZjhlYjA3NWIxZTI0ODUxOTY1MmM3YTYzYzY5ZDBiYTA0YzhkZmE0N2M0Nzc3ZDUyMGIzYyIsInBhdGgiOiJyZW5kZXJNZXRob2QudXJsIn0seyJ2YWx1ZSI6IjAxYjJhMDA1Y2M4ZWFmODU5MmI0N2MxN2VjZmRhNzI0MTgwNGE0ZTVkYmZmMWExNmUwNjM0YjlhZDY2ZTA2NWEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QubmFtZSJ9LHsidmFsdWUiOiI0YWViOGViZjE0MDc1Mzg5M2M4MmI1N2I1ZjkwY2JiYzYyODQ1YmQ2NTA3MTkyNWI2ZmE3YjAyY2QzMTk0OWY0IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmlkIn0seyJ2YWx1ZSI6ImQ5MjdkYTBlNTU4ZjU5Yzk4NjM2YzQ0NTA1ZDIxNzRkNjQ5NTM4MjkzMzBjZGMzNTRjMTUzYzQ3YzZhNWU4NDAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuZGF0ZSJ9LHsidmFsdWUiOiI1MGQ0ZTdjNGQyYmJkMWI3ODY4YTYwYTgxYWFiMzU2M2RiNmE5Zjg1N2UwMzU5NTM3MWVmN2E4YzAyNjY4MjY3IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmN1c3RvbWVySWQifSx7InZhbHVlIjoiMjBhOGU0YTIyODRjOTUyNmVlOWM0YTBkZGJmZjExY2YwNDE2MzdlZDRlYWY3NjkyY2JlNDg5ODAwZGU2ZjliNyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50ZXJtcyJ9LHsidmFsdWUiOiIwZTg3NmEyODZjOTY4NzMzMjhmYjIxMzQwMTg4YzZjNjMzOGEwM2JjOWMyZDhhNjI1Zjc2MDVmZDg5Y2E0NDVlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLm5hbWUifSx7InZhbHVlIjoiY2JhYTMxZmU2NDEzOGY1Zjc5ODhkOWYwMGNmZWM1MGNjOTE4YjQzNGYwYjIwNjI3OTk0NGUyMzRmNWM5ZTA0OCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6IjZjZGFlYzUyNjM3MmJhMzJiZjRkMDM4YTJmMDIxNmU0ZTE0MzczMzllODAyYjk0MTBhNDIxZTZlZWE0MDZjODIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uY2l0eSJ9LHsidmFsdWUiOiIwMmQ2NjAzNmI2NjhhNWM2NzFmODgyODI4Y2M1MTNlODY3MDIzOTBlYzViNGM5MDc1Y2Q0OGNmMzZhMTZkN2IyIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLnBvc3RhbENvZGUifSx7InZhbHVlIjoiYWViNzVhNWQ3NTMxY2ViOWE3M2Y5ZjVmMTBlY2Y1ZjFhMTE5MjcwM2FlYjNkZTcxMmVjM2Y3MzI2ODEzZDQzZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiIwY2ZlMDIxOTAxMzE5OWFhYjU2YTYzNTJkMDM5ZTFmNGE5ZTdhN2JhZDVlYzcxMWI3YzgyNzQ2ODYwMjljZjNiIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55Lm5hbWUifSx7InZhbHVlIjoiNTM1MzQ2MmU0NTI4ZWY2N2MzY2I4YzM4YmNmZjg1NzJmMzA1ZDFkYzAzOTE5ODhlMzBmZGVjMDRjNTI5ODAxMCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5zdHJlZXRBZGRyZXNzIn0seyJ2YWx1ZSI6ImNlMjM3YmU0ODYzNjZlNDljYTE5MjJlM2ZlY2Y2YTgyZmVmMjQyMGU0OTA0NDQxNjBkODJjNDc0MDhmZDJiZWYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuY2l0eSJ9LHsidmFsdWUiOiJjOTc3ZDBlNWE1YTZhMWQ3YzIwMmQyN2RhODk1MWFhZTUzZGEwMGQ0ZWUwY2VhNzMzOWRhMDU1YTRiODE3ZTU4IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LnBvc3RhbENvZGUifSx7InZhbHVlIjoiNjIzM2RkZWUxMjJjZGU2YTdhMzg2ZGJjYWJiM2U2NzU3YTE2ZGZhNDQ2ZTNjMDVlNzEwYTc0NDFiOWE2MGNkZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5waG9uZU51bWJlciJ9LHsidmFsdWUiOiIwNjU1ZWU5ZGYyMzlhMDRiNGEyYmVkM2MyYzdkYmVmNjViYWRlMTQxNzg5NGFhM2U2NjhkNTIzOWUxMzY1ZjBkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5uYW1lIn0seyJ2YWx1ZSI6IjllZWM4YmE1ZGZkNjdlNjQ0N2FmMGVhN2IwMmRkN2JhM2U0ODE2NzA2YzkzN2U1NmZlMzQ3MDZmMWQ0YTYwZGUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmVtYWlsIn0seyJ2YWx1ZSI6IjNlOGUyNjlhM2JhNDEwN2ZiZmZhYjZiYWZmNzFmOGRmMDA5Y2NlYmVkMjZlM2YxYzU5NGMzZTVkZTVlMWEwYTgiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiJiYzhlODljYmExNzEzNzEyNGQ1YmUxNzA0NjVhMjJiNTJjODBhNzlmNTgzYjNiMjlhNGIxMGViZjBlZWQzNjk4IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0ucXVhbnRpdHkifSx7InZhbHVlIjoiNjlkMmYxNzMzY2VlNGEzMmQ2YjYxYjlkOWRjNmVmNDYyYWUzODhjYWEyMjBkZmQ3MmUzMzFhOGVkMmM0MGYxYyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiJiZWE4Zjk4YjQwMmM3YjM2ZjRjNWRmNTUxZDk2YzhjOGYzZWI4OTMxN2VlZTc5OGFhZTA2MmI2N2Y3ZjM4NjgzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uYW1vdW50In0seyJ2YWx1ZSI6IjZlMDUwOTcyYzBmNDcyNTdkOTNjODM1ZGY2M2RkMDIwNzNkNDRiMzM2Y2I2OWYyZTQ3NzdkNzE5Y2M1ZGU1NzUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiI4MzM2YjZlYzljMjhiOTUzM2NhZWQxMDdjOWUxNjlhYzIyNWMzNzUzMDMyN2M2NzRhNGQ3ZjU3ZWYwNWY4NGZjIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0ucXVhbnRpdHkifSx7InZhbHVlIjoiNzhmOTk4ZmFkMDcwM2ZkZmYwNTUwMGNjYTIzMjgxOTk3NDAxNDVlZTEyMzgxZmYwYWUyNDJmMmE0Yzc5YmViOCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiI0MDU5YzIyMzk1YTdhZTUxNDJhNWVhNDFmZTYxNzljMzkzOTRlODI5MjlhNmRiMWNiOGJlOWY0Zjc3Nzk4MWU2IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uYW1vdW50In0seyJ2YWx1ZSI6ImUxYTU2YjM1ZWM1ZTE2OTVlOGU4ZDhlZmUwYzRjNDE1ODY0Zjk1ZmViZDA1ZWU0MDQxMDViODYwZDNkNmQzM2UiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS5kZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiJmMjgyZGJiZDAxNTJhNzliM2EwNjNjMjMwZjAxZTVkNzVlNTVmZGJiMzJiMDljNTg3NWIyMDIyNTJlNDBlZWU4IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0ucXVhbnRpdHkifSx7InZhbHVlIjoiMDY2ZTgyOTg5NGZiNmRkMTcxNTVhZDhiY2M1OTNhMDgyYmEzODUzMWQ3Zjg2Y2ZlNWVlMzBjNzA2MDI0N2JjMSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnVuaXRQcmljZSJ9LHsidmFsdWUiOiIxNjI4OGQzM2NlZjdhM2NkYjM0NjEyMWY1MjU2N2E3ZWFmOWJjNDEwMDExZTU3MzAwNmE0MzExNzdjMDVlNjY1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uYW1vdW50In0seyJ2YWx1ZSI6IjliZDc1YzY5YTRhMWQ0ODFhNTE3NjNmYjgwZjMxYTk3Mjg5OGZiNzU4YWIzNGVjNWEzODg1ODg3MThiNTMxMmIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Quc3VidG90YWwifSx7InZhbHVlIjoiNDEzNTdmOTZlNDRhYThlMWE3Mjg5NDZiODZlZGY1YWI2OWI2ZWM5ZmRkYmY1ODgwMjQ4YTBlYjkwNThkNzFiYSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXgifSx7InZhbHVlIjoiMTBiNzE3ZTA2YTg5ZjNkNWRjNzg1ODRhOGFhMzVkOGY3MTNmMmUzMmE1MjBjNDIxNTRjYzEzNzRlNGI0NWJiYiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50YXhUb3RhbCJ9LHsidmFsdWUiOiJiNGFhNDNlZDAwMjJiYjM0ZjIwZmU3MTk2Mzk4ZWFkYzVjNTY3Zjc1OTgwMzM5ZTYwMzIzZTZmYzMwOTBiYjk3IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnRvdGFsIn1d", + "privacy": { + "obfuscated": [] + }, + "key": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C#controller", + "signature": "0x1304b99ce224decb5777d91db6cf2d548c3a9c2e3421c2f00245a8a21eaf0a7d74a7d3d1c5cb918e7f57046e0a20b95bcc0a739477138c516791099bf2353d4b1c" + } +} From 1ad934ec561ea9e6f91404a88a778fb3a91679af Mon Sep 17 00:00:00 2001 From: cavacado Date: Wed, 8 Nov 2023 09:45:05 +0800 Subject: [PATCH 12/13] feat: add fixtures for error case when idvc is missing --- .../v4/tt/did-idvc-raw-missing-idvc.json | 76 +++++++++++++++ .../v4/tt/did-idvc-wrapped-missing-idvc.json | 90 ++++++++++++++++++ .../did-idvc-wrapped-signed-missing-idvc.json | 92 +++++++++++++++++++ 3 files changed, 258 insertions(+) create mode 100644 test/fixtures/v4/tt/did-idvc-raw-missing-idvc.json create mode 100644 test/fixtures/v4/tt/did-idvc-wrapped-missing-idvc.json create mode 100644 test/fixtures/v4/tt/did-idvc-wrapped-signed-missing-idvc.json diff --git a/test/fixtures/v4/tt/did-idvc-raw-missing-idvc.json b/test/fixtures/v4/tt/did-idvc-raw-missing-idvc.json new file mode 100644 index 00000000..f677c6b9 --- /dev/null +++ b/test/fixtures/v4/tt/did-idvc-raw-missing-idvc.json @@ -0,0 +1,76 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" + ], + "type": ["VerifiableCredential", "TradeTrustCredential"], + "validFrom": "2021-03-08T12:00:00+08:00", + "issuer": { + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", + "type": "TradeTrustIssuer", + "name": "My Own Company Pte Ltd", + "identityProof": { + "identityProofType": "IDVC", + "identifier": "My Own Company Pte Ltd" + } + }, + "credentialStatus": { + "type": "TradeTrustCredentialStatus", + "credentialStatusType": "NONE" + }, + "renderMethod": { + "type": "TradeTrustRenderMethod", + "renderMethodType": "EMBEDDED_RENDERER", + "name": "INVOICE", + "url": "https://generic-templates.tradetrust.io" + }, + "credentialSubject": { + "name": "TradeTrust Invoice", + "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "date": "2018-02-21", + "customerId": "564", + "terms": "Due Upon Receipt", + "billFrom": { + "name": "ABC Company", + "streetAddress": "Level 1, Industry Offices", + "city": "Singapore", + "postalCode": "123456", + "phoneNumber": "60305029" + }, + "billTo": { + "company": { + "name": "DEF Company", + "streetAddress": "Level 2, Industry Offices", + "city": "Singapore", + "postalCode": "612345", + "phoneNumber": "61204028" + }, + "name": "James Lee", + "email": "def@company.com" + }, + "billableItems": [ + { + "description": "Service Fee", + "quantity": "1", + "unitPrice": "200", + "amount": "200" + }, + { + "description": "Labor: 5 hours at $75/hr", + "quantity": "5", + "unitPrice": "75", + "amount": "375" + }, + { + "description": "New client discount", + "quantity": "1", + "unitPrice": "50", + "amount": "50" + } + ], + "subtotal": "625", + "tax": "0", + "taxTotal": "0", + "total": "625" + } +} diff --git a/test/fixtures/v4/tt/did-idvc-wrapped-missing-idvc.json b/test/fixtures/v4/tt/did-idvc-wrapped-missing-idvc.json new file mode 100644 index 00000000..9b720f33 --- /dev/null +++ b/test/fixtures/v4/tt/did-idvc-wrapped-missing-idvc.json @@ -0,0 +1,90 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" + ], + "type": [ + "VerifiableCredential", + "TradeTrustCredential" + ], + "validFrom": "2021-03-08T12:00:00+08:00", + "issuer": { + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", + "type": "TradeTrustIssuer", + "name": "My Own Company Pte Ltd", + "identityProof": { + "identityProofType": "IDVC", + "identifier": "My Own Company Pte Ltd" + } + }, + "credentialStatus": { + "type": "TradeTrustCredentialStatus", + "credentialStatusType": "NONE" + }, + "renderMethod": { + "type": "TradeTrustRenderMethod", + "renderMethodType": "EMBEDDED_RENDERER", + "name": "INVOICE", + "url": "https://generic-templates.tradetrust.io" + }, + "credentialSubject": { + "name": "TradeTrust Invoice", + "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "date": "2018-02-21", + "customerId": "564", + "terms": "Due Upon Receipt", + "billFrom": { + "name": "ABC Company", + "streetAddress": "Level 1, Industry Offices", + "city": "Singapore", + "postalCode": "123456", + "phoneNumber": "60305029" + }, + "billTo": { + "company": { + "name": "DEF Company", + "streetAddress": "Level 2, Industry Offices", + "city": "Singapore", + "postalCode": "612345", + "phoneNumber": "61204028" + }, + "name": "James Lee", + "email": "def@company.com" + }, + "billableItems": [ + { + "description": "Service Fee", + "quantity": "1", + "unitPrice": "200", + "amount": "200" + }, + { + "description": "Labor: 5 hours at $75/hr", + "quantity": "5", + "unitPrice": "75", + "amount": "375" + }, + { + "description": "New client discount", + "quantity": "1", + "unitPrice": "50", + "amount": "50" + } + ], + "subtotal": "625", + "tax": "0", + "taxTotal": "0", + "total": "625" + }, + "proof": { + "type": "TradeTrustMerkleProofSignature2018", + "proofPurpose": "assertionMethod", + "targetHash": "94f92aece94e480c1368da7430bc59252f74917774c0b7f364eea5341d505e50", + "proofs": [], + "merkleRoot": "94f92aece94e480c1368da7430bc59252f74917774c0b7f364eea5341d505e50", + "salts": "W3sidmFsdWUiOiJmZmJkOGZhNDJhMWRhODRjYWYzMDBlNjQyZTMyMTcxNDU1OGIwN2RmNjc5ZjUxZjY1NzUyMzBiNjdmMjViOWQ3IiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6IjYwNzQwZDczYWFiY2NlNzM4YzY2ZDA2Y2QyMjIyYzk0ZjZlMDIzOGU5N2YzNzBjNDI4MzhhOTc2OGExODBlMzkiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiYWI2ODRhNGU0YjBhYTZkYjUzNDdiN2Y4OGFmMjk3YWQyYzhlYzc3N2Y3ZjA1ZWQ5YTI4YTBjZDFiY2ZkZWM4ZiIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6IjNiODQ3ZjQyN2M3Mzg4NDFmOTRmMmViY2I3YTIxNDk0MjllYjcyZjIxNDA2YTViOWJiMmFhYTUyZjYyMjFlZDAiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiJlNjdkODNiYWRmNzBkZTgxMzk3OGU3N2M5NmM1MGIwOTc4ZTdhMmViYjkwMDlmNTUyY2I3YmY4NGQxNjI1YjVmIiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiJhOWU1ZmNiZWQxMzgxN2I2MGJjODU2ZGYyYzFhZGM3MmMxMGFlYzc4YjYwNjg0Y2Q5MzE1Y2ZhMjg0NTIxOWQ2IiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiJiMGExNmU5ZWEyN2VhNjVhNGIxZTZkYTc1MWY5OGQyMDdmZTNhYmQ5ZjJkZTY0MzVhMWFlMTJmODI4NTg5NzhiIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6IjBiMzRiY2ZmYTVjNDZlYzhlYjY4Nzg1MjIwZTQwNTAwNTYyZTE5NzFkNGRmN2M4ZjE1YjQzMmRjMWE2MThhYWYiLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiNzU3YTZjOTFjNmUxYjFiYWEwNjIxZmJlNTcyMTNmMDYwMWFiMmEwZDRlYmE0MDRhODAyY2RhNmI4NTQxNWFhOCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiI2ZTAwYzc1MGYyNDFjYjBjOTIzMDFjYWRjMzRiMGExZDVlZDU5NjVjMDRiMGIwZGI3M2QwNDg5OTFkNDlhOWFkIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiZjM3ZTVkMDg4OGM3YWI3MjY5ZDkxMGNkZDlmYjFiZjU4ZDNjMzE3YzYzNGM4ODRkM2U3NjllZTdmZDM4NWFmMyIsInBhdGgiOiJjcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiZTc0ZGE2NDRhYjk5MzUxYjlkZjY0YzdhZTE4MzM1MWJhZDVkNmJjYjU0NzEwZDBlODBmNjcxMWZlNTI3ZjQ0MSIsInBhdGgiOiJjcmVkZW50aWFsU3RhdHVzLmNyZWRlbnRpYWxTdGF0dXNUeXBlIn0seyJ2YWx1ZSI6IjRlMTg2ZWZhYjM5ZmFjOTU4OWQxOGJlYjM1MjA3NGRjZGZlOTkzYTZmNGJkZTRmYzdlZTEyYTAxYzFiZTEyZDQiLCJwYXRoIjoicmVuZGVyTWV0aG9kLnR5cGUifSx7InZhbHVlIjoiMjViMTc0M2NkNmY1M2I1YjYxMDk0ZDM4MWE2YTlkOTIzN2VjNjlkNWYwZDQwNmExZjIzN2YxZjExNDIxMmZlOCIsInBhdGgiOiJyZW5kZXJNZXRob2QucmVuZGVyTWV0aG9kVHlwZSJ9LHsidmFsdWUiOiI5ZWZlZDU3ZDNhMmU4NTUxMzAwODUwODFkZjA2ZTcyZTc3YWM2ODcyZTdkNDBlNmYyZDZjNGIyYzQ4ZmM3ZDNiIiwicGF0aCI6InJlbmRlck1ldGhvZC5uYW1lIn0seyJ2YWx1ZSI6Ijc3MzM3YTZmNWU0NDJlMGNhNTBjYjQwNGRmNTNkMTY2NWVlMzEwMzc2NWE5NDFkZTgyNDc0ZGE2NDhjM2IyMTgiLCJwYXRoIjoicmVuZGVyTWV0aG9kLnVybCJ9LHsidmFsdWUiOiIyNzY1ZDk5M2Q3NzIxNTU5NWE4ZDUwY2I3Nzg2NThkNmU3Yjk1MzkxYjM5N2Q1MmQxMDYzMjU5NGE0OWZmNDE5IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0Lm5hbWUifSx7InZhbHVlIjoiMjhmNzI0YTM4MTlhY2U3NWY5ZjhhN2YxMDk4MjhjNDI5ZGU1YmYwNGM1MjIwOWE0NWI2ZDc0MTUzM2RmNDk4OCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5pZCJ9LHsidmFsdWUiOiJmYTBiNjM4OTdhNWYxYjEwZTUxMGM5MGEwZTc5MTU0MGE0N2Q5NjcyY2IxNDYzODBjOTIwN2MyMzM5NzgyZDc2IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmRhdGUifSx7InZhbHVlIjoiNjBjNjM5N2VlZGVmYTI1ZjFlOGY1NDc4MjBlOGQ2ODJlNjAyZDQ0YzkzNTk3NTczZjhiYTJkYjA4ZTg4OGNhYiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jdXN0b21lcklkIn0seyJ2YWx1ZSI6ImRhNjBlNTU2M2ZiMTY4MzljMzRlZDc0ZDMzMzAwYWNkNDBmNDRlMDQ0NzRiMGExMTJiYTQ2YzhkNmE3ZWY1NjUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGVybXMifSx7InZhbHVlIjoiNmIyYWFkZGI3YWExZGEyZDAwYzNkZmQzYzM5MzIxNGZhNWVmY2E4Mzg5Y2Q0ZWU1YmZmY2Y3MzZjYzA2MTViOSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5uYW1lIn0seyJ2YWx1ZSI6ImE0NzlmZDBhYjkyNDk4NjZjZWI4OGJkN2I1ODBmZDgxMmU2MDY0Njk2M2RjYjVmODdlZmZhY2EyMDRmMmU3MjIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uc3RyZWV0QWRkcmVzcyJ9LHsidmFsdWUiOiI3MzU1ZTliMWI5MWE4MmU4Y2M1MmNhZmQ1YzIyMjQ5NmZlYzI4NGRhZTFmODk0YTk4NTk5MjFjOGE1OWFkYTFlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLmNpdHkifSx7InZhbHVlIjoiNDQzMzM0YWM0YjMwYmFiY2EzMzYzMjIwMzY4ZGY3NTkwYjVhNWM2M2RkNmI2ZjBjYjRkMWJlMmQ0NDg3ZmM4OCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5wb3N0YWxDb2RlIn0seyJ2YWx1ZSI6Ijg5N2NlOGJmMGVmM2FiZjQ5YjMyZDg5MzMzYzdiZDJkNDRkNjA3MWFhNzYzYWVmZWNhNjlkOTExYzY4NTM2ZGEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20ucGhvbmVOdW1iZXIifSx7InZhbHVlIjoiNzdhMTIyYWNjOWZmMWY2ZmEwYjMwNzYzOGMyYjI5YzhmYWJhN2JkOWRkZWFlY2I2OTEzNmMzNTg1ZWViMmU5ZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5uYW1lIn0seyJ2YWx1ZSI6IjBhOWU5OWM1MDE0ZDI3MzA3ZDg3NWMwZGZjNzc4MzAzYWVjNzNhYTc0YWMzMWRiMjViNmU5ZWJiMTNhMTI1NGIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuc3RyZWV0QWRkcmVzcyJ9LHsidmFsdWUiOiI3ZmU1MWRjYTdiZDQzMjM2YTc2OWQyOGJmYjQ5NWE0ZmM3NTdjZjZhOWU1ODg2Zjc5ZGU3NjczMmFiMWFiMWU4IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LmNpdHkifSx7InZhbHVlIjoiMGFkNzJmY2Q4M2RiZTAxNTJiMzc0MGVlYjA3MmQ2OTMzOWM3NzFjZWRlMzRiNzcwYTFjNTU5NTQyZWY4NjVmZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5wb3N0YWxDb2RlIn0seyJ2YWx1ZSI6IjcyNjJiY2I3YjJmNmQzMmIwOTJiNWI1M2Y1NTM4M2VmNTU1Y2YwYjdjOTkxY2M0NDRmYjczMzYyYmYwNDRmZGYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkucGhvbmVOdW1iZXIifSx7InZhbHVlIjoiYWU4NTg0OGRmYTE5YzJlYjhiZjgwNzA5YzVkMGJjZmMzN2MxZDBiNGY0Yzk4Mjc3OTIwMjA1NGMwMzJhOWUxOSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8ubmFtZSJ9LHsidmFsdWUiOiIyZTYzMzY0MGFhYTJkMzUyMGQ2NzVlZmZhY2E0ZWExOGU4ZjMxMDdjMTg5MzMxMDU5ZjAyOTVlMzE1YjdhY2QzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5lbWFpbCJ9LHsidmFsdWUiOiIzZDk4ZDhhZjI5MGVmNzUzZTM3ODQyNDI2ZmI1NzE4MGEzOGYzNDcwOGY5NGEzNWU5YzgzMmMyZjY5Mjg3OTAzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiMjI4NmFiOTUxMTdmMGM2ZjEzYTlmMTc2NjcyN2E3NThmOWI4Njk5ODE4MWUzNDc4MjU3ZTFlZWYyNTQ0MGM3NyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnF1YW50aXR5In0seyJ2YWx1ZSI6ImQ4Y2ZiMzg0OTU5MmY2ZGJjMzNkZjU2YTZhNzNkNDFlMjBlODU4ZTgwNDAwNGZiNjZmYjhjMzNjNjI3NGMzZDEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS51bml0UHJpY2UifSx7InZhbHVlIjoiZmIyMDJiZTIwYTViYzNiYTMzY2UzZDJhNmExMzc0OGM5YWUzNzBhYjQ4YzY4NTk2NjBhZGUwNGUyMmJmYmYxZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLmFtb3VudCJ9LHsidmFsdWUiOiJlNDgyZTFlZGE4MjVhNTkxZGMyZTYyMGMxOWRkMzdmZWYzYzczZDA0ODIyYzgwMzFiZGYzOTExN2Q4YzNiNTc5IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiZDc5Y2FmYmRiMjI4ZTY2ZWFkMGUwOGEwZjc2MWExNWVhNzcxZGViNjBlZDg2NWVjNThmNzViNWRiNjZlNGY4MiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnF1YW50aXR5In0seyJ2YWx1ZSI6ImUzMWQyZTU1ZTk5MGI5Yjc1ODI1ZGRkZjk1N2UxM2NiMGM5ZGM5MGU5MmY0NjMwZDRiOWYzNGFiOWFmMGJmMWMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS51bml0UHJpY2UifSx7InZhbHVlIjoiNzEwM2E1NjA4YmIyMTg0NDZkODM3N2E4ZmZmOWFjNDg0MjNmNmM4MTFmODhjNjA1ODA0YWNkNjFlYjc3NjgzOCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLmFtb3VudCJ9LHsidmFsdWUiOiI3MDNhZWFkOTA1Yzk3YjdmZmU5NjEwOGI3YzFjZjFkMjkyYmYzNzNhZDAyZmQ3NmE4ZTIzOWYyN2MyMzcxYzg1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiNDIwZDNhMmIzMGEwNTkwZjVjNGM0NDQ2OTAwYjM5YzE2ZjZhM2U0NDlhMzI2OWJlNDhhNTI0OTY5OGNkN2I3NSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnF1YW50aXR5In0seyJ2YWx1ZSI6IjAxNDYyNGJjOTdjOTAxNDRlNzgzN2IwOGI0NmUwOTg2YmVkODU0YWQyMmU3NmM1ODRmM2Q0YzIzODVlNWIwZDAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS51bml0UHJpY2UifSx7InZhbHVlIjoiNTEzODZmNDYyYmQ5N2UwMmY4ZjQzMGViYjk2ZjE0MGMzMThlYmExZDMwMjM0YTUwNzg0ZjJkZDVlMjFjYjM0YSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLmFtb3VudCJ9LHsidmFsdWUiOiJiMjQxYzZmOWU0NjFjOTI2NWY0NWQ5OTdkZDVhZmFiYzJiMjc1YTdmYmFlZjFiYTFlZGRlYzM3YzI5ZDc5ZDRmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnN1YnRvdGFsIn0seyJ2YWx1ZSI6IjZhZjkwZWVhZjczNWEyOTczMmY4NjA5Zjg5YWVkODc2YWFkN2FlZGU2MTk4OTcwODNiNTlmZTI1YjRlNzNhOGMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGF4In0seyJ2YWx1ZSI6IjNjMGE1OTgyNTAzZTE0NzZiMDUxM2NlYmJhOTdkNTk1OWNhMzA0NDgwZTY1OWJkNzkyNzMxOTU1NDJkMTJhMjMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGF4VG90YWwifSx7InZhbHVlIjoiNWRhOTQzZjM1YTc5MWRjNzdmMjllMzYyZjI5MzIzNjI5YTQ2NDEwOWNkNzQxNTUxODc4YmUyNzdlYTkwOWZkOSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50b3RhbCJ9XQ==", + "privacy": { + "obfuscated": [] + } + } +} \ No newline at end of file diff --git a/test/fixtures/v4/tt/did-idvc-wrapped-signed-missing-idvc.json b/test/fixtures/v4/tt/did-idvc-wrapped-signed-missing-idvc.json new file mode 100644 index 00000000..5e12a090 --- /dev/null +++ b/test/fixtures/v4/tt/did-idvc-wrapped-signed-missing-idvc.json @@ -0,0 +1,92 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" + ], + "type": [ + "VerifiableCredential", + "TradeTrustCredential" + ], + "validFrom": "2021-03-08T12:00:00+08:00", + "issuer": { + "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", + "type": "TradeTrustIssuer", + "name": "My Own Company Pte Ltd", + "identityProof": { + "identityProofType": "IDVC", + "identifier": "My Own Company Pte Ltd" + } + }, + "credentialStatus": { + "type": "TradeTrustCredentialStatus", + "credentialStatusType": "NONE" + }, + "renderMethod": { + "type": "TradeTrustRenderMethod", + "renderMethodType": "EMBEDDED_RENDERER", + "name": "INVOICE", + "url": "https://generic-templates.tradetrust.io" + }, + "credentialSubject": { + "name": "TradeTrust Invoice", + "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "date": "2018-02-21", + "customerId": "564", + "terms": "Due Upon Receipt", + "billFrom": { + "name": "ABC Company", + "streetAddress": "Level 1, Industry Offices", + "city": "Singapore", + "postalCode": "123456", + "phoneNumber": "60305029" + }, + "billTo": { + "company": { + "name": "DEF Company", + "streetAddress": "Level 2, Industry Offices", + "city": "Singapore", + "postalCode": "612345", + "phoneNumber": "61204028" + }, + "name": "James Lee", + "email": "def@company.com" + }, + "billableItems": [ + { + "description": "Service Fee", + "quantity": "1", + "unitPrice": "200", + "amount": "200" + }, + { + "description": "Labor: 5 hours at $75/hr", + "quantity": "5", + "unitPrice": "75", + "amount": "375" + }, + { + "description": "New client discount", + "quantity": "1", + "unitPrice": "50", + "amount": "50" + } + ], + "subtotal": "625", + "tax": "0", + "taxTotal": "0", + "total": "625" + }, + "proof": { + "type": "TradeTrustMerkleProofSignature2018", + "proofPurpose": "assertionMethod", + "targetHash": "94f92aece94e480c1368da7430bc59252f74917774c0b7f364eea5341d505e50", + "proofs": [], + "merkleRoot": "94f92aece94e480c1368da7430bc59252f74917774c0b7f364eea5341d505e50", + "salts": "W3sidmFsdWUiOiJmZmJkOGZhNDJhMWRhODRjYWYzMDBlNjQyZTMyMTcxNDU1OGIwN2RmNjc5ZjUxZjY1NzUyMzBiNjdmMjViOWQ3IiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6IjYwNzQwZDczYWFiY2NlNzM4YzY2ZDA2Y2QyMjIyYzk0ZjZlMDIzOGU5N2YzNzBjNDI4MzhhOTc2OGExODBlMzkiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiYWI2ODRhNGU0YjBhYTZkYjUzNDdiN2Y4OGFmMjk3YWQyYzhlYzc3N2Y3ZjA1ZWQ5YTI4YTBjZDFiY2ZkZWM4ZiIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6IjNiODQ3ZjQyN2M3Mzg4NDFmOTRmMmViY2I3YTIxNDk0MjllYjcyZjIxNDA2YTViOWJiMmFhYTUyZjYyMjFlZDAiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiJlNjdkODNiYWRmNzBkZTgxMzk3OGU3N2M5NmM1MGIwOTc4ZTdhMmViYjkwMDlmNTUyY2I3YmY4NGQxNjI1YjVmIiwicGF0aCI6InZhbGlkRnJvbSJ9LHsidmFsdWUiOiJhOWU1ZmNiZWQxMzgxN2I2MGJjODU2ZGYyYzFhZGM3MmMxMGFlYzc4YjYwNjg0Y2Q5MzE1Y2ZhMjg0NTIxOWQ2IiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiJiMGExNmU5ZWEyN2VhNjVhNGIxZTZkYTc1MWY5OGQyMDdmZTNhYmQ5ZjJkZTY0MzVhMWFlMTJmODI4NTg5NzhiIiwicGF0aCI6Imlzc3Vlci50eXBlIn0seyJ2YWx1ZSI6IjBiMzRiY2ZmYTVjNDZlYzhlYjY4Nzg1MjIwZTQwNTAwNTYyZTE5NzFkNGRmN2M4ZjE1YjQzMmRjMWE2MThhYWYiLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiNzU3YTZjOTFjNmUxYjFiYWEwNjIxZmJlNTcyMTNmMDYwMWFiMmEwZDRlYmE0MDRhODAyY2RhNmI4NTQxNWFhOCIsInBhdGgiOiJpc3N1ZXIuaWRlbnRpdHlQcm9vZi5pZGVudGl0eVByb29mVHlwZSJ9LHsidmFsdWUiOiI2ZTAwYzc1MGYyNDFjYjBjOTIzMDFjYWRjMzRiMGExZDVlZDU5NjVjMDRiMGIwZGI3M2QwNDg5OTFkNDlhOWFkIiwicGF0aCI6Imlzc3Vlci5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiZjM3ZTVkMDg4OGM3YWI3MjY5ZDkxMGNkZDlmYjFiZjU4ZDNjMzE3YzYzNGM4ODRkM2U3NjllZTdmZDM4NWFmMyIsInBhdGgiOiJjcmVkZW50aWFsU3RhdHVzLnR5cGUifSx7InZhbHVlIjoiZTc0ZGE2NDRhYjk5MzUxYjlkZjY0YzdhZTE4MzM1MWJhZDVkNmJjYjU0NzEwZDBlODBmNjcxMWZlNTI3ZjQ0MSIsInBhdGgiOiJjcmVkZW50aWFsU3RhdHVzLmNyZWRlbnRpYWxTdGF0dXNUeXBlIn0seyJ2YWx1ZSI6IjRlMTg2ZWZhYjM5ZmFjOTU4OWQxOGJlYjM1MjA3NGRjZGZlOTkzYTZmNGJkZTRmYzdlZTEyYTAxYzFiZTEyZDQiLCJwYXRoIjoicmVuZGVyTWV0aG9kLnR5cGUifSx7InZhbHVlIjoiMjViMTc0M2NkNmY1M2I1YjYxMDk0ZDM4MWE2YTlkOTIzN2VjNjlkNWYwZDQwNmExZjIzN2YxZjExNDIxMmZlOCIsInBhdGgiOiJyZW5kZXJNZXRob2QucmVuZGVyTWV0aG9kVHlwZSJ9LHsidmFsdWUiOiI5ZWZlZDU3ZDNhMmU4NTUxMzAwODUwODFkZjA2ZTcyZTc3YWM2ODcyZTdkNDBlNmYyZDZjNGIyYzQ4ZmM3ZDNiIiwicGF0aCI6InJlbmRlck1ldGhvZC5uYW1lIn0seyJ2YWx1ZSI6Ijc3MzM3YTZmNWU0NDJlMGNhNTBjYjQwNGRmNTNkMTY2NWVlMzEwMzc2NWE5NDFkZTgyNDc0ZGE2NDhjM2IyMTgiLCJwYXRoIjoicmVuZGVyTWV0aG9kLnVybCJ9LHsidmFsdWUiOiIyNzY1ZDk5M2Q3NzIxNTU5NWE4ZDUwY2I3Nzg2NThkNmU3Yjk1MzkxYjM5N2Q1MmQxMDYzMjU5NGE0OWZmNDE5IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0Lm5hbWUifSx7InZhbHVlIjoiMjhmNzI0YTM4MTlhY2U3NWY5ZjhhN2YxMDk4MjhjNDI5ZGU1YmYwNGM1MjIwOWE0NWI2ZDc0MTUzM2RmNDk4OCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5pZCJ9LHsidmFsdWUiOiJmYTBiNjM4OTdhNWYxYjEwZTUxMGM5MGEwZTc5MTU0MGE0N2Q5NjcyY2IxNDYzODBjOTIwN2MyMzM5NzgyZDc2IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmRhdGUifSx7InZhbHVlIjoiNjBjNjM5N2VlZGVmYTI1ZjFlOGY1NDc4MjBlOGQ2ODJlNjAyZDQ0YzkzNTk3NTczZjhiYTJkYjA4ZTg4OGNhYiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jdXN0b21lcklkIn0seyJ2YWx1ZSI6ImRhNjBlNTU2M2ZiMTY4MzljMzRlZDc0ZDMzMzAwYWNkNDBmNDRlMDQ0NzRiMGExMTJiYTQ2YzhkNmE3ZWY1NjUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGVybXMifSx7InZhbHVlIjoiNmIyYWFkZGI3YWExZGEyZDAwYzNkZmQzYzM5MzIxNGZhNWVmY2E4Mzg5Y2Q0ZWU1YmZmY2Y3MzZjYzA2MTViOSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5uYW1lIn0seyJ2YWx1ZSI6ImE0NzlmZDBhYjkyNDk4NjZjZWI4OGJkN2I1ODBmZDgxMmU2MDY0Njk2M2RjYjVmODdlZmZhY2EyMDRmMmU3MjIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uc3RyZWV0QWRkcmVzcyJ9LHsidmFsdWUiOiI3MzU1ZTliMWI5MWE4MmU4Y2M1MmNhZmQ1YzIyMjQ5NmZlYzI4NGRhZTFmODk0YTk4NTk5MjFjOGE1OWFkYTFlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLmNpdHkifSx7InZhbHVlIjoiNDQzMzM0YWM0YjMwYmFiY2EzMzYzMjIwMzY4ZGY3NTkwYjVhNWM2M2RkNmI2ZjBjYjRkMWJlMmQ0NDg3ZmM4OCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5wb3N0YWxDb2RlIn0seyJ2YWx1ZSI6Ijg5N2NlOGJmMGVmM2FiZjQ5YjMyZDg5MzMzYzdiZDJkNDRkNjA3MWFhNzYzYWVmZWNhNjlkOTExYzY4NTM2ZGEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20ucGhvbmVOdW1iZXIifSx7InZhbHVlIjoiNzdhMTIyYWNjOWZmMWY2ZmEwYjMwNzYzOGMyYjI5YzhmYWJhN2JkOWRkZWFlY2I2OTEzNmMzNTg1ZWViMmU5ZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5uYW1lIn0seyJ2YWx1ZSI6IjBhOWU5OWM1MDE0ZDI3MzA3ZDg3NWMwZGZjNzc4MzAzYWVjNzNhYTc0YWMzMWRiMjViNmU5ZWJiMTNhMTI1NGIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuc3RyZWV0QWRkcmVzcyJ9LHsidmFsdWUiOiI3ZmU1MWRjYTdiZDQzMjM2YTc2OWQyOGJmYjQ5NWE0ZmM3NTdjZjZhOWU1ODg2Zjc5ZGU3NjczMmFiMWFiMWU4IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LmNpdHkifSx7InZhbHVlIjoiMGFkNzJmY2Q4M2RiZTAxNTJiMzc0MGVlYjA3MmQ2OTMzOWM3NzFjZWRlMzRiNzcwYTFjNTU5NTQyZWY4NjVmZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5wb3N0YWxDb2RlIn0seyJ2YWx1ZSI6IjcyNjJiY2I3YjJmNmQzMmIwOTJiNWI1M2Y1NTM4M2VmNTU1Y2YwYjdjOTkxY2M0NDRmYjczMzYyYmYwNDRmZGYiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkucGhvbmVOdW1iZXIifSx7InZhbHVlIjoiYWU4NTg0OGRmYTE5YzJlYjhiZjgwNzA5YzVkMGJjZmMzN2MxZDBiNGY0Yzk4Mjc3OTIwMjA1NGMwMzJhOWUxOSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8ubmFtZSJ9LHsidmFsdWUiOiIyZTYzMzY0MGFhYTJkMzUyMGQ2NzVlZmZhY2E0ZWExOGU4ZjMxMDdjMTg5MzMxMDU5ZjAyOTVlMzE1YjdhY2QzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5lbWFpbCJ9LHsidmFsdWUiOiIzZDk4ZDhhZjI5MGVmNzUzZTM3ODQyNDI2ZmI1NzE4MGEzOGYzNDcwOGY5NGEzNWU5YzgzMmMyZjY5Mjg3OTAzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiMjI4NmFiOTUxMTdmMGM2ZjEzYTlmMTc2NjcyN2E3NThmOWI4Njk5ODE4MWUzNDc4MjU3ZTFlZWYyNTQ0MGM3NyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnF1YW50aXR5In0seyJ2YWx1ZSI6ImQ4Y2ZiMzg0OTU5MmY2ZGJjMzNkZjU2YTZhNzNkNDFlMjBlODU4ZTgwNDAwNGZiNjZmYjhjMzNjNjI3NGMzZDEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS51bml0UHJpY2UifSx7InZhbHVlIjoiZmIyMDJiZTIwYTViYzNiYTMzY2UzZDJhNmExMzc0OGM5YWUzNzBhYjQ4YzY4NTk2NjBhZGUwNGUyMmJmYmYxZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLmFtb3VudCJ9LHsidmFsdWUiOiJlNDgyZTFlZGE4MjVhNTkxZGMyZTYyMGMxOWRkMzdmZWYzYzczZDA0ODIyYzgwMzFiZGYzOTExN2Q4YzNiNTc5IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiZDc5Y2FmYmRiMjI4ZTY2ZWFkMGUwOGEwZjc2MWExNWVhNzcxZGViNjBlZDg2NWVjNThmNzViNWRiNjZlNGY4MiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnF1YW50aXR5In0seyJ2YWx1ZSI6ImUzMWQyZTU1ZTk5MGI5Yjc1ODI1ZGRkZjk1N2UxM2NiMGM5ZGM5MGU5MmY0NjMwZDRiOWYzNGFiOWFmMGJmMWMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS51bml0UHJpY2UifSx7InZhbHVlIjoiNzEwM2E1NjA4YmIyMTg0NDZkODM3N2E4ZmZmOWFjNDg0MjNmNmM4MTFmODhjNjA1ODA0YWNkNjFlYjc3NjgzOCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLmFtb3VudCJ9LHsidmFsdWUiOiI3MDNhZWFkOTA1Yzk3YjdmZmU5NjEwOGI3YzFjZjFkMjkyYmYzNzNhZDAyZmQ3NmE4ZTIzOWYyN2MyMzcxYzg1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiNDIwZDNhMmIzMGEwNTkwZjVjNGM0NDQ2OTAwYjM5YzE2ZjZhM2U0NDlhMzI2OWJlNDhhNTI0OTY5OGNkN2I3NSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnF1YW50aXR5In0seyJ2YWx1ZSI6IjAxNDYyNGJjOTdjOTAxNDRlNzgzN2IwOGI0NmUwOTg2YmVkODU0YWQyMmU3NmM1ODRmM2Q0YzIzODVlNWIwZDAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS51bml0UHJpY2UifSx7InZhbHVlIjoiNTEzODZmNDYyYmQ5N2UwMmY4ZjQzMGViYjk2ZjE0MGMzMThlYmExZDMwMjM0YTUwNzg0ZjJkZDVlMjFjYjM0YSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLmFtb3VudCJ9LHsidmFsdWUiOiJiMjQxYzZmOWU0NjFjOTI2NWY0NWQ5OTdkZDVhZmFiYzJiMjc1YTdmYmFlZjFiYTFlZGRlYzM3YzI5ZDc5ZDRmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnN1YnRvdGFsIn0seyJ2YWx1ZSI6IjZhZjkwZWVhZjczNWEyOTczMmY4NjA5Zjg5YWVkODc2YWFkN2FlZGU2MTk4OTcwODNiNTlmZTI1YjRlNzNhOGMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGF4In0seyJ2YWx1ZSI6IjNjMGE1OTgyNTAzZTE0NzZiMDUxM2NlYmJhOTdkNTk1OWNhMzA0NDgwZTY1OWJkNzkyNzMxOTU1NDJkMTJhMjMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGF4VG90YWwifSx7InZhbHVlIjoiNWRhOTQzZjM1YTc5MWRjNzdmMjllMzYyZjI5MzIzNjI5YTQ2NDEwOWNkNzQxNTUxODc4YmUyNzdlYTkwOWZkOSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50b3RhbCJ9XQ==", + "privacy": { + "obfuscated": [] + }, + "key": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C#controller", + "signature": "0x3d75668bff0071088858d7aee535bf2df0c2536ada0690823b941dfa3c64ca6001c495aa53b1cedd870f5712e075fa558e22c42b0aa61b3141ab9ec3a327c6821c" + } +} \ No newline at end of file From 511222af25a8fee2532703dc0f86f05c487f5977 Mon Sep 17 00:00:00 2001 From: cavacado Date: Wed, 8 Nov 2023 10:04:34 +0800 Subject: [PATCH 13/13] fix: lint errors --- test/fixtures/v4/tt/did-idvc-wrapped-missing-idvc.json | 7 ++----- .../v4/tt/did-idvc-wrapped-signed-missing-idvc.json | 7 ++----- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/test/fixtures/v4/tt/did-idvc-wrapped-missing-idvc.json b/test/fixtures/v4/tt/did-idvc-wrapped-missing-idvc.json index 9b720f33..25485547 100644 --- a/test/fixtures/v4/tt/did-idvc-wrapped-missing-idvc.json +++ b/test/fixtures/v4/tt/did-idvc-wrapped-missing-idvc.json @@ -3,10 +3,7 @@ "https://www.w3.org/2018/credentials/v1", "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" ], - "type": [ - "VerifiableCredential", - "TradeTrustCredential" - ], + "type": ["VerifiableCredential", "TradeTrustCredential"], "validFrom": "2021-03-08T12:00:00+08:00", "issuer": { "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", @@ -87,4 +84,4 @@ "obfuscated": [] } } -} \ No newline at end of file +} diff --git a/test/fixtures/v4/tt/did-idvc-wrapped-signed-missing-idvc.json b/test/fixtures/v4/tt/did-idvc-wrapped-signed-missing-idvc.json index 5e12a090..b5b675fe 100644 --- a/test/fixtures/v4/tt/did-idvc-wrapped-signed-missing-idvc.json +++ b/test/fixtures/v4/tt/did-idvc-wrapped-signed-missing-idvc.json @@ -3,10 +3,7 @@ "https://www.w3.org/2018/credentials/v1", "https://schemata.openattestation.com/io/tradetrust/4.0/alpha-context.json" ], - "type": [ - "VerifiableCredential", - "TradeTrustCredential" - ], + "type": ["VerifiableCredential", "TradeTrustCredential"], "validFrom": "2021-03-08T12:00:00+08:00", "issuer": { "id": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C", @@ -89,4 +86,4 @@ "key": "did:ethr:0xE94E4f16ad40ADc90C29Dc85b42F1213E034947C#controller", "signature": "0x3d75668bff0071088858d7aee535bf2df0c2536ada0690823b941dfa3c64ca6001c495aa53b1cedd870f5712e075fa558e22c42b0aa61b3141ab9ec3a327c6821c" } -} \ No newline at end of file +}