diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..ff9eea93 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "sdk/lib/hypercerts-api"] + path = sdk/lib/hypercerts-api + url = https://github.com/hypercerts-org/hypercerts-api diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 71cbee35..da0ff732 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -146,7 +146,7 @@ importers: version: 6.1.0(rollup@4.1.4)(typescript@4.9.5) rollup-plugin-esbuild: specifier: ^6.1.0 - version: 6.1.0(esbuild@0.19.8)(rollup@4.1.4) + version: 6.1.0(esbuild@0.19.12)(rollup@4.1.4) rollup-plugin-node-polyfills: specifier: ^0.2.1 version: 0.2.1 @@ -568,8 +568,8 @@ importers: specifier: ^1.0.5 version: 1.0.5 '@urql/core': - specifier: ^4.3.0 - version: 4.3.0(graphql@16.8.1) + specifier: ^5.0.4 + version: 5.0.4(graphql@16.8.1) '@whatwg-node/fetch': specifier: ^0.9.13 version: 0.9.14 @@ -577,8 +577,8 @@ importers: specifier: ^8.11.2 version: 8.12.0 axios: - specifier: ^1.6.2 - version: 1.6.2(debug@4.3.4) + specifier: ^1.7.2 + version: 1.7.2(debug@4.3.4) dotenv: specifier: ^16.0.3 version: 16.3.1 @@ -598,8 +598,8 @@ importers: specifier: ^4.0.6 version: 4.0.6(graphql@16.8.1)(react@18.2.0) viem: - specifier: ^2.9.4 - version: 2.9.8(bufferutil@4.0.8)(typescript@5.3.2)(utf-8-validate@5.0.10)(zod@3.22.4) + specifier: ^2.13.8 + version: 2.13.8(bufferutil@4.0.8)(typescript@5.3.2)(utf-8-validate@5.0.10)(zod@3.22.4) wonka: specifier: ^6.3.4 version: 6.3.4 @@ -622,6 +622,18 @@ importers: '@graphql-codegen/client-preset': specifier: ^4.1.0 version: 4.1.0(encoding@0.1.13)(graphql@16.8.1) + '@graphql-codegen/typescript': + specifier: ^4.0.7 + version: 4.0.7(encoding@0.1.13)(graphql@16.8.1) + '@graphql-codegen/typescript-operations': + specifier: ^4.2.1 + version: 4.2.1(encoding@0.1.13)(graphql@16.8.1) + '@graphql-codegen/typescript-resolvers': + specifier: ^4.1.0 + version: 4.1.0(encoding@0.1.13)(graphql@16.8.1) + '@graphql-codegen/typescript-urql': + specifier: ^4.0.0 + version: 4.0.0(encoding@0.1.13)(graphql-tag@2.12.6(graphql@16.8.1))(graphql@16.8.1) '@rollup/plugin-commonjs': specifier: ^24.0.1 version: 24.1.0(rollup@3.29.4) @@ -670,6 +682,12 @@ importers: nyc: specifier: ^15.1.0 version: 15.1.0 + openapi-typescript: + specifier: ^6.7.6 + version: 6.7.6 + orval: + specifier: ^6.30.2 + version: 6.30.2(encoding@0.1.13)(openapi-types@12.1.3)(typescript@5.3.2) rollup: specifier: ^3.17.2 version: 3.29.4 @@ -698,8 +716,8 @@ importers: specifier: 5.3.2 version: 5.3.2 vitest: - specifier: ^1.0.1 - version: 1.0.2(@types/node@18.18.7)(jsdom@20.0.3(bufferutil@4.0.8)(utf-8-validate@5.0.10))(terser@5.22.0) + specifier: ^1.6.0 + version: 1.6.0(@types/node@18.18.7)(jsdom@20.0.3(bufferutil@4.0.8)(utf-8-validate@5.0.10))(terser@5.22.0) vendor/observabletreemap: dependencies: @@ -717,6 +735,14 @@ packages: graphql: optional: true + '@0no-co/graphql.web@1.0.7': + resolution: {integrity: sha512-E3Qku4mTzdrlwVWGPxklDnME5ANrEGetvYw4i2GCRlppWXXE4QD66j7pwb8HelZwS6LnqEChhrSOGCXpbiu6MQ==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + peerDependenciesMeta: + graphql: + optional: true + '@aashutoshrathi/word-wrap@1.2.6': resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} engines: {node: '>=0.10.0'} @@ -802,6 +828,21 @@ packages: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} + '@apidevtools/json-schema-ref-parser@9.0.6': + resolution: {integrity: sha512-M3YgsLjI0lZxvrpeGVk9Ap032W6TPQkH6pRAZz81Ac3WUNF79VQooAFnp8umjvVzUmD93NkogxEwbSce7qMsUg==} + + '@apidevtools/openapi-schemas@2.1.0': + resolution: {integrity: sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==} + engines: {node: '>=10'} + + '@apidevtools/swagger-methods@3.0.2': + resolution: {integrity: sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==} + + '@apidevtools/swagger-parser@10.1.0': + resolution: {integrity: sha512-9Kt7EuS/7WbMAUv2gSziqjvxwDbFSg3Xeyfuj5laUODX8o/k/CpsAKiQ8W7/R88eXFTMbJYg6+7uAmOWNKmwnw==} + peerDependencies: + openapi-types: '>=7' + '@apollo/client@3.8.6': resolution: {integrity: sha512-FnHg3vhQP8tQzgBs6oTJCFFIbovelDGYujj6MK7CJneiHf62TJstCIO0Ot4A1h7XrgFEtgl8a/OgajQWqrTuYw==} peerDependencies: @@ -836,6 +877,9 @@ packages: resolution: {integrity: sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA==} engines: {node: '>=14'} + '@asyncapi/specs@4.3.1': + resolution: {integrity: sha512-EfexhJu/lwF8OdQDm28NKLJHFkx0Gb6O+rcezhZYLPIoNYKXJMh2J1vFGpwmfAcTTh+ffK44Oc2Hs1Q4sLBp+A==} + '@aws-crypto/sha256-js@1.2.2': resolution: {integrity: sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==} @@ -1063,6 +1107,7 @@ packages: '@babel/plugin-proposal-class-properties@7.18.6': resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. peerDependencies: '@babel/core': ^7.0.0-0 @@ -1089,6 +1134,7 @@ packages: '@babel/plugin-proposal-object-rest-spread@7.20.7': resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. peerDependencies: '@babel/core': ^7.0.0-0 @@ -2159,6 +2205,12 @@ packages: peerDependencies: esbuild: '*' + '@esbuild/aix-ppc64@0.19.12': + resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.16.3': resolution: {integrity: sha512-RolFVeinkeraDvN/OoRf1F/lP0KUfGNb5jxy/vkIMeRRChkrX/HTYN6TYZosRJs3a1+8wqpxAo5PI5hFmxyPRg==} engines: {node: '>=12'} @@ -2171,6 +2223,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.19.12': + resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.19.8': resolution: {integrity: sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA==} engines: {node: '>=12'} @@ -2189,6 +2247,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.19.12': + resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.19.8': resolution: {integrity: sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA==} engines: {node: '>=12'} @@ -2207,6 +2271,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/android-x64@0.19.12': + resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.19.8': resolution: {integrity: sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A==} engines: {node: '>=12'} @@ -2225,6 +2295,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.19.12': + resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.19.8': resolution: {integrity: sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw==} engines: {node: '>=12'} @@ -2243,6 +2319,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.19.12': + resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.19.8': resolution: {integrity: sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q==} engines: {node: '>=12'} @@ -2261,6 +2343,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.19.12': + resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.19.8': resolution: {integrity: sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw==} engines: {node: '>=12'} @@ -2279,6 +2367,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.19.12': + resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.19.8': resolution: {integrity: sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg==} engines: {node: '>=12'} @@ -2297,6 +2391,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.19.12': + resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.19.8': resolution: {integrity: sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ==} engines: {node: '>=12'} @@ -2315,6 +2415,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.19.12': + resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.19.8': resolution: {integrity: sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ==} engines: {node: '>=12'} @@ -2333,6 +2439,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.19.12': + resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.19.8': resolution: {integrity: sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ==} engines: {node: '>=12'} @@ -2351,6 +2463,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.19.12': + resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.19.8': resolution: {integrity: sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ==} engines: {node: '>=12'} @@ -2369,6 +2487,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.19.12': + resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.19.8': resolution: {integrity: sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q==} engines: {node: '>=12'} @@ -2387,6 +2511,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.19.12': + resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.19.8': resolution: {integrity: sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg==} engines: {node: '>=12'} @@ -2405,6 +2535,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.19.12': + resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.19.8': resolution: {integrity: sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg==} engines: {node: '>=12'} @@ -2423,6 +2559,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.19.12': + resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.19.8': resolution: {integrity: sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg==} engines: {node: '>=12'} @@ -2441,6 +2583,12 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.19.12': + resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.19.8': resolution: {integrity: sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg==} engines: {node: '>=12'} @@ -2459,6 +2607,12 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.19.12': + resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.19.8': resolution: {integrity: sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw==} engines: {node: '>=12'} @@ -2477,6 +2631,12 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.19.12': + resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.19.8': resolution: {integrity: sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ==} engines: {node: '>=12'} @@ -2495,6 +2655,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.19.12': + resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.19.8': resolution: {integrity: sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w==} engines: {node: '>=12'} @@ -2513,6 +2679,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.19.12': + resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.19.8': resolution: {integrity: sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg==} engines: {node: '>=12'} @@ -2531,6 +2703,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.19.12': + resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.19.8': resolution: {integrity: sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw==} engines: {node: '>=12'} @@ -2549,6 +2727,12 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.19.12': + resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.19.8': resolution: {integrity: sha512-bfZ0cQ1uZs2PqpulNL5j/3w+GDhP36k1K5c38QdQg+Swy51jFZWWeIkteNsufkQxp986wnqRRsb/bHbY1WQ7TA==} engines: {node: '>=12'} @@ -2709,6 +2893,9 @@ packages: '@ethersproject/wordlists@5.7.0': resolution: {integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==} + '@exodus/schemasafe@1.3.0': + resolution: {integrity: sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==} + '@faker-js/faker@8.3.1': resolution: {integrity: sha512-FdgpFxY6V6rLZE9mmIBb9hM0xpfvQOSNOLnzolzKwsE1DH+gC7lEKV1p1IbR0lAYyvYd5a4u3qWJzowUkw1bIw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: '>=6.14.13'} @@ -2849,13 +3036,18 @@ packages: peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + '@graphql-codegen/plugin-helpers@5.0.4': + resolution: {integrity: sha512-MOIuHFNWUnFnqVmiXtrI+4UziMTYrcquljaI5f/T/Bc7oO7sXcfkAvgkNWEEi9xWreYwvuer3VHCuPI/lAFWbw==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + '@graphql-codegen/schema-ast@3.0.1': resolution: {integrity: sha512-rTKTi4XiW4QFZnrEqetpiYEWVsOFNoiR/v3rY9mFSttXFbIwNXPme32EspTiGWmEEdHY8UuTDtZN3vEcs/31zw==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-codegen/schema-ast@4.0.0': - resolution: {integrity: sha512-WIzkJFa9Gz28FITAPILbt+7A8+yzOyd1NxgwFh7ie+EmO9a5zQK6UQ3U/BviirguXCYnn+AR4dXsoDrSrtRA1g==} + '@graphql-codegen/schema-ast@4.0.2': + resolution: {integrity: sha512-5mVAOQQK3Oz7EtMl/l3vOQdc2aYClUzVDHHkMvZlunc+KlGgl81j8TLa+X7ANIllqU4fUEsQU3lJmk4hXP6K7Q==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 @@ -2880,8 +3072,8 @@ packages: peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-codegen/typescript-operations@4.0.1': - resolution: {integrity: sha512-GpUWWdBVUec/Zqo23aFLBMrXYxN2irypHqDcKjN78JclDPdreasAEPcIpMfqf4MClvpmvDLy4ql+djVAwmkjbw==} + '@graphql-codegen/typescript-operations@4.2.1': + resolution: {integrity: sha512-LhEPsaP+AI65zfK2j6CBAL4RT0bJL/rR9oRWlvwtHLX0t7YQr4CP4BXgvvej9brYdedAxHGPWeV1tPHy5/z9KQ==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 @@ -2890,13 +3082,25 @@ packages: peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + '@graphql-codegen/typescript-resolvers@4.1.0': + resolution: {integrity: sha512-JKosVjsZHaGfXIllWxuPPJ9DsAh72GVuyB+IFU3jNoM2sXuSNJsBVIT0CzpsxZr0rdkpcY6FfG2sS3zpE/TQrQ==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + + '@graphql-codegen/typescript-urql@4.0.0': + resolution: {integrity: sha512-l15f44zxU5r1yiIpzLzgDQf2JLmTT+ZrFv7D4kQVAAXquPRN+Bdei1V9VAcatISb5bcHNxmdrXIRMtWKPwVwTg==} + engines: {node: '>= 16.0.0'} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + graphql-tag: ^2.0.0 + '@graphql-codegen/typescript@3.0.4': resolution: {integrity: sha512-x4O47447DZrWNtE/l5CU9QzzW4m1RbmCEdijlA3s2flG/y1Ckqdemob4CWfilSm5/tZ3w1junVDY616RDTSvZw==} peerDependencies: graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@graphql-codegen/typescript@4.0.1': - resolution: {integrity: sha512-3YziQ21dCVdnHb+Us1uDb3pA6eG5Chjv0uTK+bt9dXeMlwYBU8MbtzvQTo4qvzWVC1AxSOKj0rgfNu1xCXqJyA==} + '@graphql-codegen/typescript@4.0.7': + resolution: {integrity: sha512-Gn+JNvQBJhBqH7s83piAJ6UeU/MTj9GXWFO9bdbl8PMLCAM1uFAtg04iHfkGCtDKXcUg5a3Dt/SZG85uk5KuhA==} peerDependencies: graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 @@ -2915,6 +3119,11 @@ packages: peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + '@graphql-codegen/visitor-plugin-common@5.2.0': + resolution: {integrity: sha512-0p8AwmARaZCAlDFfQu6Sz+JV6SjbPDx3y2nNM7WAAf0au7Im/GpJ7Ke3xaIYBc1b2rTZ+DqSTJI/zomENGD9NA==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + '@graphql-inspector/core@3.3.0': resolution: {integrity: sha512-LRtk9sHgj9qqVPIkkThAVq3iZ7QxgHCx6elEwd0eesZBCmaIYQxD/BFu+VT8jr10YfOURBZuAnVdyGu64vYpBg==} peerDependencies: @@ -3429,6 +3638,14 @@ packages: '@iarna/toml@2.2.5': resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} + '@ibm-cloud/openapi-ruleset-utilities@1.3.2': + resolution: {integrity: sha512-pDZ+YTawZBAMgxfGG0JeCizh7Brmz8h4WRQaJvfJaRfgfdFmp5xZ64oqvnpJQ16XjCdNMBkTB6NJCZjQzq1gpQ==} + engines: {node: '>=16.0.0'} + + '@ibm-cloud/openapi-ruleset@1.17.0': + resolution: {integrity: sha512-Fv5iJX2iK0dFL82FE8SvA/ifEV7EYAmRf1czxheVkSm8FEGhMMrXJAQXNWZGIEJex/edgybs0C1AUHK0H97hCg==} + engines: {node: '>=16.0.0'} + '@ioredis/commands@1.2.0': resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} @@ -3558,6 +3775,18 @@ packages: '@jsdevtools/ono@7.1.3': resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} + '@jsep-plugin/regex@1.0.3': + resolution: {integrity: sha512-XfZgry4DwEZvSFtS/6Y+R48D7qJYJK6R9/yJFyUFHCIUMEEHuJ4X95TDgJp5QkmzfLYvapMPzskV5HpIDrREug==} + engines: {node: '>= 10.16.0'} + peerDependencies: + jsep: ^0.4.0||^1.0.0 + + '@jsep-plugin/ternary@1.1.3': + resolution: {integrity: sha512-qtLGzCNzPVJ3kdH6/zoLWDPjauHIKiLSBAR71Wa0+PWvGA8wODUQvRgxtpUA5YqAYL3CQ8S4qXhd/9WuWTZirg==} + engines: {node: '>= 10.16.0'} + peerDependencies: + jsep: ^0.4.0||^1.0.0 + '@leichtgewicht/ip-codec@2.0.4': resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} @@ -4273,6 +4502,33 @@ packages: resolution: {integrity: sha512-YRxIRhTY1b+j7+NUUu8Uuem5ugxKexEMVd8dBRWNgWeoN1gS1OCrhgUg0ytL+54vzQ+SGWZDfNnzjVuI1Cj1Zw==} hasBin: true + '@orval/angular@6.30.2': + resolution: {integrity: sha512-EzIhuCEDJQIjiaBePI9CA8aU27diKZOb2xp1htX/81TAM9fDu1kKhLKA40i9z3ZcABgfGupm9f+ILIrmk7LDEg==} + + '@orval/axios@6.30.2': + resolution: {integrity: sha512-BGwxqpZembRoM77vd47k/b4LC/prPprK//nEiEvxW2WMmfIdA81UkLHk9IM3EqBjcWD8w5kawwGB13aNlID3Bw==} + + '@orval/core@6.30.2': + resolution: {integrity: sha512-+OipnBdCHAKLNvMUAGo8yOrfB1yhk0vsUI44pinL9SlChL+2K48oSl1VZy++O31xFnjXTbtUQWEDlj6pNi4gqg==} + + '@orval/fetch@6.30.2': + resolution: {integrity: sha512-YO7L+SRR9AfLvfMkuA4WXWAvXNWecQ+mlQe7S5wvQjZpobxaFAmNwMUEQ51quP3FEHOzzK2Can0Qrb1yY4XxfA==} + + '@orval/hono@6.30.2': + resolution: {integrity: sha512-9exEMziYJcgB8l43zpI2R/S9+xBd2G3oc71dGHP8qUossfqWf0l5m7eEbF1Eyy5UrEB2YIwNfKRaUCTSYFlD9Q==} + + '@orval/mock@6.30.2': + resolution: {integrity: sha512-zWsoLTwNl2x5hto1yEUgdzweaFqpSJ/ZaLIYpkymt7k26oJzDW1UUnmxFAQSHOz26UzzsKFr9/+2bfJjLtQaHw==} + + '@orval/query@6.30.2': + resolution: {integrity: sha512-tOHAhVsgkxw2Hy/tFu/VREsnsg+r0IWq6txI4wQac7uJz3AK1SDUD71eNx7tW56noiHT6NnGjODFZdb5s2Cgqg==} + + '@orval/swr@6.30.2': + resolution: {integrity: sha512-GFouUCSVerVIKMM+EilNqlHfUyBkq3RhhGQf6fQHlDvUPoVEYRp8PYTKNCQGxyM0Ae0KhZ+g9Uy3faBaXFCxfg==} + + '@orval/zod@6.30.2': + resolution: {integrity: sha512-nLDjEcuVwIMVfIo6Ku4OYzYmML8ECPPfY1fJ7HV30mp8MGFOnSCVyLZGrVZw5InSwepO1wvh04nHRlAZYoykoA==} + '@parcel/watcher-android-arm64@2.3.0': resolution: {integrity: sha512-f4o9eA3dgk0XRT3XhB0UWpWpLnKgrh1IwNJKJ7UJek7eTYccQ8LR7XUWFKqw6aEq5KUNlCcGvSzKqSX/vtWVVA==} engines: {node: '>= 10.0.0'} @@ -5005,6 +5261,83 @@ packages: '@stablelib/x25519@1.0.3': resolution: {integrity: sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw==} + '@stoplight/better-ajv-errors@1.0.3': + resolution: {integrity: sha512-0p9uXkuB22qGdNfy3VeEhxkU5uwvp/KrBTAbrLBURv6ilxIVwanKwjMc41lQfIVgPGcOkmLbTolfFrSsueu7zA==} + engines: {node: ^12.20 || >= 14.13} + peerDependencies: + ajv: '>=8' + + '@stoplight/json-ref-readers@1.2.2': + resolution: {integrity: sha512-nty0tHUq2f1IKuFYsLM4CXLZGHdMn+X/IwEUIpeSOXt0QjMUbL0Em57iJUDzz+2MkWG83smIigNZ3fauGjqgdQ==} + engines: {node: '>=8.3.0'} + + '@stoplight/json-ref-resolver@3.1.6': + resolution: {integrity: sha512-YNcWv3R3n3U6iQYBsFOiWSuRGE5su1tJSiX6pAPRVk7dP0L7lqCteXGzuVRQ0gMZqUl8v1P0+fAKxF6PLo9B5A==} + engines: {node: '>=8.3.0'} + + '@stoplight/json@3.21.0': + resolution: {integrity: sha512-5O0apqJ/t4sIevXCO3SBN9AHCEKKR/Zb4gaj7wYe5863jme9g02Q0n/GhM7ZCALkL+vGPTe4ZzTETP8TFtsw3g==} + engines: {node: '>=8.3.0'} + + '@stoplight/ordered-object-literal@1.0.5': + resolution: {integrity: sha512-COTiuCU5bgMUtbIFBuyyh2/yVVzlr5Om0v5utQDgBCuQUOPgU1DwoffkTfg4UBQOvByi5foF4w4T+H9CoRe5wg==} + engines: {node: '>=8'} + + '@stoplight/path@1.3.2': + resolution: {integrity: sha512-lyIc6JUlUA8Ve5ELywPC8I2Sdnh1zc1zmbYgVarhXIp9YeAB0ReeqmGEOWNtlHkbP2DAA1AL65Wfn2ncjK/jtQ==} + engines: {node: '>=8'} + + '@stoplight/spectral-core@1.18.3': + resolution: {integrity: sha512-YY8x7X2SWJIhGTLPol+eFiQpWPz0D0mJdkK2i4A0QJG68KkNhypP6+JBC7/Kz3XWjqr0L/RqAd+N5cQLPOKZGQ==} + engines: {node: ^12.20 || >= 14.13} + + '@stoplight/spectral-formats@1.6.0': + resolution: {integrity: sha512-X27qhUfNluiduH0u/QwJqhOd8Wk5YKdxVmKM03Aijlx0AH1H5mYt3l9r7t2L4iyJrsBaFPnMGt7UYJDGxszbNA==} + engines: {node: '>=12'} + + '@stoplight/spectral-functions@1.8.0': + resolution: {integrity: sha512-ZrAkYA/ZGbuQ6EyG1gisF4yQ5nWP/+glcqVoGmS6kH6ekaynz2Yp6FL0oIamWj3rWedFUN7ppwTRUdo+9f/uCw==} + engines: {node: '>=12'} + + '@stoplight/spectral-parsers@1.0.4': + resolution: {integrity: sha512-nCTVvtX6q71M8o5Uvv9kxU31Gk1TRmgD6/k8HBhdCmKG6FWcwgjiZouA/R3xHLn/VwTI/9k8SdG5Mkdy0RBqbQ==} + engines: {node: ^12.20 || >=14.13} + + '@stoplight/spectral-ref-resolver@1.0.4': + resolution: {integrity: sha512-5baQIYL0NJTSVy8v6RxOR4U51xOUYM8wJri1YvlAT6bPN8m0EIxMwfVYi0xUZEMVeHcWx869nIkoqyWmOutF2A==} + engines: {node: '>=12'} + + '@stoplight/spectral-rulesets@1.19.1': + resolution: {integrity: sha512-rfGK87Y1JJCEeLC8MVdLkjUkRH+Y6VnSF388D+UWihfU9xuq2eNB9phWpTFkG+AG4HLRyGx963BmO6PyM9dBag==} + engines: {node: '>=12'} + + '@stoplight/spectral-runtime@1.1.2': + resolution: {integrity: sha512-fr5zRceXI+hrl82yAVoME+4GvJie8v3wmOe9tU+ZLRRNonizthy8qDi0Z/z4olE+vGreSDcuDOZ7JjRxFW5kTw==} + engines: {node: '>=12'} + + '@stoplight/types@12.5.0': + resolution: {integrity: sha512-dwqYcDrGmEyUv5TWrDam5TGOxU72ufyQ7hnOIIDdmW5ezOwZaBFoR5XQ9AsH49w7wgvOqB2Bmo799pJPWnpCbg==} + engines: {node: '>=8'} + + '@stoplight/types@13.20.0': + resolution: {integrity: sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA==} + engines: {node: ^12.20 || >=14.13} + + '@stoplight/types@13.6.0': + resolution: {integrity: sha512-dzyuzvUjv3m1wmhPfq82lCVYGcXG0xUYgqnWfCq3PCVR4BKFhjdkHrnJ+jIDoMKvXb05AZP/ObQF6+NpDo29IQ==} + engines: {node: ^12.20 || >=14.13} + + '@stoplight/types@14.1.1': + resolution: {integrity: sha512-/kjtr+0t0tjKr+heVfviO9FrU/uGLc+QNX3fHJc19xsCNYqU7lVhaXxDmEID9BZTjG+/r9pK9xP/xU02XGg65g==} + engines: {node: ^12.20 || >=14.13} + + '@stoplight/yaml-ast-parser@0.0.50': + resolution: {integrity: sha512-Pb6M8TDO9DtSVla9yXSTAxmo9GVEouq5P40DWXdOie69bXogZTkgvopCq+yEvTMA0F6PEvdJmbtTV3ccIp11VQ==} + + '@stoplight/yaml@4.3.0': + resolution: {integrity: sha512-JZlVFE6/dYpP9tQmV0/ADfn32L9uFarHWxfcRhReKUnljz1ZiUM5zpX+PH8h5CJs6lao3TuFqnPm9IJJCEkE2w==} + engines: {node: '>=10.8'} + '@supabase/functions-js@2.1.5': resolution: {integrity: sha512-BNzC5XhCzzCaggJ8s53DP+WeHHGT/NfTsx2wUSSGKR2/ikLFQTBCDzMvGz/PxYMqRko/LwncQtKXGOYp1PkPaw==} @@ -5300,6 +5633,9 @@ packages: '@types/dom-screen-wake-lock@1.0.3': resolution: {integrity: sha512-3Iten7X3Zgwvk6kh6/NRdwN7WbZ760YgFCsF5AxDifltUQzW1RaW+WRmcVtgwFzLjaNu64H+0MPJ13yRa8g3Dw==} + '@types/es-aggregate-error@1.0.6': + resolution: {integrity: sha512-qJ7LIFp06h1QE1aVxbVd+zJP2wdaugYXYfd6JxsyRMrYHaxb6itXPogW2tz+ylUJ1n1b+JF1PHyYCfYHm0dvUg==} + '@types/eslint-scope@3.7.6': resolution: {integrity: sha512-zfM4ipmxVKWdxtDaJ3MP3pBurDXOCoyjvlpE3u6Qzrmw4BPbfm4/ambIeTk/r/J0iq/+2/xp0Fmt+gFvXJY2PQ==} @@ -5594,6 +5930,9 @@ packages: '@types/unist@3.0.2': resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} + '@types/urijs@1.19.25': + resolution: {integrity: sha512-XOfUup9r3Y06nFAZh3WvO0rBU4OtlfPB/vgxpjg+NRdGU6CN6djdc6OEiH+PcqHCY6eFLo9Ista73uarf4gnBg==} + '@types/webpack-sources@3.2.2': resolution: {integrity: sha512-acCzhuVe+UJy8abiSFQWXELhhNMZjQjQKpLNEi1pKGgKXZj0ul614ATcx4kkhunPost6Xw+aCq8y8cn1/WwAiA==} @@ -5746,6 +6085,9 @@ packages: '@urql/core@4.3.0': resolution: {integrity: sha512-wT+FeL8DG4x5o6RfHEnONNFVDM3616ouzATMYUClB6CB+iIu2mwfBKd7xSUxYOZmwtxna5/hDRQdMl3nbQZlnw==} + '@urql/core@5.0.4': + resolution: {integrity: sha512-gl86J6B6gWXvvkx5omZ+CaGiPQ0chCUGM0jBsm0zTtkDQPRqufv0NSUN6sp2JhGGtTOB0NR6Pd+w7XAVGGyUOA==} + '@vanilla-extract/css@1.14.0': resolution: {integrity: sha512-rYfm7JciWZ8PFzBM/HDiE2GLnKI3xJ6/vdmVJ5BSgcCZ5CxRlM9Cjqclni9lGzF3eMOijnUhCd/KV8TOzyzbMA==} @@ -5769,18 +6111,33 @@ packages: '@vitest/expect@1.0.2': resolution: {integrity: sha512-mAIo/8uddSWkjQMLFcjqZP3WmkwvvN0OtlyZIu33jFnwme3vZds8m8EDMxtj+Uzni2DwtPfHNjJcTM8zTV1f4A==} + '@vitest/expect@1.6.0': + resolution: {integrity: sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==} + '@vitest/runner@1.0.2': resolution: {integrity: sha512-ZcHJXPT2kg/9Hc4fNkCbItlsgZSs3m4vQbxB8LCSdzpbG85bExCmSvu6K9lWpMNdoKfAr1Jn0BwS9SWUcGnbTQ==} + '@vitest/runner@1.6.0': + resolution: {integrity: sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==} + '@vitest/snapshot@1.0.2': resolution: {integrity: sha512-9ClDz2/aV5TfWA4reV7XR9p+hE0e7bifhwxlURugj3Fw0YXeTFzHmKCNEHd6wOIFMfthbGGwhlq7TOJ2jDO4/g==} + '@vitest/snapshot@1.6.0': + resolution: {integrity: sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==} + '@vitest/spy@1.0.2': resolution: {integrity: sha512-YlnHmDntp+zNV3QoTVFI5EVHV0AXpiThd7+xnDEbWnD6fw0TH/J4/+3GFPClLimR39h6nA5m0W4Bjm5Edg4A/A==} + '@vitest/spy@1.6.0': + resolution: {integrity: sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==} + '@vitest/utils@1.0.2': resolution: {integrity: sha512-GPQkGHAnFAP/+seSbB9pCsj339yRrMgILoI5H2sPevTLCYgBq0VRjF8QSllmnQyvf0EontF6KUIt2t5s2SmqoQ==} + '@vitest/utils@1.6.0': + resolution: {integrity: sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==} + '@vue/compiler-core@3.3.7': resolution: {integrity: sha512-pACdY6YnTNVLXsB86YD8OF9ihwpolzhhtdLVHhBL6do/ykr6kKXNYABRtNMGrsQXpEXXyAdwvWWkuTbs4MFtPQ==} @@ -6176,11 +6533,20 @@ packages: resolution: {integrity: sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==} engines: {node: '>=0.4.0'} + acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + engines: {node: '>=0.4.0'} + acorn@8.10.0: resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} hasBin: true + acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + address@1.2.2: resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} engines: {node: '>= 10.0.0'} @@ -6214,6 +6580,19 @@ packages: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} + ajv-draft-04@1.0.0: + resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} + peerDependencies: + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-errors@3.0.0: + resolution: {integrity: sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==} + peerDependencies: + ajv: ^8.0.1 + ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -6408,6 +6787,10 @@ packages: array-buffer-byte-length@1.0.0: resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} @@ -6456,8 +6839,8 @@ packages: array.prototype.tosorted@1.1.2: resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} - arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} arrify@1.0.1: @@ -6558,8 +6941,8 @@ packages: peerDependencies: postcss: ^8.1.0 - available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} aws-sign2@0.7.0: @@ -6945,6 +7328,10 @@ packages: call-bind@1.0.5: resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + call-me-maybe@1.0.2: resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} @@ -7116,6 +7503,10 @@ packages: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} @@ -7917,6 +8308,18 @@ packages: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} + data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + dataloader@2.2.2: resolution: {integrity: sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==} @@ -8062,8 +8465,8 @@ packages: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} - define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} define-lazy-prop@2.0.0: @@ -8450,9 +8853,25 @@ packages: resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} engines: {node: '>= 0.4'} + es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + + es-aggregate-error@1.0.13: + resolution: {integrity: sha512-KkzhUUuD2CUMqEc8JEqsXEMDHzDPE8RCjZeUBitsnB1eNcAJWQPiciKsMXe3Yytj4Flw1XLl46Qcf9OxvZha7A==} + engines: {node: '>= 0.4'} + es-array-method-boxes-properly@1.0.0: resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + es-get-iterator@1.1.3: resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} @@ -8462,10 +8881,18 @@ packages: es-module-lexer@1.3.1: resolution: {integrity: sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==} + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + es-set-tostringtag@2.0.2: resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} engines: {node: '>= 0.4'} + es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + es-shim-unscopables@1.0.2: resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} @@ -8483,6 +8910,9 @@ packages: es6-iterator@2.0.3: resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} + es6-promise@3.3.1: + resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} + es6-promise@4.2.8: resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} @@ -8505,6 +8935,11 @@ packages: engines: {node: '>=12'} hasBin: true + esbuild@0.19.12: + resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} + engines: {node: '>=12'} + hasBin: true + esbuild@0.19.8: resolution: {integrity: sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w==} engines: {node: '>=12'} @@ -8963,6 +9398,10 @@ packages: resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} engines: {node: '>=8.6.0'} + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -8975,6 +9414,9 @@ packages: fast-loops@1.1.3: resolution: {integrity: sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g==} + fast-memoize@2.5.2: + resolution: {integrity: sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==} + fast-querystring@1.1.2: resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} @@ -9318,6 +9760,10 @@ packages: resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} engines: {node: '>=14.14'} + fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + fs-extra@4.0.3: resolution: {integrity: sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==} @@ -9393,6 +9839,10 @@ packages: get-intrinsic@1.2.2: resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + get-iterator@1.0.2: resolution: {integrity: sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg==} @@ -9446,8 +9896,8 @@ packages: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} - get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} get-tsconfig@4.7.2: @@ -9752,10 +10202,17 @@ packages: has-property-descriptors@1.0.1: resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + has-symbol-support-x@1.4.2: resolution: {integrity: sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==} @@ -9770,6 +10227,10 @@ packages: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + has-yarn@3.0.0: resolution: {integrity: sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -9796,6 +10257,10 @@ packages: resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} engines: {node: '>= 0.4'} + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + hast-util-from-html@1.0.2: resolution: {integrity: sha512-LhrTA2gfCbLOGJq2u/asp4kwuG0y6NhWTXiPKP+n0qNukKy7hc10whqqCFfyvIA1Q5U5d0sp9HhNim9gglEH4A==} @@ -10010,6 +10475,9 @@ packages: resolution: {integrity: sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==} engines: {node: '>=0.10'} + http2-client@1.3.5: + resolution: {integrity: sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==} + http2-wrapper@1.0.3: resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} engines: {node: '>=10.19.0'} @@ -10199,6 +10667,10 @@ packages: resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} engines: {node: '>= 0.4'} + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + internmap@1.0.1: resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} @@ -10284,6 +10756,10 @@ packages: is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} @@ -10321,6 +10797,10 @@ packages: is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} @@ -10409,8 +10889,8 @@ packages: is-natural-number@4.0.1: resolution: {integrity: sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==} - is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} is-npm@6.0.0: @@ -10514,6 +10994,10 @@ packages: is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + is-stream@1.1.0: resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} engines: {node: '>=0.10.0'} @@ -10545,8 +11029,8 @@ packages: resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==} engines: {node: '>=0.10.0'} - is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} is-typedarray@1.0.0: @@ -10636,6 +11120,11 @@ packages: peerDependencies: ws: '*' + isows@1.0.4: + resolution: {integrity: sha512-hEzjY+x9u9hPmBom9IIAqdJCwNLax+xrPb51vEPpERoFlIxgmZcHzsT5jKG06nvInKOBGvReAVz80Umed5CczQ==} + peerDependencies: + ws: '*' + isstream@0.1.2: resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} @@ -10913,6 +11402,9 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-tokens@9.0.0: + resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==} + js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true @@ -10945,6 +11437,10 @@ packages: canvas: optional: true + jsep@1.3.8: + resolution: {integrity: sha512-qofGylTGgYj9gZFsHuyWAN4jr35eJ66qJCK4eKDnldohuUoQFbU3iZn2zjvEbd9wOAhP9Wx5DsAAduTyE1PSWQ==} + engines: {node: '>= 10.16.0'} + jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true @@ -11027,6 +11523,9 @@ packages: engines: {node: '>=6'} hasBin: true + jsonc-parser@2.2.1: + resolution: {integrity: sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==} + jsonc-parser@3.2.0: resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} @@ -11046,6 +11545,18 @@ packages: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} + jsonpath-plus@6.0.1: + resolution: {integrity: sha512-EvGovdvau6FyLexFH2OeXfIITlgIbgZoAZe3usiySeaIDm5QS+A10DKNpaPBBqqRSZr2HN6HVNXxtwUAr2apEw==} + engines: {node: '>=10.0.0'} + + jsonpath-plus@7.1.0: + resolution: {integrity: sha512-gTaNRsPWO/K2KY6MrqaUFClF9kmuM6MFH5Dhg1VYDODgFbByw1yb7xu3hrViE/sz+dGOeMWgCzwUwQtAnCTE9g==} + engines: {node: '>=12.0.0'} + + jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + jsonschema@1.4.1: resolution: {integrity: sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==} @@ -11290,6 +11801,9 @@ packages: lodash.isarguments@3.1.0: resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} + lodash.isempty@4.4.0: + resolution: {integrity: sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==} + lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} @@ -11323,6 +11837,12 @@ packages: lodash.mergewith@4.6.2: resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + lodash.omit@4.5.0: + resolution: {integrity: sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==} + + lodash.omitby@4.6.0: + resolution: {integrity: sha512-5OrRcIVR75M288p4nbI2WLAf3ndw2GD9fyNv3Bc15+WCxJDdZ4lYndSxGd7hnG6PVjiJTeJE2dHEGhIuKGicIQ==} + lodash.once@4.1.1: resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} @@ -11374,6 +11894,9 @@ packages: lodash.uniqby@4.7.0: resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} + lodash.uniqwith@4.5.0: + resolution: {integrity: sha512-7lYL8bLopMoy4CTICbxygAUq6CdRJ36vFc80DucPueUee+d5NBRxz3FdT9Pes/HEx5mPoT9jwnsEJWz1N7uq7Q==} + lodash.uppercase@4.3.0: resolution: {integrity: sha512-+Nbnxkj7s8K5U8z6KnEYPGUOGp3woZbB7Ecs7v3LkkjLQSm2kP9SKIILitN1ktn2mB/tmM9oSlku06I+/lH7QA==} @@ -11403,10 +11926,17 @@ packages: resolution: {integrity: sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==} hasBin: true + loglevel-plugin-prefix@0.8.4: + resolution: {integrity: sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==} + loglevel@1.8.1: resolution: {integrity: sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==} engines: {node: '>= 0.6.0'} + loglevel@1.9.1: + resolution: {integrity: sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg==} + engines: {node: '>= 0.6.0'} + long@4.0.0: resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} @@ -12088,6 +12618,10 @@ packages: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} + minimatch@6.2.0: + resolution: {integrity: sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg==} + engines: {node: '>=10'} + minimatch@8.0.4: resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} engines: {node: '>=16 || 14 >=14.17'} @@ -12333,6 +12867,10 @@ packages: sass: optional: true + nimma@0.2.2: + resolution: {integrity: sha512-V52MLl7BU+tH2Np9tDrIXK8bql3MVUadnMIl/0/oZSGC9keuro0O9UUv9QKp0aMvtN8HRew4G7byY7H4eWsxaQ==} + engines: {node: ^12.20 || >=14.13} + nise@5.1.5: resolution: {integrity: sha512-VJuPIfUFaXNRzETTQEEItTOP8Y171ijr+JLq42wHes3DiryR8vT+1TXQW/Rx8JNUhyYYWyIvjXTU6dOhJcs9Nw==} @@ -12370,6 +12908,10 @@ packages: resolution: {integrity: sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==} engines: {node: '>=18'} + node-fetch-h2@2.3.0: + resolution: {integrity: sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg==} + engines: {node: 4.x || >=6.0.0} + node-fetch-native@1.4.1: resolution: {integrity: sha512-NsXBU0UgBxo2rQLOeWNZqS3fvflWePMECr8CoSWoSTqCqGbVVsvl9vZu1HfQicYN0g5piV9Gh8RTEvo/uP752w==} @@ -12410,6 +12952,9 @@ packages: resolution: {integrity: sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==} engines: {node: '>=8'} + node-readfiles@0.2.0: + resolution: {integrity: sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA==} + node-releases@2.0.13: resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} @@ -12487,6 +13032,22 @@ packages: engines: {node: '>=8.9'} hasBin: true + oas-kit-common@1.0.8: + resolution: {integrity: sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ==} + + oas-linter@3.2.2: + resolution: {integrity: sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ==} + + oas-resolver@2.5.6: + resolution: {integrity: sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ==} + hasBin: true + + oas-schema-walker@1.1.5: + resolution: {integrity: sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ==} + + oas-validator@5.0.8: + resolution: {integrity: sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw==} + oauth-sign@0.9.0: resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} @@ -12526,6 +13087,10 @@ packages: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + object.entries@1.1.7: resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} engines: {node: '>= 0.4'} @@ -12601,6 +13166,13 @@ packages: openapi-types@12.1.3: resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} + openapi-typescript@6.7.6: + resolution: {integrity: sha512-c/hfooPx+RBIOPM09GSxABOZhYPblDoyaGhqBkD/59vtpN21jEuWKDlM0KYTvqJVlSYjKs0tBcIdeXKChlSPtw==} + hasBin: true + + openapi3-ts@4.2.2: + resolution: {integrity: sha512-+9g4actZKeb3czfi9gVQ4Br2Ju3KwhCAQJBNaKgye5KggqcBLIhFHH+nIkcm0BUX00TrAJl6dH4JWgM4G4JWrw==} + opener@1.5.2: resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} hasBin: true @@ -12627,6 +13199,10 @@ packages: ordinal@1.0.3: resolution: {integrity: sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==} + orval@6.30.2: + resolution: {integrity: sha512-bmMfFv9N2iPFAyHxKHVPz9VCJIG4nZI5JnandGCp+W8IqRdVE4M6+XxLS6XTQR0K6pRBhaZYnj/NmCO85qYdgQ==} + hasBin: true + os-homedir@1.0.2: resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==} engines: {node: '>=0.10.0'} @@ -12996,10 +13572,18 @@ packages: resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} engines: {node: '>=10.13.0'} + pony-cause@1.1.1: + resolution: {integrity: sha512-PxkIc/2ZpLiEzQXu5YRDOUgBlfGYBY8156HY5ZcRAwwonMk5W/MrJP2LLkG/hF7GEQzaHo2aS7ho6ZLCOvf+6g==} + engines: {node: '>=12.0.0'} + pony-cause@2.1.10: resolution: {integrity: sha512-3IKLNXclQgkU++2fSi93sQ6BznFuxSLB11HdvZQ6JW/spahf/P1pAHBQEahr20rs0htZW0UDkM1HmA+nZkXKsw==} engines: {node: '>=12.0.0'} + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + postcss-calc@8.2.4: resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} peerDependencies: @@ -13795,6 +14379,9 @@ packages: resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} engines: {node: '>= 0.4'} + reftools@1.1.9: + resolution: {integrity: sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==} + regenerate-unicode-properties@10.1.1: resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} engines: {node: '>=4'} @@ -13818,6 +14405,10 @@ packages: resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} engines: {node: '>= 0.4'} + regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + regexpp@3.2.0: resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} engines: {node: '>=8'} @@ -14172,18 +14763,26 @@ packages: resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} engines: {node: '>=0.4'} + safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} safe-resolve@1.0.0: resolution: {integrity: sha512-aQpRvfxoi1y0UxKEU0tNO327kb0/LMo8Xrk64M2u172UqOOLCCM0khxN2OTClDiTqTJz5864GMD1X92j4YiHTg==} + safe-stable-stringify@1.1.1: + resolution: {integrity: sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==} + safe-stable-stringify@2.4.3: resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} engines: {node: '>=10'} @@ -14345,10 +14944,18 @@ packages: resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} engines: {node: '>= 0.4'} + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + set-function-name@2.0.1: resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} engines: {node: '>= 0.4'} + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + set-harmonic-interval@1.0.1: resolution: {integrity: sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==} engines: {node: '>=6.9'} @@ -14395,6 +15002,24 @@ packages: shiki@0.14.5: resolution: {integrity: sha512-1gCAYOcmCFONmErGTrS1fjzJLA7MGZmKzrBNX7apqSwhyITJg2O102uFzXUeBxNnEkDA9vHIKLyeKq0V083vIw==} + should-equal@2.0.0: + resolution: {integrity: sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==} + + should-format@3.0.3: + resolution: {integrity: sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==} + + should-type-adaptors@1.1.0: + resolution: {integrity: sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==} + + should-type@1.4.0: + resolution: {integrity: sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==} + + should-util@1.0.1: + resolution: {integrity: sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==} + + should@13.2.3: + resolution: {integrity: sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==} + shx@0.3.4: resolution: {integrity: sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==} engines: {node: '>=6'} @@ -14419,6 +15044,10 @@ packages: simple-concat@1.0.1: resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + simple-eval@1.0.0: + resolution: {integrity: sha512-kpKJR+bqTscgC0xuAl2xHN6bB12lHjC2DCUfqjAx19bQyO3R2EVLOurm3H9AUltv/uFVcSCVNc6faegR+8NYLw==} + engines: {node: '>=12'} + simple-get@2.8.2: resolution: {integrity: sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==} @@ -14729,15 +15358,16 @@ packages: string.prototype.matchall@4.0.10: resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} - string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} engines: {node: '>= 0.4'} - string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} - string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} string_decoder@0.10.31: resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} @@ -14820,6 +15450,9 @@ packages: strip-literal@1.3.0: resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} + strip-literal@2.1.0: + resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==} + strip-outer@1.0.1: resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} engines: {node: '>=0.10.0'} @@ -14888,6 +15521,10 @@ packages: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} + supports-color@9.4.0: + resolution: {integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==} + engines: {node: '>=12'} + supports-hyperlinks@2.3.0: resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} engines: {node: '>=8'} @@ -14904,6 +15541,10 @@ packages: engines: {node: '>=10.13.0'} hasBin: true + swagger2openapi@7.0.8: + resolution: {integrity: sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g==} + hasBin: true + swap-case@2.0.2: resolution: {integrity: sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==} @@ -15081,6 +15722,10 @@ packages: resolution: {integrity: sha512-zBTCK0cCgRROxvs9c0CGK838sPkeokNGdQVUUwHAbynHFlmyJYj825f/oRs528HaIJ97lo0pLIlDUzwN+IorWg==} engines: {node: '>=14.0.0'} + tinypool@0.8.4: + resolution: {integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==} + engines: {node: '>=14.0.0'} + tinyspy@2.2.0: resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==} engines: {node: '>=14.0.0'} @@ -15216,6 +15861,16 @@ packages: '@swc/wasm': optional: true + tsconfck@2.1.2: + resolution: {integrity: sha512-ghqN1b0puy3MhhviwO2kGF8SeMDNhEbnKxjK7h6+fvY9JAxqvXi8y5NAHSQv687OVboS2uZIByzGd45/YxrRHg==} + engines: {node: ^14.13.1 || ^16 || >=18} + hasBin: true + peerDependencies: + typescript: ^4.3.5 || ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + tsconfig-paths@3.14.2: resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} @@ -15360,20 +16015,21 @@ packages: peerDependencies: typescript: '>=4.3.0' - typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} - typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} engines: {node: '>= 0.4'} - typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} engines: {node: '>= 0.4'} - typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} @@ -15416,9 +16072,6 @@ packages: resolution: {integrity: sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==} engines: {node: '>=8'} - ua-parser-js@1.0.36: - resolution: {integrity: sha512-znuyCIXzl8ciS3+y3fHJI/2OhQIXbXw9MWC/o3qwyR+RGppjZHrM27CGFSKCJXi2Kctiz537iOu2KnXs1lMQhw==} - ua-parser-js@1.0.37: resolution: {integrity: sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==} @@ -15465,6 +16118,10 @@ packages: resolution: {integrity: sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==} engines: {node: '>=14.0'} + undici@5.28.4: + resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} + engines: {node: '>=14.0'} + undici@5.9.1: resolution: {integrity: sha512-6fB3a+SNnWEm4CJbgo0/CWR8RGcOCQP68SF4X0mxtYTq2VNN8T88NYrWVBAeSX+zb7bny2dx2iYhP3XHi00omg==} engines: {node: '>=12.18'} @@ -15648,6 +16305,9 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + urijs@1.19.11: + resolution: {integrity: sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==} + url-loader@4.1.1: resolution: {integrity: sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==} engines: {node: '>= 10.13.0'} @@ -15784,6 +16444,10 @@ packages: resolution: {integrity: sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + validator@13.12.0: + resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==} + engines: {node: '>= 0.10'} + valtio@1.11.2: resolution: {integrity: sha512-1XfIxnUXzyswPAPXo1P3Pdx2mq/pIqZICkWN60Hby0d9Iqb+MEIpqgYVlbflvHdrp2YR/q3jyKWRPJJ100yxaw==} engines: {node: '>=12.20.0'} @@ -15854,6 +16518,14 @@ packages: typescript: optional: true + viem@2.13.8: + resolution: {integrity: sha512-JX8dOrCJKazNVs7YAahXnX+NANp0nlK16GyYjtQXILnar1daCPsLy4uzKgZDBVBD6DdRP2lsbPfo4X7QX3q5EQ==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + viem@2.9.8: resolution: {integrity: sha512-vetoTZ6UF2okS/1I0+1p/QYdC4yA6uf4PeWwTBp3kD5wC6eQcmeh7zP+unNdnYHGGC63x7BTGldK1ep2IFVKcQ==} peerDependencies: @@ -15867,6 +16539,11 @@ packages: engines: {node: ^18.0.0 || >=20.0.0} hasBin: true + vite-node@1.6.0: + resolution: {integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + vite@5.0.6: resolution: {integrity: sha512-MD3joyAEBtV7QZPl2JVVUai6zHms3YOmLR+BpMzLlX2Yzjfcc4gTgNi09d/Rua3F4EtC8zdwPU8eQYyib4vVMQ==} engines: {node: ^18.0.0 || >=20.0.0} @@ -15920,6 +16597,31 @@ packages: jsdom: optional: true + vitest@1.6.0: + resolution: {integrity: sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': 1.6.0 + '@vitest/ui': 1.6.0 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + vlq@1.0.1: resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==} @@ -16204,6 +16906,10 @@ packages: resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} engines: {node: '>= 0.4'} + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true @@ -16472,6 +17178,11 @@ packages: resolution: {integrity: sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==} engines: {node: '>= 14'} + yaml@2.4.5: + resolution: {integrity: sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==} + engines: {node: '>= 14'} + hasBin: true + yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} @@ -16564,6 +17275,10 @@ snapshots: optionalDependencies: graphql: 16.8.1 + '@0no-co/graphql.web@1.0.7(graphql@16.8.1)': + optionalDependencies: + graphql: 16.8.1 + '@aashutoshrathi/word-wrap@1.2.6': {} '@adobe/css-tools@4.3.1': {} @@ -16671,6 +17386,27 @@ snapshots: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.20 + '@apidevtools/json-schema-ref-parser@9.0.6': + dependencies: + '@jsdevtools/ono': 7.1.3 + call-me-maybe: 1.0.2 + js-yaml: 3.14.1 + + '@apidevtools/openapi-schemas@2.1.0': {} + + '@apidevtools/swagger-methods@3.0.2': {} + + '@apidevtools/swagger-parser@10.1.0(openapi-types@12.1.3)': + dependencies: + '@apidevtools/json-schema-ref-parser': 9.0.6 + '@apidevtools/openapi-schemas': 2.1.0 + '@apidevtools/swagger-methods': 3.0.2 + '@jsdevtools/ono': 7.1.3 + ajv: 8.12.0 + ajv-draft-04: 1.0.0(ajv@8.12.0) + call-me-maybe: 1.0.2 + openapi-types: 12.1.3 + '@apollo/client@3.8.6(graphql-ws@5.14.2(graphql@16.8.1))(graphql@16.8.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) @@ -16730,6 +17466,10 @@ snapshots: transitivePeerDependencies: - encoding + '@asyncapi/specs@4.3.1': + dependencies: + '@types/json-schema': 7.0.14 + '@aws-crypto/sha256-js@1.2.2': dependencies: '@aws-crypto/util': 1.2.2 @@ -17033,7 +17773,7 @@ snapshots: '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.23.5)': dependencies: '@babel/core': 7.23.5 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-proposal-export-default-from@7.22.17(@babel/core@7.23.5)': @@ -19158,12 +19898,18 @@ snapshots: escape-string-regexp: 4.0.0 rollup-plugin-node-polyfills: 0.2.1 + '@esbuild/aix-ppc64@0.19.12': + optional: true + '@esbuild/android-arm64@0.16.3': optional: true '@esbuild/android-arm64@0.18.20': optional: true + '@esbuild/android-arm64@0.19.12': + optional: true + '@esbuild/android-arm64@0.19.8': optional: true @@ -19173,6 +19919,9 @@ snapshots: '@esbuild/android-arm@0.18.20': optional: true + '@esbuild/android-arm@0.19.12': + optional: true + '@esbuild/android-arm@0.19.8': optional: true @@ -19182,6 +19931,9 @@ snapshots: '@esbuild/android-x64@0.18.20': optional: true + '@esbuild/android-x64@0.19.12': + optional: true + '@esbuild/android-x64@0.19.8': optional: true @@ -19191,6 +19943,9 @@ snapshots: '@esbuild/darwin-arm64@0.18.20': optional: true + '@esbuild/darwin-arm64@0.19.12': + optional: true + '@esbuild/darwin-arm64@0.19.8': optional: true @@ -19200,6 +19955,9 @@ snapshots: '@esbuild/darwin-x64@0.18.20': optional: true + '@esbuild/darwin-x64@0.19.12': + optional: true + '@esbuild/darwin-x64@0.19.8': optional: true @@ -19209,6 +19967,9 @@ snapshots: '@esbuild/freebsd-arm64@0.18.20': optional: true + '@esbuild/freebsd-arm64@0.19.12': + optional: true + '@esbuild/freebsd-arm64@0.19.8': optional: true @@ -19218,6 +19979,9 @@ snapshots: '@esbuild/freebsd-x64@0.18.20': optional: true + '@esbuild/freebsd-x64@0.19.12': + optional: true + '@esbuild/freebsd-x64@0.19.8': optional: true @@ -19227,6 +19991,9 @@ snapshots: '@esbuild/linux-arm64@0.18.20': optional: true + '@esbuild/linux-arm64@0.19.12': + optional: true + '@esbuild/linux-arm64@0.19.8': optional: true @@ -19236,6 +20003,9 @@ snapshots: '@esbuild/linux-arm@0.18.20': optional: true + '@esbuild/linux-arm@0.19.12': + optional: true + '@esbuild/linux-arm@0.19.8': optional: true @@ -19245,6 +20015,9 @@ snapshots: '@esbuild/linux-ia32@0.18.20': optional: true + '@esbuild/linux-ia32@0.19.12': + optional: true + '@esbuild/linux-ia32@0.19.8': optional: true @@ -19254,6 +20027,9 @@ snapshots: '@esbuild/linux-loong64@0.18.20': optional: true + '@esbuild/linux-loong64@0.19.12': + optional: true + '@esbuild/linux-loong64@0.19.8': optional: true @@ -19263,6 +20039,9 @@ snapshots: '@esbuild/linux-mips64el@0.18.20': optional: true + '@esbuild/linux-mips64el@0.19.12': + optional: true + '@esbuild/linux-mips64el@0.19.8': optional: true @@ -19272,6 +20051,9 @@ snapshots: '@esbuild/linux-ppc64@0.18.20': optional: true + '@esbuild/linux-ppc64@0.19.12': + optional: true + '@esbuild/linux-ppc64@0.19.8': optional: true @@ -19281,6 +20063,9 @@ snapshots: '@esbuild/linux-riscv64@0.18.20': optional: true + '@esbuild/linux-riscv64@0.19.12': + optional: true + '@esbuild/linux-riscv64@0.19.8': optional: true @@ -19290,6 +20075,9 @@ snapshots: '@esbuild/linux-s390x@0.18.20': optional: true + '@esbuild/linux-s390x@0.19.12': + optional: true + '@esbuild/linux-s390x@0.19.8': optional: true @@ -19299,6 +20087,9 @@ snapshots: '@esbuild/linux-x64@0.18.20': optional: true + '@esbuild/linux-x64@0.19.12': + optional: true + '@esbuild/linux-x64@0.19.8': optional: true @@ -19308,6 +20099,9 @@ snapshots: '@esbuild/netbsd-x64@0.18.20': optional: true + '@esbuild/netbsd-x64@0.19.12': + optional: true + '@esbuild/netbsd-x64@0.19.8': optional: true @@ -19317,6 +20111,9 @@ snapshots: '@esbuild/openbsd-x64@0.18.20': optional: true + '@esbuild/openbsd-x64@0.19.12': + optional: true + '@esbuild/openbsd-x64@0.19.8': optional: true @@ -19326,6 +20123,9 @@ snapshots: '@esbuild/sunos-x64@0.18.20': optional: true + '@esbuild/sunos-x64@0.19.12': + optional: true + '@esbuild/sunos-x64@0.19.8': optional: true @@ -19335,6 +20135,9 @@ snapshots: '@esbuild/win32-arm64@0.18.20': optional: true + '@esbuild/win32-arm64@0.19.12': + optional: true + '@esbuild/win32-arm64@0.19.8': optional: true @@ -19344,6 +20147,9 @@ snapshots: '@esbuild/win32-ia32@0.18.20': optional: true + '@esbuild/win32-ia32@0.19.12': + optional: true + '@esbuild/win32-ia32@0.19.8': optional: true @@ -19353,6 +20159,9 @@ snapshots: '@esbuild/win32-x64@0.18.20': optional: true + '@esbuild/win32-x64@0.19.12': + optional: true + '@esbuild/win32-x64@0.19.8': optional: true @@ -19787,6 +20596,8 @@ snapshots: '@ethersproject/properties': 5.7.0 '@ethersproject/strings': 5.7.0 + '@exodus/schemasafe@1.3.0': {} + '@faker-js/faker@8.3.1': {} '@fastify/busboy@2.0.0': {} @@ -20007,8 +20818,8 @@ snapshots: '@graphql-codegen/gql-tag-operations': 4.0.1(encoding@0.1.13)(graphql@16.8.1) '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) '@graphql-codegen/typed-document-node': 5.0.1(encoding@0.1.13)(graphql@16.8.1) - '@graphql-codegen/typescript': 4.0.1(encoding@0.1.13)(graphql@16.8.1) - '@graphql-codegen/typescript-operations': 4.0.1(encoding@0.1.13)(graphql@16.8.1) + '@graphql-codegen/typescript': 4.0.7(encoding@0.1.13)(graphql@16.8.1) + '@graphql-codegen/typescript-operations': 4.2.1(encoding@0.1.13)(graphql@16.8.1) '@graphql-codegen/visitor-plugin-common': 4.0.1(encoding@0.1.13)(graphql@16.8.1) '@graphql-tools/documents': 1.0.0(graphql@16.8.1) '@graphql-tools/utils': 10.0.11(graphql@16.8.1) @@ -20087,6 +20898,16 @@ snapshots: lodash: 4.17.21 tslib: 2.5.3 + '@graphql-codegen/plugin-helpers@5.0.4(graphql@16.8.1)': + dependencies: + '@graphql-tools/utils': 10.0.11(graphql@16.8.1) + change-case-all: 1.0.15 + common-tags: 1.8.2 + graphql: 16.8.1 + import-from: 4.0.0 + lodash: 4.17.21 + tslib: 2.6.2 + '@graphql-codegen/schema-ast@3.0.1(graphql@16.8.1)': dependencies: '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.8.1) @@ -20094,12 +20915,12 @@ snapshots: graphql: 16.8.1 tslib: 2.5.3 - '@graphql-codegen/schema-ast@4.0.0(graphql@16.8.1)': + '@graphql-codegen/schema-ast@4.0.2(graphql@16.8.1)': dependencies: - '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) + '@graphql-codegen/plugin-helpers': 5.0.4(graphql@16.8.1) '@graphql-tools/utils': 10.0.11(graphql@16.8.1) graphql: 16.8.1 - tslib: 2.5.3 + tslib: 2.6.2 '@graphql-codegen/typed-document-node@4.0.1(encoding@0.1.13)(graphql@16.8.1)': dependencies: @@ -20149,14 +20970,14 @@ snapshots: - encoding - supports-color - '@graphql-codegen/typescript-operations@4.0.1(encoding@0.1.13)(graphql@16.8.1)': + '@graphql-codegen/typescript-operations@4.2.1(encoding@0.1.13)(graphql@16.8.1)': dependencies: - '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) - '@graphql-codegen/typescript': 4.0.1(encoding@0.1.13)(graphql@16.8.1) - '@graphql-codegen/visitor-plugin-common': 4.0.1(encoding@0.1.13)(graphql@16.8.1) + '@graphql-codegen/plugin-helpers': 5.0.4(graphql@16.8.1) + '@graphql-codegen/typescript': 4.0.7(encoding@0.1.13)(graphql@16.8.1) + '@graphql-codegen/visitor-plugin-common': 5.2.0(encoding@0.1.13)(graphql@16.8.1) auto-bind: 4.0.0 graphql: 16.8.1 - tslib: 2.5.3 + tslib: 2.6.2 transitivePeerDependencies: - encoding - supports-color @@ -20174,6 +20995,31 @@ snapshots: - encoding - supports-color + '@graphql-codegen/typescript-resolvers@4.1.0(encoding@0.1.13)(graphql@16.8.1)': + dependencies: + '@graphql-codegen/plugin-helpers': 5.0.4(graphql@16.8.1) + '@graphql-codegen/typescript': 4.0.7(encoding@0.1.13)(graphql@16.8.1) + '@graphql-codegen/visitor-plugin-common': 5.2.0(encoding@0.1.13)(graphql@16.8.1) + '@graphql-tools/utils': 10.0.11(graphql@16.8.1) + auto-bind: 4.0.0 + graphql: 16.8.1 + tslib: 2.6.2 + transitivePeerDependencies: + - encoding + - supports-color + + '@graphql-codegen/typescript-urql@4.0.0(encoding@0.1.13)(graphql-tag@2.12.6(graphql@16.8.1))(graphql@16.8.1)': + dependencies: + '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.8.1) + '@graphql-codegen/visitor-plugin-common': 2.13.1(encoding@0.1.13)(graphql@16.8.1) + auto-bind: 4.0.0 + graphql: 16.8.1 + graphql-tag: 2.12.6(graphql@16.8.1) + tslib: 2.6.2 + transitivePeerDependencies: + - encoding + - supports-color + '@graphql-codegen/typescript@3.0.4(encoding@0.1.13)(graphql@16.8.1)': dependencies: '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.8.1) @@ -20186,14 +21032,14 @@ snapshots: - encoding - supports-color - '@graphql-codegen/typescript@4.0.1(encoding@0.1.13)(graphql@16.8.1)': + '@graphql-codegen/typescript@4.0.7(encoding@0.1.13)(graphql@16.8.1)': dependencies: - '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) - '@graphql-codegen/schema-ast': 4.0.0(graphql@16.8.1) - '@graphql-codegen/visitor-plugin-common': 4.0.1(encoding@0.1.13)(graphql@16.8.1) + '@graphql-codegen/plugin-helpers': 5.0.4(graphql@16.8.1) + '@graphql-codegen/schema-ast': 4.0.2(graphql@16.8.1) + '@graphql-codegen/visitor-plugin-common': 5.2.0(encoding@0.1.13)(graphql@16.8.1) auto-bind: 4.0.0 graphql: 16.8.1 - tslib: 2.5.3 + tslib: 2.6.2 transitivePeerDependencies: - encoding - supports-color @@ -20249,6 +21095,23 @@ snapshots: - encoding - supports-color + '@graphql-codegen/visitor-plugin-common@5.2.0(encoding@0.1.13)(graphql@16.8.1)': + dependencies: + '@graphql-codegen/plugin-helpers': 5.0.4(graphql@16.8.1) + '@graphql-tools/optimize': 2.0.0(graphql@16.8.1) + '@graphql-tools/relay-operation-optimizer': 7.0.0(encoding@0.1.13)(graphql@16.8.1) + '@graphql-tools/utils': 10.0.11(graphql@16.8.1) + auto-bind: 4.0.0 + change-case-all: 1.0.15 + dependency-graph: 0.11.0 + graphql: 16.8.1 + graphql-tag: 2.12.6(graphql@16.8.1) + parse-filepath: 1.0.2 + tslib: 2.6.2 + transitivePeerDependencies: + - encoding + - supports-color + '@graphql-inspector/core@3.3.0(graphql@16.8.1)': dependencies: dependency-graph: 0.11.0 @@ -20731,7 +21594,7 @@ snapshots: '@graphql-tools/executor@1.2.0(graphql@16.8.1)': dependencies: - '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + '@graphql-tools/utils': 10.0.11(graphql@16.8.1) '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) '@repeaterjs/repeater': 3.0.4 graphql: 16.8.1 @@ -21156,6 +22019,23 @@ snapshots: '@iarna/toml@2.2.5': {} + '@ibm-cloud/openapi-ruleset-utilities@1.3.2': {} + + '@ibm-cloud/openapi-ruleset@1.17.0(encoding@0.1.13)': + dependencies: + '@ibm-cloud/openapi-ruleset-utilities': 1.3.2 + '@stoplight/spectral-formats': 1.6.0(encoding@0.1.13) + '@stoplight/spectral-functions': 1.8.0(encoding@0.1.13) + '@stoplight/spectral-rulesets': 1.19.1(encoding@0.1.13) + chalk: 4.1.2 + lodash: 4.17.21 + loglevel: 1.9.1 + loglevel-plugin-prefix: 0.8.4 + minimatch: 6.2.0 + validator: 13.12.0 + transitivePeerDependencies: + - encoding + '@ioredis/commands@1.2.0': {} '@ipld/dag-cbor@7.0.3': @@ -21402,6 +22282,14 @@ snapshots: '@jsdevtools/ono@7.1.3': {} + '@jsep-plugin/regex@1.0.3(jsep@1.3.8)': + dependencies: + jsep: 1.3.8 + + '@jsep-plugin/ternary@1.1.3(jsep@1.3.8)': + dependencies: + jsep: 1.3.8 + '@leichtgewicht/ip-codec@2.0.4': {} '@lit-labs/ssr-dom-shim@1.1.2': {} @@ -22186,7 +23074,7 @@ snapshots: lodash.clonedeep: 4.5.0 semver: 6.3.1 table: 6.8.1 - undici: 5.26.5 + undici: 5.28.4 transitivePeerDependencies: - supports-color @@ -22383,7 +23271,7 @@ snapshots: '@openzeppelin/defender-admin-client@1.54.6(bufferutil@4.0.8)(debug@4.3.4)(encoding@0.1.13)(utf-8-validate@5.0.10)': dependencies: '@openzeppelin/defender-base-client': 1.54.6(debug@4.3.4)(encoding@0.1.13) - axios: 1.6.2(debug@4.3.4) + axios: 1.7.2(debug@4.3.4) ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) lodash: 4.17.21 node-fetch: 2.7.0(encoding@0.1.13) @@ -22423,7 +23311,7 @@ snapshots: dependencies: amazon-cognito-identity-js: 6.3.6(encoding@0.1.13) async-retry: 1.3.3 - axios: 1.6.2(debug@4.3.4) + axios: 1.7.2(debug@4.3.4) lodash: 4.17.21 node-fetch: 2.7.0(encoding@0.1.13) transitivePeerDependencies: @@ -22609,6 +23497,104 @@ snapshots: transitivePeerDependencies: - supports-color + '@orval/angular@6.30.2(encoding@0.1.13)(openapi-types@12.1.3)': + dependencies: + '@orval/core': 6.30.2(encoding@0.1.13)(openapi-types@12.1.3) + transitivePeerDependencies: + - encoding + - openapi-types + - supports-color + + '@orval/axios@6.30.2(encoding@0.1.13)(openapi-types@12.1.3)': + dependencies: + '@orval/core': 6.30.2(encoding@0.1.13)(openapi-types@12.1.3) + transitivePeerDependencies: + - encoding + - openapi-types + - supports-color + + '@orval/core@6.30.2(encoding@0.1.13)(openapi-types@12.1.3)': + dependencies: + '@apidevtools/swagger-parser': 10.1.0(openapi-types@12.1.3) + '@ibm-cloud/openapi-ruleset': 1.17.0(encoding@0.1.13) + acorn: 8.11.3 + ajv: 8.12.0 + chalk: 4.1.2 + compare-versions: 6.1.0 + debug: 4.3.4(supports-color@8.1.1) + esbuild: 0.19.12 + esutils: 2.0.3 + fs-extra: 11.2.0 + globby: 11.1.0 + lodash.get: 4.4.2 + lodash.isempty: 4.4.0 + lodash.omit: 4.5.0 + lodash.uniq: 4.5.0 + lodash.uniqby: 4.7.0 + lodash.uniqwith: 4.5.0 + micromatch: 4.0.5 + openapi3-ts: 4.2.2 + swagger2openapi: 7.0.8(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - openapi-types + - supports-color + + '@orval/fetch@6.30.2(encoding@0.1.13)(openapi-types@12.1.3)': + dependencies: + '@orval/core': 6.30.2(encoding@0.1.13)(openapi-types@12.1.3) + transitivePeerDependencies: + - encoding + - openapi-types + - supports-color + + '@orval/hono@6.30.2(encoding@0.1.13)(openapi-types@12.1.3)': + dependencies: + '@orval/core': 6.30.2(encoding@0.1.13)(openapi-types@12.1.3) + '@orval/zod': 6.30.2(encoding@0.1.13)(openapi-types@12.1.3) + lodash.uniq: 4.5.0 + transitivePeerDependencies: + - encoding + - openapi-types + - supports-color + + '@orval/mock@6.30.2(encoding@0.1.13)(openapi-types@12.1.3)': + dependencies: + '@orval/core': 6.30.2(encoding@0.1.13)(openapi-types@12.1.3) + lodash.get: 4.4.2 + lodash.omit: 4.5.0 + openapi3-ts: 4.2.2 + transitivePeerDependencies: + - encoding + - openapi-types + - supports-color + + '@orval/query@6.30.2(encoding@0.1.13)(openapi-types@12.1.3)': + dependencies: + '@orval/core': 6.30.2(encoding@0.1.13)(openapi-types@12.1.3) + lodash.omitby: 4.6.0 + transitivePeerDependencies: + - encoding + - openapi-types + - supports-color + + '@orval/swr@6.30.2(encoding@0.1.13)(openapi-types@12.1.3)': + dependencies: + '@orval/core': 6.30.2(encoding@0.1.13)(openapi-types@12.1.3) + transitivePeerDependencies: + - encoding + - openapi-types + - supports-color + + '@orval/zod@6.30.2(encoding@0.1.13)(openapi-types@12.1.3)': + dependencies: + '@orval/core': 6.30.2(encoding@0.1.13)(openapi-types@12.1.3) + lodash.uniq: 4.5.0 + transitivePeerDependencies: + - encoding + - openapi-types + - supports-color + '@parcel/watcher-android-arm64@2.3.0': optional: true @@ -22904,7 +23890,7 @@ snapshots: strip-ansi: 5.2.0 sudo-prompt: 9.2.1 wcwidth: 1.0.1 - yaml: 2.3.3 + yaml: 2.4.5 transitivePeerDependencies: - encoding @@ -23612,6 +24598,174 @@ snapshots: '@stablelib/random': 1.0.2 '@stablelib/wipe': 1.0.1 + '@stoplight/better-ajv-errors@1.0.3(ajv@8.12.0)': + dependencies: + ajv: 8.12.0 + jsonpointer: 5.0.1 + leven: 3.1.0 + + '@stoplight/json-ref-readers@1.2.2(encoding@0.1.13)': + dependencies: + node-fetch: 2.7.0(encoding@0.1.13) + tslib: 1.14.1 + transitivePeerDependencies: + - encoding + + '@stoplight/json-ref-resolver@3.1.6': + dependencies: + '@stoplight/json': 3.21.0 + '@stoplight/path': 1.3.2 + '@stoplight/types': 13.6.0 + '@types/urijs': 1.19.25 + dependency-graph: 0.11.0 + fast-memoize: 2.5.2 + immer: 9.0.21 + lodash: 4.17.21 + tslib: 2.6.2 + urijs: 1.19.11 + + '@stoplight/json@3.21.0': + dependencies: + '@stoplight/ordered-object-literal': 1.0.5 + '@stoplight/path': 1.3.2 + '@stoplight/types': 13.20.0 + jsonc-parser: 2.2.1 + lodash: 4.17.21 + safe-stable-stringify: 1.1.1 + + '@stoplight/ordered-object-literal@1.0.5': {} + + '@stoplight/path@1.3.2': {} + + '@stoplight/spectral-core@1.18.3(encoding@0.1.13)': + dependencies: + '@stoplight/better-ajv-errors': 1.0.3(ajv@8.12.0) + '@stoplight/json': 3.21.0 + '@stoplight/path': 1.3.2 + '@stoplight/spectral-parsers': 1.0.4 + '@stoplight/spectral-ref-resolver': 1.0.4(encoding@0.1.13) + '@stoplight/spectral-runtime': 1.1.2(encoding@0.1.13) + '@stoplight/types': 13.6.0 + '@types/es-aggregate-error': 1.0.6 + '@types/json-schema': 7.0.14 + ajv: 8.12.0 + ajv-errors: 3.0.0(ajv@8.12.0) + ajv-formats: 2.1.1(ajv@8.12.0) + es-aggregate-error: 1.0.13 + jsonpath-plus: 7.1.0 + lodash: 4.17.21 + lodash.topath: 4.5.2 + minimatch: 3.1.2 + nimma: 0.2.2 + pony-cause: 1.1.1 + simple-eval: 1.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - encoding + + '@stoplight/spectral-formats@1.6.0(encoding@0.1.13)': + dependencies: + '@stoplight/json': 3.21.0 + '@stoplight/spectral-core': 1.18.3(encoding@0.1.13) + '@types/json-schema': 7.0.14 + tslib: 2.6.2 + transitivePeerDependencies: + - encoding + + '@stoplight/spectral-functions@1.8.0(encoding@0.1.13)': + dependencies: + '@stoplight/better-ajv-errors': 1.0.3(ajv@8.12.0) + '@stoplight/json': 3.21.0 + '@stoplight/spectral-core': 1.18.3(encoding@0.1.13) + '@stoplight/spectral-formats': 1.6.0(encoding@0.1.13) + '@stoplight/spectral-runtime': 1.1.2(encoding@0.1.13) + ajv: 8.12.0 + ajv-draft-04: 1.0.0(ajv@8.12.0) + ajv-errors: 3.0.0(ajv@8.12.0) + ajv-formats: 2.1.1(ajv@8.12.0) + lodash: 4.17.21 + tslib: 2.6.2 + transitivePeerDependencies: + - encoding + + '@stoplight/spectral-parsers@1.0.4': + dependencies: + '@stoplight/json': 3.21.0 + '@stoplight/types': 14.1.1 + '@stoplight/yaml': 4.3.0 + tslib: 2.6.2 + + '@stoplight/spectral-ref-resolver@1.0.4(encoding@0.1.13)': + dependencies: + '@stoplight/json-ref-readers': 1.2.2(encoding@0.1.13) + '@stoplight/json-ref-resolver': 3.1.6 + '@stoplight/spectral-runtime': 1.1.2(encoding@0.1.13) + dependency-graph: 0.11.0 + tslib: 2.6.2 + transitivePeerDependencies: + - encoding + + '@stoplight/spectral-rulesets@1.19.1(encoding@0.1.13)': + dependencies: + '@asyncapi/specs': 4.3.1 + '@stoplight/better-ajv-errors': 1.0.3(ajv@8.12.0) + '@stoplight/json': 3.21.0 + '@stoplight/spectral-core': 1.18.3(encoding@0.1.13) + '@stoplight/spectral-formats': 1.6.0(encoding@0.1.13) + '@stoplight/spectral-functions': 1.8.0(encoding@0.1.13) + '@stoplight/spectral-runtime': 1.1.2(encoding@0.1.13) + '@stoplight/types': 13.20.0 + '@types/json-schema': 7.0.14 + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + json-schema-traverse: 1.0.0 + leven: 3.1.0 + lodash: 4.17.21 + tslib: 2.6.2 + transitivePeerDependencies: + - encoding + + '@stoplight/spectral-runtime@1.1.2(encoding@0.1.13)': + dependencies: + '@stoplight/json': 3.21.0 + '@stoplight/path': 1.3.2 + '@stoplight/types': 12.5.0 + abort-controller: 3.0.0 + lodash: 4.17.21 + node-fetch: 2.7.0(encoding@0.1.13) + tslib: 2.6.2 + transitivePeerDependencies: + - encoding + + '@stoplight/types@12.5.0': + dependencies: + '@types/json-schema': 7.0.14 + utility-types: 3.10.0 + + '@stoplight/types@13.20.0': + dependencies: + '@types/json-schema': 7.0.14 + utility-types: 3.10.0 + + '@stoplight/types@13.6.0': + dependencies: + '@types/json-schema': 7.0.14 + utility-types: 3.10.0 + + '@stoplight/types@14.1.1': + dependencies: + '@types/json-schema': 7.0.14 + utility-types: 3.10.0 + + '@stoplight/yaml-ast-parser@0.0.50': {} + + '@stoplight/yaml@4.3.0': + dependencies: + '@stoplight/ordered-object-literal': 1.0.5 + '@stoplight/types': 14.1.1 + '@stoplight/yaml-ast-parser': 0.0.50 + tslib: 2.6.2 + '@supabase/functions-js@2.1.5': dependencies: '@supabase/node-fetch': 2.6.14 @@ -23757,7 +24911,7 @@ snapshots: '@types/testing-library__cypress': 5.0.12 '@viem/anvil': 0.0.5(bufferutil@4.0.8)(debug@4.3.4)(utf-8-validate@6.0.3) app-root-path: 3.1.0 - axios: 1.6.2(debug@4.3.4) + axios: 1.7.2(debug@4.3.4) babel-plugin-istanbul: 6.1.1 babel-plugin-react-generate-property: 1.1.2 babel-plugin-react-remove-properties: 0.3.0 @@ -24034,6 +25188,10 @@ snapshots: '@types/dom-screen-wake-lock@1.0.3': {} + '@types/es-aggregate-error@1.0.6': + dependencies: + '@types/node': 18.18.7 + '@types/eslint-scope@3.7.6': dependencies: '@types/eslint': 8.44.6 @@ -24341,6 +25499,8 @@ snapshots: '@types/unist@3.0.2': {} + '@types/urijs@1.19.25': {} + '@types/webpack-sources@3.2.2': dependencies: '@types/node': 18.18.7 @@ -24618,6 +25778,13 @@ snapshots: transitivePeerDependencies: - graphql + '@urql/core@5.0.4(graphql@16.8.1)': + dependencies: + '@0no-co/graphql.web': 1.0.7(graphql@16.8.1) + wonka: 6.3.4 + transitivePeerDependencies: + - graphql + '@vanilla-extract/css@1.14.0': dependencies: '@emotion/hash': 0.9.1 @@ -24670,28 +25837,57 @@ snapshots: '@vitest/utils': 1.0.2 chai: 4.3.10 + '@vitest/expect@1.6.0': + dependencies: + '@vitest/spy': 1.6.0 + '@vitest/utils': 1.6.0 + chai: 4.3.10 + '@vitest/runner@1.0.2': dependencies: '@vitest/utils': 1.0.2 p-limit: 5.0.0 pathe: 1.1.1 + '@vitest/runner@1.6.0': + dependencies: + '@vitest/utils': 1.6.0 + p-limit: 5.0.0 + pathe: 1.1.1 + '@vitest/snapshot@1.0.2': dependencies: magic-string: 0.30.5 pathe: 1.1.1 pretty-format: 29.7.0 + '@vitest/snapshot@1.6.0': + dependencies: + magic-string: 0.30.5 + pathe: 1.1.1 + pretty-format: 29.7.0 + '@vitest/spy@1.0.2': dependencies: tinyspy: 2.2.0 + '@vitest/spy@1.6.0': + dependencies: + tinyspy: 2.2.0 + '@vitest/utils@1.0.2': dependencies: diff-sequences: 29.6.3 loupe: 2.3.7 pretty-format: 29.7.0 + '@vitest/utils@1.6.0': + dependencies: + diff-sequences: 29.6.3 + estree-walker: 3.0.3 + loupe: 2.3.7 + pretty-format: 29.7.0 + '@vue/compiler-core@3.3.7': dependencies: '@babel/parser': 7.23.0 @@ -25628,12 +26824,20 @@ snapshots: dependencies: acorn: 8.10.0 + acorn-jsx@5.3.2(acorn@8.11.3): + dependencies: + acorn: 8.11.3 + acorn-walk@8.2.0: {} acorn-walk@8.3.1: {} + acorn-walk@8.3.2: {} + acorn@8.10.0: {} + acorn@8.11.3: {} + address@1.2.2: {} adm-zip@0.4.16: {} @@ -25665,6 +26869,14 @@ snapshots: clean-stack: 2.2.0 indent-string: 4.0.0 + ajv-draft-04@1.0.0(ajv@8.12.0): + optionalDependencies: + ajv: 8.12.0 + + ajv-errors@3.0.0(ajv@8.12.0): + dependencies: + ajv: 8.12.0 + ajv-formats@2.1.1(ajv@8.12.0): optionalDependencies: ajv: 8.12.0 @@ -25857,8 +27069,13 @@ snapshots: array-buffer-byte-length@1.0.0: dependencies: - call-bind: 1.0.5 - is-array-buffer: 3.0.2 + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + + array-buffer-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 array-flatten@1.1.1: {} @@ -25884,9 +27101,9 @@ snapshots: array.prototype.findlast@1.2.3: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 get-intrinsic: 1.2.2 @@ -25914,9 +27131,9 @@ snapshots: array.prototype.reduce@1.0.6: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 es-array-method-boxes-properly: 1.0.0 is-string: 1.0.7 @@ -25928,15 +27145,16 @@ snapshots: es-shim-unscopables: 1.0.2 get-intrinsic: 1.2.2 - arraybuffer.prototype.slice@1.0.2: + arraybuffer.prototype.slice@1.0.3: dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.5 + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-array-buffer: 3.0.2 - is-shared-array-buffer: 1.0.2 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 arrify@1.0.1: {} @@ -26023,7 +27241,9 @@ snapshots: postcss: 8.4.32 postcss-value-parser: 4.2.0 - available-typed-arrays@1.0.5: {} + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 aws-sign2@0.7.0: {} @@ -26033,26 +27253,26 @@ snapshots: axios@0.21.4(debug@4.3.4): dependencies: - follow-redirects: 1.15.3(debug@4.3.4) + follow-redirects: 1.15.6(debug@4.3.4) transitivePeerDependencies: - debug axios@0.26.1: dependencies: - follow-redirects: 1.15.3(debug@4.3.4) + follow-redirects: 1.15.6(debug@4.3.4) transitivePeerDependencies: - debug axios@0.27.2(debug@4.3.4): dependencies: - follow-redirects: 1.15.3(debug@4.3.4) + follow-redirects: 1.15.6(debug@4.3.4) form-data: 4.0.0 transitivePeerDependencies: - debug axios@1.2.2(debug@4.3.4): dependencies: - follow-redirects: 1.15.3(debug@4.3.4) + follow-redirects: 1.15.6(debug@4.3.4) form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -26556,6 +27776,14 @@ snapshots: get-intrinsic: 1.2.2 set-function-length: 1.1.1 + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + call-me-maybe@1.0.2: {} caller-callsite@2.0.0: @@ -26764,6 +27992,18 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + chownr@1.1.4: {} chownr@2.0.0: {} @@ -27724,6 +28964,24 @@ snapshots: whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 + data-view-buffer@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-offset@1.0.0: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dataloader@2.2.2: {} date-fns@2.30.0: @@ -27830,9 +29088,9 @@ snapshots: deep-equal@2.2.2: dependencies: array-buffer-byte-length: 1.0.0 - call-bind: 1.0.5 + call-bind: 1.0.7 es-get-iterator: 1.1.3 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 is-arguments: 1.1.1 is-array-buffer: 3.0.2 is-date-object: 1.0.5 @@ -27872,18 +29130,18 @@ snapshots: defer-to-connect@2.0.1: {} - define-data-property@1.1.1: + define-data-property@1.1.4: dependencies: - get-intrinsic: 1.2.2 + es-define-property: 1.0.0 + es-errors: 1.3.0 gopd: 1.0.1 - has-property-descriptors: 1.0.1 define-lazy-prop@2.0.0: {} define-properties@1.2.1: dependencies: - define-data-property: 1.1.1 - has-property-descriptors: 1.0.1 + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 object-keys: 1.1.1 defu@6.1.3: {} @@ -28291,52 +29549,118 @@ snapshots: es-abstract@1.22.3: dependencies: - array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.2 - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - es-set-tostringtag: 2.0.2 + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + es-set-tostringtag: 2.0.3 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 - get-intrinsic: 1.2.2 - get-symbol-description: 1.0.0 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 globalthis: 1.0.3 gopd: 1.0.1 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.0 - internal-slot: 1.0.6 - is-array-buffer: 3.0.2 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 is-callable: 1.2.7 - is-negative-zero: 2.0.2 + is-negative-zero: 2.0.3 is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 + is-shared-array-buffer: 1.0.3 is-string: 1.0.7 - is-typed-array: 1.1.12 + is-typed-array: 1.1.13 is-weakref: 1.0.2 object-inspect: 1.13.1 object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.5.1 - safe-array-concat: 1.0.1 - safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 - typed-array-buffer: 1.0.0 - typed-array-byte-length: 1.0.0 - typed-array-byte-offset: 1.0.0 - typed-array-length: 1.0.4 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 unbox-primitive: 1.0.2 - which-typed-array: 1.1.13 + which-typed-array: 1.1.15 + + es-abstract@1.23.3: + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.3 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.1 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.15 + + es-aggregate-error@1.0.13: + dependencies: + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + function-bind: 1.1.2 + globalthis: 1.0.3 + has-property-descriptors: 1.0.2 + set-function-name: 2.0.2 es-array-method-boxes-properly@1.0.0: {} + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + es-get-iterator@1.1.3: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 is-arguments: 1.1.1 is-map: 2.0.2 @@ -28364,15 +29688,25 @@ snapshots: es-module-lexer@1.3.1: {} + es-object-atoms@1.0.0: + dependencies: + es-errors: 1.3.0 + es-set-tostringtag@2.0.2: dependencies: - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 has-tostringtag: 1.0.0 - hasown: 2.0.0 + hasown: 2.0.2 + + es-set-tostringtag@2.0.3: + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 es-shim-unscopables@1.0.2: dependencies: - hasown: 2.0.0 + hasown: 2.0.2 es-to-primitive@1.2.1: dependencies: @@ -28394,6 +29728,8 @@ snapshots: es5-ext: 0.10.62 es6-symbol: 3.1.3 + es6-promise@3.3.1: {} + es6-promise@4.2.8: {} es6-promisify@5.0.0: @@ -28462,6 +29798,32 @@ snapshots: '@esbuild/win32-ia32': 0.18.20 '@esbuild/win32-x64': 0.18.20 + esbuild@0.19.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.19.12 + '@esbuild/android-arm': 0.19.12 + '@esbuild/android-arm64': 0.19.12 + '@esbuild/android-x64': 0.19.12 + '@esbuild/darwin-arm64': 0.19.12 + '@esbuild/darwin-x64': 0.19.12 + '@esbuild/freebsd-arm64': 0.19.12 + '@esbuild/freebsd-x64': 0.19.12 + '@esbuild/linux-arm': 0.19.12 + '@esbuild/linux-arm64': 0.19.12 + '@esbuild/linux-ia32': 0.19.12 + '@esbuild/linux-loong64': 0.19.12 + '@esbuild/linux-mips64el': 0.19.12 + '@esbuild/linux-ppc64': 0.19.12 + '@esbuild/linux-riscv64': 0.19.12 + '@esbuild/linux-s390x': 0.19.12 + '@esbuild/linux-x64': 0.19.12 + '@esbuild/netbsd-x64': 0.19.12 + '@esbuild/openbsd-x64': 0.19.12 + '@esbuild/sunos-x64': 0.19.12 + '@esbuild/win32-arm64': 0.19.12 + '@esbuild/win32-ia32': 0.19.12 + '@esbuild/win32-x64': 0.19.12 + esbuild@0.19.8: optionalDependencies: '@esbuild/android-arm': 0.19.8 @@ -29288,6 +30650,14 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.5 + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} @@ -29298,6 +30668,8 @@ snapshots: fast-loops@1.1.3: {} + fast-memoize@2.5.2: {} + fast-querystring@1.1.2: dependencies: fast-decode-uri-component: 1.0.1 @@ -29348,7 +30720,7 @@ snapshots: object-assign: 4.1.1 promise: 7.3.1 setimmediate: 1.0.5 - ua-parser-js: 1.0.36 + ua-parser-js: 1.0.37 transitivePeerDependencies: - encoding @@ -29681,6 +31053,12 @@ snapshots: jsonfile: 6.1.0 universalify: 2.0.0 + fs-extra@11.2.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.0 + fs-extra@4.0.3: dependencies: graceful-fs: 4.2.11 @@ -29735,9 +31113,9 @@ snapshots: function.prototype.name@1.1.6: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 functions-have-names: 1.2.3 functional-red-black-tree@1.0.1: {} @@ -29759,6 +31137,14 @@ snapshots: has-symbols: 1.0.3 hasown: 2.0.0 + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + get-iterator@1.0.2: {} get-nonce@1.0.1: {} @@ -29794,10 +31180,11 @@ snapshots: get-stream@8.0.1: {} - get-symbol-description@1.0.0: + get-symbol-description@1.0.2: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 get-tsconfig@4.7.2: dependencies: @@ -29972,7 +31359,7 @@ snapshots: '@types/glob': 7.2.0 array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.3.1 + fast-glob: 3.3.2 glob: 7.2.3 ignore: 5.3.1 merge2: 1.4.1 @@ -30049,7 +31436,7 @@ snapshots: gopd@1.0.1: dependencies: - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 got@11.8.6: dependencies: @@ -30482,10 +31869,16 @@ snapshots: has-property-descriptors@1.0.1: dependencies: - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 has-proto@1.0.1: {} + has-proto@1.0.3: {} + has-symbol-support-x@1.4.2: {} has-symbols@1.0.3: {} @@ -30498,6 +31891,10 @@ snapshots: dependencies: has-symbols: 1.0.3 + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + has-yarn@3.0.0: {} has@1.0.4: {} @@ -30524,6 +31921,10 @@ snapshots: dependencies: function-bind: 1.1.2 + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + hast-util-from-html@1.0.2: dependencies: '@types/hast': 2.3.7 @@ -30885,7 +32286,7 @@ snapshots: http-proxy@1.18.1(debug@4.3.4): dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.3(debug@4.3.4) + follow-redirects: 1.15.6(debug@4.3.4) requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -30908,6 +32309,8 @@ snapshots: jsprim: 2.0.2 sshpk: 1.18.0 + http2-client@1.3.5: {} + http2-wrapper@1.0.3: dependencies: quick-lru: 5.1.1 @@ -31077,8 +32480,14 @@ snapshots: internal-slot@1.0.6: dependencies: - get-intrinsic: 1.2.2 - hasown: 2.0.0 + get-intrinsic: 1.2.4 + hasown: 2.0.2 + side-channel: 1.0.4 + + internal-slot@1.0.7: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 side-channel: 1.0.4 internmap@1.0.1: {} @@ -31228,20 +32637,25 @@ snapshots: is-arguments@1.1.1: dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 is-array-buffer@3.0.2: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + is-typed-array: 1.1.13 + + is-array-buffer@3.0.4: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 is-arrayish@0.2.1: {} is-async-function@2.0.0: dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-bigint@1.0.4: dependencies: @@ -31253,8 +32667,8 @@ snapshots: is-boolean-object@1.1.2: dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 is-buffer@2.0.5: {} @@ -31272,9 +32686,13 @@ snapshots: dependencies: hasown: 2.0.0 + is-data-view@1.0.1: + dependencies: + is-typed-array: 1.1.13 + is-date-object@1.0.5: dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-decimal@2.0.1: {} @@ -31290,7 +32708,7 @@ snapshots: is-finalizationregistry@1.0.2: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 is-fullwidth-code-point@2.0.0: {} @@ -31304,7 +32722,7 @@ snapshots: is-generator-function@1.0.10: dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-glob@4.0.3: dependencies: @@ -31335,13 +32753,13 @@ snapshots: is-natural-number@4.0.1: {} - is-negative-zero@2.0.2: {} + is-negative-zero@2.0.3: {} is-npm@6.0.0: {} is-number-object@1.0.7: dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-number@7.0.0: {} @@ -31387,8 +32805,8 @@ snapshots: is-regex@1.1.4: dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 is-regexp@1.0.0: {} @@ -31404,7 +32822,11 @@ snapshots: is-shared-array-buffer@1.0.2: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 + + is-shared-array-buffer@1.0.3: + dependencies: + call-bind: 1.0.7 is-stream@1.1.0: {} @@ -31420,7 +32842,7 @@ snapshots: is-string@1.0.7: dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-symbol@1.0.4: dependencies: @@ -31430,9 +32852,9 @@ snapshots: dependencies: text-extensions: 1.9.0 - is-typed-array@1.1.12: + is-typed-array@1.1.13: dependencies: - which-typed-array: 1.1.13 + which-typed-array: 1.1.15 is-typedarray@1.0.0: {} @@ -31452,12 +32874,12 @@ snapshots: is-weakref@1.0.2: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 is-weakset@2.0.2: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 is-what@4.1.16: {} @@ -31512,6 +32934,10 @@ snapshots: dependencies: ws: 8.13.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + isows@1.0.4(ws@8.13.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)): + dependencies: + ws: 8.13.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + isstream@0.1.2: {} istanbul-lib-coverage@3.0.0: {} @@ -31613,7 +33039,7 @@ snapshots: iterator.prototype@1.1.2: dependencies: define-properties: 1.2.1 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 reflect.getprototypeof: 1.0.4 set-function-name: 2.0.1 @@ -32036,6 +33462,8 @@ snapshots: js-tokens@4.0.0: {} + js-tokens@9.0.0: {} + js-yaml@3.14.1: dependencies: argparse: 1.0.10 @@ -32143,6 +33571,8 @@ snapshots: - utf-8-validate optional: true + jsep@1.3.8: {} + jsesc@0.5.0: {} jsesc@2.5.2: {} @@ -32227,6 +33657,8 @@ snapshots: json5@2.2.3: {} + jsonc-parser@2.2.1: {} + jsonc-parser@3.2.0: {} jsonfile@2.4.0: @@ -32247,6 +33679,13 @@ snapshots: jsonparse@1.3.1: {} + jsonpath-plus@6.0.1: + optional: true + + jsonpath-plus@7.1.0: {} + + jsonpointer@5.0.1: {} + jsonschema@1.4.1: {} jsprim@1.4.2: @@ -32533,6 +33972,8 @@ snapshots: lodash.isarguments@3.1.0: {} + lodash.isempty@4.4.0: {} + lodash.isequal@4.5.0: {} lodash.isfunction@3.0.9: {} @@ -32555,6 +33996,10 @@ snapshots: lodash.mergewith@4.6.2: {} + lodash.omit@4.5.0: {} + + lodash.omitby@4.6.0: {} + lodash.once@4.1.1: {} lodash.pad@4.5.1: {} @@ -32589,6 +34034,8 @@ snapshots: lodash.uniqby@4.7.0: {} + lodash.uniqwith@4.5.0: {} + lodash.uppercase@4.3.0: {} lodash.upperfirst@4.3.1: {} @@ -32625,8 +34072,12 @@ snapshots: dayjs: 1.11.10 yargs: 15.4.1 + loglevel-plugin-prefix@0.8.4: {} + loglevel@1.8.1: {} + loglevel@1.9.1: {} + long@4.0.0: {} long@5.2.3: {} @@ -33625,8 +35076,8 @@ snapshots: micromark-extension-mdxjs@3.0.0: dependencies: - acorn: 8.10.0 - acorn-jsx: 5.3.2(acorn@8.10.0) + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) micromark-extension-mdx-expression: 3.0.0 micromark-extension-mdx-jsx: 3.0.0 micromark-extension-mdx-md: 2.0.0 @@ -33999,6 +35450,10 @@ snapshots: dependencies: brace-expansion: 2.0.1 + minimatch@6.2.0: + dependencies: + brace-expansion: 2.0.1 + minimatch@8.0.4: dependencies: brace-expansion: 2.0.1 @@ -34275,6 +35730,16 @@ snapshots: - '@babel/core' - babel-plugin-macros + nimma@0.2.2: + dependencies: + '@jsep-plugin/regex': 1.0.3(jsep@1.3.8) + '@jsep-plugin/ternary': 1.1.3(jsep@1.3.8) + astring: 1.8.6 + jsep: 1.3.8 + optionalDependencies: + jsonpath-plus: 6.0.1 + lodash.topath: 4.5.2 + nise@5.1.5: dependencies: '@sinonjs/commons': 2.0.0 @@ -34315,6 +35780,10 @@ snapshots: emojilib: 2.4.0 skin-tone: 2.0.0 + node-fetch-h2@2.3.0: + dependencies: + http2-client: 1.3.5 + node-fetch-native@1.4.1: {} node-fetch@2.6.7(encoding@0.1.13): @@ -34346,6 +35815,10 @@ snapshots: dependencies: process-on-spawn: 1.0.0 + node-readfiles@0.2.0: + dependencies: + es6-promise: 3.3.1 + node-releases@2.0.13: {} node-stream-zip@1.15.0: {} @@ -34450,6 +35923,37 @@ snapshots: transitivePeerDependencies: - supports-color + oas-kit-common@1.0.8: + dependencies: + fast-safe-stringify: 2.1.1 + + oas-linter@3.2.2: + dependencies: + '@exodus/schemasafe': 1.3.0 + should: 13.2.3 + yaml: 1.10.2 + + oas-resolver@2.5.6: + dependencies: + node-fetch-h2: 2.3.0 + oas-kit-common: 1.0.8 + reftools: 1.1.9 + yaml: 1.10.2 + yargs: 17.7.2 + + oas-schema-walker@1.1.5: {} + + oas-validator@5.0.8: + dependencies: + call-me-maybe: 1.0.2 + oas-kit-common: 1.0.8 + oas-linter: 3.2.2 + oas-resolver: 2.5.6 + oas-schema-walker: 1.1.5 + reftools: 1.1.9 + should: 13.2.3 + yaml: 1.10.2 + oauth-sign@0.9.0: {} ob1@0.76.8: {} @@ -34470,7 +35974,7 @@ snapshots: object-is@1.1.5: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 object-keys@1.1.1: {} @@ -34484,6 +35988,13 @@ snapshots: has-symbols: 1.0.3 object-keys: 1.1.1 + object.assign@4.1.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + object.entries@1.1.7: dependencies: call-bind: 1.0.5 @@ -34499,10 +36010,10 @@ snapshots: object.getownpropertydescriptors@2.1.7: dependencies: array.prototype.reduce: 1.0.6 - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - safe-array-concat: 1.0.1 + es-abstract: 1.23.3 + safe-array-concat: 1.1.2 object.groupby@1.0.1: dependencies: @@ -34577,6 +36088,19 @@ snapshots: openapi-types@12.1.3: {} + openapi-typescript@6.7.6: + dependencies: + ansi-colors: 4.1.3 + fast-glob: 3.3.2 + js-yaml: 4.1.0 + supports-color: 9.4.0 + undici: 5.28.4 + yargs-parser: 21.1.1 + + openapi3-ts@4.2.2: + dependencies: + yaml: 2.4.5 + opener@1.5.2: {} optimism@0.17.5: @@ -34627,6 +36151,36 @@ snapshots: ordinal@1.0.3: {} + orval@6.30.2(encoding@0.1.13)(openapi-types@12.1.3)(typescript@5.3.2): + dependencies: + '@apidevtools/swagger-parser': 10.1.0(openapi-types@12.1.3) + '@orval/angular': 6.30.2(encoding@0.1.13)(openapi-types@12.1.3) + '@orval/axios': 6.30.2(encoding@0.1.13)(openapi-types@12.1.3) + '@orval/core': 6.30.2(encoding@0.1.13)(openapi-types@12.1.3) + '@orval/fetch': 6.30.2(encoding@0.1.13)(openapi-types@12.1.3) + '@orval/hono': 6.30.2(encoding@0.1.13)(openapi-types@12.1.3) + '@orval/mock': 6.30.2(encoding@0.1.13)(openapi-types@12.1.3) + '@orval/query': 6.30.2(encoding@0.1.13)(openapi-types@12.1.3) + '@orval/swr': 6.30.2(encoding@0.1.13)(openapi-types@12.1.3) + '@orval/zod': 6.30.2(encoding@0.1.13)(openapi-types@12.1.3) + ajv: 8.12.0 + cac: 6.7.14 + chalk: 4.1.2 + chokidar: 3.6.0 + enquirer: 2.4.1 + execa: 5.1.1 + find-up: 5.0.0 + fs-extra: 11.2.0 + lodash.uniq: 4.5.0 + openapi3-ts: 4.2.2 + string-argv: 0.3.2 + tsconfck: 2.1.2(typescript@5.3.2) + transitivePeerDependencies: + - encoding + - openapi-types + - supports-color + - typescript + os-homedir@1.0.2: {} os-tmpdir@1.0.2: {} @@ -34963,8 +36517,12 @@ snapshots: pngjs@5.0.0: {} + pony-cause@1.1.1: {} + pony-cause@2.1.10: {} + possible-typed-array-names@1.0.0: {} + postcss-calc@8.2.4(postcss@8.4.32): dependencies: postcss: 8.4.32 @@ -35897,13 +37455,15 @@ snapshots: reflect.getprototypeof@1.0.4: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + es-abstract: 1.23.3 + get-intrinsic: 1.2.4 globalthis: 1.0.3 which-builtin-type: 1.1.3 + reftools@1.1.9: {} + regenerate-unicode-properties@10.1.1: dependencies: regenerate: 1.4.2 @@ -35922,10 +37482,17 @@ snapshots: regexp.prototype.flags@1.5.1: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 set-function-name: 2.0.1 + regexp.prototype.flags@1.5.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + regexpp@3.2.0: {} regexpu-core@5.3.2: @@ -36277,25 +37844,25 @@ snapshots: optionalDependencies: '@babel/code-frame': 7.23.5 - rollup-plugin-esbuild@6.1.0(esbuild@0.19.8)(rollup@3.29.4): + rollup-plugin-esbuild@6.1.0(esbuild@0.19.12)(rollup@4.1.4): dependencies: - '@rollup/pluginutils': 5.0.5(rollup@3.29.4) + '@rollup/pluginutils': 5.0.5(rollup@4.1.4) debug: 4.3.4(supports-color@8.1.1) es-module-lexer: 1.3.1 - esbuild: 0.19.8 + esbuild: 0.19.12 get-tsconfig: 4.7.2 - rollup: 3.29.4 + rollup: 4.1.4 transitivePeerDependencies: - supports-color - rollup-plugin-esbuild@6.1.0(esbuild@0.19.8)(rollup@4.1.4): + rollup-plugin-esbuild@6.1.0(esbuild@0.19.8)(rollup@3.29.4): dependencies: - '@rollup/pluginutils': 5.0.5(rollup@4.1.4) + '@rollup/pluginutils': 5.0.5(rollup@3.29.4) debug: 4.3.4(supports-color@8.1.1) es-module-lexer: 1.3.1 esbuild: 0.19.8 get-tsconfig: 4.7.2 - rollup: 4.1.4 + rollup: 3.29.4 transitivePeerDependencies: - supports-color @@ -36413,8 +37980,15 @@ snapshots: safe-array-concat@1.0.1: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + isarray: 2.0.5 + + safe-array-concat@1.1.2: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 @@ -36422,14 +37996,16 @@ snapshots: safe-buffer@5.2.1: {} - safe-regex-test@1.0.0: + safe-regex-test@1.0.3: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + es-errors: 1.3.0 is-regex: 1.1.4 safe-resolve@1.0.0: {} + safe-stable-stringify@1.1.1: {} + safe-stable-stringify@2.4.3: {} safer-buffer@2.1.2: {} @@ -36645,16 +38221,32 @@ snapshots: set-function-length@1.1.1: dependencies: - define-data-property: 1.1.1 - get-intrinsic: 1.2.2 + define-data-property: 1.1.4 + get-intrinsic: 1.2.4 gopd: 1.0.1 - has-property-descriptors: 1.0.1 + has-property-descriptors: 1.0.2 + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 set-function-name@2.0.1: dependencies: - define-data-property: 1.1.1 + define-data-property: 1.1.4 functions-have-names: 1.2.3 - has-property-descriptors: 1.0.1 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 set-harmonic-interval@1.0.1: {} @@ -36701,6 +38293,32 @@ snapshots: vscode-oniguruma: 1.7.0 vscode-textmate: 8.0.0 + should-equal@2.0.0: + dependencies: + should-type: 1.4.0 + + should-format@3.0.3: + dependencies: + should-type: 1.4.0 + should-type-adaptors: 1.1.0 + + should-type-adaptors@1.1.0: + dependencies: + should-type: 1.4.0 + should-util: 1.0.1 + + should-type@1.4.0: {} + + should-util@1.0.1: {} + + should@13.2.3: + dependencies: + should-equal: 2.0.0 + should-format: 3.0.3 + should-type: 1.4.0 + should-type-adaptors: 1.1.0 + should-util: 1.0.1 + shx@0.3.4: dependencies: minimist: 1.2.8 @@ -36722,6 +38340,10 @@ snapshots: simple-concat@1.0.1: {} + simple-eval@1.0.0: + dependencies: + jsep: 1.3.8 + simple-get@2.8.2: dependencies: decompress-response: 3.3.0 @@ -37075,7 +38697,7 @@ snapshots: stop-iteration-iterator@1.0.0: dependencies: - internal-slot: 1.0.6 + internal-slot: 1.0.7 stream-browserify@3.0.0: dependencies: @@ -37134,23 +38756,24 @@ snapshots: set-function-name: 2.0.1 side-channel: 1.0.4 - string.prototype.trim@1.2.8: + string.prototype.trim@1.2.9: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 - string.prototype.trimend@1.0.7: + string.prototype.trimend@1.0.8: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 - string.prototype.trimstart@1.0.7: + string.prototype.trimstart@1.0.8: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 string_decoder@0.10.31: {} @@ -37227,6 +38850,10 @@ snapshots: dependencies: acorn: 8.10.0 + strip-literal@2.1.0: + dependencies: + js-tokens: 9.0.0 + strip-outer@1.0.1: dependencies: escape-string-regexp: 1.0.5 @@ -37285,6 +38912,8 @@ snapshots: dependencies: has-flag: 4.0.0 + supports-color@9.4.0: {} + supports-hyperlinks@2.3.0: dependencies: has-flag: 4.0.0 @@ -37304,6 +38933,22 @@ snapshots: picocolors: 1.0.0 stable: 0.1.8 + swagger2openapi@7.0.8(encoding@0.1.13): + dependencies: + call-me-maybe: 1.0.2 + node-fetch: 2.7.0(encoding@0.1.13) + node-fetch-h2: 2.3.0 + node-readfiles: 0.2.0 + oas-kit-common: 1.0.8 + oas-resolver: 2.5.6 + oas-schema-walker: 1.1.5 + oas-validator: 5.0.8 + reftools: 1.1.9 + yaml: 1.10.2 + yargs: 17.7.2 + transitivePeerDependencies: + - encoding + swap-case@2.0.2: dependencies: tslib: 2.6.2 @@ -37440,7 +39085,7 @@ snapshots: terser@4.8.1: dependencies: - acorn: 8.10.0 + acorn: 8.11.3 commander: 2.20.3 source-map: 0.6.1 source-map-support: 0.5.21 @@ -37538,6 +39183,8 @@ snapshots: tinypool@0.8.1: {} + tinypool@0.8.4: {} + tinyspy@2.2.0: {} title-case@3.0.3: @@ -37738,6 +39385,10 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + tsconfck@2.1.2(typescript@5.3.2): + optionalDependencies: + typescript: 5.3.2 + tsconfig-paths@3.14.2: dependencies: '@types/json5': 0.0.29 @@ -37871,32 +39522,37 @@ snapshots: transitivePeerDependencies: - supports-color - typed-array-buffer@1.0.0: + typed-array-buffer@1.0.2: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 - typed-array-byte-length@1.0.0: + typed-array-byte-length@1.0.1: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 - typed-array-byte-offset@1.0.0: + typed-array-byte-offset@1.0.2: dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 - typed-array-length@1.0.4: + typed-array-length@1.0.6: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 typedarray-to-buffer@3.1.5: dependencies: @@ -37927,8 +39583,6 @@ snapshots: typical@5.2.0: {} - ua-parser-js@1.0.36: {} - ua-parser-js@1.0.37: {} ufo@1.3.2: {} @@ -37949,7 +39603,7 @@ snapshots: unbox-primitive@1.0.2: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 @@ -37971,6 +39625,10 @@ snapshots: dependencies: '@fastify/busboy': 2.0.0 + undici@5.28.4: + dependencies: + '@fastify/busboy': 2.0.0 + undici@5.9.1: {} undici@6.18.2: {} @@ -38170,6 +39828,8 @@ snapshots: dependencies: punycode: 2.3.0 + urijs@1.19.11: {} + url-loader@4.1.1(file-loader@6.2.0(webpack@5.89.0))(webpack@5.89.0): dependencies: loader-utils: 2.0.4 @@ -38251,8 +39911,8 @@ snapshots: inherits: 2.0.4 is-arguments: 1.1.1 is-generator-function: 1.0.10 - is-typed-array: 1.1.12 - which-typed-array: 1.1.13 + is-typed-array: 1.1.13 + which-typed-array: 1.1.15 utila@0.4.0: {} @@ -38296,6 +39956,8 @@ snapshots: dependencies: builtins: 5.0.1 + validator@13.12.0: {} + valtio@1.11.2(@types/react@18.2.33)(react@18.2.0): dependencies: proxy-compare: 2.5.1 @@ -38405,47 +40067,47 @@ snapshots: - utf-8-validate - zod - viem@2.9.8(bufferutil@4.0.8)(typescript@5.1.6)(utf-8-validate@5.0.10)(zod@3.22.4): + viem@2.13.8(bufferutil@4.0.8)(typescript@5.3.2)(utf-8-validate@5.0.10)(zod@3.22.4): dependencies: '@adraffy/ens-normalize': 1.10.0 '@noble/curves': 1.2.0 '@noble/hashes': 1.3.2 '@scure/bip32': 1.3.2 '@scure/bip39': 1.2.1 - abitype: 1.0.0(typescript@5.1.6)(zod@3.22.4) - isows: 1.0.3(ws@8.13.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + abitype: 1.0.0(typescript@5.3.2)(zod@3.22.4) + isows: 1.0.4(ws@8.13.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)) ws: 8.13.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) optionalDependencies: - typescript: 5.1.6 + typescript: 5.3.2 transitivePeerDependencies: - bufferutil - utf-8-validate - zod - viem@2.9.8(bufferutil@4.0.8)(typescript@5.3.2)(utf-8-validate@5.0.10)(zod@3.22.4): + viem@2.9.8(bufferutil@4.0.8)(typescript@5.1.6)(utf-8-validate@5.0.10)(zod@3.22.4): dependencies: '@adraffy/ens-normalize': 1.10.0 '@noble/curves': 1.2.0 '@noble/hashes': 1.3.2 '@scure/bip32': 1.3.2 '@scure/bip39': 1.2.1 - abitype: 1.0.0(typescript@5.3.2)(zod@3.22.4) + abitype: 1.0.0(typescript@5.1.6)(zod@3.22.4) isows: 1.0.3(ws@8.13.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)) ws: 8.13.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) optionalDependencies: - typescript: 5.3.2 + typescript: 5.1.6 transitivePeerDependencies: - bufferutil - utf-8-validate - zod - vite-node@1.0.2(@types/node@18.18.7)(terser@5.22.0): + vite-node@1.0.2(@types/node@20.14.2)(terser@5.22.0): dependencies: cac: 6.7.14 debug: 4.3.4(supports-color@8.1.1) pathe: 1.1.1 picocolors: 1.0.0 - vite: 5.0.6(@types/node@18.18.7)(terser@5.22.0) + vite: 5.0.6(@types/node@20.14.2)(terser@5.22.0) transitivePeerDependencies: - '@types/node' - less @@ -38456,13 +40118,13 @@ snapshots: - supports-color - terser - vite-node@1.0.2(@types/node@20.14.2)(terser@5.22.0): + vite-node@1.6.0(@types/node@18.18.7)(terser@5.22.0): dependencies: cac: 6.7.14 debug: 4.3.4(supports-color@8.1.1) pathe: 1.1.1 picocolors: 1.0.0 - vite: 5.0.6(@types/node@20.14.2)(terser@5.22.0) + vite: 5.0.6(@types/node@18.18.7)(terser@5.22.0) transitivePeerDependencies: - '@types/node' - less @@ -38475,7 +40137,7 @@ snapshots: vite@5.0.6(@types/node@18.18.7)(terser@5.22.0): dependencies: - esbuild: 0.19.8 + esbuild: 0.19.12 postcss: 8.4.32 rollup: 4.6.1 optionalDependencies: @@ -38485,7 +40147,7 @@ snapshots: vite@5.0.6(@types/node@20.14.2)(terser@5.22.0): dependencies: - esbuild: 0.19.8 + esbuild: 0.19.12 postcss: 8.4.32 rollup: 4.6.1 optionalDependencies: @@ -38493,7 +40155,7 @@ snapshots: fsevents: 2.3.3 terser: 5.22.0 - vitest@1.0.2(@types/node@18.18.7)(jsdom@20.0.3(bufferutil@4.0.8)(utf-8-validate@5.0.10))(terser@5.22.0): + vitest@1.0.2(@types/node@20.14.2)(jsdom@20.0.3(bufferutil@4.0.8)(utf-8-validate@6.0.3))(terser@5.22.0): dependencies: '@vitest/expect': 1.0.2 '@vitest/runner': 1.0.2 @@ -38513,12 +40175,12 @@ snapshots: strip-literal: 1.3.0 tinybench: 2.5.1 tinypool: 0.8.1 - vite: 5.0.6(@types/node@18.18.7)(terser@5.22.0) - vite-node: 1.0.2(@types/node@18.18.7)(terser@5.22.0) + vite: 5.0.6(@types/node@20.14.2)(terser@5.22.0) + vite-node: 1.0.2(@types/node@20.14.2)(terser@5.22.0) why-is-node-running: 2.2.2 optionalDependencies: - '@types/node': 18.18.7 - jsdom: 20.0.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@types/node': 20.14.2 + jsdom: 20.0.3(bufferutil@4.0.8)(utf-8-validate@6.0.3) transitivePeerDependencies: - less - lightningcss @@ -38528,15 +40190,14 @@ snapshots: - supports-color - terser - vitest@1.0.2(@types/node@20.14.2)(jsdom@20.0.3(bufferutil@4.0.8)(utf-8-validate@6.0.3))(terser@5.22.0): + vitest@1.6.0(@types/node@18.18.7)(jsdom@20.0.3(bufferutil@4.0.8)(utf-8-validate@5.0.10))(terser@5.22.0): dependencies: - '@vitest/expect': 1.0.2 - '@vitest/runner': 1.0.2 - '@vitest/snapshot': 1.0.2 - '@vitest/spy': 1.0.2 - '@vitest/utils': 1.0.2 - acorn-walk: 8.3.1 - cac: 6.7.14 + '@vitest/expect': 1.6.0 + '@vitest/runner': 1.6.0 + '@vitest/snapshot': 1.6.0 + '@vitest/spy': 1.6.0 + '@vitest/utils': 1.6.0 + acorn-walk: 8.3.2 chai: 4.3.10 debug: 4.3.4(supports-color@8.1.1) execa: 8.0.1 @@ -38545,15 +40206,15 @@ snapshots: pathe: 1.1.1 picocolors: 1.0.0 std-env: 3.6.0 - strip-literal: 1.3.0 + strip-literal: 2.1.0 tinybench: 2.5.1 - tinypool: 0.8.1 - vite: 5.0.6(@types/node@20.14.2)(terser@5.22.0) - vite-node: 1.0.2(@types/node@20.14.2)(terser@5.22.0) + tinypool: 0.8.4 + vite: 5.0.6(@types/node@18.18.7)(terser@5.22.0) + vite-node: 1.6.0(@types/node@18.18.7)(terser@5.22.0) why-is-node-running: 2.2.2 optionalDependencies: - '@types/node': 20.14.2 - jsdom: 20.0.3(bufferutil@4.0.8)(utf-8-validate@6.0.3) + '@types/node': 18.18.7 + jsdom: 20.0.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - less - lightningcss @@ -39144,7 +40805,7 @@ snapshots: which-builtin-type@1.1.3: dependencies: function.prototype.name: 1.1.6 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-async-function: 2.0.0 is-date-object: 1.0.5 is-finalizationregistry: 1.0.2 @@ -39154,7 +40815,7 @@ snapshots: isarray: 2.0.5 which-boxed-primitive: 1.0.2 which-collection: 1.0.1 - which-typed-array: 1.1.13 + which-typed-array: 1.1.15 which-collection@1.0.1: dependencies: @@ -39167,11 +40828,19 @@ snapshots: which-typed-array@1.1.13: dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 + + which-typed-array@1.1.15: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 which@1.3.1: dependencies: @@ -39408,6 +41077,8 @@ snapshots: yaml@2.3.3: {} + yaml@2.4.5: {} + yargs-parser@18.1.3: dependencies: camelcase: 5.3.1 diff --git a/sdk/.eslintignore b/sdk/.eslintignore index 0fe2a162..4f211122 100644 --- a/sdk/.eslintignore +++ b/sdk/.eslintignore @@ -3,7 +3,7 @@ **/cache **/dist **/node_modules -**/types +**/src/__generated__ # files *.env diff --git a/sdk/.eslintrc.yml b/sdk/.eslintrc.yml index da11d20d..22950252 100644 --- a/sdk/.eslintrc.yml +++ b/sdk/.eslintrc.yml @@ -9,7 +9,7 @@ parserOptions: plugins: - "@typescript-eslint" root: true -ignorePatterns: ["rollup.config.js", "vitest.config.ts", "dist/"] +ignorePatterns: ["rollup.config.js", "vitest.config.ts", "dist/", "__generated__/"] rules: "@typescript-eslint/semi": - warn diff --git a/sdk/.prettierignore b/sdk/.prettierignore index 0f95e4d8..1dfb9bdc 100644 --- a/sdk/.prettierignore +++ b/sdk/.prettierignore @@ -16,6 +16,7 @@ **/deployments **/.openzeppelin **/.graphclient +**/__generated__ # files *.env diff --git a/sdk/codegen.yml b/sdk/codegen.yml index 410b854e..e0286317 100644 --- a/sdk/codegen.yml +++ b/sdk/codegen.yml @@ -1,12 +1,7 @@ +schema: https://api.hypercerts.org/v1/graphql generates: - ./src/indexer/gql/: + ./src/__generated__/gql/: + preset: client documents: - ./src/indexer/**/*.graphql - schema: https://staging-api.hypercerts.org/v1/graphql - preset: client - presetConfig: - typesPrefix: I - dedupeOperationSuffix: true - skipTypename: true - namingConvention: change-case#pascalCase - useTypeImports: true + ignoreNoDocuments: true, // for better experience with the watcher diff --git a/sdk/lib/hypercerts-api b/sdk/lib/hypercerts-api new file mode 160000 index 00000000..c78aeb52 --- /dev/null +++ b/sdk/lib/hypercerts-api @@ -0,0 +1 @@ +Subproject commit c78aeb52b6da438da7cb45138d0adc46a9585ef2 diff --git a/sdk/migrationV1_V2.md b/sdk/migrationV1_V2.md new file mode 100644 index 00000000..f4f83a19 --- /dev/null +++ b/sdk/migrationV1_V2.md @@ -0,0 +1,29 @@ +# Updated environment initialization + +- Initialize the client with `{environment: "test"` or `{environment: "production"}` instead of providing a chainID. + This will enable queries to the correct graph. +- For reading evm state, we follow the publicClient's connected chain. +- WalletClient is not required. When initializing without a walletClient, or when the walletClient is set to a chain not + supported in the environment, the SDK will default to read only mode. + +# Updated Graph client and queries + +- `SDK` now exports `graphClient` which can be used to query the graph directly. +- Updated queries: + +``` + HypercertById, + HypercertsByOwner, + FractionsByHypercert, + FractionsByOwner, + RecentHypercerts, + FractionById, +``` + +- When using VSCode we recommend using [gql.tada](https://github.com/0no-co/gql.tada) for syntax highlighting and other + nifty features. + +# Removed methods + +- `getData` +- `getMetadata` -> in favor of using the Graph diff --git a/sdk/package.json b/sdk/package.json index c71c5920..147533fe 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@hypercerts-org/sdk", - "version": "2.0.0-alpha.12", + "version": "2.0.0-alpha.13", "description": "SDK for hypercerts protocol", "repository": "git@github.com:hypercerts-org/hypercerts.git", "author": "Hypercerts team", @@ -26,17 +26,17 @@ "@graphql-typed-document-node/core": "^3.2.0", "@hypercerts-org/contracts": "2.0.0-alpha.0", "@openzeppelin/merkle-tree": "^1.0.5", - "@urql/core": "^4.3.0", + "@urql/core": "^5.0.4", "@whatwg-node/fetch": "^0.9.13", "ajv": "^8.11.2", - "axios": "^1.6.2", + "axios": "^1.7.2", "dotenv": "^16.0.3", "ethers": "5.7.2", "fast-deep-equal": "^3.1.3", "graphql": "^16.8.1", "loglevel": "^1.8.1", "urql": "^4.0.6", - "viem": "^2.9.4", + "viem": "^2.13.8", "wonka": "^6.3.4" }, "devDependencies": { @@ -46,6 +46,10 @@ "@faker-js/faker": "^8.3.1", "@graphql-codegen/cli": "^5.0.0", "@graphql-codegen/client-preset": "^4.1.0", + "@graphql-codegen/typescript": "^4.0.7", + "@graphql-codegen/typescript-operations": "^4.2.1", + "@graphql-codegen/typescript-resolvers": "^4.1.0", + "@graphql-codegen/typescript-urql": "^4.0.0", "@rollup/plugin-commonjs": "^24.0.1", "@rollup/plugin-json": "^6.0.0", "@rollup/plugin-node-resolve": "^15.0.1", @@ -62,6 +66,8 @@ "it-all": "^3.0.4", "json-schema-to-typescript": "^13.1.1", "nyc": "^15.1.0", + "openapi-typescript": "^6.7.6", + "orval": "^6.30.2", "rollup": "^3.17.2", "rollup-plugin-auto-external": "^2.0.0", "rollup-plugin-dts": "^6.1.0", @@ -71,14 +77,16 @@ "sinon-chai": "^3.7.0", "ts-node": "^10.9.1", "typescript": "5.3.2", - "vitest": "^1.0.1" + "vitest": "^1.6.0" }, "scripts": { - "build": "pnpm types:json && pnpm codegen && rollup -c", - "codegen": "graphql-codegen", + "build": "pnpm types:json && pnpm codegen:api && pnpm codegen:graph && rollup -c", + "codegen:graph": "graphql-codegen", + "codegen:api": "npx orval --input ./lib/hypercerts-api/src/__generated__/swagger.json --output ./src/__generated__/api.ts", "clean": "rm -rf ./dist", "prebuild": "pnpm clean", "prepack": "pnpm build", + "update:submodules": "git submodule update --init --recursive", "test": "vitest run", "test:watch": "vitest --watch", "types:json": "pnpm json2ts -i './src/resources/schema/' -o 'src/types' --cwd './src/resources/schema'" diff --git a/sdk/src/__generated__/api.ts b/sdk/src/__generated__/api.ts new file mode 100644 index 00000000..b49c4b05 --- /dev/null +++ b/sdk/src/__generated__/api.ts @@ -0,0 +1,429 @@ +/** + * Generated by orval v6.30.2 🍺 + * Do not edit manually. + * Hypercerts API + * API for uploading allow lists and hypercert metadata. Visit /graphql for the GraphQL API. + * OpenAPI spec version: 1.0.0 + */ +import axios from "axios"; +import type { AxiosRequestConfig, AxiosResponse } from "axios"; +export type ValidateAllowList200AnyOfTwo = { + errors?: unknown; + message: string; + success?: unknown; + valid: boolean; +}; + +export type ValidateAllowList200AnyOf = { + errors: RecordStringStringOrStringArray; + message: string; + success: boolean; + valid?: unknown; +}; + +export type ValidateAllowList200 = ValidateAllowList200AnyOf | ValidateAllowList200AnyOfTwo; + +export type StoreAllowList201AnyOfTwoData = { + cid: string; +}; + +export type StoreAllowList201AnyOfTwo = { + data: StoreAllowList201AnyOfTwoData; + errors?: unknown; + message?: unknown; + success: boolean; +}; + +export type StoreAllowList201AnyOf = { + data?: unknown; + errors: RecordStringStringOrStringArray; + message: string; + success: boolean; +}; + +export type StoreAllowList201 = StoreAllowList201AnyOf | StoreAllowList201AnyOfTwo; + +export type UpdateOrderNonce200Data = { + address: string; + chain_id: number; + created_at: string; + nonce_counter: number; +}; + +export type UpdateOrderNonce200 = { + data: UpdateOrderNonce200Data; + message: string; + success: boolean; +}; + +export type StoreOrder201AnyOfTwoData = { + additionalParameters: string; + amounts: number[]; + chainId: number; + collection: string; + collectionType: number; + createdAt: string; + currency: string; + endTime: number; + globalNonce: string; + hash: string; + id: string; + itemIds: string[]; + orderNonce: string; + price: string; + quoteType: number; + signature: string; + signer: string; + startTime: number; + status: string; + strategyId: number; + subsetNonce: number; +}; + +export type StoreOrder201AnyOfTwo = { + data: StoreOrder201AnyOfTwoData; + error?: unknown; + message: string; + success: boolean; +}; + +export type StoreOrder201AnyOf = { + data: unknown; + error: unknown; + message: string; + success: boolean; +}; + +export type StoreOrder201 = StoreOrder201AnyOf | StoreOrder201AnyOfTwo; + +export type ValidateMetadata200AnyOfSix = { + errors?: unknown; + message: string; + valid: boolean; +}; + +export type ValidateMetadata200 = ValidateMetadata200AnyOf | ValidateMetadata200AnyOfSix; + +export type ValidateMetadata200AnyOfErrorsAnyOfThree = { + message: string; + name?: unknown; + receivedAllowlistCID: string; +}; + +export type ValidateMetadata200AnyOfErrorsAnyOfTwo = { + message: string; + name?: unknown; + receivedAllowlistCID?: unknown; +}; + +export type ValidateMetadata200AnyOfErrorsAnyOf = { + message: string; + name: string; + receivedAllowlistCID?: unknown; +}; + +export type ValidateMetadata200AnyOfErrors = + | ValidateMetadata200AnyOfErrorsAnyOf + | ValidateMetadata200AnyOfErrorsAnyOfTwo + | ValidateMetadata200AnyOfErrorsAnyOfThree; + +export type ValidateMetadata200AnyOf = { + errors: ValidateMetadata200AnyOfErrors; + message: string; + valid: boolean; +}; + +export type StoreMetadata201 = StoreMetadata201AnyOf | StoreMetadata201AnyOfTwo; + +export type StoreMetadata201AnyOfTwoErrorsAnyOfThree = { + message: string; + name?: unknown; + receivedAllowlistCID: string; +}; + +export type StoreMetadata201AnyOfTwoErrorsAnyOfTwo = { + message: string; + name?: unknown; + receivedAllowlistCID?: unknown; +}; + +export type StoreMetadata201AnyOfTwoErrorsAnyOf = { + message: string; + name: string; + receivedAllowlistCID?: unknown; +}; + +export type StoreMetadata201AnyOfTwoErrors = + | StoreMetadata201AnyOfTwoErrorsAnyOf + | StoreMetadata201AnyOfTwoErrorsAnyOfTwo + | StoreMetadata201AnyOfTwoErrorsAnyOfThree; + +export type StoreMetadata201AnyOfTwo = { + errors: StoreMetadata201AnyOfTwoErrors; + message: string; + valid: boolean; +}; + +export type StoreMetadata201AnyOf = { + cid: string; +}; + +/** + * Request body for creating a new allowlist. + */ +export interface CreateAllowListRequest { + /** The dump of the OpenZeppelin MerkleTree containing [address, uint256] entries. See https://github.com/OpenZeppelin/merkle-tree for more information. */ + allowList: string; + /** The total amount of units distributed via the allowlist. The total should amount to 1 eth in wei (1e18) units. */ + totalUnits: string; +} + +export interface UpdateOrderNonceRequest { + address: string; + chainId: number; +} + +export interface CreateOrderRequest { + additionalParameters: string; + amounts: number[]; + chainId: number; + collection: string; + collectionType: number; + currency: string; + endTime: number; + globalNonce: string; + itemIds: string[]; + orderNonce: string; + price: string; + quoteType: number; + signature: string; + signer: string; + startTime: number; + strategyId: number; + subsetNonce: number; +} + +export type ApiResponseErrors = RecordStringStringOrStringArray | Error[]; + +export interface ApiResponse { + data?: unknown; + errors?: ApiResponseErrors; + message: string; + success: boolean; +} + +/** + * Response object for a validation request. + */ +export interface ValidationResponse { + errors?: RecordStringStringOrStringArray; + message: string; + valid: boolean; +} + +export type HypercertMetadataPropertiesItem = { + trait_type?: string; + value?: string; + [key: string]: unknown; +}; + +/** + * Claim data for hypercert. ERC1155 Metadata compliant + */ +export interface HypercertMetadata { + /** A CID pointer to the merke tree proof json on ipfs */ + allowList?: string; + /** Describes the asset to which this token represents */ + description: string; + /** An url pointing to the external website of the project */ + external_url?: string; + hypercert?: HypercertClaimdata; + /** A URI pointing to a resource with mime type image/* representing the asset to which this token represents. Consider making any images at a width between 320 and 1080 pixels and aspect ratio between 1.91:1 and 4:5 inclusive. */ + image: string; + /** Identifies the asset to which this token represents */ + name: string; + properties?: HypercertMetadataPropertiesItem[]; + /** Describes the asset to which this token represents */ + ref?: string; + /** The version of Hypercert schema used to describe this hypercert */ + version?: string; +} + +/** + * Work time period. The value is UNIX time in seconds from epoch. + */ +export type HypercertClaimdataWorkTimeframe = { + display_value?: string; + name?: string; + value?: number[]; + [key: string]: unknown; +}; + +/** + * Scopes of work + */ +export type HypercertClaimdataWorkScope = { + display_value?: string; + excludes?: string[]; + name?: string; + value?: string[]; + [key: string]: unknown; +}; + +/** + * Rights + */ +export type HypercertClaimdataRights = { + display_value?: string; + excludes?: string[]; + name?: string; + value?: string[]; + [key: string]: unknown; +}; + +/** + * Impact time period. The value is UNIX time in seconds from epoch. + */ +export type HypercertClaimdataImpactTimeframe = { + display_value?: string; + name?: string; + value?: number[]; + [key: string]: unknown; +}; + +/** + * Scopes of impact + */ +export type HypercertClaimdataImpactScope = { + display_value?: string; + excludes?: string[]; + name?: string; + value?: string[]; + [key: string]: unknown; +}; + +/** + * Contributors + */ +export type HypercertClaimdataContributors = { + display_value?: string; + name?: string; + value?: string[]; + [key: string]: unknown; +}; + +/** + * Properties of an impact claim + */ +export interface HypercertClaimdata { + /** Contributors */ + contributors: HypercertClaimdataContributors; + /** Scopes of impact */ + impact_scope: HypercertClaimdataImpactScope; + /** Impact time period. The value is UNIX time in seconds from epoch. */ + impact_timeframe: HypercertClaimdataImpactTimeframe; + /** Rights */ + rights?: HypercertClaimdataRights; + /** Scopes of work */ + work_scope: HypercertClaimdataWorkScope; + /** Work time period. The value is UNIX time in seconds from epoch. */ + work_timeframe: HypercertClaimdataWorkTimeframe; + [key: string]: unknown; +} + +/** + * Response object for a store request. + */ +export interface StoreResponse { + data?: unknown; + errors?: StoreResponseErrors; + message: string; + success: boolean; +} + +export interface Error { + message: string; + name: string; + stack?: string; +} + +/** + * Construct a type with a set of properties K of type T + */ +export interface RecordStringStringOrStringArray { + [key: string]: string | string[]; +} + +export type StoreResponseErrors = RecordStringStringOrStringArray | Error[]; + +/** + * Submits a new hypercert metadata object for validation and storage on IPFS. While we maintain a database of allowlists, the allowlist itself is stored on IPFS. + */ +export const storeMetadata = >( + hypercertMetadata: HypercertMetadata, + options?: AxiosRequestConfig, +): Promise => { + return axios.post(`/v1/metadata`, hypercertMetadata, options); +}; + +/** + * Submits a new hypercert metadata object for validation. + */ +export const validateMetadata = >( + hypercertMetadata: HypercertMetadata, + options?: AxiosRequestConfig, +): Promise => { + return axios.post(`/v1/metadata/validate`, hypercertMetadata, options); +}; + +/** + * Submits a new order for validation and storage on the database. + */ +export const storeOrder = >( + createOrderRequest: CreateOrderRequest, + options?: AxiosRequestConfig, +): Promise => { + return axios.post(`/v1/marketplace/orders`, createOrderRequest, options); +}; + +/** + * Updates and returns the order nonce for a user on a specific chain. + */ +export const updateOrderNonce = >( + updateOrderNonceRequest: UpdateOrderNonceRequest, + options?: AxiosRequestConfig, +): Promise => { + return axios.post(`/v1/marketplace/order-nonce`, updateOrderNonceRequest, options); +}; + +/** + * Submits a new allowlist for validation and storage on IPFS. While we maintain a database of allowlists, the allowlist itself is stored on IPFS. +Try to keep a backup of the allowlist for recovery purposes. + +Provide the dump of the OpenZeppelin MerkleTree and the total units. + */ +export const storeAllowList = >( + createAllowListRequest: CreateAllowListRequest, + options?: AxiosRequestConfig, +): Promise => { + return axios.post(`/v1/allowlists`, createAllowListRequest, options); +}; + +/** + * Submits a new allowlist for validation. + +Provide the dump of the OpenZeppelin MerkleTree and the total units. + */ +export const validateAllowList = >( + createAllowListRequest: CreateAllowListRequest, + options?: AxiosRequestConfig, +): Promise => { + return axios.post(`/v1/allowlists/validate`, createAllowListRequest, options); +}; + +export type StoreMetadataResult = AxiosResponse; +export type ValidateMetadataResult = AxiosResponse; +export type StoreOrderResult = AxiosResponse; +export type UpdateOrderNonceResult = AxiosResponse; +export type StoreAllowListResult = AxiosResponse; +export type ValidateAllowListResult = AxiosResponse; diff --git a/sdk/src/indexer/gql/fragment-masking.ts b/sdk/src/__generated__/gql/fragment-masking.ts similarity index 68% rename from sdk/src/indexer/gql/fragment-masking.ts rename to sdk/src/__generated__/gql/fragment-masking.ts index 2ba06f10..71bfb909 100644 --- a/sdk/src/indexer/gql/fragment-masking.ts +++ b/sdk/src/__generated__/gql/fragment-masking.ts @@ -1,57 +1,57 @@ -import { ResultOf, DocumentTypeDecoration, TypedDocumentNode } from '@graphql-typed-document-node/core'; -import { FragmentDefinitionNode } from 'graphql'; -import { Incremental } from './graphql'; +import { ResultOf, DocumentTypeDecoration, TypedDocumentNode } from "@graphql-typed-document-node/core"; +import { FragmentDefinitionNode } from "graphql"; +import { Incremental } from "./graphql"; - -export type FragmentType> = TDocumentType extends DocumentTypeDecoration< - infer TType, - any -> - ? [TType] extends [{ ' $fragmentName'?: infer TKey }] - ? TKey extends string - ? { ' $fragmentRefs'?: { [key in TKey]: TType } } +export type FragmentType> = + TDocumentType extends DocumentTypeDecoration + ? [TType] extends [{ " $fragmentName"?: infer TKey }] + ? TKey extends string + ? { " $fragmentRefs"?: { [key in TKey]: TType } } + : never : never - : never - : never; + : never; // return non-nullable if `fragmentType` is non-nullable export function useFragment( _documentNode: DocumentTypeDecoration, - fragmentType: FragmentType> + fragmentType: FragmentType>, ): TType; // return nullable if `fragmentType` is nullable export function useFragment( _documentNode: DocumentTypeDecoration, - fragmentType: FragmentType> | null | undefined + fragmentType: FragmentType> | null | undefined, ): TType | null | undefined; // return array of non-nullable if `fragmentType` is array of non-nullable export function useFragment( _documentNode: DocumentTypeDecoration, - fragmentType: ReadonlyArray>> + fragmentType: ReadonlyArray>>, ): ReadonlyArray; // return array of nullable if `fragmentType` is array of nullable export function useFragment( _documentNode: DocumentTypeDecoration, - fragmentType: ReadonlyArray>> | null | undefined + fragmentType: ReadonlyArray>> | null | undefined, ): ReadonlyArray | null | undefined; export function useFragment( _documentNode: DocumentTypeDecoration, - fragmentType: FragmentType> | ReadonlyArray>> | null | undefined + fragmentType: + | FragmentType> + | ReadonlyArray>> + | null + | undefined, ): TType | ReadonlyArray | null | undefined { return fragmentType as any; } - -export function makeFragmentData< - F extends DocumentTypeDecoration, - FT extends ResultOf ->(data: FT, _fragment: F): FragmentType { +export function makeFragmentData, FT extends ResultOf>( + data: FT, + _fragment: F, +): FragmentType { return data as FragmentType; } export function isFragmentReady( queryNode: DocumentTypeDecoration, fragmentNode: TypedDocumentNode, - data: FragmentType, any>> | null | undefined + data: FragmentType, any>> | null | undefined, ): data is FragmentType { const deferredFields = (queryNode as { __meta__?: { deferredFields: Record } }).__meta__ ?.deferredFields; @@ -62,5 +62,5 @@ export function isFragmentReady( const fragName = fragDef?.name?.value; const fields = (fragName && deferredFields[fragName]) || []; - return fields.length > 0 && fields.every(field => data && field in data); + return fields.length > 0 && fields.every((field) => data && field in data); } diff --git a/sdk/src/indexer/gql/gql.ts b/sdk/src/__generated__/gql/gql.ts similarity index 100% rename from sdk/src/indexer/gql/gql.ts rename to sdk/src/__generated__/gql/gql.ts diff --git a/sdk/src/indexer/gql/graphql.ts b/sdk/src/__generated__/gql/graphql.ts similarity index 100% rename from sdk/src/indexer/gql/graphql.ts rename to sdk/src/__generated__/gql/graphql.ts diff --git a/sdk/src/indexer/gql/index.ts b/sdk/src/__generated__/gql/index.ts similarity index 61% rename from sdk/src/indexer/gql/index.ts rename to sdk/src/__generated__/gql/index.ts index f5159916..0ea4a91c 100644 --- a/sdk/src/indexer/gql/index.ts +++ b/sdk/src/__generated__/gql/index.ts @@ -1,2 +1,2 @@ export * from "./fragment-masking"; -export * from "./gql"; \ No newline at end of file +export * from "./gql"; diff --git a/sdk/src/client.ts b/sdk/src/client.ts index edba7016..31188f1b 100644 --- a/sdk/src/client.ts +++ b/sdk/src/client.ts @@ -1,11 +1,12 @@ import { HypercertMinterAbi } from "@hypercerts-org/contracts"; -import { Account, ByteArray, Hex, PublicClient, WalletClient, getContract } from "viem"; +import { Account, ByteArray, Hex, PublicClient, WalletClient, getAddress, getContract } from "viem"; import { HypercertEvaluator } from "./evaluations"; import { HypercertIndexer } from "./indexer"; -import { HypercertsStorage } from "./storage"; +import { HypercertStorage, getStorage } from "./storage"; import { AllowlistEntry, ClientError, + Environment, HypercertClientConfig, HypercertClientInterface, HypercertMetadata, @@ -14,15 +15,15 @@ import { SupportedOverrides, TransferRestrictions, } from "./types"; -import { getConfig } from "./utils/config"; +import { getConfig, getDeploymentsForChainId, getDeploymentsForEnvironment } from "./utils/config"; import { verifyMerkleProof, verifyMerkleProofs } from "./validator"; import { handleSimulatedContractError } from "./utils/errors"; import { logger } from "./utils"; import { parseAllowListEntriesToMerkleTree } from "./utils/allowlist"; -import { DEPLOYMENTS } from "./constants"; import { getClaimStoredDataFromTxHash } from "./utils"; import { ParserReturnType } from "./utils/txParser"; import { isClaimOnChain } from "./utils/chains"; +import { StoreAllowList201AnyOfTwoData, StoreMetadata201AnyOf } from "./__generated__/api"; /** * The `HypercertClient` is a core class in the hypercerts SDK, providing a high-level interface to interact with the hypercerts system. @@ -40,13 +41,13 @@ import { isClaimOnChain } from "./utils/chains"; */ export class HypercertClient implements HypercertClientInterface { readonly _config; - private _storage: HypercertsStorage; // TODO better handling readonly. For now not needed since we don't use this class; private _evaluator?: HypercertEvaluator; private _indexer: HypercertIndexer; private _publicClient: PublicClient; private _walletClient?: WalletClient; - readonly: boolean; + private _storage: HypercertStorage; + readOnly: boolean; /** * Creates a new instance of the `HypercertClient` class. @@ -57,21 +58,20 @@ export class HypercertClient implements HypercertClientInterface { * @throws {ClientError} Will throw a `ClientError` if the public client cannot be connected. */ constructor(config: Partial) { - this._config = getConfig(config); + this._config = getConfig({ config }); if (!this._config.publicClient) { throw new ClientError("Could not connect to public client."); } this._publicClient = this._config.publicClient; this._walletClient = this._config?.walletClient; - - this._storage = new HypercertsStorage(); - + this._storage = getStorage({ environment: this._config.environment }); this._indexer = new HypercertIndexer(this._config); + this.readOnly = this._config.readOnly; - this.readonly = this._config.readOnly || !this._walletClient; + // if walletclient has chainId - if (this.readonly) { + if (this.readOnly) { logger.warn("HypercertsClient is in readonly mode", "client"); } } @@ -93,7 +93,7 @@ export class HypercertClient implements HypercertClientInterface { * Gets the storage layer for the client. * @returns The storage layer. */ - get storage(): HypercertsStorage { + get storage(): HypercertStorage { return this._storage; } @@ -106,11 +106,15 @@ export class HypercertClient implements HypercertClientInterface { } /** - * Gets the contract addresses and graph urls for the provided `chainId` - * @returns The addresses, graph name and graph url. + * Gets the contract addresses and graph urls for the provided `chainId` or `environment`. When both are provided, chainId takes precedence. If none is provided, it defaults to the configured environment. + * @returns The addresses, graph name and graph url */ - getDeployments = (chainId: SupportedChainIds) => { - return DEPLOYMENTS[chainId]; + getDeployments = ({ chainId, environment }: { chainId?: SupportedChainIds; environment?: Environment }) => { + if (chainId) return getDeploymentsForChainId(chainId); + + if (environment) return getDeploymentsForEnvironment(environment); + + return getDeploymentsForEnvironment(this._config.environment); }; /** @@ -137,12 +141,18 @@ export class HypercertClient implements HypercertClientInterface { const { account } = this.getWallet(); // validate and store metadata - const metadataCID = await this.storage.storeMetadata(metaData, { timeout: overrides?.timeout }); + const metadataRes = await this.storage.storeMetadata(metaData, { timeout: overrides?.timeout }); + + if (!metadataRes || !metadataRes.data) { + throw new ClientError("No CID found", { metadataRes }); + } + + const data = metadataRes.data as StoreMetadata201AnyOf; const request = await this.simulateRequest( account, "mintClaim", - [account?.address, totalUnits, metadataCID, transferRestriction], + [account?.address, totalUnits, data.cid, transferRestriction], overrides, ); @@ -251,11 +261,19 @@ export class HypercertClient implements HypercertClientInterface { const tree = parseAllowListEntriesToMerkleTree(allowList); // store allowlist on IPFS - const allowListCID = await this.storage.storeAllowList(allowList, totalUnits, { timeout: overrides?.timeout }); + const allowlistStoreRes = await this.storage.storeAllowlist( + { allowList: JSON.stringify(tree.dump()), totalUnits: totalUnits.toString() }, + { timeout: overrides?.timeout }, + ); + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + if (!allowlistStoreRes.data) throw new ClientError("No CID found", { allowlistStoreRes }); + + const data = allowlistStoreRes.data as unknown as StoreAllowList201AnyOfTwoData; // store metadata on IPFS const metadataCID = await this.storage.storeMetadata( - { ...metaData, allowList: allowListCID }, + { ...metaData, allowList: data.cid }, { timeout: overrides?.timeout }, ); const request = await this.simulateRequest( @@ -483,11 +501,17 @@ export class HypercertClient implements HypercertClientInterface { }; private getContractConfig = () => { - if (!this.config?.addresses?.HypercertMinterUUPS) + if (!this._walletClient) throw new ClientError("No wallet client found", { client: this }); + + const chainId = this._walletClient.chain?.id as SupportedChainIds; + + const deployment = this.getDeployments({ chainId }); + + if (!deployment[chainId].addresses.HypercertMinterUUPS) throw new ClientError("No contract address found", { config: this.config }); return getContract({ - address: this.config.addresses.HypercertMinterUUPS as `0x${string}`, + address: getAddress(deployment[chainId].addresses.HypercertMinterUUPS!), abi: HypercertMinterAbi, client: { public: this._publicClient }, }); @@ -507,7 +531,7 @@ export class HypercertClient implements HypercertClientInterface { if (!this._walletClient) { throw new ClientError("Could not connect to wallet; sending transactions not allowed.", { client: this }); } - if (this.readonly) throw new ClientError("Client is readonly", { client: this }); + if (this.readOnly) throw new ClientError("Client is readonly", { client: this }); if (!this._walletClient.account) throw new ClientError("No account found", { client: this }); return { walletClient: this._walletClient, account: this._walletClient.account }; diff --git a/sdk/src/constants.ts b/sdk/src/constants.ts index 1f526a1e..47c0eefd 100644 --- a/sdk/src/constants.ts +++ b/sdk/src/constants.ts @@ -2,60 +2,45 @@ * Constants */ -import { Deployment, IndexerEnvironment, SupportedChainIds } from "./types"; +import { Deployment, Environment, SupportedChainIds } from "./types"; import { deployments } from "@hypercerts-org/contracts"; -const DEFAULT_GRAPH_BASE_URL = "https://staging-api.hypercerts.org/v1/graphql"; -export const DEFAULT_INDEXER_ENVIRONMENT: IndexerEnvironment = "all"; +export const DEFAULT_ENVIRONMENT: Environment = "production"; // The APIs we expose -// TODO when rolled out to production, enable both testing and prod environments const ENDPOINTS: { [key: string]: string } = { - metadata: "https://staging-api.hypercerts.org/v1/metadata", - // metadata: "https://hypercerts-api-staging.up.railway.app/v1/metadata", - allowlist: "https://staging-api.hypercerts.org/v1/allowlists", -}; - -// TODO when rolled out to production, enable both testing and prod environments with the correct URLs -const GRAPHS: { [key in IndexerEnvironment]: string } = { - all: "https://api.hypercerts.org/v1/graphql", - test: "https://staging-api.hypercerts.org/v1/graphql", - production: "https://api.hypercerts.org/v1/graphql", + test: "https://staging-api.hypercerts.org", + production: "https://api.hypercerts.org", }; // These are the deployments we manage -const DEPLOYMENTS: { [key in SupportedChainIds]: Partial } = { +const DEPLOYMENTS: { [key in SupportedChainIds]: Deployment } = { 10: { + chainId: 10, addresses: deployments[10], - graphName: "hypercerts-optimism-mainnet", - graphUrl: `${DEFAULT_GRAPH_BASE_URL}/hypercerts-optimism-mainnet`, isTestnet: false, } as const, 42220: { + chainId: 42220, addresses: deployments[42220], - graphName: "hypercerts-celo", - graphUrl: `${DEFAULT_GRAPH_BASE_URL}/hypercerts-celo`, isTestnet: false, }, + 8453: { + chainId: 8453, + addresses: deployments[8453], + isTestnet: false, + } as const, 11155111: { + chainId: 11155111, addresses: deployments[11155111], - graphName: "hypercerts-sepolia", - graphUrl: DEFAULT_GRAPH_BASE_URL, isTestnet: true, } as const, 84532: { + chainId: 84532, addresses: deployments[84532], - graphName: "hypercerts-base-sepolia", - graphUrl: DEFAULT_GRAPH_BASE_URL, isTestnet: true, } as const, - 8453: { - addresses: deployments[8453], - graphName: "hypercerts-base-mainnet", - graphUrl: `${DEFAULT_GRAPH_BASE_URL}/hypercerts-base-mainnet`, - isTestnet: false, - } as const, }; // Example schema on Sepolia @@ -73,4 +58,4 @@ const EAS_SCHEMAS = { }, } as const; -export { ENDPOINTS, GRAPHS, DEPLOYMENTS, EAS_SCHEMAS }; +export { ENDPOINTS, DEPLOYMENTS, EAS_SCHEMAS }; diff --git a/sdk/src/evaluations/index.ts b/sdk/src/evaluations/index.ts index db42cd22..2e00df2c 100644 --- a/sdk/src/evaluations/index.ts +++ b/sdk/src/evaluations/index.ts @@ -3,8 +3,8 @@ import { isAddress } from "viem"; // @ts-ignore import { CIDString } from "nft.storage"; -import { HypercertsStorage } from "../storage"; import { HypercertClientConfig, HypercertEvaluationSchema, MalformedDataError } from "../types"; +import { HypercertStorage, getStorage } from "../storage"; export interface EvaluatorInterface { /** @@ -16,7 +16,7 @@ export interface EvaluatorInterface { } export class HypercertEvaluator implements EvaluatorInterface { - storage: HypercertsStorage; + storage: HypercertStorage; readonly = true; @@ -26,7 +26,7 @@ export class HypercertEvaluator implements EvaluatorInterface { this.readonly = false; } - this.storage = new HypercertsStorage(); + this.storage = getStorage({ environment: "test" }); } submitEvaluation = async (evaluation: HypercertEvaluationSchema): Promise => { diff --git a/sdk/src/index.ts b/sdk/src/index.ts index cc85716a..61e9896f 100644 --- a/sdk/src/index.ts +++ b/sdk/src/index.ts @@ -5,17 +5,12 @@ import { StrategyCollectionOfferAbi, StrategyManagerAbi, TransferManagerAbi, - StrategyDutchAuctionAbi, - StrategyItemIdsRangeAbi, StrategyHypercertFractionOfferAbi, - StrategyHypercertCollectionOfferAbi, - StrategyHypercertDutchAuctionAbi, CreatorFeeManagerWithRoyaltiesAbi, ExecutionManagerAbi, } from "@hypercerts-org/contracts"; import { HypercertClient } from "./client"; -import { HypercertsStorage } from "./storage"; import * as CONSTANTS from "./constants"; /** @@ -28,11 +23,7 @@ export { StrategyCollectionOfferAbi, StrategyManagerAbi, TransferManagerAbi, - StrategyDutchAuctionAbi, - StrategyItemIdsRangeAbi, StrategyHypercertFractionOfferAbi, - StrategyHypercertCollectionOfferAbi, - StrategyHypercertDutchAuctionAbi, CreatorFeeManagerWithRoyaltiesAbi, ExecutionManagerAbi, }; @@ -44,11 +35,6 @@ export { CONSTANTS }; */ export { HypercertClient }; -/** - * Storage - */ -export { HypercertsStorage }; - /** * Types */ @@ -67,5 +53,5 @@ export * from "./utils"; /** * Graph */ -export * from "./indexer/gql"; -export * as graphql from "./indexer/gql/graphql"; +export * from "./__generated__/gql"; +export * as graphClient from "./__generated__/gql/graphql"; diff --git a/sdk/src/indexer.ts b/sdk/src/indexer.ts index ea551834..4e157083 100644 --- a/sdk/src/indexer.ts +++ b/sdk/src/indexer.ts @@ -1,5 +1,5 @@ import { logger } from "./utils"; -import { HypercertClientConfig, HypercertIndexerInterface, IndexerEnvironment } from "./types"; +import { HypercertClientConfig, HypercertIndexerInterface } from "./types"; import { AnyVariables, cacheExchange, Client, fetchExchange } from "@urql/core"; import { @@ -15,8 +15,7 @@ import { RecentHypercertsQueryVariables, FractionByIdDocument, FractionByIdQueryVariables, -} from "./indexer/gql/graphql"; -import { DEPLOYMENTS, GRAPHS } from "./constants"; +} from "./__generated__/gql/graphql"; import { TypedDocumentNode } from "@graphql-typed-document-node/core"; import { DocumentNode } from "graphql"; @@ -31,53 +30,29 @@ import { DocumentNode } from "graphql"; * const claims = await indexer.claimsByOwner('your-address'); */ export class HypercertIndexer implements HypercertIndexerInterface { - /** The Graph client used by the indexer. */ - private environment: IndexerEnvironment; - private graphClient: Client; /** * Creates a new instance of the `HypercertIndexer` class. * @param options The configuration options for the indexer. */ - constructor(options: Partial) { + constructor({ graphUrl, environment }: Pick) { logger.info("Creating HypercertIndexer", "constructor (write)", { - environment: options.indexerEnvironment, + environment, }); - if (!options.indexerEnvironment) { - throw new Error("Missing indexer environment"); + if (!environment) { + throw new Error("Missing environment"); } - this.environment = options.indexerEnvironment; - const environments = HypercertIndexer.getDeploymentsForEnvironment(this.environment); - logger.info("Creating Graph clients", "constructor (read)", { environments }); + logger.info("Creating Graph client", "constructor (read)", { graphUrl }); this.graphClient = new Client({ - url: GRAPHS[options.indexerEnvironment], + url: graphUrl, exchanges: [cacheExchange, fetchExchange], }); } - static getDeploymentsForEnvironment(environment: IndexerEnvironment) { - logger.info("Indexer", "getDeploymentsForEnvironment", { environment }); - return Object.entries(DEPLOYMENTS).filter(([_, deployment]) => { - if (environment === "all") { - return true; - } - - if (environment === "test") { - return deployment.isTestnet; - } - - if (environment === "production") { - return !deployment.isTestnet; - } - - return false; - }); - } - /* eslint-disable @typescript-eslint/no-explicit-any */ performQuery = async ( query: TypedDocumentNode, diff --git a/sdk/src/storage.ts b/sdk/src/storage.ts index f7aedc5e..a9fe8774 100644 --- a/sdk/src/storage.ts +++ b/sdk/src/storage.ts @@ -1,148 +1,46 @@ -import { validateAllowlist, validateMetaData } from "./validator"; +import { Environment, HypercertMetadata } from "./types"; import { - HypercertStorageInterface, - HypercertMetadata, - MalformedDataError, - StorageError, - AllowlistEntry, - StorageConfigOverrides, -} from "./types"; -import { logger, getFromIPFS, parseAllowListEntriesToMerkleTree } from "./utils"; -import { uploadAllowlist, uploadMetadata } from "./utils/apis"; + CreateAllowListRequest, + StoreAllowList201, + StoreMetadata201, + storeAllowList, + storeMetadata, +} from "./__generated__/api"; +import { AxiosRequestConfig, AxiosResponse } from "axios"; +import { ENDPOINTS } from "./constants"; + +export interface HypercertStorage { + storeMetadata: ( + metadata: HypercertMetadata, + config: AxiosRequestConfig, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + ) => Promise>; + storeAllowlist: ( + createAllowListRequest: CreateAllowListRequest, + config: AxiosRequestConfig, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + ) => Promise>; +} /** - * A class that provides storage functionality for Hypercerts. - * - * This class implements the `HypercertStorageInterface` and provides methods for storing and retrieving Hypercerts. + * An utility methods that provides storage functionality for hypercerts metadata and allow lists. * - * @example - * const storage = new HypercertsStorage(); - * const metadata = await storage.getMetadata('your-hypercert-id'); */ -export class HypercertsStorage implements HypercertStorageInterface { - /** - * Stores hypercerts allowlist on IPFS. - * - * First it validates the provided metadata using the `validateMetaData` function. If the metadata is invalid, it throws a `MalformedDataError`. - * If the metadata is valid, it creates a new Blob from the metadata and stores it using the hypercerts API. If the storage operation fails, it throws a `StorageError`. - * - * @param {AllowlistEntry[]} allowList - The allowList to store. - * @param {bigin} totalUnits - The total number of units in the allowlist. - * @param {StorageConfigOverrides} [config] - An optional configuration object. - * @returns {Promise} A promise that resolves to the CID of the stored metadata. - * @throws {StorageError} Will throw a `StorageError` if the storage operation fails. - * @throws {MalformedDataError} Will throw a `MalformedDataError` if the provided metadata is invalid. - */ - public async storeAllowList( - allowList: AllowlistEntry[], - totalUnits: bigint, - config: StorageConfigOverrides = { timeout: 0 }, - ): Promise { - const { valid, data, errors: allowlistErrors } = validateAllowlist(allowList, totalUnits); - if (!valid) { - throw new MalformedDataError(`Invalid allowList.`, { errors: allowlistErrors }); - } - - logger.debug("Storing allowlist: ", "storage", [data]); - - const tree = parseAllowListEntriesToMerkleTree(allowList); - - logger.debug("Allowlist tree: ", "storage", [tree]); - - const resData = await uploadAllowlist( - { - allowList: JSON.stringify(tree.dump()), - totalUnits: totalUnits.toString(), - }, - config, - ); - - if (!resData?.cid || (resData.errors && Object.keys(resData.errors).length > 0)) { - throw new StorageError("Failed to store metadata", { errors: resData.errors, data }); - } - - const { cid } = resData; - - logger.debug(`Stored metadata at ${cid}`); - - return cid; - } - - /** - * Stores Hypercert metadata using the hypercerts API. - * - * It then validates the provided metadata using the `validateMetaData` function. If the metadata is invalid, it throws a `MalformedDataError`. - * If the metadata is valid, it creates a new Blob from the metadata and stores it using the hypercerts API. If the storage operation fails, it throws a `StorageError`. - * - * @param {HypercertMetadata} data - The Hypercert metadata to store. This should be an object that conforms to the HypercertMetadata type. - * @param {StorageConfigOverrides} [config] - An optional configuration object. - * @returns {Promise} A promise that resolves to the CID of the stored metadata. - * @throws {StorageError} Will throw a `StorageError` if the storage operation fails. - * @throws {MalformedDataError} Will throw a `MalformedDataError` if the provided metadata is invalid. - */ - public async storeMetadata( - metadata: HypercertMetadata, - config: StorageConfigOverrides = { timeout: 0 }, - ): Promise { - const { data, valid, errors: validationErrors } = validateMetaData(metadata); - if (!valid) { - throw new MalformedDataError(`Invalid metadata.`, { errors: validationErrors }); - } - - logger.debug("Storing HypercertMetaData: ", "storage", [data]); - - const resData = await uploadMetadata(metadata, config); - - if (!resData?.cid || (resData.errors && Object.keys(resData.errors).length > 0)) { - throw new StorageError("Failed to store metadata", { errors: resData.errors, data }); - } - - const { cid } = resData; - - logger.debug(`Stored metadata at ${cid}`); - - return cid; - } - - /** - * Retrieves Hypercert metadata from IPFS using the provided CID or IPFS URI. - * - * This method first retrieves the data from IPFS using the `getFromIPFS` function. It then validates the retrieved data using the `validateMetaData` function. If the data is invalid, it throws a `MalformedDataError`. - * If the data is valid, it returns the data as a `HypercertMetadata` object. - * - * @param {string} cidOrIpfsUri - The CID or IPFS URI of the metadata to retrieve. - * @param {StorageConfigOverrides} [config] - An optional configuration object. - * @returns {Promise} A promise that resolves to the retrieved metadata. - * @throws {MalformedDataError} Will throw a `MalformedDataError` if the retrieved data is invalid. - */ - public async getMetadata( - cidOrIpfsUri: string, - config: StorageConfigOverrides = { timeout: 0 }, - ): Promise { - const res = await getFromIPFS(cidOrIpfsUri, config.timeout); - - const validation = validateMetaData(res); - if (!validation.valid) { - throw new MalformedDataError(`Invalid metadata at ${cidOrIpfsUri}`, { errors: validation.errors }); - } - - return validation.data as HypercertMetadata; - } - - /** - * Retrieves data from IPFS using the provided CID or IPFS URI. - * - * This method first retrieves the data from IPFS using the `getFromIPFS` function. It then parses the retrieved data as JSON and returns it. - * - * @param {string} cidOrIpfsUri - The CID or IPFS URI of the data to retrieve. - * @param {StorageConfigOverrides} [config] - An optional configuration object. - * @returns {Promise} A promise that resolves to the retrieved data. - * @throws {FetchError} Will throw a `FetchError` if the retrieval operation fails. - * @throws {MalformedDataError} Will throw a `MalformedDataError` if the retrieved data is not a single file. - * - * @remarkts Note: The original implementation using the Web3 Storage client is currently commented out due to issues with upstream repos. This will be replaced once those issues are resolved. - */ - public async getData(cidOrIpfsUri: string, config: StorageConfigOverrides = { timeout: 0 }): Promise { - return await getFromIPFS(cidOrIpfsUri, config.timeout); - } -} +export const getStorage = ({ + environment, + config = { timeout: 0 }, +}: { + environment: Environment; + config?: AxiosRequestConfig; +}) => { + const baseURL = ENDPOINTS[environment]; + + const _config = { ...config, baseURL }; + + return { + storeMetadata: async (metadata: HypercertMetadata, config: AxiosRequestConfig = _config) => + storeMetadata(metadata, config), + storeAllowlist: async (createAllowListRequest: CreateAllowListRequest, config: AxiosRequestConfig = _config) => + storeAllowList(createAllowListRequest, config), + }; +}; diff --git a/sdk/src/types/client.ts b/sdk/src/types/client.ts index dcd02794..a22eba13 100644 --- a/sdk/src/types/client.ts +++ b/sdk/src/types/client.ts @@ -1,19 +1,21 @@ -import { PartialTypedDataConfig } from "@ethereum-attestation-service/eas-sdk"; - import { HypercertIndexer } from "../indexer"; import { AllowlistEntry, TransferRestrictions } from "./hypercerts"; import { HypercertMetadata } from "./metadata"; -import { ByteArray, Chain, Hex, PublicClient, WalletClient } from "viem"; +import { ByteArray, Hex, PublicClient, WalletClient } from "viem"; +import { AxiosRequestConfig } from "axios"; + +export type TestChainIds = 11155111 | 84532; +export type ProductionChainIds = 10 | 42220 | 8453; /** * Enum to verify the supported chainIds * * @note 10 = Optimism, 42220 = Celo, 11155111 = Sepolia, 84532 = Base Sepolia, 8453 = Base Mainnet */ -export type SupportedChainIds = 10 | 42220 | 11155111 | 84532 | 8453; +export type SupportedChainIds = TestChainIds | ProductionChainIds; -export type SupportedOverrides = ContractOverrides & StorageConfigOverrides; +export type SupportedOverrides = ContractOverrides & AxiosRequestConfig; /** * Configuration options for the contract interactions. @@ -28,15 +30,6 @@ export type ContractOverrides = { gasLimit?: bigint; }; -/** - * Configuration options for the Hypercert storage layer. - * @param timeout The timeout (im ms) for the HTTP request; for example for uploading metadata or fetching allowlists. - */ -export type StorageConfigOverrides = { - // Axios timout in ms - timeout?: number; -}; - export type Contracts = | "HypercertMinterUUPS" | "TransferManager" @@ -45,107 +38,39 @@ export type Contracts = | "RoyaltyFeeRegistry" | "OrderValidator" | "CreatorFeeManager" - | "StrategyCollectionOffer" - | "StrategyDutchAuction" - | "StrategyItemIdsRange" - | "StrategyHypercertCollectionOffer" - | "StrategyHypercertDutchAuction" | "StrategyHypercertFractionOffer"; /** * Represents a deployment of a contract on a specific network. */ export type Deployment = { - chain: Partial; + chainId: SupportedChainIds; /** The address of the deployed contract. */ addresses: Partial>; - /** The url to the subgraph that indexes the contract events. Override for localized testing */ - graphUrl: string; - graphName: string; isTestnet: boolean; }; /** * Configuration options for the Hypercert client. */ -export type HypercertClientConfig = Pick & - HypercertStorageConfig & - HypercertEvaluatorConfig & { - /** The PublicClient is inherently read-only */ - publicClient: PublicClient; - walletClient: WalletClient; - /** Force the use of overridden values */ - unsafeForceOverrideConfig?: boolean; - /** Boolean to assert if the client is in readOnly mode */ - readOnly: boolean; - /** Reason for readOnly mode */ - readOnlyReason?: string; - /** The environment to run the indexer in. This can be either production, test or all. Defaults to test */ - indexerEnvironment: IndexerEnvironment; - }; +export type HypercertClientConfig = { + /** The environment to run the indexer in. This can be either production, test or all. Defaults to test */ + environment: Environment; + deployments: { [k: string]: Deployment }; + /** Boolean to assert if the client is in readOnly mode */ + readOnly: boolean; + graphUrl: string; + /** The PublicClient is inherently read-only */ + publicClient?: PublicClient; + walletClient?: WalletClient; +}; /** * The environment to run the indexer in. * Production will run against all mainnet chains, while test will run against testnet chains. * All will run against both */ -export type IndexerEnvironment = "production" | "test" | "all"; - -/** - * Configuration options for the Hypercert storage layer. - * @note The API tokens are optional, but required for storing data on NFT.storage and Web3.storage. - * - * @deprecated nft.storage and web3.storage are no longer used - */ -export type HypercertStorageConfig = { - /** The API token for NFT.storage. */ - nftStorageToken?: string; -}; - -/** - * Configuration options for the Hypercert evaluator. - * @note The signer is required for submitting evaluations. - */ -export type HypercertEvaluatorConfig = Omit & { - easContractAddress: string; -}; - -/** - * The interface for the Hypercert storage layer. - */ -export interface HypercertStorageInterface { - /** - * Stores the allowlost for a hypercert. - * @param allowList The metadata to store. - * @param {StorageConfigOverrides} [config] - An optional configuration object. - * @returns A Promise that resolves to the CID of the stored metadata. - */ - storeAllowList: (allowList: AllowlistEntry[], totalUnits: bigint, config?: StorageConfigOverrides) => Promise; - - /** - * Stores the metadata for a hypercert. - * @param metadata The metadata to store. - * @param {StorageConfigOverrides} [config] - An optional configuration object. - * @returns A Promise that resolves to the CID of the stored metadata. - */ - storeMetadata: (metadata: HypercertMetadata, config?: StorageConfigOverrides) => Promise; - - /** - * Retrieves the metadata for a hypercerts. - * @param cidOrIpfsUri The CID or IPFS URI of the metadata to retrieve. - * @param {StorageConfigOverrides} [config] - An optional configuration object. - * @returns A Promise that resolves to the retrieved metadata. - */ - getMetadata: (cidOrIpfsUri: string, config?: StorageConfigOverrides) => Promise; - - /** - * Retrieves arbitrary data from IPFS. - * @param cidOrIpfsUri The CID or IPFS URI of the data to retrieve. - * @param {StorageConfigOverrides} [config] - An optional configuration object. - * @returns A Promise that resolves to the retrieved data. - */ - getData: (cidOrIpfsUri: string, config?: StorageConfigOverrides) => Promise; -} +export type Environment = "production" | "test" | "all"; /** * The props for the Hypercert client. @@ -165,9 +90,7 @@ export interface HypercertClientInterface extends HypercertClientMethods, Hyperc */ export interface HypercertClientState { /** Whether the client is in read-only mode. */ - readonly: boolean; - /** The storage layer used by the client. */ - storage: HypercertStorageInterface; + readOnly: boolean; /** The indexer used by the client. */ indexer: HypercertIndexer; } @@ -180,7 +103,9 @@ export interface HypercertClientMethods { * Gets the contract addresses and graph urls for the provided `chainId` * @returns The addresses, graph name and graph url. */ - getDeployments: (chainId: SupportedChainIds) => Partial; + getDeployments: ({ chainId, environment }: { chainId?: SupportedChainIds; environment?: Environment }) => { + [k: string]: Deployment; + }; /** * Mints a new claim. diff --git a/sdk/src/types/indexer.ts b/sdk/src/types/indexer.ts index 16d5fbcb..3ba7a7c1 100644 --- a/sdk/src/types/indexer.ts +++ b/sdk/src/types/indexer.ts @@ -12,7 +12,7 @@ import { FractionsByHypercertQueryVariables, FractionByIdQueryVariables, FractionByIdQuery, -} from "../indexer/gql/graphql"; +} from "../__generated__/gql/graphql"; export interface HypercertIndexerInterface { getGraphClient(): Client; diff --git a/sdk/src/utils/apis.ts b/sdk/src/utils/apis.ts deleted file mode 100644 index 27ac4cde..00000000 --- a/sdk/src/utils/apis.ts +++ /dev/null @@ -1,65 +0,0 @@ -import axios from "axios"; -import { ENDPOINTS } from "../../src/constants"; -import { HypercertMetadata, StorageConfigOverrides, StorageError } from "../../src/types"; - -/** - * Type for the request body when posting to the allowlist endpoint. - */ -type AllowListPostRequest = { - allowList: string; - totalUnits: string; -}; - -// /** -// * Type for the response data from the API. -// */ -// type ResponseData = { -// success: boolean; -// message: string; -// data?: T; -// errors?: Record; -// }; - -/** - * Axios instance configured with the base URL for the hypercert API. - */ -const api = axios.create({ headers: { "Content-Type": "application/json" } }); - -/** - * Uploads metadata to the API. - * - * @param {HypercertMetadata} metadata - The metadata to upload. Should be an object that conforms to the HypercertMetadata type. - * @param {StorageConfigOverrides} [config] - An optional configuration object. - * @returns The response data from the API. - */ -//TODO fix response typing based on updated API spec -const uploadMetadata = async (metadata: HypercertMetadata, config: StorageConfigOverrides = { timeout: 0 }) => { - const res = await api.post(ENDPOINTS.metadata, metadata, config); - - if (!res) { - throw new StorageError("Failed to store metadata", { errors: {}, cid: undefined }); - } - - return res.data; -}; - -/** - * Uploads an allowlist to the API. - * - * @param {HypercertMetadata} req - The request body containing the allowlist and total units. The allowList should be a stringified Merkle tree dump. - * @param {StorageConfigOverrides} [config] - An optional configuration object. - * @returns The response data from the API. - * - */ -//TODO fix response typing based on updated API spec -const uploadAllowlist = async (req: AllowListPostRequest, config: StorageConfigOverrides = { timeout: 0 }) => { - const res = await api.post(ENDPOINTS.allowlist, req, config); - - if (!res) { - throw new StorageError("Failed to store allow list", { errors: {}, cid: undefined }); - } - - return res.data; -}; - -export { uploadMetadata, uploadAllowlist }; diff --git a/sdk/src/utils/config.ts b/sdk/src/utils/config.ts index b7fe21af..48b088a8 100644 --- a/sdk/src/utils/config.ts +++ b/sdk/src/utils/config.ts @@ -1,17 +1,6 @@ -import { sepolia, optimism, celo, Chain, baseSepolia, base } from "viem/chains"; - -import { DEFAULT_INDEXER_ENVIRONMENT } from "../constants"; -import { - ConfigurationError, - Deployment, - HypercertClientConfig, - InvalidOrMissingError, - SupportedChainIds, - UnsupportedChainError, -} from "../types"; +import { Environment, HypercertClientConfig, SupportedChainIds } from "../types"; import { logger } from "./logger"; -import { createPublicClient, http } from "viem"; -import { DEPLOYMENTS } from "../constants"; +import { DEFAULT_ENVIRONMENT, DEPLOYMENTS, ENDPOINTS } from "../constants"; /** * Returns a configuration object for the Hypercert client. @@ -33,59 +22,24 @@ import { DEPLOYMENTS } from "../constants"; * @throws {InvalidOrMissingError} Will throw an `InvalidOrMissingError` if the `unsafeForceOverrideConfig` flag is set but the required overrides are not provided. * @throws {UnsupportedChainError} Will throw an `UnsupportedChainError` if the default configuration for the provided chain ID is missing. */ -export const getConfig = (overrides: Partial): Partial => { - // Get the chainId of the writing chain, first from overrides, then environment variables, then the constant - const chain = getChainConfig(overrides); - if (!chain) { - logger.warn("[getConfig]: No default config for chain found"); - } - - let baseDeployment: (Partial & { unsafeForceOverrideConfig?: boolean }) | undefined; - - if (overrides.unsafeForceOverrideConfig) { - if (!overrides.chain?.id) { - throw new InvalidOrMissingError( - `attempted to override with chainId=${overrides.chain?.id}, but requires chainName, graphUrl, and contractAddress to be set`, - { - chainID: overrides.chain?.id?.toString(), - }, - ); - } - baseDeployment = { - chain: { ...chain, id: overrides.chain?.id }, - unsafeForceOverrideConfig: overrides.unsafeForceOverrideConfig, - }; - } else { - //TODO do many casts - baseDeployment = overrides.chain?.id - ? (getDeployment(overrides.chain?.id as SupportedChainIds) as Partial & { - unsafeForceOverrideConfig?: boolean; - }) - : chain?.id - ? (getDeployment(chain.id as SupportedChainIds) as Partial & { unsafeForceOverrideConfig?: boolean }) - : undefined; - if (!baseDeployment) { - throw new UnsupportedChainError(`Default config for chainId=${overrides.chain?.id} is missing in SDK`, { - chainID: overrides.chain?.id, - }); - } - - baseDeployment = { ...baseDeployment, chain }; - } - - const config: Partial = { - // Start with the hardcoded values - ...baseDeployment, +export const getConfig = ({ + config = { environment: DEFAULT_ENVIRONMENT }, +}: { + config?: Partial>; +}): HypercertClientConfig => { + const _config = { // Let the user override from environment variables - ...getWalletClient(overrides), - ...getPublicClient(overrides), - ...getEasContractAddress(overrides), - ...getIndexerEnvironment(overrides), + ...getEnvironment(config), + ...getWalletClient(config), + ...getPublicClient(config), + ...getGraphUrl(config), + deployments: getDeploymentsForEnvironment(config.environment || DEFAULT_ENVIRONMENT), + readOnly: true, }; const missingKeys = []; - for (const [key, value] of Object.entries(config)) { + for (const [key, value] of Object.entries(_config)) { if (!value) { missingKeys.push(key); } @@ -93,73 +47,80 @@ export const getConfig = (overrides: Partial): Partial 0) logger.warn(`Missing properties in config: ${missingKeys.join(", ")}`); - return config; -}; - -const getDeployment = (chainId: SupportedChainIds) => { - return DEPLOYMENTS[chainId]; -}; - -const getIndexerEnvironment = (overrides: Partial) => { - return { indexerEnvironment: overrides.indexerEnvironment || DEFAULT_INDEXER_ENVIRONMENT }; -}; - -const getChainConfig = (overrides: Partial) => { - const chainId = overrides?.chain?.id ? overrides.chain?.id : undefined; + const chainId = _config.walletClient?.chain?.id as SupportedChainIds; + const writeAbleChainIds = Object.entries(_config.deployments).map(([_, deployment]) => deployment.chainId); if (!chainId) { - throw new ConfigurationError("No chainId specified in config or environment variables"); + logger.warn("No chain ID found for wallet client", "getConfig", { chainId }); + _config.readOnly = true; } - const chain = getDefaultChain(chainId); - - if (!chain) { - throw new UnsupportedChainError(`No default config for chainId=${chainId} found in SDK`, { - chainID: chainId?.toString(), - }); + if (chainId && writeAbleChainIds.includes(chainId)) { + console.log("Setting read only to false"); + _config.readOnly = false; } - return chain; + return _config; }; -const getWalletClient = (overrides: Partial) => { - const walletClient = overrides.walletClient; +export const getDeploymentsForEnvironment = (environment: Environment) => { + logger.info("Indexer", "getDeploymentsForEnvironment", { environment }); - if (!walletClient) { - logger.warn("No wallet client found", "getWalletClient", walletClient); - } + const deployments = Object.fromEntries( + Object.entries(DEPLOYMENTS).filter(([_, deployment]) => { + if (deployment.isTestnet && environment === "test") { + return deployment; + } - return { walletClient }; + if (!deployment.isTestnet && environment === "production") { + return true; + } + + return false; + }), + ); + + if (!deployments) throw new Error("Missing deployments"); + + return deployments; }; -const getPublicClient = (overrides: Partial) => { - const chain = getChainConfig(overrides); - let publicClient; +export const getDeploymentsForChainId = (chainId: SupportedChainIds) => { + logger.info("Indexer", "getDeploymentsForChainId", { chainId }); - publicClient = createPublicClient({ - chain: chain, - transport: http(), - }); + const deployments = Object.fromEntries( + Object.entries(DEPLOYMENTS).filter(([_, deployment]) => { + if (deployment.chainId === chainId) { + return deployment; + } - if (overrides.publicClient) { - publicClient = overrides.publicClient; - } + return false; + }), + ); + + if (!deployments) throw new Error("Missing deployments"); + + return deployments; +}; - return { publicClient }; +const getEnvironment = (config: Partial) => { + return { environment: config.environment || DEFAULT_ENVIRONMENT }; }; -const getEasContractAddress = (overrides: Partial) => { - return { easContractAddress: overrides.easContractAddress }; +const getGraphUrl = (config: Partial) => { + return { graphUrl: `${ENDPOINTS[config.environment || DEFAULT_ENVIRONMENT]}/v1/graph` }; }; -const getDefaultChain = (chainId: number) => { - const _chains = [sepolia, optimism, celo, base, baseSepolia]; +const getWalletClient = (config: Partial) => { + const walletClient = config.walletClient; - for (const chain of Object.values(_chains)) { - if ("id" in chain) { - if (chain.id === chainId) { - return chain as Chain; - } - } + if (!walletClient) { + logger.warn("No wallet client found", "getWalletClient", walletClient); } + + return { walletClient }; +}; + +const getPublicClient = (config: Partial) => { + return { publicClient: config.publicClient }; }; diff --git a/sdk/src/utils/index.ts b/sdk/src/utils/index.ts index ffe0e6b4..f45fe40a 100644 --- a/sdk/src/utils/index.ts +++ b/sdk/src/utils/index.ts @@ -5,7 +5,6 @@ import { getFromIPFS } from "./fetchers"; import { formatHypercertData } from "./formatter"; import { logger } from "./logger"; import { handleSdkError, handleContractError } from "./errors"; -import { uploadMetadata, uploadAllowlist } from "./apis"; import { getClaimStoredDataFromTxHash } from "./txParser"; import { parseClaimOrFractionId } from "./parsing"; @@ -18,8 +17,6 @@ export { formatHypercertData, handleSdkError, handleContractError, - uploadMetadata, - uploadAllowlist, parseAllowListEntriesToMerkleTree, getClaimStoredDataFromTxHash, parseClaimOrFractionId, diff --git a/sdk/src/validator/index.ts b/sdk/src/validator/index.ts index 75f2150b..a624c8d8 100644 --- a/sdk/src/validator/index.ts +++ b/sdk/src/validator/index.ts @@ -15,6 +15,7 @@ import { } from "../types"; import { isAddress } from "viem"; +//TODO replace with ZOD const ajv = new Ajv({ allErrors: true }); // options can be passed, e.g. {allErrors: true} ajv.addSchema(metaDataSchema, "metaData"); ajv.addSchema(claimDataSchema, "claimData"); diff --git a/sdk/test/client.test.ts b/sdk/test/client.test.ts index ace28671..89e01f08 100644 --- a/sdk/test/client.test.ts +++ b/sdk/test/client.test.ts @@ -4,7 +4,7 @@ import { expect } from "chai"; import sinon from "sinon"; import { HypercertClient, HypercertMetadata, TransferRestrictions } from "../src"; -import { AllowlistEntry, ClientError, UnsupportedChainError } from "../src/types"; +import { AllowlistEntry, ClientError } from "../src/types"; import { publicClient, walletClient } from "./helpers"; describe("HypercertClient setup tests", () => { @@ -12,45 +12,30 @@ describe("HypercertClient setup tests", () => { sinon.restore(); }); - it("should be able to create a new read only instance when missing storage keys", () => { + it("should be able to create a new read only instance when missing wallet client", () => { const readOnlyClient = new HypercertClient({ - chain: { id: 11155111 }, + environment: "test", publicClient, }); expect(readOnlyClient).to.be.an.instanceOf(HypercertClient); - expect(readOnlyClient.readonly).to.be.true; + expect(readOnlyClient.readOnly).to.be.true; }); it("should be able to create a new instance", () => { const client = new HypercertClient({ - chain: { id: 11155111 }, + environment: "test", publicClient, walletClient, - nftStorageToken: "test", }); expect(client).to.be.an.instanceOf(HypercertClient); //TODO currently only publicClient added as a test, also add other flows - expect(client.readonly).to.be.false; - }); - - it("should throw an error when the chainId is not supported", () => { - const falseChainId = 1337; - try { - new HypercertClient({ chain: { id: falseChainId } }); - expect.fail("Should throw UnsupportedChainError"); - } catch (e) { - expect(e).to.be.instanceOf(UnsupportedChainError); - - const error = e as UnsupportedChainError; - expect(error.message).to.eq("No default config for chainId=1337 found in SDK"); - expect(Number(error.payload?.chainID)).to.eq(falseChainId); - } + expect(client.readOnly).to.be.false; }); it("should throw an error when executing write method in readonly mode", async () => { - const client = new HypercertClient({ chain: { id: 11155111 } }); + const client = new HypercertClient({ environment: "test", publicClient }); // mintClaim try { diff --git a/sdk/test/client/allowlist.minting.test.ts b/sdk/test/client/allowlist.minting.test.ts index 6322bb7f..234e7c34 100644 --- a/sdk/test/client/allowlist.minting.test.ts +++ b/sdk/test/client/allowlist.minting.test.ts @@ -1,10 +1,10 @@ -import { describe, it, beforeEach, afterAll } from "vitest"; +import { describe, it, beforeEach, afterAll, vi } from "vitest"; import chai, { expect } from "chai"; import assertionsCount from "chai-assertions-count"; import sinon from "sinon"; -import { HypercertClient, HypercertsStorage } from "../../src"; +import { HypercertClient } from "../../src"; import { MalformedDataError, MintingError, TransferRestrictions } from "../../src/types"; import { getAllowlist, getFormattedMetadata, publicClient, walletClient, mockDataSets } from "../helpers"; import { HypercertMinterAbi } from "@hypercerts-org/contracts"; @@ -12,17 +12,28 @@ import { encodeFunctionResult, isHex, stringToHex } from "viem"; chai.use(assertionsCount); +const mocks = vi.hoisted(() => { + return { + storeAllowList: vi.fn(), + storeMetadata: vi.fn(), + }; +}); + +vi.mock("../../src/__generated__/api", () => { + return { + storeAllowList: mocks.storeAllowList, + storeMetadata: mocks.storeMetadata, + }; +}); + describe("Allows for minting claims from an allowlist", () => { const { someData } = mockDataSets; - const metaDataStub = sinon.stub(HypercertsStorage.prototype, "storeMetadata"); - const allowListStub = sinon.stub(HypercertsStorage.prototype, "storeAllowList"); const wallet = walletClient; const userAddress = wallet.account?.address; const client = new HypercertClient({ - chain: { id: 11155111 }, + environment: "test", walletClient, publicClient, - nftStorageToken: "test", }); const readSpy = sinon.stub(publicClient, "readContract"); @@ -55,27 +66,31 @@ describe("Allows for minting claims from an allowlist", () => { writeSpy.resetBehavior(); writeSpy.resetHistory(); - metaDataStub.resetHistory(); - allowListStub.resetHistory(); + vi.resetAllMocks(); }); afterAll(() => { sinon.restore(); + vi.restoreAllMocks(); }); describe("validations", () => { it("should create an allowlist", async () => { + const client = new HypercertClient({ + environment: "test", + walletClient, + publicClient, + }); + const { allowlist, totalUnits } = getAllowlist(); const metaData = getFormattedMetadata(); - allowListStub.resolves(someData.cid); + mocks.storeAllowList.mockResolvedValue({ data: { cid: someData.cid } }); writeSpy = writeSpy.resolves(mintClaimResult); const hash = await client.createAllowlist(allowlist, metaData, totalUnits, TransferRestrictions.FromCreatorOnly); expect(isHex(hash)).to.be.true; - expect(metaDataStub.callCount).to.eq(1); - expect(allowListStub.callCount).to.eq(1); expect(readSpy.callCount).to.eq(0); expect(writeSpy.callCount).to.eq(1); }); @@ -85,7 +100,7 @@ describe("Allows for minting claims from an allowlist", () => { const { allowlist, totalUnits } = getAllowlist(); const metaData = getFormattedMetadata(); - allowListStub.throws( + mocks.storeAllowList.mockRejectedValue( new MalformedDataError("Allowlist validation failed", { units: "Total units in allowlist must match total units [expected: 11, got: 10]", }), @@ -105,8 +120,6 @@ describe("Allows for minting claims from an allowlist", () => { } expect(hash).to.be.undefined; - expect(metaDataStub.callCount).to.eq(0); - expect(allowListStub.callCount).to.eq(1); expect(readSpy.callCount).to.eq(0); expect(writeSpy.callCount).to.eq(0); }); @@ -120,7 +133,7 @@ describe("Allows for minting claims from an allowlist", () => { allowlist[0].units = 0n; - allowListStub.throws( + mocks.storeAllowList.mockRejectedValue( new MalformedDataError("Allowlist validation failed", { units: "Total units in allowlist must match total units [expected: 10, got: 9]", }), @@ -139,8 +152,6 @@ describe("Allows for minting claims from an allowlist", () => { } expect(hash).to.be.undefined; - expect(metaDataStub.callCount).to.eq(0); - expect(allowListStub.callCount).to.eq(1); expect(readSpy.callCount).to.eq(0); expect(writeSpy.callCount).to.eq(0); }); @@ -160,8 +171,6 @@ describe("Allows for minting claims from an allowlist", () => { ); expect(isHex(hash)).to.be.true; - expect(metaDataStub.callCount).to.eq(0); - expect(allowListStub.callCount).to.eq(0); expect(readSpy.callCount).to.eq(0); expect(writeSpy.callCount).to.eq(1); }); @@ -180,8 +189,6 @@ describe("Allows for minting claims from an allowlist", () => { ); expect(isHex(hash)).to.be.true; - expect(metaDataStub.callCount).to.eq(0); - expect(allowListStub.callCount).to.eq(0); expect(readSpy.callCount).to.eq(0); expect(writeSpy.callCount).to.eq(1); }); @@ -212,8 +219,6 @@ describe("Allows for minting claims from an allowlist", () => { } expect(hash).to.be.undefined; - expect(metaDataStub.callCount).to.eq(0); - expect(allowListStub.callCount).to.eq(0); expect(readSpy.callCount).to.eq(0); expect(writeSpy.callCount).to.eq(0); }); @@ -242,8 +247,6 @@ describe("Allows for minting claims from an allowlist", () => { ); expect(isHex(hash)).to.be.true; - expect(metaDataStub.callCount).to.eq(0); - expect(allowListStub.callCount).to.eq(0); expect(readSpy.callCount).to.eq(0); expect(writeSpy.callCount).to.eq(1); }); @@ -271,8 +274,6 @@ describe("Allows for minting claims from an allowlist", () => { ); expect(isHex(hash)).to.be.true; - expect(metaDataStub.callCount).to.eq(0); - expect(allowListStub.callCount).to.eq(0); expect(readSpy.callCount).to.eq(0); expect(writeSpy.callCount).to.eq(1); }); @@ -303,6 +304,7 @@ describe("Allows for minting claims from an allowlist", () => { [firstList.merkleTree.root as `0x${string}`, mockRoot], ); } catch (e) { + console.log(e); expect(e instanceof MintingError).to.be.true; const error = e as MintingError; @@ -314,8 +316,6 @@ describe("Allows for minting claims from an allowlist", () => { } expect(hash).to.be.undefined; - expect(metaDataStub.callCount).to.eq(0); - expect(allowListStub.callCount).to.eq(0); expect(readSpy.callCount).to.eq(0); expect(writeSpy.callCount).to.eq(0); }); diff --git a/sdk/test/client/burn.test.ts b/sdk/test/client/burn.test.ts index 53d49cf0..8f5316c9 100644 --- a/sdk/test/client/burn.test.ts +++ b/sdk/test/client/burn.test.ts @@ -17,10 +17,9 @@ describe("burn fraction tokens in HypercertClient", () => { const wallet = walletClient; const userAddress = wallet.account?.address; const client = new HypercertClient({ - chain: { id: 11155111 }, + environment: "test", walletClient, publicClient, - nftStorageToken: "test", }); const fractionId = 9868188640707215440437863615521278132232n; @@ -47,7 +46,7 @@ describe("burn fraction tokens in HypercertClient", () => { writeSpy = writeSpy.resolves(toHex(420)); - expect(client.readonly).to.be.false; + expect(client.readOnly).to.be.false; const hash = await client.burnClaimFraction(fractionId); @@ -61,7 +60,7 @@ describe("burn fraction tokens in HypercertClient", () => { chai.Assertion.expectAssertions(6); readSpy = readSpy.resolves(faker.finance.ethereumAddress()); - expect(client.readonly).to.be.false; + expect(client.readOnly).to.be.false; let hash; try { @@ -85,7 +84,7 @@ describe("burn fraction tokens in HypercertClient", () => { writeSpy = writeSpy.resolves(toHex(420)); - expect(client.readonly).to.be.false; + expect(client.readOnly).to.be.false; let noHash; diff --git a/sdk/test/client/minting.test.ts b/sdk/test/client/minting.test.ts index c6cd4883..9ba2f47b 100644 --- a/sdk/test/client/minting.test.ts +++ b/sdk/test/client/minting.test.ts @@ -1,11 +1,11 @@ -import { describe, it, beforeEach, afterAll, beforeAll } from "vitest"; +import { describe, it, beforeEach, afterAll, beforeAll, vi } from "vitest"; import chai, { expect } from "chai"; import assertionsCount from "chai-assertions-count"; import sinon from "sinon"; import { encodeFunctionResult, isHex, parseEther } from "viem"; import { HypercertClient } from "../../src/client"; -import { HypercertMetadata, HypercertsStorage, formatHypercertData } from "../../src"; +import { HypercertMetadata, formatHypercertData } from "../../src"; import { MalformedDataError, ContractError } from "../../src/types/errors"; import { TransferRestrictions } from "../../src/types/hypercerts"; import { getRawInputData, publicClient, walletClient, testClient } from "../helpers"; @@ -17,16 +17,27 @@ import { CIDString } from "nft.storage"; chai.use(assertionsCount); +const mocks = vi.hoisted(() => { + return { + storeAllowList: vi.fn(), + storeMetadata: vi.fn(), + }; +}); + +vi.mock("../../src/__generated__/api", () => { + return { + storeAllowList: mocks.storeAllowList, + storeMetadata: mocks.storeMetadata, + }; +}); + describe("mintClaim in HypercertClient", () => { const mockCorrectMetadataCid = "testCID1234fkreigdm2flneb4khd7eixodagst5nrndptgezrjux7gohxcngjn67x6u" as CIDString; - const storeMetadataMock = sinon.stub(HypercertsStorage.prototype, "storeMetadata"); - const client = new HypercertClient({ - chain: { id: 11155111 }, + environment: "test", walletClient, publicClient, - nftStorageToken: "test", }); const readSpy = sinon.stub(publicClient, "readContract"); @@ -48,21 +59,21 @@ describe("mintClaim in HypercertClient", () => { writeSpy.resetBehavior(); writeSpy.resetHistory(); - storeMetadataMock.resetBehavior(); - storeMetadataMock.resetHistory(); + vi.resetAllMocks(); }); afterAll(() => { sinon.restore(); + vi.restoreAllMocks(); }); it("mints a hypercerts", async () => { - expect(client.readonly).to.be.false; + expect(client.readOnly).to.be.false; const rawData = getRawInputData(); const { data: formattedData } = formatHypercertData(rawData); - storeMetadataMock.resolves(mockCorrectMetadataCid); + mocks.storeMetadata.mockResolvedValue({ data: { cid: { mockCorrectMetadataCid } } }); writeSpy = writeSpy.resolves(mintClaimResult); // eslint-disable-next-line @typescript-eslint/no-non-null-assertion @@ -71,12 +82,12 @@ describe("mintClaim in HypercertClient", () => { expect(isHex(hash)).to.be.true; expect(readSpy.callCount).to.equal(0); expect(writeSpy.callCount).to.equal(1); - expect(storeMetadataMock.callCount).to.equal(1); }); it("throws on malformed metadata", async () => { - storeMetadataMock.callThrough(); try { + mocks.storeMetadata.mockRejectedValue(new MalformedDataError("Invalid metadata.")); + await client.mintClaim({} as HypercertMetadata, 1000n, TransferRestrictions.AllowAll); expect.fail("Should throw MalformedDataError"); } catch (e) { @@ -86,7 +97,6 @@ describe("mintClaim in HypercertClient", () => { expect(error.message).to.equal("Invalid metadata."); } expect(writeSpy.callCount).to.equal(0); - expect(storeMetadataMock.callCount).to.equal(1); }); it("mints a hypercerts with override params", async () => { @@ -94,7 +104,7 @@ describe("mintClaim in HypercertClient", () => { const { data: formattedData } = formatHypercertData(rawData); - storeMetadataMock.resolves(mockCorrectMetadataCid); + mocks.storeMetadata.mockResolvedValue({ data: { cid: mockCorrectMetadataCid } }); writeSpy = writeSpy.resolves(mintClaimResult); let hash; @@ -117,6 +127,5 @@ describe("mintClaim in HypercertClient", () => { expect(isHex(hash)).to.be.true; expect(readSpy.callCount).to.equal(0); expect(writeSpy.callCount).to.equal(1); - expect(storeMetadataMock.callCount).to.equal(2); }); }); diff --git a/sdk/test/client/split.merge.test.ts b/sdk/test/client/split.merge.test.ts index e517f51f..d92ffbcb 100644 --- a/sdk/test/client/split.merge.test.ts +++ b/sdk/test/client/split.merge.test.ts @@ -21,10 +21,9 @@ describe("split and merge", () => { let writeSpy = sinon.stub(walletClient, "writeContract"); const client = new HypercertClient({ - chain: { id: 11155111 }, + environment: "test", walletClient, publicClient, - nftStorageToken: "test", }); const fractionId = 9868188640707215440437863615521278132232n; @@ -48,7 +47,7 @@ describe("split and merge", () => { readSpy = readSpy.onFirstCall().resolves(userAddress).onSecondCall().resolves(300n); writeSpy = writeSpy.resolves(toHex(420)); - expect(client.readonly).to.be.false; + expect(client.readOnly).to.be.false; const hash = await client.splitFractionUnits(fractionId, [100n, 200n]); @@ -72,7 +71,7 @@ describe("split and merge", () => { writeSpy = writeSpy.resolves(toHex(420)); - expect(client.readonly).to.be.false; + expect(client.readOnly).to.be.false; try { await client.splitFractionUnits(fractionId, [100n, 200n], { gasLimit: "FALSE_VALUE" as unknown as bigint }); @@ -100,7 +99,7 @@ describe("split and merge", () => { .onCall(3) .resolves(300n); - expect(client.readonly).to.be.false; + expect(client.readOnly).to.be.false; try { await client.splitFractionUnits(fractionId, [100n, 777n]); @@ -122,7 +121,7 @@ describe("split and merge", () => { chai.Assertion.expectExpects(4); readSpy = readSpy.onFirstCall().resolves(faker.finance.ethereumAddress()).onSecondCall().resolves(300n); // unitsOf; // ownerOf - expect(client.readonly).to.be.false; + expect(client.readOnly).to.be.false; try { await client.splitFractionUnits(fractionId, [100n, 200n]); @@ -162,7 +161,7 @@ describe("split and merge", () => { writeSpy = writeSpy.resolves(toHex(420)); - expect(client.readonly).to.be.false; + expect(client.readOnly).to.be.false; const hash = await client.mergeFractionUnits([fractionId, fractionId + 1n]); @@ -179,7 +178,7 @@ describe("split and merge", () => { writeSpy = writeSpy.resolves(toHex(420)); - expect(client.readonly).to.be.false; + expect(client.readOnly).to.be.false; let hash; @@ -210,7 +209,7 @@ describe("split and merge", () => { chai.Assertion.expectExpects(3); readSpy = readSpy.onFirstCall().resolves(userAddress).onSecondCall().resolves(faker.finance.ethereumAddress()); // ownerOf - expect(client.readonly).to.be.false; + expect(client.readOnly).to.be.false; let hash; try { diff --git a/sdk/test/evaluations/evaluator.test.ts b/sdk/test/evaluations/evaluator.test.ts index bd0c50ee..5da770b7 100644 --- a/sdk/test/evaluations/evaluator.test.ts +++ b/sdk/test/evaluations/evaluator.test.ts @@ -10,11 +10,10 @@ import { getEvaluationData, publicClient, walletClient } from "../helpers"; chai.use(assertionsCount); -describe("HypercertEvaluator", () => { +describe.skip("HypercertEvaluator", () => { const signer = walletClient.account; const evaluator = new HypercertEvaluator({ - chain: { id: 11155111 }, - easContractAddress: "0xC2679fBD37d54388Ce493F1DB75320D236e1815e", + environment: "test", publicClient, }); @@ -72,8 +71,7 @@ describe("HypercertEvaluator", () => { const evaluation: HypercertEvaluationSchema = getEvaluationData({ creator: signer?.address }); const readonlyEvaluator = new HypercertEvaluator({ - chain: { id: 11155111 }, - easContractAddress: "0xC2679fBD37d54388Ce493F1DB75320D236e1815e", + environment: "test", publicClient, }); diff --git a/sdk/test/helpers.ts b/sdk/test/helpers.ts index a35aedb1..0d8091d9 100644 --- a/sdk/test/helpers.ts +++ b/sdk/test/helpers.ts @@ -32,7 +32,7 @@ export const mockDataSets = { export const pool = Number(process.env.VITEST_POOL_ID ?? 1); export const anvil = { ...foundry, // We are using a mainnet fork for testing. - id: foundry.id, + id: 11155111, rpcUrls: { // These rpc urls are automatically used in the transports. default: { diff --git a/sdk/test/indexer.test.ts b/sdk/test/indexer.test.ts index 784e2d54..9a169975 100644 --- a/sdk/test/indexer.test.ts +++ b/sdk/test/indexer.test.ts @@ -1,21 +1,18 @@ import { describe, it, expect } from "vitest"; import { HypercertIndexer } from "../src/indexer"; -import { DEPLOYMENTS } from "../src/constants"; +import { Client } from "@urql/core"; describe("HypercertsIndexer", () => { it("should only initialize with test environments", async () => { - const environments = HypercertIndexer.getDeploymentsForEnvironment("test"); - expect(environments.every(([_, deployment]) => deployment.isTestnet)).toBe(true); + const client = new HypercertIndexer({ graphUrl: "https://example.com", environment: "test" }).getGraphClient(); + + expect(client).toBeInstanceOf(Client); }); it("should only initialize with production environments", async () => { - const environments = HypercertIndexer.getDeploymentsForEnvironment("production"); - expect(environments.every(([_, deployment]) => !deployment.isTestnet)).toBe(true); - }); + const client = new HypercertIndexer({ graphUrl: "https://example.com", environment: "all" }).getGraphClient(); - it("should only initialize with all environments", async () => { - const environments = HypercertIndexer.getDeploymentsForEnvironment("all"); - expect(environments.length).toEqual(Object.keys(DEPLOYMENTS).length); + expect(client).toBeInstanceOf(Client); }); }); diff --git a/sdk/test/indexer/queries.test.ts b/sdk/test/indexer/queries.test.ts index 764b9c01..1dbee0f0 100644 --- a/sdk/test/indexer/queries.test.ts +++ b/sdk/test/indexer/queries.test.ts @@ -12,7 +12,7 @@ describe("HypercertIndexer", () => { let indexer: HypercertIndexer; beforeEach(() => { - indexer = new HypercertIndexer({ indexerEnvironment: "test" }); + indexer = new HypercertIndexer({ graphUrl: "http://exampe.com", environment: "test" }); }); afterEach(() => { @@ -26,7 +26,16 @@ describe("HypercertIndexer", () => { it("should call graphClient.hypercertsByOwner with the correct parameters", async () => { const owner = "0x1234567890123456789012345678901234567890"; const params = defaultQueryParams; - const mockResponse = { data: [] }; + const mockResponse = { + hypercerts: { + count: 1, + data: [ + { + hypercert_id: "1", + }, + ], + }, + }; const spy = vi.spyOn(indexer, "hypercertsByOwner").mockResolvedValue(mockResponse); @@ -34,12 +43,21 @@ describe("HypercertIndexer", () => { expect(spy).toHaveBeenCalledWith({ owner, ...params }); expect(spy).toHaveBeenCalledTimes(1); - expect(result).toEqual({ data: [] }); + expect(result).toEqual(mockResponse); }); it("should call graphClient.hypercertById with the correct parameters", async () => { const id = "0x1234567890123456789012345678901234567890123456789012345678901234"; - const mockResponse = { data: null }; + const mockResponse = { + hypercerts: { + count: 1, + data: [ + { + hypercert_id: "1", + }, + ], + }, + }; const spy = vi.spyOn(indexer, "hypercertById").mockResolvedValue(mockResponse); @@ -52,7 +70,16 @@ describe("HypercertIndexer", () => { it("should call graphClient.recentHypercerts with the correct parameters", async () => { const params = defaultQueryParams; - const mockResponse = { data: [] }; + const mockResponse = { + hypercerts: { + count: 1, + data: [ + { + hypercert_id: "1", + }, + ], + }, + }; const spy = vi.spyOn(indexer, "recentHypercerts").mockResolvedValue(mockResponse); @@ -66,7 +93,16 @@ describe("HypercertIndexer", () => { it("should call graphClient.FractionByOwner with the correct parameters", async () => { const owner = "0x1234567890123456789012345678901234567890"; const params = defaultQueryParams; - const mockResponse = { data: [] }; + const mockResponse = { + fractions: { + count: 1, + data: [ + { + hypercert_id: "1", + }, + ], + }, + }; const spy = vi.spyOn(indexer, "fractionsByOwner").mockResolvedValue(mockResponse); @@ -80,7 +116,16 @@ describe("HypercertIndexer", () => { it("should call graphClient.fractionsByHypercert with the correct parameters", async () => { const hypercertId = "0x1234567890123456789012345678901234567890123456789012345678901234"; const params = defaultQueryParams; - const mockResponse = { data: [] }; + const mockResponse = { + hypercerts: { + count: 1, + data: [ + { + hypercert_id: "1", + }, + ], + }, + }; const spy = vi.spyOn(indexer, "fractionsByHypercert").mockResolvedValue(mockResponse); diff --git a/sdk/test/storage.test.ts b/sdk/test/storage.test.ts index 9f761bfc..8fa1e082 100644 --- a/sdk/test/storage.test.ts +++ b/sdk/test/storage.test.ts @@ -2,23 +2,21 @@ import { describe, it, afterAll } from "vitest"; import { expect } from "chai"; -import { HypercertsStorage } from "../src/storage"; import { reloadEnv } from "./setup-env"; +import { getStorage } from "src/storage"; describe("HypercertsStorage", () => { afterAll(() => { reloadEnv(); }); - it("should be able to create a new instance without valid storage keys", () => { - const storage = new HypercertsStorage(); + it("should be able to create a new instance based on environment", () => { + const testStorage = getStorage({ environment: "test" }); - expect(storage).to.be.an.instanceOf(HypercertsStorage); - }); + expect(testStorage).to.contain.keys("storeMetadata", "storeAllowlist"); - it("should be able to create a new instance with valid storage keys", () => { - const storage = new HypercertsStorage(); + const productionStorage = getStorage({ environment: "production" }); - expect(storage).to.be.an.instanceOf(HypercertsStorage); + expect(productionStorage).to.contain.keys("storeMetadata", "storeAllowlist"); }); }); diff --git a/sdk/test/storage/storeAllowList.test.ts b/sdk/test/storage/storeAllowList.test.ts index 4c385293..ae83e18d 100644 --- a/sdk/test/storage/storeAllowList.test.ts +++ b/sdk/test/storage/storeAllowList.test.ts @@ -1,28 +1,27 @@ import { describe, it, afterEach, afterAll, vi, expect } from "vitest"; -import { HypercertsStorage } from "../../src/storage"; -import { MalformedDataError } from "../../src/types/errors"; import { mockDataSets } from "../helpers"; import sinon from "sinon"; import { faker } from "@faker-js/faker"; -import { AllowlistEntry } from "src"; +import { getStorage } from "../../src/storage"; +import { StandardMerkleTree } from "@openzeppelin/merkle-tree"; const mocks = vi.hoisted(() => { return { - uploadAllowlist: vi.fn(), + storeAllowList: vi.fn(), }; }); -vi.mock("../../src/utils/apis", () => { +vi.mock("../../src/__generated__/api", () => { return { - uploadAllowlist: mocks.uploadAllowlist, + storeAllowList: mocks.storeAllowList, }; }); describe("Storage - store allowlist", () => { const { someData } = mockDataSets; - const storage = new HypercertsStorage(); + const storage = getStorage({ environment: "test" }); afterEach(() => { vi.clearAllMocks(); @@ -42,30 +41,14 @@ describe("Storage - store allowlist", () => { }, ]; - mocks.uploadAllowlist.mockResolvedValue({ cid: someData.cid }); - const res = await storage.storeAllowList(allowList, 100n); - expect(res).to.eq(someData.cid); - expect(mocks.uploadAllowlist).toHaveBeenCalledTimes(1); - }); - - it("Throws when trying to store incorrect allowList", async () => { - const allowList = [ - { - address: faker.finance.ethereumAddress(), - units: 50n, - }, - ]; - - // storeData - try { - await storage.storeAllowList(allowList as unknown as AllowlistEntry[], 100n); - } catch (e) { - expect(e).to.be.an.instanceOf(MalformedDataError); - - const error = e as MalformedDataError; - expect(error.message).to.eq("Invalid allowList."); - } + const tree = StandardMerkleTree.of( + allowList.map((p) => [p.address, p.units.toString()]), + ["address", "uint256"], + ); - expect(mocks.uploadAllowlist).toHaveBeenCalledTimes(0); + mocks.storeAllowList.mockResolvedValue({ cid: someData.cid }); + const res = await storage.storeAllowlist({ allowList: JSON.stringify(tree.dump()), totalUnits: "100" }); + expect(res).to.deep.eq({ cid: someData.cid }); + expect(mocks.storeAllowList).toHaveBeenCalledTimes(1); }); }); diff --git a/sdk/test/storage/storeMetadata.test.ts b/sdk/test/storage/storeMetadata.test.ts index 336e2072..21b63a94 100644 --- a/sdk/test/storage/storeMetadata.test.ts +++ b/sdk/test/storage/storeMetadata.test.ts @@ -1,26 +1,25 @@ import { describe, it, afterEach, afterAll, vi, expect } from "vitest"; -import { HypercertsStorage } from "../../src/storage"; -import { MalformedDataError } from "../../src/types/errors"; import { mockDataSets } from "../helpers"; import sinon from "sinon"; +import { getStorage } from "../../src/storage"; const mocks = vi.hoisted(() => { return { - uploadMetadata: vi.fn(), + storeMetadata: vi.fn(), }; }); -vi.mock("../../src/utils/apis", () => { +vi.mock("../../src/__generated__/api", () => { return { - uploadMetadata: mocks.uploadMetadata, + storeMetadata: mocks.storeMetadata, }; }); describe("Storage - store metadata", () => { const { hypercertMetadata } = mockDataSets; - const storage = new HypercertsStorage(); + const storage = getStorage({ environment: "test" }); afterEach(() => { vi.clearAllMocks(); @@ -33,28 +32,9 @@ describe("Storage - store metadata", () => { }); it("Store metadata", async () => { - mocks.uploadMetadata.mockResolvedValue({ cid: hypercertMetadata.cid }); + mocks.storeMetadata.mockResolvedValue({ cid: hypercertMetadata.cid }); const res = await storage.storeMetadata(hypercertMetadata.data); - expect(res).to.eq(hypercertMetadata.cid); - expect(mocks.uploadMetadata).toHaveBeenCalledTimes(1); - }); - - it("Throws when trying to store incorrect metadata", async () => { - const _metadata = { - ...hypercertMetadata.data, - name: undefined, - }; - - // storeData - try { - await storage.storeMetadata(_metadata); - } catch (e) { - expect(e).to.be.an.instanceOf(MalformedDataError); - - const error = e as MalformedDataError; - expect(error.message).to.eq("Invalid metadata."); - } - - expect(mocks.uploadMetadata).toHaveBeenCalledTimes(0); + expect(res).to.deep.eq({ cid: hypercertMetadata.cid }); + expect(mocks.storeMetadata).toHaveBeenCalledTimes(1); }); }); diff --git a/sdk/test/utils/config.test.ts b/sdk/test/utils/config.test.ts index f9d21fce..cfbf62a9 100644 --- a/sdk/test/utils/config.test.ts +++ b/sdk/test/utils/config.test.ts @@ -4,11 +4,11 @@ import chai, { expect } from "chai"; import chaiSubset from "chai-subset"; import sinon from "sinon"; -import { ConfigurationError, HypercertClientConfig, InvalidOrMissingError } from "../../src/types"; +import { HypercertClientConfig } from "../../src/types"; import { getConfig } from "../../src/utils/config"; import { reloadEnv } from "../../test/setup-env"; import { walletClient, publicClient } from "../helpers"; -import { DEFAULT_INDEXER_ENVIRONMENT } from "../../src/constants"; +import { DEFAULT_ENVIRONMENT } from "../../src/constants"; chai.use(chaiSubset); @@ -18,49 +18,16 @@ describe("Config: graphUrl", () => { }); it("should return the default indexer environment when no overrides are specified", () => { - const result = getConfig({ chain: { id: 11155111 } }); - expect(result.indexerEnvironment).to.equal(DEFAULT_INDEXER_ENVIRONMENT); + const result = getConfig({}); + expect(result.environment).to.equal(DEFAULT_ENVIRONMENT); }); it("should return the config specified by overrides", () => { const overrides: Partial = { - chain: { id: 11155111 }, - unsafeForceOverrideConfig: true, + environment: "production", }; - const result = getConfig(overrides); - expect(result.chain?.id).to.equal(overrides.chain?.id); - }); - - it("should throw an error when the graph URL specified by overrides is invalid", () => { - const overrides: Partial = { - chain: { id: 11155111 }, - unsafeForceOverrideConfig: true, - }; - - try { - getConfig(overrides); - } catch (e) { - expect(e instanceof ConfigurationError).to.be.true; - const error = e as ConfigurationError; - expect(error.message).to.eq("Invalid graph URL"); - } - }); - - it("should throw an error when the graph URL specified by overrides is missing", () => { - const overrides: Partial = { - chain: { id: 11155111 }, - unsafeForceOverrideConfig: true, - }; - - try { - getConfig(overrides); - } catch (e) { - expect(e instanceof InvalidOrMissingError).to.be.true; - const error = e as InvalidOrMissingError; - expect(error.message).to.eq( - "attempted to override with chainId=11155111, but requires chainName, graphUrl, and contractAddress to be set", - ); - } + const result = getConfig({ config: overrides }); + expect(result.readOnly).to.be.true; }); }); @@ -72,12 +39,11 @@ describe("Config: getPublicClient", () => { }); it("should return the operator specified by overrides", () => { - const overrides: Partial = { - chain: { id: 11155111 }, + const config: Partial = { publicClient, }; - const result = getConfig(overrides); - expect(result.publicClient).to.equal(overrides.publicClient); + const result = getConfig({ config }); + expect(result.publicClient).to.equal(config.publicClient); }); }); @@ -89,11 +55,10 @@ describe("Config: getWalletClient", () => { }); it("should return the operator specified by overrides", () => { - const overrides: Partial = { - chain: { id: 11155111 }, + const config: Partial = { walletClient, }; - const result = getConfig(overrides); - expect(result.walletClient).to.equal(overrides.walletClient); + const result = getConfig({ config }); + expect(result.walletClient).to.equal(config.walletClient); }); }); diff --git a/sdk/test/utils/errors.test.ts b/sdk/test/utils/errors.test.ts index 1f9a8955..2140d514 100644 --- a/sdk/test/utils/errors.test.ts +++ b/sdk/test/utils/errors.test.ts @@ -1,4 +1,4 @@ -import { describe, it, beforeEach, afterAll, beforeAll } from "vitest"; +import { describe, it, beforeEach, afterAll, beforeAll, vi } from "vitest"; import chai from "chai"; import assertionsCount from "chai-assertions-count"; import sinon from "sinon"; @@ -8,13 +8,27 @@ import { handleSdkError } from "../../src/utils/errors"; import { getRawInputData, publicClient, walletClient, testClient } from "../helpers"; -import { HypercertClient, HypercertMinterAbi, HypercertsStorage, TransferRestrictions, formatHypercertData } from "src"; +import { HypercertClient, HypercertMinterAbi, TransferRestrictions, formatHypercertData } from "src"; import { parseEther, encodeErrorResult } from "viem"; chai.use(assertionsCount); const expect = chai.expect; +const mocks = vi.hoisted(() => { + return { + storeAllowList: vi.fn(), + storeMetadata: vi.fn(), + }; +}); + +vi.mock("../../src/__generated__/api", () => { + return { + storeAllowList: mocks.storeAllowList, + storeMetadata: mocks.storeMetadata, + }; +}); + describe("SDK Error handler", () => { it("handles SDK errors", () => { expect(handleSdkError(new FetchError("testing FetchError", { url: "http://badexample.com" }))).to.be.undefined; @@ -28,13 +42,10 @@ describe("SDK Error handler", () => { describe("Contract Error handler", () => { const mockCorrectMetadataCid = "testCID1234fkreigdm2flneb4khd7eixodagst5nrndptgezrjux7gohxcngjn67x6u"; - const storeMetadataStub = sinon.stub(HypercertsStorage.prototype, "storeMetadata"); - const client = new HypercertClient({ - chain: { id: 11155111 }, + environment: "test", walletClient, publicClient, - nftStorageToken: "test", }); const readSpy = sinon.stub(publicClient, "readContract"); @@ -49,8 +60,7 @@ describe("Contract Error handler", () => { chai.Assertion.resetAssertsCheck(); writeSpy.resetBehavior(); writeSpy.resetHistory(); - - storeMetadataStub.resetHistory(); + vi.resetAllMocks(); }); afterAll(() => { @@ -58,7 +68,7 @@ describe("Contract Error handler", () => { }); it("handles throw on mintClaim", async () => { - expect(client.readonly).to.be.false; + expect(client.readOnly).to.be.false; const rawData = getRawInputData(); const { data: formattedData } = formatHypercertData(rawData); @@ -70,7 +80,7 @@ describe("Contract Error handler", () => { }); writeSpy.resolves(value); - storeMetadataStub.resolves(mockCorrectMetadataCid); + mocks.storeMetadata.mockResolvedValue({ data: { cid: mockCorrectMetadataCid } }); try { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion diff --git a/sdk/vitest.config.mts b/sdk/vitest.config.mts index 7c5a8b32..1df380e4 100644 --- a/sdk/vitest.config.mts +++ b/sdk/vitest.config.mts @@ -1,8 +1,9 @@ -import { defineConfig } from "vitest/config"; +import { defineConfig, defaultExclude } from "vitest/config"; export default defineConfig({ test: { globalSetup: "./test/setup-env.ts", watch: false, + exclude: [...defaultExclude, "./lib/**/*"], }, }); diff --git a/sdk/vitest.config.ts b/sdk/vitest.config.ts index 8e1d367d..217001f7 100644 --- a/sdk/vitest.config.ts +++ b/sdk/vitest.config.ts @@ -1,7 +1,8 @@ -import { defineConfig } from "vitest/config"; +import { defineConfig, defaultExclude } from "vitest/config"; export default defineConfig({ test: { globalSetup: "./test/setup-env.ts", + exclude: [...defaultExclude, "./lib/**/*"], }, });