diff --git a/package-lock.json b/package-lock.json index ff5bf12..c4d2dce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,15 @@ { "name": "@iden3/js-iden3-auth", - "version": "1.1.1", + "version": "1.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@iden3/js-iden3-auth", - "version": "1.1.1", + "version": "1.2.0", "license": "AGPL-3.0", "dependencies": { - "@0xpolygonid/js-sdk": "1.9.0", + "@0xpolygonid/js-sdk": "1.9.4", "@iden3/js-crypto": "1.0.3", "@iden3/js-iden3-core": "1.2.1", "@iden3/js-jsonld-merklization": "1.1.2", @@ -47,10 +47,11 @@ } }, "node_modules/@0xpolygonid/js-sdk": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@0xpolygonid/js-sdk/-/js-sdk-1.9.0.tgz", - "integrity": "sha512-0OjfIixQ7VJBmIcxShttXctmtVs36TjLNC4PcopACHBmOmfJ/gapOLQl1xCUslwJTpLAy9sysB+7l3jTScPAuQ==", + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@0xpolygonid/js-sdk/-/js-sdk-1.9.4.tgz", + "integrity": "sha512-WE55dntQrBN9MAa7PrSOuqUITEKzCJKAH9oxU7+9aOMnkDvszcsQhsS7fiGmY0hecMt1JyCIFw9eNTxi+mWuLg==", "dependencies": { + "@noble/curves": "^1.4.0", "ajv": "8.12.0", "ajv-formats": "2.1.1", "did-jwt": "6.11.6", @@ -77,6 +78,17 @@ "snarkjs": "0.7.3" } }, + "node_modules/@0xpolygonid/js-sdk/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@0xpolygonid/js-sdk/node_modules/@types/node": { "version": "18.15.13", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", @@ -114,6 +126,17 @@ "node": ">=14.0.0" } }, + "node_modules/@0xpolygonid/js-sdk/node_modules/ethers/node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@0xpolygonid/js-sdk/node_modules/idb-keyval": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.0.tgz", @@ -162,127 +185,56 @@ "integrity": "sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==" }, "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dev": true, "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" }, "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/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/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" - } - }, "node_modules/@babel/compat-data": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.1.tgz", + "integrity": "sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", - "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz", + "integrity": "sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.1", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.7", - "@babel/parser": "^7.23.6", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.7", - "@babel/types": "^7.23.6", + "@babel/helpers": "^7.24.1", + "@babel/parser": "^7.24.1", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -307,14 +259,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", + "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", "dev": true, "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -381,12 +333,12 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", "dev": true, "dependencies": { - "@babel/types": "^7.22.15" + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -412,9 +364,9 @@ } }, "node_modules/@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==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", + "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", "dev": true, "engines": { "node": ">=6.9.0" @@ -445,9 +397,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", "dev": true, "engines": { "node": ">=6.9.0" @@ -472,28 +424,29 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz", - "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", + "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", "dev": true, "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.7", - "@babel/types": "^7.23.6" + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -571,9 +524,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", - "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", + "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -643,12 +596,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", - "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", + "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -745,12 +698,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", - "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz", + "integrity": "sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -760,33 +713,33 @@ } }, "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", - "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.6", - "@babel/types": "^7.23.6", + "@babel/parser": "^7.24.1", + "@babel/types": "^7.24.0", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -804,9 +757,9 @@ } }, "node_modules/@babel/types": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", - "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.23.4", @@ -928,9 +881,9 @@ "dev": true }, "node_modules/@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1613,21 +1566,21 @@ } }, "node_modules/@fastify/busboy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz", - "integrity": "sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", "engines": { "node": ">=14" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { @@ -1648,9 +1601,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, "node_modules/@iden3/bigarray": { @@ -2132,45 +2085,45 @@ } }, "node_modules/@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==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@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==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { @@ -2180,9 +2133,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -2202,20 +2155,20 @@ } }, "node_modules/@noble/curves": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", - "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.0.tgz", + "integrity": "sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==", "dependencies": { - "@noble/hashes": "1.3.2" + "@noble/hashes": "1.4.0" }, "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", "engines": { "node": ">= 16" }, @@ -2282,9 +2235,9 @@ "dev": true }, "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, "dependencies": { "type-detect": "4.0.8" @@ -2448,9 +2401,9 @@ } }, "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.10.tgz", + "integrity": "sha512-PiaIWIoPvO6qm6t114ropMCagj6YAF24j9OkCA2mJDXFnlionEwhsBCJ8yek4aib575BI3OkART/90WsgHgLWw==", "dev": true }, "node_modules/@tsconfig/node12": { @@ -2569,9 +2522,9 @@ } }, "node_modules/@types/jest": { - "version": "29.5.11", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.11.tgz", - "integrity": "sha512-S2mHmYIVe13vrm6q4kN6fLYYAka15ALQki/vgDC3mIukEOx8WJlv0kQPM+d4w8Gp6u0uSdKND04IlTXBv0rwnQ==", + "version": "29.5.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", + "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", "dev": true, "dependencies": { "expect": "^29.0.0", @@ -2597,9 +2550,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.10.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.8.tgz", - "integrity": "sha512-f8nQs3cLxbAFc00vEU59yf9UyGUftkPaLGfvbVOIDdx2i1b8epBqj2aNGyP19fiyXWvlmZ7qC1XLjAzw/OKIeA==", + "version": "20.11.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", + "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -2612,9 +2565,9 @@ "dev": true }, "node_modules/@types/semver": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, "node_modules/@types/stack-utils": { @@ -2624,9 +2577,9 @@ "dev": true }, "node_modules/@types/uuid": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.7.tgz", - "integrity": "sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==", + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", "dev": true }, "node_modules/@types/yargs": { @@ -2871,9 +2824,9 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz", - "integrity": "sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", "dev": true, "engines": { "node": ">=0.4.0" @@ -3194,12 +3147,15 @@ } }, "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/blake2b-wasm": { @@ -3250,9 +3206,9 @@ "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" }, "node_modules/browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "dev": true, "funding": [ { @@ -3269,8 +3225,8 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, @@ -3350,9 +3306,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001576", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz", - "integrity": "sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==", + "version": "1.0.30001600", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz", + "integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==", "dev": true, "funding": [ { @@ -3405,16 +3361,10 @@ "peer": true }, "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -3427,6 +3377,9 @@ "engines": { "node": ">= 8.10.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, "optionalDependencies": { "fsevents": "~2.3.2" } @@ -3882,9 +3835,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.626", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.626.tgz", - "integrity": "sha512-f7/be56VjRRQk+Ric6PmIrEtPcIqsn3tElyAu9Sh6egha2VLJ82qwkcOdcnT06W+Pb6RUulV1ckzrGbKzVcTHg==", + "version": "1.4.717", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.717.tgz", + "integrity": "sha512-6Fmg8QkkumNOwuZ/5mIbMU9WI3H2fmn5ajcVya64I5Yr5CcNmO7vcLt0Y7c96DCiMO5/9G+4sI2r6eEvdg1F7A==", "dev": true }, "node_modules/elliptic": { @@ -3934,9 +3887,9 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, "engines": { "node": ">=6" @@ -4041,16 +3994,16 @@ } }, "node_modules/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -4462,9 +4415,9 @@ "peer": true }, "node_modules/fastq": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", - "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -4609,9 +4562,9 @@ } }, "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, "node_modules/formdata-polyfill": { @@ -4804,9 +4757,9 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "dependencies": { "function-bind": "^1.1.2" @@ -4875,9 +4828,9 @@ ] }, "node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { "node": ">= 4" @@ -5057,14 +5010,14 @@ } }, "node_modules/istanbul-lib-instrument": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", - "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", + "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", "dev": true, "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", "semver": "^7.5.4" }, @@ -5101,9 +5054,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", @@ -6541,9 +6494,9 @@ } }, "node_modules/pure-rand": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", - "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", "dev": true, "funding": [ { @@ -6894,9 +6847,9 @@ "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" }, "node_modules/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==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -7215,9 +7168,9 @@ } }, "node_modules/terser": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz", - "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==", + "version": "5.29.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.2.tgz", + "integrity": "sha512-ZiGkhUBIM+7LwkNjXYJq8svgkd+QK3UUr0wJqY4MieaezBSAIPgbSPZyIx0idM6XWK5CMzSWa8MJIzmRcB8Caw==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -7610,9 +7563,9 @@ "peer": true }, "node_modules/undici": { - "version": "5.28.2", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.2.tgz", - "integrity": "sha512-wh1pHJHnUeQV5Xa8/kyQhO7WFa8M34l026L5P/+2TYiakvGy5Rdc8jWZVyG7ieht/0WgJLEd3kcU5gKx+6GC8w==", + "version": "5.28.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.3.tgz", + "integrity": "sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA==", "dependencies": { "@fastify/busboy": "^2.0.0" }, @@ -7730,9 +7683,9 @@ } }, "node_modules/web-streams-polyfill": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz", - "integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", "engines": { "node": ">= 8" } diff --git a/package.json b/package.json index f5d8f1e..3cadf81 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@iden3/js-iden3-auth", - "version": "1.1.1", + "version": "1.2.0", "description": "iden3-auth implementation in JavaScript", "main": "dist/cjs/index.js", "source": "./src/index.ts", @@ -33,7 +33,7 @@ }, "dependencies": { "@iden3/js-crypto": "1.0.3", - "@0xpolygonid/js-sdk": "1.9.0", + "@0xpolygonid/js-sdk": "1.9.4", "@iden3/js-iden3-core": "1.2.1", "@iden3/js-jsonld-merklization": "1.1.2", "@iden3/js-jwz": "1.3.0", diff --git a/src/circuits/atomicMtpV2.ts b/src/circuits/atomicMtpV2.ts index 8e5b209..9b6f73c 100644 --- a/src/circuits/atomicMtpV2.ts +++ b/src/circuits/atomicMtpV2.ts @@ -1,11 +1,16 @@ import { getDateFromUnixTimestamp } from '@iden3/js-iden3-core'; import { Resolvers } from '@lib/state/resolver'; -import { checkQueryRequest, ClaimOutputs, Query } from '@lib/circuits/query'; +import { checkQueryV2Circuits, ClaimOutputs, Query } from '@lib/circuits/query'; import { PubSignalsVerifier, VerifyOpts } from '@lib/circuits/registry'; import { IDOwnershipPubSignals } from '@lib/circuits/ownershipVerifier'; import { checkIssuerNonRevState, checkUserState, getResolverByID } from '@lib/circuits/common'; import { DocumentLoader } from '@iden3/js-jsonld-merklization'; -import { AtomicQueryMTPV2PubSignals, BaseConfig, byteEncoder } from '@0xpolygonid/js-sdk'; +import { + AtomicQueryMTPV2PubSignals, + BaseConfig, + byteEncoder, + CircuitId +} from '@0xpolygonid/js-sdk'; const valuesSize = 64; const defaultProofVerifyOpts = 1 * 60 * 60 * 1000; // 1 hour @@ -52,7 +57,14 @@ export class AtomicQueryMTPV2PubSignalsVerifier valueArraySize: valuesSize, isRevocationChecked: this.pubSignals.isRevocationChecked }; - await checkQueryRequest(query, outs, schemaLoader, verifiablePresentation, false, opts); + await checkQueryV2Circuits( + CircuitId.AtomicQueryMTPV2, + query, + outs, + schemaLoader, + opts, + verifiablePresentation + ); return this.pubSignals; } @@ -79,7 +91,6 @@ export class AtomicQueryMTPV2PubSignalsVerifier if (opts?.acceptedStateTransitionDelay) { acceptedStateTransitionDelay = opts.acceptedStateTransitionDelay; } - if (!issuerNonRevStateResolved.latest) { const timeDiff = Date.now() - diff --git a/src/circuits/atomicSigV2.ts b/src/circuits/atomicSigV2.ts index cb139a3..5ac3528 100644 --- a/src/circuits/atomicSigV2.ts +++ b/src/circuits/atomicSigV2.ts @@ -1,11 +1,16 @@ import { PubSignalsVerifier, VerifyOpts } from '@lib/circuits/registry'; -import { checkQueryRequest, ClaimOutputs, Query } from '@lib/circuits/query'; +import { checkQueryV2Circuits, ClaimOutputs, Query } from '@lib/circuits/query'; import { Resolvers } from '@lib/state/resolver'; import { IDOwnershipPubSignals } from '@lib/circuits/ownershipVerifier'; import { checkIssuerNonRevState, checkUserState, getResolverByID } from '@lib/circuits/common'; import { getDateFromUnixTimestamp } from '@iden3/js-iden3-core'; import { DocumentLoader } from '@iden3/js-jsonld-merklization'; -import { AtomicQuerySigV2PubSignals, BaseConfig, byteEncoder } from '@0xpolygonid/js-sdk'; +import { + AtomicQuerySigV2PubSignals, + BaseConfig, + byteEncoder, + CircuitId +} from '@0xpolygonid/js-sdk'; const valuesSize = 64; const defaultProofVerifyOpts = 1 * 60 * 60 * 1000; // 1 hour @@ -45,7 +50,15 @@ export class AtomicQuerySigV2PubSignalsVerifier valueArraySize: valuesSize, isRevocationChecked: this.pubSignals.isRevocationChecked }; - await checkQueryRequest(query, outs, schemaLoader, verifiablePresentation, false, opts); + + await checkQueryV2Circuits( + CircuitId.AtomicQuerySigV2, + query, + outs, + schemaLoader, + opts, + verifiablePresentation + ); return this.pubSignals; } diff --git a/src/circuits/atomicV3.ts b/src/circuits/atomicV3.ts index 8b9ed5a..5fea0f4 100644 --- a/src/circuits/atomicV3.ts +++ b/src/circuits/atomicV3.ts @@ -1,17 +1,27 @@ import { PubSignalsVerifier, VerifyOpts } from '@lib/circuits/registry'; -import { checkQueryRequest, ClaimOutputs, Query } from '@lib/circuits/query'; +import { ClaimOutputs, Query } from '@lib/circuits/query'; import { Resolvers } from '@lib/state/resolver'; import { IDOwnershipPubSignals } from '@lib/circuits/ownershipVerifier'; import { checkIssuerNonRevState, checkUserState, getResolverByID } from '@lib/circuits/common'; import { DID, getDateFromUnixTimestamp } from '@iden3/js-iden3-core'; -import { DocumentLoader } from '@iden3/js-jsonld-merklization'; +import { DocumentLoader, getDocumentLoader } from '@iden3/js-jsonld-merklization'; import { AtomicQueryV3PubSignals, BaseConfig, byteEncoder, + checkCircuitOperator, + checkQueryRequest, + CircuitId, JSONObject, - ProofType + Operators, + parseQueriesMetadata, + ProofType, + validateDisclosureNativeSDSupport, + validateEmptyCredentialSubjectNoopNativeSupport, + validateOperators, + verifyFieldValueInclusionNativeExistsSupport } from '@0xpolygonid/js-sdk'; +import { JsonLd } from 'jsonld/jsonld-spec'; const valuesSize = 64; const defaultProofVerifyOpts = 1 * 60 * 60 * 1000; // 1 hour @@ -56,7 +66,73 @@ export class AtomicQueryV3PubSignalsVerifier isRevocationChecked: this.pubSignals.isRevocationChecked, operatorOutput: this.pubSignals.operatorOutput }; - await checkQueryRequest(query, outs, schemaLoader, verifiablePresentation, true, opts); + + if (!query.type) { + throw new Error(`proof query type is undefined`); + } + + const loader = schemaLoader ?? getDocumentLoader(); + + // validate schema + let context: JsonLd; + try { + context = (await loader(query.context ?? '')).document; + } catch (e) { + throw new Error(`can't load schema for request query`); + } + + const queriesMetadata = await parseQueriesMetadata( + query.type, + JSON.stringify(context), + query.credentialSubject as JSONObject, + { + documentLoader: loader + } + ); + + const circuitId = CircuitId.AtomicQueryV3; + await checkQueryRequest( + query, + queriesMetadata, + context, + outs, + CircuitId.AtomicQueryV3, + loader, + opts + ); + + const queryMetadata = queriesMetadata[0]; // only one query is supported + + checkCircuitOperator(circuitId, outs.operator); + // validate selective disclosure + if (queryMetadata.operator === Operators.SD) { + try { + await validateDisclosureNativeSDSupport( + queryMetadata, + outs, + verifiablePresentation, + loader + ); + } catch (e) { + throw new Error(`failed to validate selective disclosure: ${(e as Error).message}`); + } + } else if (!queryMetadata.fieldName && queryMetadata.operator == Operators.NOOP) { + try { + await validateEmptyCredentialSubjectNoopNativeSupport(outs); + } catch (e: unknown) { + throw new Error(`failed to validate operators: ${(e as Error).message}`); + } + } else { + try { + await validateOperators(queryMetadata, outs); + } catch (e) { + throw new Error(`failed to validate operators: ${(e as Error).message}`); + } + } + + // verify field inclusion / non-inclusion + + verifyFieldValueInclusionNativeExistsSupport(outs, queryMetadata); const { proofType, verifierID, nullifier, nullifierSessionID, linkID } = this.pubSignals; diff --git a/src/circuits/query.ts b/src/circuits/query.ts index 25cd5a0..a9bbd3a 100644 --- a/src/circuits/query.ts +++ b/src/circuits/query.ts @@ -1,19 +1,23 @@ -import { Id, SchemaHash, DID, getDateFromUnixTimestamp } from '@iden3/js-iden3-core'; -import { Merklizer, Path, MtValue, getDocumentLoader } from '@iden3/js-jsonld-merklization'; -import { Proof } from '@iden3/js-merkletree'; +import { Id, SchemaHash } from '@iden3/js-iden3-core'; +import { getDocumentLoader } from '@iden3/js-jsonld-merklization'; import { DocumentLoader } from '@iden3/js-jsonld-merklization'; import { Operators, - byteEncoder, - createSchemaHash, - QueryOperators, - Parser, - byteDecoder, - isValidOperation + CircuitId, + ProofQuery, + parseQueriesMetadata, + JSONObject, + checkQueryRequest, + validateDisclosureV2Circuit, + validateEmptyCredentialSubjectV2Circuit, + verifyFieldValueInclusionV2, + validateOperators, + checkCircuitOperator } from '@0xpolygonid/js-sdk'; import { VerifyOpts } from './registry'; +import { JsonLd } from 'jsonld/jsonld-spec'; -const defaultProofGenerationDelayOpts = 24 * 60 * 60 * 1000; // 24 hours +export const userStateError = new Error(`user state is not valid`); // Query is a query to circuit export interface Query { @@ -43,338 +47,64 @@ export interface ClaimOutputs { operatorOutput?: bigint; } -export async function checkQueryRequest( - query: Query, - outputs: ClaimOutputs, - schemaLoader?: DocumentLoader, - verifiablePresentation?: JSON, - supportsSDOperator?: boolean, - opts?: VerifyOpts -): Promise { - // validate issuer - const userDID = DID.parseFromId(outputs.issuerId); - const issuerAllowed = query.allowedIssuers.some( - (issuer) => issuer === '*' || issuer === userDID.string() - ); - if (!issuerAllowed) { - throw new Error('issuer is not in allowed list'); +export async function checkQueryV2Circuits( + circuitId: CircuitId.AtomicQueryMTPV2 | CircuitId.AtomicQuerySigV2, + query: ProofQuery, + outs: ClaimOutputs, + schemaLoader: DocumentLoader | undefined, + opts: VerifyOpts | undefined, + verifiablePresentation: JSON | undefined +) { + if (!query.type) { + throw new Error(`proof query type is undefined`); } + const loader = schemaLoader || getDocumentLoader(); + // validate schema - let schema: object; + let context: JsonLd; try { - const loader = schemaLoader ?? getDocumentLoader(); - schema = (await loader(query.context)).document; + context = (await loader(query.context ?? '')).document; } catch (e) { throw new Error(`can't load schema for request query`); } - const schemaId: string = await Path.getTypeIDFromContext(JSON.stringify(schema), query.type, { - documentLoader: schemaLoader - }); - const schemaHash = createSchemaHash(byteEncoder.encode(schemaId)); + const queriesMetadata = await parseQueriesMetadata( + query.type, + JSON.stringify(context), + query.credentialSubject as JSONObject, + { + documentLoader: loader + } + ); - if (schemaHash.bigInt() !== outputs.schemaHash.bigInt()) { - throw new Error(`schema that was used is not equal to requested in query`); - } + await checkQueryRequest(query, queriesMetadata, context, outs, circuitId, loader, opts); - if (!query.skipClaimRevocationCheck && outputs.isRevocationChecked === 0) { - throw new Error(`check revocation is required`); - } + const queryMetadata = queriesMetadata[0]; // only one query is supported - const cq = await parseRequest( - query, - outputs, - byteEncoder.encode(JSON.stringify(schema)), - schemaLoader - ); + checkCircuitOperator(circuitId, outs.operator); // validate selective disclosure - if (cq.isSelectiveDisclosure) { + if (queryMetadata.operator === Operators.SD) { try { - if (!verifiablePresentation) { - throw new Error(`no vp present in selective disclosure request`); - } - await validateDisclosure( - verifiablePresentation, - cq, - outputs, - schemaLoader, - supportsSDOperator - ); + await validateDisclosureV2Circuit(queryMetadata, outs, verifiablePresentation, loader); } catch (e) { throw new Error(`failed to validate selective disclosure: ${(e as Error).message}`); } - } else if (!cq.fieldName && cq.operator == Operators.NOOP) { + } else if (!queryMetadata.fieldName && queryMetadata.operator == Operators.NOOP) { try { - await validateEmptyCredentialSubject(cq, outputs); - return; + await validateEmptyCredentialSubjectV2Circuit(queryMetadata, outs); } catch (e: unknown) { throw new Error(`failed to validate operators: ${(e as Error).message}`); } } else { try { - await validateOperators(cq, outputs); + await validateOperators(queryMetadata, outs); } catch (e) { throw new Error(`failed to validate operators: ${(e as Error).message}`); } } - // verify claim - if (outputs.merklized === 1) { - if (outputs.claimPathNotExists === 1) { - throw new Error(`proof doesn't contains target query key`); - } - - const path = await Path.getContextPathKey(JSON.stringify(schema), query.type, cq.fieldName, { - documentLoader: schemaLoader - }); - path.prepend(['https://www.w3.org/2018/credentials#credentialSubject']); - const claimPathKey = await path.mtEntry(); - - if (outputs.claimPathKey !== claimPathKey) { - throw new Error(`proof was generated for another path`); - } - } else { - const slotIndex = await Parser.getFieldSlotIndex( - cq.fieldName, - query.type, - byteEncoder.encode(JSON.stringify(schema)) - ); - - if (outputs.slotIndex !== slotIndex) { - throw new Error(`wrong claim slot was used in claim`); - } - } - - // verify timestamp - let acceptedProofGenerationDelay = defaultProofGenerationDelayOpts; - if (opts?.acceptedProofGenerationDelay) { - acceptedProofGenerationDelay = opts.acceptedProofGenerationDelay; - } - - const timeDiff = Date.now() - getDateFromUnixTimestamp(Number(outputs.timestamp)).getTime(); - if (timeDiff > acceptedProofGenerationDelay) { - throw new Error('generated proof is outdated'); - } - return; -} - -async function validateEmptyCredentialSubject(cq: CircuitQuery, outputs: ClaimOutputs) { - if (outputs.operator !== Operators.EQ) { - throw new Error('empty credentialSubject request available only for equal operation'); - } - for (let index = 1; index < outputs.value.length; index++) { - if (outputs.value[index] !== BigInt(0)) { - throw new Error(`empty credentialSubject request not available for array of values`); - } - } - const path = await Path.newPath(['https://www.w3.org/2018/credentials#credentialSubject']); - const subjectEntry = await path.mtEntry(); - if (outputs.claimPathKey !== subjectEntry) { - throw new Error(`proof doesn't contain credentialSubject in claimPathKey`); - } - return; -} -async function validateOperators(cq: CircuitQuery, outputs: ClaimOutputs) { - if (outputs.operator !== cq.operator) { - throw new Error(`operator that was used is not equal to request`); - } - if (outputs.operator === Operators.NOOP) { - // for noop operator slot and value are not used in this case - return; - } - - for (let index = 0; index < outputs.value.length; index++) { - if (outputs.value[index] !== cq.values[index]) { - throw new Error(`comparison value that was used is not equal to requested in query`); - } - } -} - -async function validateDisclosure( - verifiablePresentation: JSON, - cq: CircuitQuery, - outputs: ClaimOutputs, - ldLoader?: DocumentLoader, - supportsSDOperator?: boolean -) { - if (!verifiablePresentation) { - throw new Error(`verifiablePresentation is required for selective disclosure request`); - } - - let mz: Merklizer; - const strVerifiablePresentation: string = JSON.stringify(verifiablePresentation); - try { - mz = await Merklizer.merklizeJSONLD(strVerifiablePresentation, { - documentLoader: ldLoader - }); - } catch (e) { - throw new Error(`can't merkelize verifiablePresentation`); - } - - let merklizedPath: Path; - try { - const p = `verifiableCredential.credentialSubject.${cq.fieldName}`; - merklizedPath = await Path.fromDocument(null, strVerifiablePresentation, p, { - documentLoader: ldLoader - }); - } catch (e) { - throw new Error(`can't build path to '${cq.fieldName}' key`); - } - - let proof: Proof; - let value: MtValue | undefined; - try { - ({ proof, value } = await mz.proof(merklizedPath)); - } catch (e) { - throw new Error(`can't get value by path '${cq.fieldName}'`); - } - if (!value) { - throw new Error(`can't get merkle value for field '${cq.fieldName}'`); - } - - if (!proof.existence) { - throw new Error( - `path [${merklizedPath.parts}] doesn't exist in verifiablePresentation document` - ); - } - const bi = await value.mtEntry(); - - if (supportsSDOperator) { - if (outputs.operator !== Operators.SD) { - throw new Error(`operator for selective disclosure must be $sd`); - } - - if (!outputs.operatorOutput || bi !== outputs.operatorOutput) { - throw new Error(`operator output must be equal to disclosed value`); - } - - for (let index = 0; index < outputs.value.length; index++) { - if (outputs.value[index] !== 0n) { - throw new Error(`in selective disclosure, comparing values must be zero for $sd operator`); - } - } - } else { - if (outputs.operator !== Operators.EQ) { - throw new Error(`operator for selective disclosure must be $eq`); - } - - for (let index = 1; index < outputs.value.length; index++) { - if (outputs.value[index] !== 0n) { - throw new Error(`selective disclosure not available for array of values`); - } - } - if (bi !== outputs.value[0]) { - throw new Error(`value that was used is not equal to requested in query`); - } - } - - return; -} - -async function parseRequest( - query: Query, - outputs: ClaimOutputs, - schema: Uint8Array, - ldLoader?: DocumentLoader -): Promise { - if (!query.credentialSubject) { - return { - operator: Operators.NOOP, - values: [], - slotIndex: 0, - isSelectiveDisclosure: false, - fieldName: '' - }; - } - if (Object.keys(query.credentialSubject).length > 1) { - throw new Error(`multiple requests not supported`); - } - - const txtSchema = byteDecoder.decode(schema); - - let fieldName = ''; - let predicate: Map = new Map(); - - for (const [key, value] of Object.entries(query.credentialSubject)) { - fieldName = key; - - predicate = value as Map; - - if (Object.keys(predicate).length > 1) { - throw new Error(`multiple predicates for one field not supported`); - } - break; - } - - let datatype = ''; - if (fieldName !== '') { - datatype = await Path.newTypeFromContext(txtSchema, `${query.type}.${fieldName}`, { - documentLoader: ldLoader - }); - } - - const [operator, values] = await parsePredicate(predicate, datatype); - const zeros: Array = Array.from({ - length: outputs.valueArraySize - values.length - }).fill(BigInt(0)) as Array; - const fullArray: Array = values.concat(zeros); - - const cq: CircuitQuery = { - operator, - values: fullArray, - isSelectiveDisclosure: false, - fieldName - }; - - if (Object.keys(predicate).length === 0) { - cq.isSelectiveDisclosure = true; - } - - return cq; -} - -type CircuitQuery = { - claimPathKey?: bigint; - slotIndex?: number; - values: bigint[]; - operator: number; - isSelectiveDisclosure: boolean; - fieldName: string; -}; - -async function getValuesAsArray(v: unknown, datatype: string): Promise { - const values: Array = []; - if (Array.isArray(v)) { - for (let index = 0; index < v.length; index++) { - values[index] = await Merklizer.hashValue(datatype, v[index]); - } - return values; - } - values[0] = await Merklizer.hashValue(datatype, v); - return values; -} - -async function parsePredicate( - predicate: Map, - datatype: string -): Promise<[number, bigint[]]> { - let operator = 0; - let values: bigint[] = []; - - for (const [key, value] of Object.entries(predicate)) { - if (!Object.keys(QueryOperators).includes(key)) { - throw new Error(`operator is not supported by lib`); - } - operator = QueryOperators[key as keyof typeof QueryOperators]; - - if (!isValidOperation(datatype, operator)) { - throw new Error(`operator '${key}' is not supported for '${datatype}' datatype`); - } - - values = await getValuesAsArray(value, datatype); - break; - } - return [operator, values]; + // verify field inclusion + verifyFieldValueInclusionV2(outs, queryMetadata); } diff --git a/test/atomicV3.test.ts b/test/atomicV3.test.ts index 8d98a49..acd60c8 100644 --- a/test/atomicV3.test.ts +++ b/test/atomicV3.test.ts @@ -427,9 +427,9 @@ describe('atomicV3', () => { reason: 'test', scope: [ { - id: 1711377416, + id: 1711522489, circuitId: CircuitId.AtomicQueryV3, - + query: { context: 'https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-v4.jsonld', @@ -440,7 +440,7 @@ describe('atomicV3', () => { } ] }, - from: 'did:polygonid:polygon:mumbai:2qHwoMVgF22ozYfs4gXiC8rr6S3sBCr2WSQwkRTfB3' + from: 'did:polygonid:polygon:mumbai:2qH7TstpRRJHXNN4o49Fu9H2Qismku8hQeUxDVrjqT' }; const message: AuthorizationResponseMessage = { @@ -451,125 +451,122 @@ describe('atomicV3', () => { body: { scope: [ { - id: 1711377416, + id: 1711522489, circuitId: CircuitId.AtomicQueryV3, - "proof": { - "pi_a": [ - "6761992634086712458942143975517298623783217534733968970713631327847766125059", - "15942510115386207312756323903434970204082549215425793202113681563056654424259", - "1" + proof: { + pi_a: [ + '21800211430949703449644722551376257237362982820810967048456391134029879678806', + '21613713430915613066339120095996323766151016451049155252578200709882864737789', + '1' ], - "pi_b": [ - [ - "3387103455972497184512522901944520486064369706728058127449992704101376998454", - "3292342441756102843989411178369266183197363074816839279586054542161000455973" - ], - [ - "2045108324471981279878541638344626435929804364596623895635823779273738005526", - "9199178017704966359749312665069092385942559527116161728654871092929717592362" - ], - [ - "1", - "0" - ] + pi_b: [ + [ + '661072511254964853872611502929686343046899584048079678556280335611662815845', + '2273089975406654115307642615483414515773518585010287695430027009913825128768' + ], + [ + '17444892701184321994625361553850698475151625663824663639633423947771970343321', + '15630676073412856608625380437792507729110631716538445053251013755584497527789' + ], + ['1', '0'] ], - "pi_c": [ - "18546621163392785538147848924756844765867638204445708625942563614344656725667", - "4110909959056136174650605841556427890187778107241690932679151677486709771109", - "1" + pi_c: [ + '21296780288267664754328313860061774394253634460478952036284913832000895592194', + '6946412759922081597032874175095790261523599890928317338700002333834382713410', + '1' ], - "protocol": "groth16" - }, - "pub_signals": [ - "1", - "29164643842236980629969889601908506056905540530259492186963618550155186690", - "13483594486393726782589954979757194488582220051583949915340451442108840786819", - "0", - "0", - "0", - "1", - "1711462489", - "20140537885605785819118769494650292165307016100986347572517912906305442306", - "1", - "3528506868256544596373013445081538480776593447615520456211967851059161135142", - "1711462507", - "267831521922558027206082390043321796944", - "20376033832371109177683048456014525905119173674985843915445634726167450989630", - "0", - "11", - "1", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "1", - "19077537563018779797836314438360413772747104486842143844867680645228663298", - "0" - ] + protocol: 'groth16' + }, + pub_signals: [ + '1', + '29164643842236980629969889601908506056905540530259492186963618550155186690', + '13483594486393726782589954979757194488582220051583949915340451442108840786819', + '0', + '0', + '0', + '1', + '1711522489', + '20140537885605785819118769494650292165307016100986347572517912906305442306', + '1', + '14623770256788200718910247650869365371230778783613615087356654172486552332511', + '1711522550', + '267831521922558027206082390043321796944', + '20376033832371109177683048456014525905119173674985843915445634726167450989630', + '0', + '11', + '1', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '1', + '19077537563018779797836314438360413772747104486842143844867680645228663298', + '0' + ] } ] }, - from: 'did:polygonid:polygon:mumbai:2qK9EukpMd6GQy9hfXfX31LUk89rmqX21hYe62LEnW', - to: 'did:polygonid:polygon:mumbai:2qHwoMVgF22ozYfs4gXiC8rr6S3sBCr2WSQwkRTfB3' + from: 'did:polygonid:polygon:mumbai:2qE45yJ5i6g1dYPP45KMw38Xbvh8aebPzfXLfxtrhu', + to: 'did:polygonid:polygon:mumbai:2qH7TstpRRJHXNN4o49Fu9H2Qismku8hQeUxDVrjqT' }; const authInstance = await Verifier.newVerifier({ @@ -593,7 +590,7 @@ describe('atomicV3', () => { { id: 1711377832, circuitId: CircuitId.AtomicQueryV3, - + query: { context: 'https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-v4.jsonld', @@ -616,118 +613,115 @@ describe('atomicV3', () => { { id: 1711377832, circuitId: CircuitId.AtomicQueryV3, - "proof": { - "pi_a": [ - "7555135671567273543704218764274850015720432713673229342215169366176898598929", - "5118059757222184178232295484120895788454978441731084933033870844411500481244", - "1" + proof: { + pi_a: [ + '7555135671567273543704218764274850015720432713673229342215169366176898598929', + '5118059757222184178232295484120895788454978441731084933033870844411500481244', + '1' ], - "pi_b": [ - [ - "14212250237160868782979223012368501182246698067654154738920528940031235088380", - "18217717461197738936131417405953772342169705587070066489162095180660073064671" - ], - [ - "16772018071565641000678496564873785294025025924126602838983639773623869064801", - "4936938093592837071503468878843020708039523542423061890804250451547565506589" - ], - [ - "1", - "0" - ] + pi_b: [ + [ + '14212250237160868782979223012368501182246698067654154738920528940031235088380', + '18217717461197738936131417405953772342169705587070066489162095180660073064671' + ], + [ + '16772018071565641000678496564873785294025025924126602838983639773623869064801', + '4936938093592837071503468878843020708039523542423061890804250451547565506589' + ], + ['1', '0'] ], - "pi_c": [ - "4721635046811376766778210935918363175751512711098010569765488285431776823966", - "20588271981362351104785915980589379197992461314597051622104515944586759543278", - "1" + pi_c: [ + '4721635046811376766778210935918363175751512711098010569765488285431776823966', + '20588271981362351104785915980589379197992461314597051622104515944586759543278', + '1' ], - "protocol": "groth16" - }, - "pub_signals": [ - "1", - "20156969113212549915290105481651790678263685077956855660838446742358921730", - "13483594486393726782589954979757194488582220051583949915340451442108840786819", - "0", - "0", - "0", - "1", - "1711377832", - "20140537885605785819118769494650292165307016100986347572517912906305442306", - "1", - "20054680232313097776046407964659487432368209966036937175997819086186177614781", - "1711377852", - "267831521922558027206082390043321796944", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "19077537563018779797836314438360413772747104486842143844867680645228663298", - "0" - ] + protocol: 'groth16' + }, + pub_signals: [ + '1', + '20156969113212549915290105481651790678263685077956855660838446742358921730', + '13483594486393726782589954979757194488582220051583949915340451442108840786819', + '0', + '0', + '0', + '1', + '1711377832', + '20140537885605785819118769494650292165307016100986347572517912906305442306', + '1', + '20054680232313097776046407964659487432368209966036937175997819086186177614781', + '1711377852', + '267831521922558027206082390043321796944', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '0', + '19077537563018779797836314438360413772747104486842143844867680645228663298', + '0' + ] } ] }, diff --git a/test/query.test.ts b/test/query.test.ts deleted file mode 100644 index b8b77b6..0000000 --- a/test/query.test.ts +++ /dev/null @@ -1,774 +0,0 @@ -import { checkQueryRequest, ClaimOutputs, Query } from '@lib/circuits/query'; -import { getUnixTimestamp, Id, SchemaHash } from '@iden3/js-iden3-core'; -import { byteEncoder, cacheLoader, createSchemaHash } from '@0xpolygonid/js-sdk'; - -const defaultLoader = cacheLoader(); -const vpEmployee = JSON.parse(`{ - "@type": "VerifiablePresentation", - "@context": [ - "https://www.w3.org/2018/credentials/v1" - ], - "verifiableCredential": { - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-v101.json-ld" - ], - "@type": [ - "VerifiableCredential", - "KYCEmployee" - ], - "credentialSubject": { - "@type": "KYCEmployee", - "position": "SSI Consultant" - } - } -}`); - -const vp = JSON.parse(`{ - "@context": [ - "https://www.w3.org/2018/credentials/v1" - ], - "@type": "VerifiablePresentation", - "verifiableCredential": { - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-v3.json-ld" - ], - "@type": ["VerifiableCredential","KYCCountryOfResidenceCredential"], - "credentialSubject": { - "type": "KYCCountryOfResidenceCredential", - "countryCode": 800 - } - } -}`); - -const issuerDID = 'did:polygonid:polygon:mumbai:2qHSHBGWGJ68AosMKcLCTp8FYdVrtYE6MtNHhq8xpK'; -const issuerID = Id.fromBigInt( - BigInt('22638457188543025296541325416907897762715008870723718557276875842936181250') -); -const KYCCountrySchema = SchemaHash.newSchemaHashFromInt( - BigInt('336615423900919464193075592850483704600') -); -const KYCEmployeeSchema = SchemaHash.newSchemaHashFromInt( - BigInt('219578617064540016234161640375755865412') -); -const BigIntTrueHash = BigInt( - '18586133768512220936620570745912940619677854269274689475585506675881198879027' -); -const KYCAgeNonMerklizedSchema = createSchemaHash( - byteEncoder.encode( - 'https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-nonmerklized.jsonld#KYCAgeCredential' - ) -); -describe('Query', () => { - it('Check merklized query', async () => { - const query: Query = { - allowedIssuers: ['*'], - credentialSubject: { - countryCode: { $nin: [800] } - }, - context: - 'https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-v3.json-ld', - type: 'KYCCountryOfResidenceCredential' - }; - const pubSig: ClaimOutputs = { - issuerId: issuerID, - schemaHash: KYCCountrySchema, - claimPathKey: BigInt( - '17002437119434618783545694633038537380726339994244684348913844923422470806844' - ), - operator: 5, - value: new Array(BigInt(800)), - merklized: 1, - isRevocationChecked: 1, - valueArraySize: 64, - timestamp: getUnixTimestamp(new Date()) - }; - await expect(checkQueryRequest(query, pubSig, defaultLoader)).resolves.not.toThrow(); - }); - - it('Check non-merklized query', async () => { - const query: Query = { - allowedIssuers: ['*'], - credentialSubject: { - birthday: { $eq: [19960424] } - }, - context: - 'https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-nonmerklized.jsonld', - type: 'KYCAgeCredential' - }; - const pubSig: ClaimOutputs = { - issuerId: issuerID, - schemaHash: KYCAgeNonMerklizedSchema, - claimPathKey: BigInt(0), - operator: 1, - value: new Array(BigInt(19960424)), - merklized: 0, - slotIndex: 2, - isRevocationChecked: 1, - valueArraySize: 64, - timestamp: getUnixTimestamp(new Date()) - }; - await expect(checkQueryRequest(query, pubSig, defaultLoader)).resolves.not.toThrow(); - }); - - it('Selective disclosure V2', async () => { - const query: Query = { - allowedIssuers: ['*'], - credentialSubject: { - countryCode: {} - }, - context: - 'https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-v3.json-ld', - type: 'KYCCountryOfResidenceCredential' - }; - const pubSig: ClaimOutputs = { - issuerId: issuerID, - schemaHash: KYCCountrySchema, - claimPathKey: BigInt( - '17002437119434618783545694633038537380726339994244684348913844923422470806844' - ), - operator: 1, - value: new Array(BigInt(800)), - merklized: 1, - isRevocationChecked: 1, - valueArraySize: 64, - timestamp: getUnixTimestamp(new Date()) - }; - await expect(checkQueryRequest(query, pubSig, defaultLoader, vp)).resolves.not.toThrow(); - }); - - it('Selective disclosure V3', async () => { - const query: Query = { - allowedIssuers: ['*'], - credentialSubject: { - countryCode: {} - }, - context: - 'https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-v3.json-ld', - type: 'KYCCountryOfResidenceCredential' - }; - const pubSig: ClaimOutputs = { - issuerId: issuerID, - schemaHash: KYCCountrySchema, - claimPathKey: BigInt( - '17002437119434618783545694633038537380726339994244684348913844923422470806844' - ), - operator: 16, - value: [], - merklized: 1, - isRevocationChecked: 1, - valueArraySize: 64, - timestamp: getUnixTimestamp(new Date()), - operatorOutput: BigInt(800) - }; - await expect(checkQueryRequest(query, pubSig, defaultLoader, vp, true)).resolves.not.toThrow(); - }); - - it('Query with boolean type', async () => { - const query: Query = { - allowedIssuers: ['*'], - credentialSubject: { - ZKPexperiance: { - $eq: true - } - }, - context: - 'https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-v101.json-ld', - type: 'KYCEmployee' - }; - const pubSig: ClaimOutputs = { - issuerId: issuerID, - schemaHash: KYCEmployeeSchema, - claimPathKey: BigInt( - '1944808975288007371356450257872165609440470546066507760733183342797918372827' - ), - operator: 1, - value: new Array(BigIntTrueHash), - merklized: 1, - isRevocationChecked: 1, - valueArraySize: 64, - timestamp: getUnixTimestamp(new Date()) - }; - await expect(checkQueryRequest(query, pubSig, defaultLoader)).resolves.not.toThrow(); - }); - - it('Selective disclosure with xsd:string type', async () => { - const query: Query = { - allowedIssuers: ['*'], - credentialSubject: { - position: {} - }, - context: - 'https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-v101.json-ld', - type: 'KYCEmployee' - }; - const pubSig: ClaimOutputs = { - issuerId: issuerID, - schemaHash: KYCEmployeeSchema, - claimPathKey: BigInt( - '15406634529806189041952040954758558497189093183268091368437514469450172572054' - ), - operator: 1, - value: new Array( - BigInt('957410455271905675920624030785024750144198809104092676617070098470852489834') - ), - merklized: 1, - isRevocationChecked: 1, - valueArraySize: 64, - timestamp: getUnixTimestamp(new Date()) - }; - await expect( - checkQueryRequest(query, pubSig, defaultLoader, vpEmployee) - ).resolves.not.toThrow(); - }); - - it('EQ operator for xsd:string type', async () => { - const query: Query = { - allowedIssuers: ['*'], - credentialSubject: { - position: { - $eq: 'Software Engineer' - } - }, - context: - 'https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-v101.json-ld', - type: 'KYCEmployee' - }; - const pubSig: ClaimOutputs = { - issuerId: issuerID, - schemaHash: KYCEmployeeSchema, - claimPathKey: BigInt( - '15406634529806189041952040954758558497189093183268091368437514469450172572054' - ), - operator: 1, - value: new Array( - BigInt('7481731651336040098616464366227645531920423822088928207225802836605991806542') - ), - merklized: 1, - isRevocationChecked: 1, - valueArraySize: 64, - timestamp: getUnixTimestamp(new Date()) - }; - await expect(checkQueryRequest(query, pubSig, defaultLoader)).resolves.not.toThrow(); - }); - - it('Empty disclosure JSON for disclosure request', async () => { - const query: Query = { - allowedIssuers: ['*'], - credentialSubject: { - countryCode: {} - }, - context: - 'https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-v3.json-ld', - type: 'KYCCountryOfResidenceCredential' - }; - const pubSig: ClaimOutputs = { - issuerId: issuerID, - schemaHash: KYCCountrySchema, - claimPathKey: BigInt( - '17002437119434618783545694633038537380726339994244684348913844923422470806844' - ), - operator: 1, - value: new Array(BigInt('800')), - merklized: 1, - isRevocationChecked: 1, - valueArraySize: 64, - timestamp: getUnixTimestamp(new Date()) - }; - try { - expect(await checkQueryRequest(query, pubSig, defaultLoader)).toThrowError(); - } catch (e) { - expect((e as Error).message).toBe( - 'failed to validate selective disclosure: no vp present in selective disclosure request' - ); - } - }); - - it('Not EQ operation for disclosure request', async () => { - const query: Query = { - allowedIssuers: ['*'], - credentialSubject: { - countryCode: {} - }, - context: - 'https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-v3.json-ld', - type: 'KYCCountryOfResidenceCredential' - }; - const pubSig: ClaimOutputs = { - issuerId: issuerID, - schemaHash: KYCCountrySchema, - claimPathKey: BigInt( - '17002437119434618783545694633038537380726339994244684348913844923422470806844' - ), - operator: 5, - value: new Array(BigInt('800')), - merklized: 1, - isRevocationChecked: 1, - valueArraySize: 64, - timestamp: getUnixTimestamp(new Date()) - }; - try { - expect(await checkQueryRequest(query, pubSig, defaultLoader, vp)).toThrowError(); - } catch (e) { - expect((e as Error).message).toBe( - 'failed to validate selective disclosure: operator for selective disclosure must be $eq' - ); - } - }); - - it('Not array of values for disclosure request', async () => { - const query: Query = { - allowedIssuers: ['*'], - credentialSubject: { - countryCode: {} - }, - context: - 'https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-v3.json-ld', - type: 'KYCCountryOfResidenceCredential' - }; - const pubSig: ClaimOutputs = { - issuerId: issuerID, - schemaHash: KYCCountrySchema, - claimPathKey: BigInt( - '17002437119434618783545694633038537380726339994244684348913844923422470806844' - ), - operator: 1, - value: [BigInt('800'), BigInt('801')], - merklized: 1, - isRevocationChecked: 1, - valueArraySize: 64, - timestamp: getUnixTimestamp(new Date()) - }; - try { - expect(await checkQueryRequest(query, pubSig, defaultLoader, vp)).toThrowError(); - } catch (e) { - expect((e as Error).message).toBe( - 'failed to validate selective disclosure: selective disclosure not available for array of values' - ); - } - }); - - it('Proof was generated for another disclosure value', async () => { - const query: Query = { - allowedIssuers: ['*'], - credentialSubject: { - countryCode: {} - }, - context: - 'https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-v3.json-ld', - type: 'KYCCountryOfResidenceCredential' - }; - const pubSig: ClaimOutputs = { - issuerId: issuerID, - schemaHash: KYCCountrySchema, - claimPathKey: BigInt( - '17002437119434618783545694633038537380726339994244684348913844923422470806844' - ), - operator: 1, - value: new Array(BigInt('1')), - merklized: 1, - isRevocationChecked: 1, - valueArraySize: 64, - timestamp: getUnixTimestamp(new Date()) - }; - try { - expect(await checkQueryRequest(query, pubSig, defaultLoader, vp)).toThrowError(); - } catch (e) { - expect((e as Error).message).toBe( - 'failed to validate selective disclosure: value that was used is not equal to requested in query' - ); - } - }); - - it('Different key between proof and disclosure response', async () => { - const query: Query = { - allowedIssuers: ['*'], - credentialSubject: { - documentType: {} - }, - context: - 'https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-v3.json-ld', - type: 'KYCCountryOfResidenceCredential' - }; - const pubSig: ClaimOutputs = { - issuerId: issuerID, - schemaHash: KYCCountrySchema, - claimPathKey: BigInt( - '17002437119434618783545694633038537380726339994244684348913844923422470806844' - ), - operator: 1, - value: new Array(BigInt('800')), - merklized: 1, - isRevocationChecked: 1, - valueArraySize: 64, - timestamp: getUnixTimestamp(new Date()) - }; - try { - expect(await checkQueryRequest(query, pubSig, defaultLoader, vp)).toThrowError(); - } catch (e) { - expect((e as Error).message).toBe( - `failed to validate selective disclosure: can't get merkle value for field 'documentType'` - ); - } - }); - - it('Invalid issuer', async () => { - const query: Query = { - allowedIssuers: ['123'], - credentialSubject: { - documentType: {} - }, - context: - 'https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-v3.json-ld', - type: 'KYCCountryOfResidenceCredential' - }; - const pubSig: ClaimOutputs = { - issuerId: issuerID, - schemaHash: KYCCountrySchema, - claimPathKey: BigInt( - '17002437119434618783545694633038537380726339994244684348913844923422470806844' - ), - operator: 1, - value: new Array(BigInt('800')), - merklized: 1, - isRevocationChecked: 1, - valueArraySize: 64, - timestamp: getUnixTimestamp(new Date()) - }; - try { - expect(await checkQueryRequest(query, pubSig, defaultLoader)).toThrowError(); - } catch (e) { - expect((e as Error).message).toBe(`issuer is not in allowed list`); - } - }); - - it('Invalid Schema ID', async () => { - const query: Query = { - allowedIssuers: [issuerDID], - credentialSubject: { - documentType: { - $eq: 3 - } - }, - context: - 'https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-v3.json-ld', - type: 'KYCAgeCredential' - }; - const pubSig: ClaimOutputs = { - issuerId: issuerID, - schemaHash: KYCCountrySchema, - claimPathKey: BigInt( - '17002437119434618783545694633038537380726339994244684348913844923422470806844' - ), - operator: 1, - value: new Array(BigInt('3')), - merklized: 1, - isRevocationChecked: 1, - valueArraySize: 64, - timestamp: getUnixTimestamp(new Date()) - }; - try { - expect(await checkQueryRequest(query, pubSig, defaultLoader)).toThrowError(); - } catch (e) { - expect((e as Error).message).toBe(`schema that was used is not equal to requested in query`); - } - }); - - it('Multiply query', async () => { - const query: Query = { - allowedIssuers: [issuerDID], - credentialSubject: { - documentType: {}, - countryCode: {} - }, - context: - 'https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-v3.json-ld', - type: 'KYCCountryOfResidenceCredential' - }; - const pubSig: ClaimOutputs = { - issuerId: issuerID, - schemaHash: KYCCountrySchema, - claimPathKey: BigInt( - '17002437119434618783545694633038537380726339994244684348913844923422470806844' - ), - operator: 1, - value: new Array(BigInt('800')), - merklized: 1, - isRevocationChecked: 1, - valueArraySize: 64, - timestamp: getUnixTimestamp(new Date()) - }; - try { - expect(await checkQueryRequest(query, pubSig, defaultLoader)).toThrowError(); - } catch (e) { - expect((e as Error).message).toBe(`multiple requests not supported`); - } - }); - - it('Multiple predicates in one request', async () => { - const query: Query = { - allowedIssuers: [issuerDID], - credentialSubject: { - countryCode: { - $eq: 20, - $ne: 10 - } - }, - context: - 'https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-v3.json-ld', - type: 'KYCCountryOfResidenceCredential' - }; - const pubSig: ClaimOutputs = { - issuerId: issuerID, - schemaHash: KYCCountrySchema, - claimPathKey: BigInt( - '17002437119434618783545694633038537380726339994244684348913844923422470806844' - ), - operator: 1, - value: new Array(BigInt('800')), - merklized: 1, - isRevocationChecked: 1, - valueArraySize: 64, - timestamp: getUnixTimestamp(new Date()) - }; - try { - expect(await checkQueryRequest(query, pubSig, defaultLoader)).toThrowError(); - } catch (e) { - expect((e as Error).message).toBe(`multiple predicates for one field not supported`); - } - }); - - it('Proof was generated for another query operator', async () => { - const query: Query = { - allowedIssuers: [issuerDID], - credentialSubject: { - countryCode: { - $eq: 20 - } - }, - context: - 'https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-v3.json-ld', - type: 'KYCCountryOfResidenceCredential' - }; - const pubSig: ClaimOutputs = { - issuerId: issuerID, - schemaHash: KYCCountrySchema, - claimPathKey: BigInt( - '17002437119434618783545694633038537380726339994244684348913844923422470806844' - ), - operator: 3, - value: new Array(BigInt('800')), - merklized: 1, - isRevocationChecked: 1, - valueArraySize: 64, - timestamp: getUnixTimestamp(new Date()) - }; - try { - expect(await checkQueryRequest(query, pubSig, defaultLoader)).toThrowError(); - } catch (e) { - expect((e as Error).message).toBe( - `failed to validate operators: operator that was used is not equal to request` - ); - } - }); - - it('failed to validate operators: comparison value that was used is not equal to requested in query', async () => { - const query: Query = { - allowedIssuers: [issuerDID], - credentialSubject: { - countryCode: { - $nin: [20] - } - }, - context: - 'https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-v3.json-ld', - type: 'KYCCountryOfResidenceCredential' - }; - const pubSig: ClaimOutputs = { - issuerId: issuerID, - schemaHash: KYCCountrySchema, - claimPathKey: BigInt( - '17002437119434618783545694633038537380726339994244684348913844923422470806844' - ), - operator: 5, - value: new Array(BigInt('40')), - merklized: 1, - isRevocationChecked: 1, - valueArraySize: 64, - timestamp: getUnixTimestamp(new Date()) - }; - try { - expect(await checkQueryRequest(query, pubSig, defaultLoader)).toThrowError(); - } catch (e) { - expect((e as Error).message).toBe( - `failed to validate operators: comparison value that was used is not equal to requested in query` - ); - } - }); - - it('Different slot index', async () => { - const query: Query = { - allowedIssuers: ['*'], - credentialSubject: { - birthday: { $eq: [19960424] } - }, - context: - 'https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-nonmerklized.jsonld', - type: 'KYCAgeCredential' - }; - const pubSig: ClaimOutputs = { - issuerId: issuerID, - schemaHash: KYCAgeNonMerklizedSchema, - claimPathKey: BigInt(0), - operator: 1, - value: new Array(BigInt(19960424)), - merklized: 0, - slotIndex: 3, - isRevocationChecked: 1, - valueArraySize: 64, - timestamp: getUnixTimestamp(new Date()) - }; - try { - expect(await checkQueryRequest(query, pubSig, defaultLoader)).toThrowError(); - } catch (e) { - expect((e as Error).message).toBe(`wrong claim slot was used in claim`); - } - }); - - it('Check revocation is required', async () => { - const query: Query = { - allowedIssuers: [issuerDID], - credentialSubject: { - countryCode: { - $nin: [20] - } - }, - context: - 'https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-v3.json-ld', - type: 'KYCCountryOfResidenceCredential', - skipClaimRevocationCheck: false - }; - const pubSig: ClaimOutputs = { - issuerId: issuerID, - schemaHash: KYCCountrySchema, - claimPathKey: BigInt( - '17002437119434618783545694633038537380726339994244684348913844923422470806844' - ), - operator: 5, - value: new Array(BigInt('20')), - merklized: 1, - isRevocationChecked: 0, - valueArraySize: 64, - timestamp: getUnixTimestamp(new Date()) - }; - try { - expect(await checkQueryRequest(query, pubSig, defaultLoader)).toThrowError(); - } catch (e) { - expect((e as Error).message).toBe(`check revocation is required`); - } - }); - - it('Unsupported lt operator for xsd:boolean', async () => { - const query: Query = { - allowedIssuers: [issuerDID], - credentialSubject: { - ZKPexperiance: { - $lt: true - } - }, - context: - 'https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-v101.json-ld', - type: 'KYCEmployee' - }; - const pubSig: ClaimOutputs = { - issuerId: issuerID, - schemaHash: KYCEmployeeSchema, - claimPathKey: BigInt( - '17002437119434618783545694633038537380726339994244684348913844923422470806844' - ), - operator: 2, - value: new Array(BigInt('20')), - merklized: 1, - isRevocationChecked: 1, - valueArraySize: 64, - timestamp: getUnixTimestamp(new Date()) - }; - try { - expect(await checkQueryRequest(query, pubSig, defaultLoader)).toThrowError(); - } catch (e) { - expect((e as Error).message).toBe( - `operator '$lt' is not supported for 'http://www.w3.org/2001/XMLSchema#boolean' datatype` - ); - } - }); - - it('Negative value in request', async () => { - const query: Query = { - allowedIssuers: [issuerDID], - credentialSubject: { - documentType: { - $eq: -1 - } - }, - context: - 'https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-v101.json-ld', - type: 'KYCEmployee' - }; - const pubSig: ClaimOutputs = { - issuerId: issuerID, - schemaHash: KYCEmployeeSchema, - claimPathKey: BigInt( - '17002437119434618783545694633038537380726339994244684348913844923422470806844' - ), - operator: 1, - value: new Array(BigInt('-1')), - merklized: 1, - isRevocationChecked: 1, - valueArraySize: 64, - timestamp: getUnixTimestamp(new Date()) - }; - try { - expect(await checkQueryRequest(query, pubSig, defaultLoader)).toThrowError(); - } catch (e) { - expect((e as Error).message).toBe( - `failed to validate operators: comparison value that was used is not equal to requested in query` - ); - } - }); - - it('Generated proof is outdated', async () => { - const yesterday = new Date(); - yesterday.setDate(yesterday.getDate() - 1); - yesterday.setMinutes(yesterday.getMinutes() - 1); - const query: Query = { - allowedIssuers: ['*'], - credentialSubject: { - ZKPexperiance: { - $eq: true - } - }, - context: - 'https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-v101.json-ld', - type: 'KYCEmployee' - }; - const pubSig: ClaimOutputs = { - issuerId: issuerID, - schemaHash: KYCEmployeeSchema, - claimPathKey: BigInt( - '1944808975288007371356450257872165609440470546066507760733183342797918372827' - ), - operator: 1, - value: new Array(BigIntTrueHash), - merklized: 1, - isRevocationChecked: 1, - valueArraySize: 64, - timestamp: yesterday.getTime() / 1000 - }; - try { - expect(await checkQueryRequest(query, pubSig, defaultLoader)).toThrowError(); - } catch (e) { - expect((e as Error).message).toBe(`generated proof is outdated`); - } - }); -});