diff --git a/.eslintrc.cjs b/.eslintrc.cjs index a989111c..d06189be 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -34,6 +34,7 @@ module.exports = { }, ignorePatterns: [ '*.config.*', + 'tsup*', 'node_modules', 'dist', 'build', diff --git a/buf.gen.yaml b/buf.gen.yaml index 160a604a..a4196a74 100644 --- a/buf.gen.yaml +++ b/buf.gen.yaml @@ -1,11 +1,8 @@ version: v1 plugins: - plugin: es - opt: target=ts+js+dts # ,import_extension=none + opt: target=ts+js+dts out: src/lib/codegen - plugin: connect-es - opt: target=ts+js+dts # ,import_extension=none - out: src/lib/codegen - - name: connect-query - opt: target=ts+js+dts # ,import_extension=none + opt: target=ts+js+dts out: src/lib/codegen diff --git a/package.json b/package.json index e0eb4623..46e1363e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@valorem-labs-inc/sdk", - "version": "0.0.1", + "version": "0.0.2-alpha.0", "repository": { "type": "git", "url": "https://github.com/valorem-labs-inc/typescript-sdk.git" @@ -10,18 +10,23 @@ "type": "module", "exports": { ".": { - "types": "./dist/index.d.ts", - "default": "./dist/index.js" + "types": "./dist/_esm/index.d.ts", + "import": "./dist/_esm/index.js", + "default": "./dist/_cjs/index.js" }, "./package.json": "./package.json" }, - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "./dist/_cjs/index.js", + "module": "./dist/_esm/index.js", + "types": "./dist/_esm/index.d.ts", + "typings": "./dist/_esm/index.d.ts", "files": [ - "/dist" + "./dist" ], "scripts": { - "build": "pnpm clean && pnpm codegen && pnpm tsup", + "build": "pnpm clean && pnpm codegen && pnpm build:cjs && pnpm build:esm", + "build:cjs": "pnpm tsup --config tsup.cjs.ts", + "build:esm": "pnpm tsup --config tsup.esm.ts", "clean": "rm -rf ./dist", "codegen": "rm -rf ./src/lib/codegen && npx buf generate", "format": "prettier --write \"**/*.{ts,tsx,md,json}\"", @@ -29,21 +34,20 @@ "lint": "eslint .", "lint:fix": "eslint . --fix", "prepare": "git submodule update --init --recursive", - "prepublish": "pnpm build", "test": "vitest run --coverage" }, "prettier": "@vercel/style-guide/prettier", "dependencies": { "@bufbuild/buf": "^1.27.0", - "@bufbuild/protobuf": "^1.3.3", + "@bufbuild/protobuf": "^1.4.0", "@connectrpc/connect": "^1.1.2", - "@connectrpc/connect-node": "^1.1.2", "@wagmi/core": "^1.4.4" }, "devDependencies": { - "@bufbuild/protoc-gen-es": "^1.3.3", + "@bufbuild/protoc-gen-es": "^1.4.0", + "@connectrpc/connect-node": "^1.1.2", + "@connectrpc/connect-web": "^1.1.2", "@connectrpc/protoc-gen-connect-es": "^1.1.2", - "@connectrpc/protoc-gen-connect-query": "^0.5.3", "@types/node": "^20.8.7", "@vercel/style-guide": "^5.0.1", "@vitest/coverage-v8": "^0.34.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 78fa2099..7aeb924f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,46 +9,46 @@ dependencies: specifier: ^1.27.0 version: 1.27.1 '@bufbuild/protobuf': - specifier: ^1.3.3 - version: 1.3.3 + specifier: ^1.4.0 + version: 1.4.0 '@connectrpc/connect': specifier: ^1.1.2 - version: 1.1.2(@bufbuild/protobuf@1.3.3) - '@connectrpc/connect-node': - specifier: ^1.1.2 - version: 1.1.2(@bufbuild/protobuf@1.3.3)(@connectrpc/connect@1.1.2) + version: 1.1.2(@bufbuild/protobuf@1.4.0) '@wagmi/core': specifier: ^1.4.4 - version: 1.4.4(react@18.2.0)(typescript@5.2.2)(viem@1.16.6) + version: 1.4.5(react@18.2.0)(typescript@5.2.2)(viem@1.16.6) devDependencies: '@bufbuild/protoc-gen-es': - specifier: ^1.3.3 - version: 1.3.3(@bufbuild/protobuf@1.3.3) + specifier: ^1.4.0 + version: 1.4.0(@bufbuild/protobuf@1.4.0) + '@connectrpc/connect-node': + specifier: ^1.1.2 + version: 1.1.2(@bufbuild/protobuf@1.4.0)(@connectrpc/connect@1.1.2) + '@connectrpc/connect-web': + specifier: ^1.1.2 + version: 1.1.2(@bufbuild/protobuf@1.4.0)(@connectrpc/connect@1.1.2) '@connectrpc/protoc-gen-connect-es': specifier: ^1.1.2 - version: 1.1.2(@bufbuild/protoc-gen-es@1.3.3)(@connectrpc/connect@1.1.2) - '@connectrpc/protoc-gen-connect-query': - specifier: ^0.5.3 - version: 0.5.3(@bufbuild/protoc-gen-es@1.3.3) + version: 1.1.2(@bufbuild/protoc-gen-es@1.4.0)(@connectrpc/connect@1.1.2) '@types/node': specifier: ^20.8.7 - version: 20.8.7 + version: 20.8.8 '@vercel/style-guide': specifier: ^5.0.1 - version: 5.0.1(eslint@8.51.0)(prettier@3.0.3)(typescript@5.2.2) + version: 5.0.1(eslint@8.52.0)(prettier@3.0.3)(typescript@5.2.2) '@vitest/coverage-v8': specifier: ^0.34.6 version: 0.34.6(vitest@0.34.6) eslint: specifier: ^8.51.0 - version: 8.51.0 + version: 8.52.0 prettier: specifier: ^3.0.3 version: 3.0.3 ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@20.8.7)(typescript@5.2.2) + version: 10.9.1(@types/node@20.8.8)(typescript@5.2.2) tsup: specifier: ^7.2.0 version: 7.2.0(ts-node@10.9.1)(typescript@5.2.2) @@ -122,7 +122,7 @@ packages: - supports-color dev: true - /@babel/eslint-parser@7.22.15(@babel/core@7.23.2)(eslint@8.51.0): + /@babel/eslint-parser@7.22.15(@babel/core@7.23.2)(eslint@8.52.0): resolution: {integrity: sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: @@ -131,7 +131,7 @@ packages: dependencies: '@babel/core': 7.23.2 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.51.0 + eslint: 8.52.0 eslint-visitor-keys: 2.1.0 semver: 6.3.1 dev: true @@ -371,19 +371,23 @@ packages: /@bufbuild/protobuf@1.3.3: resolution: {integrity: sha512-AoHSiIpTFF97SQgmQni4c+Tyr0CDhkaRaR2qGEJTEbauqQwLRpLrd9yVv//wVHOSxr/b4FJcL54VchhY6710xA==} + dev: true + + /@bufbuild/protobuf@1.4.0: + resolution: {integrity: sha512-urGGNsMG8YIyuhsjLFkx41CkAILFnUz9vHaUWvzOnzeoS2DykhSkUEpqTbf9cxG0Vzjmk2rl5ttmLwE0rbQyow==} - /@bufbuild/protoc-gen-es@1.3.3(@bufbuild/protobuf@1.3.3): - resolution: {integrity: sha512-waqpvdFyqcrrmoAW9c8VCtDmT4+NYDQg/W8DAsMC2/+rXKGQYy3YbxobOuwVm3g/MJC1Gvv6ON/arxq4gYHXYw==} + /@bufbuild/protoc-gen-es@1.4.0(@bufbuild/protobuf@1.4.0): + resolution: {integrity: sha512-U/nKkf6v39EjIp2I5i2D/MpMIyxvcpQV21C8DIuYCZJe5EMBgr5Tes3fHXWp8C72e8pEN+X9RhH/2NF+XqJivQ==} engines: {node: '>=14'} hasBin: true peerDependencies: - '@bufbuild/protobuf': 1.3.3 + '@bufbuild/protobuf': 1.4.0 peerDependenciesMeta: '@bufbuild/protobuf': optional: true dependencies: - '@bufbuild/protobuf': 1.3.3 - '@bufbuild/protoplugin': 1.3.3 + '@bufbuild/protobuf': 1.4.0 + '@bufbuild/protoplugin': 1.4.0 transitivePeerDependencies: - supports-color dev: true @@ -398,12 +402,22 @@ packages: - supports-color dev: true + /@bufbuild/protoplugin@1.4.0: + resolution: {integrity: sha512-TS+x4qNJOClBgnX2DTqv4miqDaXXWr1L97PX1ps6uRzNzbXzMBmlSBPmwHf45F8xfviZlXNXLEsSnYu/8rAI4w==} + dependencies: + '@bufbuild/protobuf': 1.4.0 + '@typescript/vfs': 1.5.0 + typescript: 4.5.2 + transitivePeerDependencies: + - supports-color + dev: true + /@coinbase/wallet-sdk@3.7.2: resolution: {integrity: sha512-lIGvXMsgpsQWci/XOMQIJ2nIZ8JUy/L+bvC0wkRaYarr0YylwpXrJ2gRM3hCXPS477pkyO7N/kSiAoRgEXUdJQ==} engines: {node: '>= 10.0.0'} dependencies: '@metamask/safe-event-emitter': 2.0.0 - '@solana/web3.js': 1.87.1 + '@solana/web3.js': 1.87.2 bind-decorator: 1.0.11 bn.js: 5.2.1 buffer: 6.0.3 @@ -426,26 +440,36 @@ packages: - utf-8-validate dev: false - /@connectrpc/connect-node@1.1.2(@bufbuild/protobuf@1.3.3)(@connectrpc/connect@1.1.2): + /@connectrpc/connect-node@1.1.2(@bufbuild/protobuf@1.4.0)(@connectrpc/connect@1.1.2): resolution: {integrity: sha512-IAwQhh05Qm/T/+ZShEnQz+FFZsr2fbq/DCHhXbmwYjePxvo+kF9YIDkTpVy+vjrV+CwZPBfgOdSaRSJLHUykdg==} engines: {node: '>=16.0.0'} peerDependencies: '@bufbuild/protobuf': ^1.3.3 '@connectrpc/connect': 1.1.2 dependencies: - '@bufbuild/protobuf': 1.3.3 - '@connectrpc/connect': 1.1.2(@bufbuild/protobuf@1.3.3) - undici: 5.26.3 - dev: false + '@bufbuild/protobuf': 1.4.0 + '@connectrpc/connect': 1.1.2(@bufbuild/protobuf@1.4.0) + undici: 5.26.5 + dev: true + + /@connectrpc/connect-web@1.1.2(@bufbuild/protobuf@1.4.0)(@connectrpc/connect@1.1.2): + resolution: {integrity: sha512-6Osvp4d/5Qvf0dsbUmqgzCPFIong9KBm5G24g2gapPW2huAtyVj+KwdG6453EKCirPZ5qZHY0FywLef57op9YQ==} + peerDependencies: + '@bufbuild/protobuf': ^1.3.3 + '@connectrpc/connect': 1.1.2 + dependencies: + '@bufbuild/protobuf': 1.4.0 + '@connectrpc/connect': 1.1.2(@bufbuild/protobuf@1.4.0) + dev: true - /@connectrpc/connect@1.1.2(@bufbuild/protobuf@1.3.3): + /@connectrpc/connect@1.1.2(@bufbuild/protobuf@1.4.0): resolution: {integrity: sha512-oDuKJFRORtzyH4IhZyNgIQ5DKjlDnbP72AH55Aabpc0fwApyus/h4cmYU1KDvahVbqsvUOpd5qUTyMH8IhMmLA==} peerDependencies: '@bufbuild/protobuf': ^1.3.3 dependencies: - '@bufbuild/protobuf': 1.3.3 + '@bufbuild/protobuf': 1.4.0 - /@connectrpc/protoc-gen-connect-es@1.1.2(@bufbuild/protoc-gen-es@1.3.3)(@connectrpc/connect@1.1.2): + /@connectrpc/protoc-gen-connect-es@1.1.2(@bufbuild/protoc-gen-es@1.4.0)(@connectrpc/connect@1.1.2): resolution: {integrity: sha512-TvA6Z4EOtZRXi0QbPcRUgM8RHQueIy83TmWq80WdfxZ+Yy5NLT4HVYBRWo0/x+HmPCVoT0FJeLI0iHV6C9UiDQ==} engines: {node: '>=16.0.0'} hasBin: true @@ -458,27 +482,10 @@ packages: '@connectrpc/connect': optional: true dependencies: - '@bufbuild/protobuf': 1.3.3 - '@bufbuild/protoc-gen-es': 1.3.3(@bufbuild/protobuf@1.3.3) - '@bufbuild/protoplugin': 1.3.3 - '@connectrpc/connect': 1.1.2(@bufbuild/protobuf@1.3.3) - transitivePeerDependencies: - - supports-color - dev: true - - /@connectrpc/protoc-gen-connect-query@0.5.3(@bufbuild/protoc-gen-es@1.3.3): - resolution: {integrity: sha512-dY0M1MKyeTymKSf3pN+sCaBvuXTmDunPB4nhl4p1k/N2IFdfq9nIx1/7NKDoZccTEL2LYjzVzmT98EeJD0AaTw==} - engines: {node: '>=16'} - hasBin: true - peerDependencies: - '@bufbuild/protoc-gen-es': 1.x - peerDependenciesMeta: - '@bufbuild/protoc-gen-es': - optional: true - dependencies: - '@bufbuild/protobuf': 1.3.3 - '@bufbuild/protoc-gen-es': 1.3.3(@bufbuild/protobuf@1.3.3) + '@bufbuild/protobuf': 1.4.0 + '@bufbuild/protoc-gen-es': 1.4.0(@bufbuild/protobuf@1.4.0) '@bufbuild/protoplugin': 1.3.3 + '@connectrpc/connect': 1.1.2(@bufbuild/protobuf@1.4.0) transitivePeerDependencies: - supports-color dev: true @@ -688,13 +695,13 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.51.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.52.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.51.0 + eslint: 8.52.0 eslint-visitor-keys: 3.4.3 dev: true @@ -720,21 +727,21 @@ packages: - supports-color dev: true - /@eslint/js@8.51.0: - resolution: {integrity: sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==} + /@eslint/js@8.52.0: + resolution: {integrity: sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true /@fastify/busboy@2.0.0: resolution: {integrity: sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==} engines: {node: '>=14'} - dev: false + dev: true - /@humanwhocodes/config-array@0.11.11: - resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} + /@humanwhocodes/config-array@0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 1.2.1 + '@humanwhocodes/object-schema': 2.0.1 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -746,8 +753,8 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@1.2.1: - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + /@humanwhocodes/object-schema@2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} dev: true /@istanbuljs/schema@0.1.3: @@ -1023,8 +1030,8 @@ packages: buffer: 6.0.3 dev: false - /@solana/web3.js@1.87.1: - resolution: {integrity: sha512-E8Y9bNlZ8TQlhOvCx1b7jG+TjA4SJLVwufmIk1+tcQctUhK5HiB1Q8ljd4yQDkFlk6OOeAlAeqvW0YntWJU94Q==} + /@solana/web3.js@1.87.2: + resolution: {integrity: sha512-TZNhS+tvJbYjm0LAvIkUy/3Aqgt2l6/3X6XsVUpvj5MGOl2Q6Ch8hYSxcUUtMbAFNN3sUXmV8NhhMLNJEvI6TA==} dependencies: '@babel/runtime': 7.23.2 '@noble/curves': 1.2.0 @@ -1192,7 +1199,7 @@ packages: /@types/connect@3.4.37: resolution: {integrity: sha512-zBUSRqkfZ59OcwXon4HVxhx5oWCJmc0OtBTK05M+p0dYjgN6iTwIL2T/WbsQZrEsdnwaF9cWQ+azOnpPvIqY3Q==} dependencies: - '@types/node': 20.8.7 + '@types/node': 20.8.8 dev: false /@types/debug@4.1.10: @@ -1221,8 +1228,8 @@ packages: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} dev: false - /@types/node@20.8.7: - resolution: {integrity: sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==} + /@types/node@20.8.8: + resolution: {integrity: sha512-YRsdVxq6OaLfmR9Hy816IMp33xOBjfyOgUd77ehqg96CFywxAPbDbXvAsuN2KVg2HOT8Eh6uAfU+l4WffwPVrQ==} dependencies: undici-types: 5.25.3 @@ -1230,8 +1237,8 @@ packages: resolution: {integrity: sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg==} dev: true - /@types/semver@7.5.3: - resolution: {integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==} + /@types/semver@7.5.4: + resolution: {integrity: sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==} dev: true /@types/trusted-types@2.0.5: @@ -1241,11 +1248,11 @@ packages: /@types/ws@7.4.7: resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} dependencies: - '@types/node': 20.8.7 + '@types/node': 20.8.8 dev: false - /@typescript-eslint/eslint-plugin@6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.51.0)(typescript@5.2.2): - resolution: {integrity: sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==} + /@typescript-eslint/eslint-plugin@6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.52.0)(typescript@5.2.2): + resolution: {integrity: sha512-lgX7F0azQwRPB7t7WAyeHWVfW1YJ9NIgd9mvGhfQpRY56X6AVf8mwM8Wol+0z4liE7XX3QOt8MN1rUKCfSjRIA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -1256,13 +1263,13 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.9.1 - '@typescript-eslint/parser': 6.8.0(eslint@8.51.0)(typescript@5.2.2) - '@typescript-eslint/scope-manager': 6.8.0 - '@typescript-eslint/type-utils': 6.8.0(eslint@8.51.0)(typescript@5.2.2) - '@typescript-eslint/utils': 6.8.0(eslint@8.51.0)(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.8.0 + '@typescript-eslint/parser': 6.9.0(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/scope-manager': 6.9.0 + '@typescript-eslint/type-utils': 6.9.0(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.9.0(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.9.0 debug: 4.3.4 - eslint: 8.51.0 + eslint: 8.52.0 graphemer: 1.4.0 ignore: 5.2.4 natural-compare: 1.4.0 @@ -1273,8 +1280,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.8.0(eslint@8.51.0)(typescript@5.2.2): - resolution: {integrity: sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==} + /@typescript-eslint/parser@6.9.0(eslint@8.52.0)(typescript@5.2.2): + resolution: {integrity: sha512-GZmjMh4AJ/5gaH4XF2eXA8tMnHWP+Pm1mjQR2QN4Iz+j/zO04b9TOvJYOX2sCNIQHtRStKTxRY1FX7LhpJT4Gw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -1283,12 +1290,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.8.0 - '@typescript-eslint/types': 6.8.0 - '@typescript-eslint/typescript-estree': 6.8.0(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.8.0 + '@typescript-eslint/scope-manager': 6.9.0 + '@typescript-eslint/types': 6.9.0 + '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.9.0 debug: 4.3.4 - eslint: 8.51.0 + eslint: 8.52.0 typescript: 5.2.2 transitivePeerDependencies: - supports-color @@ -1302,16 +1309,16 @@ packages: '@typescript-eslint/visitor-keys': 5.62.0 dev: true - /@typescript-eslint/scope-manager@6.8.0: - resolution: {integrity: sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==} + /@typescript-eslint/scope-manager@6.9.0: + resolution: {integrity: sha512-1R8A9Mc39n4pCCz9o79qRO31HGNDvC7UhPhv26TovDsWPBDx+Sg3rOZdCELIA3ZmNoWAuxaMOT7aWtGRSYkQxw==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.8.0 - '@typescript-eslint/visitor-keys': 6.8.0 + '@typescript-eslint/types': 6.9.0 + '@typescript-eslint/visitor-keys': 6.9.0 dev: true - /@typescript-eslint/type-utils@6.8.0(eslint@8.51.0)(typescript@5.2.2): - resolution: {integrity: sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==} + /@typescript-eslint/type-utils@6.9.0(eslint@8.52.0)(typescript@5.2.2): + resolution: {integrity: sha512-XXeahmfbpuhVbhSOROIzJ+b13krFmgtc4GlEuu1WBT+RpyGPIA4Y/eGnXzjbDj5gZLzpAXO/sj+IF/x2GtTMjQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -1320,10 +1327,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.8.0(typescript@5.2.2) - '@typescript-eslint/utils': 6.8.0(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.2.2) + '@typescript-eslint/utils': 6.9.0(eslint@8.52.0)(typescript@5.2.2) debug: 4.3.4 - eslint: 8.51.0 + eslint: 8.52.0 ts-api-utils: 1.0.3(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: @@ -1335,8 +1342,8 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/types@6.8.0: - resolution: {integrity: sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==} + /@typescript-eslint/types@6.9.0: + resolution: {integrity: sha512-+KB0lbkpxBkBSiVCuQvduqMJy+I1FyDbdwSpM3IoBS7APl4Bu15lStPjgBIdykdRqQNYqYNMa8Kuidax6phaEw==} engines: {node: ^16.0.0 || >=18.0.0} dev: true @@ -1361,8 +1368,8 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.8.0(typescript@5.2.2): - resolution: {integrity: sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==} + /@typescript-eslint/typescript-estree@6.9.0(typescript@5.2.2): + resolution: {integrity: sha512-NJM2BnJFZBEAbCfBP00zONKXvMqihZCrmwCaik0UhLr0vAgb6oguXxLX1k00oQyD+vZZ+CJn3kocvv2yxm4awQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -1370,8 +1377,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.8.0 - '@typescript-eslint/visitor-keys': 6.8.0 + '@typescript-eslint/types': 6.9.0 + '@typescript-eslint/visitor-keys': 6.9.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -1382,19 +1389,19 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.51.0)(typescript@5.2.2): + /@typescript-eslint/utils@5.62.0(eslint@8.52.0)(typescript@5.2.2): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) '@types/json-schema': 7.0.14 - '@types/semver': 7.5.3 + '@types/semver': 7.5.4 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) - eslint: 8.51.0 + eslint: 8.52.0 eslint-scope: 5.1.1 semver: 7.5.4 transitivePeerDependencies: @@ -1402,19 +1409,19 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.8.0(eslint@8.51.0)(typescript@5.2.2): - resolution: {integrity: sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==} + /@typescript-eslint/utils@6.9.0(eslint@8.52.0)(typescript@5.2.2): + resolution: {integrity: sha512-5Wf+Jsqya7WcCO8me504FBigeQKVLAMPmUzYgDbWchINNh1KJbxCgVya3EQ2MjvJMVeXl3pofRmprqX6mfQkjQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) '@types/json-schema': 7.0.14 - '@types/semver': 7.5.3 - '@typescript-eslint/scope-manager': 6.8.0 - '@typescript-eslint/types': 6.8.0 - '@typescript-eslint/typescript-estree': 6.8.0(typescript@5.2.2) - eslint: 8.51.0 + '@types/semver': 7.5.4 + '@typescript-eslint/scope-manager': 6.9.0 + '@typescript-eslint/types': 6.9.0 + '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.2.2) + eslint: 8.52.0 semver: 7.5.4 transitivePeerDependencies: - supports-color @@ -1429,11 +1436,11 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@typescript-eslint/visitor-keys@6.8.0: - resolution: {integrity: sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==} + /@typescript-eslint/visitor-keys@6.9.0: + resolution: {integrity: sha512-dGtAfqjV6RFOtIP8I0B4ZTBRrlTT8NHHlZZSchQx3qReaoDeXhYM++M4So2AgFK9ZB0emRPA6JI1HkafzA2Ibg==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.8.0 + '@typescript-eslint/types': 6.9.0 eslint-visitor-keys: 3.4.3 dev: true @@ -1445,7 +1452,11 @@ packages: - supports-color dev: true - /@vercel/style-guide@5.0.1(eslint@8.51.0)(prettier@3.0.3)(typescript@5.2.2): + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true + + /@vercel/style-guide@5.0.1(eslint@8.52.0)(prettier@3.0.3)(typescript@5.2.2): resolution: {integrity: sha512-3J/5xpwJ2Wk+cKB3EGY2KCdVQycaThLKhjBmgXPfIKb+E74lPpXVIDfaQE0D2JoAyIzGsqdH7Lbmr+DojwofxQ==} engines: {node: '>=16'} peerDependencies: @@ -1464,24 +1475,24 @@ packages: optional: true dependencies: '@babel/core': 7.23.2 - '@babel/eslint-parser': 7.22.15(@babel/core@7.23.2)(eslint@8.51.0) + '@babel/eslint-parser': 7.22.15(@babel/core@7.23.2)(eslint@8.52.0) '@rushstack/eslint-patch': 1.5.1 - '@typescript-eslint/eslint-plugin': 6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.51.0)(typescript@5.2.2) - '@typescript-eslint/parser': 6.8.0(eslint@8.51.0)(typescript@5.2.2) - eslint: 8.51.0 - eslint-config-prettier: 9.0.0(eslint@8.51.0) - eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.28.1) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.8.0)(eslint-plugin-import@2.28.1)(eslint@8.51.0) - eslint-plugin-eslint-comments: 3.2.0(eslint@8.51.0) - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0) - eslint-plugin-jest: 27.4.2(@typescript-eslint/eslint-plugin@6.8.0)(eslint@8.51.0)(typescript@5.2.2) - eslint-plugin-jsx-a11y: 6.7.1(eslint@8.51.0) - eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.4.2)(eslint@8.51.0) - eslint-plugin-react: 7.33.2(eslint@8.51.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.51.0) - eslint-plugin-testing-library: 6.1.0(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/eslint-plugin': 6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.9.0(eslint@8.52.0)(typescript@5.2.2) + eslint: 8.52.0 + eslint-config-prettier: 9.0.0(eslint@8.52.0) + eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.9.0)(eslint-plugin-import@2.29.0)(eslint@8.52.0) + eslint-plugin-eslint-comments: 3.2.0(eslint@8.52.0) + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.9.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.52.0) + eslint-plugin-jest: 27.4.3(@typescript-eslint/eslint-plugin@6.9.0)(eslint@8.52.0)(typescript@5.2.2) + eslint-plugin-jsx-a11y: 6.7.1(eslint@8.52.0) + eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.4.3)(eslint@8.52.0) + eslint-plugin-react: 7.33.2(eslint@8.52.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.52.0) + eslint-plugin-testing-library: 6.1.0(eslint@8.52.0)(typescript@5.2.2) eslint-plugin-tsdoc: 0.2.17 - eslint-plugin-unicorn: 48.0.1(eslint@8.51.0) + eslint-plugin-unicorn: 48.0.1(eslint@8.52.0) prettier: 3.0.3 prettier-plugin-packagejson: 2.4.6(prettier@3.0.3) typescript: 5.2.2 @@ -1551,8 +1562,8 @@ packages: pretty-format: 29.7.0 dev: true - /@wagmi/connectors@3.1.2(react@18.2.0)(typescript@5.2.2)(viem@1.16.6): - resolution: {integrity: sha512-IlLKErqCzQRBUcCvXGPowcczbWcvJtEG006gPsAoePNJEXCHEWoKASghgu+L/bqD7006Z6mW6zlTNjcSQJvFAg==} + /@wagmi/connectors@3.1.3(react@18.2.0)(typescript@5.2.2)(viem@1.16.6): + resolution: {integrity: sha512-UgwsQKQDFObJVJMf9pDfFoXTv710o4zrTHyhIWKBTMMkLpCMsMxN5+ZaDhBYt/BgoRinfRYQo8uwuwLhxE6Log==} peerDependencies: typescript: '>=5.0.4' viem: '>=0.3.35' @@ -1564,10 +1575,10 @@ packages: '@ledgerhq/connect-kit-loader': 1.1.2 '@safe-global/safe-apps-provider': 0.17.1(typescript@5.2.2) '@safe-global/safe-apps-sdk': 8.1.0(typescript@5.2.2) - '@walletconnect/ethereum-provider': 2.10.1(@walletconnect/modal@2.6.2) + '@walletconnect/ethereum-provider': 2.10.2(@walletconnect/modal@2.6.2) '@walletconnect/legacy-provider': 2.0.0 '@walletconnect/modal': 2.6.2(react@18.2.0) - '@walletconnect/utils': 2.10.1 + '@walletconnect/utils': 2.10.2 abitype: 0.8.7(typescript@5.2.2) eventemitter3: 4.0.7 typescript: 5.2.2 @@ -1584,8 +1595,8 @@ packages: - zod dev: false - /@wagmi/core@1.4.4(react@18.2.0)(typescript@5.2.2)(viem@1.16.6): - resolution: {integrity: sha512-38Pa5iH9/2zHX837vYm6M+c//BBikt6vKJqUiEgkIzSqFvlfzbxaNmwybpIxl98N5r+X22C3yHv5bboO9eP0vQ==} + /@wagmi/core@1.4.5(react@18.2.0)(typescript@5.2.2)(viem@1.16.6): + resolution: {integrity: sha512-N9luRb1Uk4tBN9kaYcQSWKE9AsRt/rvZaFt5IZech4JPzNN2sQlfhKd9GEjOXYRDqEPHdDvos7qyBKiDNTz4GA==} peerDependencies: typescript: '>=5.0.4' viem: '>=0.3.35' @@ -1593,12 +1604,12 @@ packages: typescript: optional: true dependencies: - '@wagmi/connectors': 3.1.2(react@18.2.0)(typescript@5.2.2)(viem@1.16.6) + '@wagmi/connectors': 3.1.3(react@18.2.0)(typescript@5.2.2)(viem@1.16.6) abitype: 0.8.7(typescript@5.2.2) eventemitter3: 4.0.7 typescript: 5.2.2 viem: 1.16.6(typescript@5.2.2) - zustand: 4.4.3(react@18.2.0) + zustand: 4.4.4(react@18.2.0) transitivePeerDependencies: - '@react-native-async-storage/async-storage' - '@types/react' @@ -1612,8 +1623,8 @@ packages: - zod dev: false - /@walletconnect/core@2.10.1: - resolution: {integrity: sha512-WAoXfmj+Zy5q48TnrKUjmHXJCBahzKwbul+noepRZf7JDtUAZ9IOWpUjg+UPRbfK5EiWZ0TF42S6SXidf7EHoQ==} + /@walletconnect/core@2.10.2: + resolution: {integrity: sha512-JQz/xp3SLEpTeRQctdck2ugSBVEpMxoSE+lFi2voJkZop1hv6P+uqr6E4PzjFluAjeAnKlT1xvra0aFWjPWVcw==} dependencies: '@walletconnect/heartbeat': 1.2.1 '@walletconnect/jsonrpc-provider': 1.0.13 @@ -1626,8 +1637,8 @@ packages: '@walletconnect/relay-auth': 1.0.4 '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.10.1 - '@walletconnect/utils': 2.10.1 + '@walletconnect/types': 2.10.2 + '@walletconnect/utils': 2.10.2 events: 3.3.0 lodash.isequal: 4.5.0 uint8arrays: 3.1.1 @@ -1663,8 +1674,8 @@ packages: tslib: 1.14.1 dev: false - /@walletconnect/ethereum-provider@2.10.1(@walletconnect/modal@2.6.2): - resolution: {integrity: sha512-Yhoz8EXkKzxOlBT6G+elphqCx/gkH6RxD9/ZAiy9lLc8Ng5p1gvKCVVP5zsGNE9FbkKmHd+J9JJRzn2Bw2yqtQ==} + /@walletconnect/ethereum-provider@2.10.2(@walletconnect/modal@2.6.2): + resolution: {integrity: sha512-QMYFZ6+rVq2CJLdIPdKK0j1Qm66UA27oQU5V2SrL8EVwl7wFfm0Bq7fnL+qAWeDpn612dNeNErpk/ROa1zWlWg==} peerDependencies: '@walletconnect/modal': '>=2' peerDependenciesMeta: @@ -1676,10 +1687,10 @@ packages: '@walletconnect/jsonrpc-types': 1.0.3 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/modal': 2.6.2(react@18.2.0) - '@walletconnect/sign-client': 2.10.1 - '@walletconnect/types': 2.10.1 - '@walletconnect/universal-provider': 2.10.1 - '@walletconnect/utils': 2.10.1 + '@walletconnect/sign-client': 2.10.2 + '@walletconnect/types': 2.10.2 + '@walletconnect/universal-provider': 2.10.2 + '@walletconnect/utils': 2.10.2 events: 3.3.0 transitivePeerDependencies: - '@react-native-async-storage/async-storage' @@ -1894,17 +1905,17 @@ packages: tslib: 1.14.1 dev: false - /@walletconnect/sign-client@2.10.1: - resolution: {integrity: sha512-iG3eJGi1yXeG3xGeVSSMf8wDFyx239B0prLQfy1uYDtYFb2ynnH/09oqAZyKn96W5nfQzUgM2Mz157PVdloH3Q==} + /@walletconnect/sign-client@2.10.2: + resolution: {integrity: sha512-vviSLV3f92I0bReX+OLr1HmbH0uIzYEQQFd1MzIfDk9PkfFT/LLAHhUnDaIAMkIdippqDcJia+5QEtT4JihL3Q==} dependencies: - '@walletconnect/core': 2.10.1 + '@walletconnect/core': 2.10.2 '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.1 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/logger': 2.0.1 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.10.1 - '@walletconnect/utils': 2.10.1 + '@walletconnect/types': 2.10.2 + '@walletconnect/utils': 2.10.2 events: 3.3.0 transitivePeerDependencies: - '@react-native-async-storage/async-storage' @@ -1919,8 +1930,8 @@ packages: tslib: 1.14.1 dev: false - /@walletconnect/types@2.10.1: - resolution: {integrity: sha512-7pccAhajQdiH2kYywjE1XI64IqRI+4ioyGy0wvz8d0UFQ/DSG3MLKR8jHf5aTOafQQ/HRLz6xvlzN4a7gIVkUQ==} + /@walletconnect/types@2.10.2: + resolution: {integrity: sha512-luNV+07Wdla4STi9AejseCQY31tzWKQ5a7C3zZZaRK/di+rFaAAb7YW04OP4klE7tw/mJRGPTlekZElmHxO8kQ==} dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.1 @@ -1933,17 +1944,17 @@ packages: - lokijs dev: false - /@walletconnect/universal-provider@2.10.1: - resolution: {integrity: sha512-81QxTH/X4dRoYCz0U9iOrBYOcj7N897ONcB57wsGhEkV7Rc9htmWJq2CzeOuxvVZ+pNZkE+/aw9LrhizO1Ltxg==} + /@walletconnect/universal-provider@2.10.2: + resolution: {integrity: sha512-wFgI0LbQ3D56sgaUMsgOHCM5m8WLxiC71BGuCKQfApgsbNMVKugYVy2zWHyUyi8sqTQHI+uSaVpDev4UHq9LEw==} dependencies: '@walletconnect/jsonrpc-http-connection': 1.0.7 '@walletconnect/jsonrpc-provider': 1.0.13 '@walletconnect/jsonrpc-types': 1.0.3 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/logger': 2.0.1 - '@walletconnect/sign-client': 2.10.1 - '@walletconnect/types': 2.10.1 - '@walletconnect/utils': 2.10.1 + '@walletconnect/sign-client': 2.10.2 + '@walletconnect/types': 2.10.2 + '@walletconnect/utils': 2.10.2 events: 3.3.0 transitivePeerDependencies: - '@react-native-async-storage/async-storage' @@ -1953,8 +1964,8 @@ packages: - utf-8-validate dev: false - /@walletconnect/utils@2.10.1: - resolution: {integrity: sha512-DM0dKgm9O58l7VqJEyV2OVv16XRePhDAReI23let6WdW1dSpw/Y/A89Lp99ZJOjLm2FxyblMRF3YRaZtHwBffw==} + /@walletconnect/utils@2.10.2: + resolution: {integrity: sha512-syxXRpc2yhSknMu3IfiBGobxOY7fLfLTJuw+ppKaeO6WUdZpIit3wfuGOcc0Ms3ZPFCrGfyGOoZsCvgdXtptRg==} dependencies: '@stablelib/chacha20poly1305': 1.0.1 '@stablelib/hkdf': 1.0.1 @@ -1964,7 +1975,7 @@ packages: '@walletconnect/relay-api': 1.0.9 '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.10.1 + '@walletconnect/types': 2.10.2 '@walletconnect/window-getters': 1.0.1 '@walletconnect/window-metadata': 1.0.1 detect-browser: 5.3.0 @@ -2115,7 +2126,7 @@ packages: /array-buffer-byte-length@1.0.0: resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 is-array-buffer: 3.0.2 dev: true @@ -2123,10 +2134,10 @@ packages: resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 - get-intrinsic: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 is-string: 1.0.7 dev: true @@ -2139,41 +2150,41 @@ packages: resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 - es-shim-unscopables: 1.0.0 - get-intrinsic: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.2 dev: true /array.prototype.flat@1.3.2: resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 - es-shim-unscopables: 1.0.0 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 dev: true /array.prototype.flatmap@1.3.2: resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 - es-shim-unscopables: 1.0.0 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 dev: true /array.prototype.tosorted@1.1.2: resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 - es-shim-unscopables: 1.0.0 - get-intrinsic: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.2 dev: true /arraybuffer.prototype.slice@1.0.2: @@ -2181,10 +2192,10 @@ packages: engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.0 - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 - get-intrinsic: 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 dev: true @@ -2315,8 +2326,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001550 - electron-to-chromium: 1.4.558 + caniuse-lite: 1.0.30001553 + electron-to-chromium: 1.4.565 node-releases: 2.0.13 update-browserslist-db: 1.0.13(browserslist@4.22.1) dev: true @@ -2369,11 +2380,12 @@ packages: engines: {node: '>=8'} dev: true - /call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} dependencies: function-bind: 1.1.2 - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.2 + set-function-length: 1.1.1 /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} @@ -2385,8 +2397,8 @@ packages: engines: {node: '>=6'} dev: false - /caniuse-lite@1.0.30001550: - resolution: {integrity: sha512-p82WjBYIypO0ukTsd/FG3Xxs+4tFeaY9pfT4amQL8KWtYH7H9nYwReGAbMTJ0hsmRO8IfDtsS6p3ZWj8+1c2RQ==} + /caniuse-lite@1.0.30001553: + resolution: {integrity: sha512-N0ttd6TrFfuqKNi+pMgWJTb9qrdJu4JSpgPFLe/lrD19ugC6fZgF0pUewRowDwzdDnb9V41mFcdlYgl/PyKf4A==} dev: true /chai@4.3.10: @@ -2597,10 +2609,9 @@ packages: resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.2 gopd: 1.0.1 - has-property-descriptors: 1.0.0 - dev: true + has-property-descriptors: 1.0.1 /define-lazy-prop@3.0.0: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} @@ -2612,7 +2623,7 @@ packages: engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.1 - has-property-descriptors: 1.0.0 + has-property-descriptors: 1.0.1 object-keys: 1.1.1 dev: true @@ -2684,8 +2695,8 @@ packages: stream-shift: 1.0.1 dev: false - /electron-to-chromium@1.4.558: - resolution: {integrity: sha512-j9IcGmfkyN5MBH/0Xzg45GDHasXsnwEJDM6Xnr9H7GlGUni+JH4q6xp6Nk7NV5LjTmoEFBqhILIqg1McJrv6uA==} + /electron-to-chromium@1.4.565: + resolution: {integrity: sha512-XbMoT6yIvg2xzcbs5hCADi0dXBh4//En3oFXmtPX+jiyyiCTiM9DGFT2SLottjpEs9Z8Mh8SqahbR96MaHfuSg==} dev: true /emoji-regex@8.0.0: @@ -2720,26 +2731,26 @@ packages: is-arrayish: 0.2.1 dev: true - /es-abstract@1.22.2: - resolution: {integrity: sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==} + /es-abstract@1.22.3: + resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.0 arraybuffer.prototype.slice: 1.0.2 available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - es-set-tostringtag: 2.0.1 + call-bind: 1.0.5 + es-set-tostringtag: 2.0.2 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.2 get-symbol-description: 1.0.0 globalthis: 1.0.3 gopd: 1.0.1 - has: 1.0.4 - has-property-descriptors: 1.0.0 + has-property-descriptors: 1.0.1 has-proto: 1.0.1 has-symbols: 1.0.3 - internal-slot: 1.0.5 + hasown: 2.0.0 + internal-slot: 1.0.6 is-array-buffer: 3.0.2 is-callable: 1.2.7 is-negative-zero: 2.0.2 @@ -2748,7 +2759,7 @@ packages: is-string: 1.0.7 is-typed-array: 1.1.12 is-weakref: 1.0.2 - object-inspect: 1.13.0 + object-inspect: 1.13.1 object-keys: 1.1.1 object.assign: 4.1.4 regexp.prototype.flags: 1.5.1 @@ -2762,41 +2773,41 @@ packages: typed-array-byte-offset: 1.0.0 typed-array-length: 1.0.4 unbox-primitive: 1.0.2 - which-typed-array: 1.1.11 + which-typed-array: 1.1.13 dev: true /es-iterator-helpers@1.0.15: resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} dependencies: asynciterator.prototype: 1.0.0 - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 - es-set-tostringtag: 2.0.1 + es-abstract: 1.22.3 + es-set-tostringtag: 2.0.2 function-bind: 1.1.2 - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.2 globalthis: 1.0.3 - has-property-descriptors: 1.0.0 + has-property-descriptors: 1.0.1 has-proto: 1.0.1 has-symbols: 1.0.3 - internal-slot: 1.0.5 + internal-slot: 1.0.6 iterator.prototype: 1.1.2 safe-array-concat: 1.0.1 dev: true - /es-set-tostringtag@2.0.1: - resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + /es-set-tostringtag@2.0.2: + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.1 - has: 1.0.4 + get-intrinsic: 1.2.2 has-tostringtag: 1.0.0 + hasown: 2.0.0 dev: true - /es-shim-unscopables@1.0.0: - resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: - has: 1.0.4 + hasown: 2.0.0 dev: true /es-to-primitive@1.2.1: @@ -2863,35 +2874,35 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-prettier@9.0.0(eslint@8.51.0): + /eslint-config-prettier@9.0.0(eslint@8.52.0): resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.51.0 + eslint: 8.52.0 dev: true - /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.28.1): + /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.0): resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} engines: {node: '>= 4'} peerDependencies: eslint-plugin-import: '>=1.4.0' dependencies: - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0) + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.9.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.52.0) dev: true /eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: debug: 3.2.7 - is-core-module: 2.13.0 + is-core-module: 2.13.1 resolve: 1.22.8 transitivePeerDependencies: - supports-color dev: true - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.8.0)(eslint-plugin-import@2.28.1)(eslint@8.51.0): + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.9.0)(eslint-plugin-import@2.29.0)(eslint@8.52.0): resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -2900,12 +2911,12 @@ packages: dependencies: debug: 4.3.4 enhanced-resolve: 5.15.0 - eslint: 8.51.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0) - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0) + eslint: 8.52.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.9.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.52.0) + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.9.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.52.0) fast-glob: 3.3.1 get-tsconfig: 4.7.2 - is-core-module: 2.13.0 + is-core-module: 2.13.1 is-glob: 4.0.3 transitivePeerDependencies: - '@typescript-eslint/parser' @@ -2914,7 +2925,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.9.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.52.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -2935,28 +2946,28 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.8.0(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.9.0(eslint@8.52.0)(typescript@5.2.2) debug: 3.2.7 - eslint: 8.51.0 + eslint: 8.52.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.8.0)(eslint-plugin-import@2.28.1)(eslint@8.51.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.9.0)(eslint-plugin-import@2.29.0)(eslint@8.52.0) transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-eslint-comments@3.2.0(eslint@8.51.0): + /eslint-plugin-eslint-comments@3.2.0(eslint@8.52.0): resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} engines: {node: '>=6.5.0'} peerDependencies: eslint: '>=4.19.1' dependencies: escape-string-regexp: 1.0.5 - eslint: 8.51.0 + eslint: 8.52.0 ignore: 5.2.4 dev: true - /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0): - resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==} + /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.9.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.52.0): + resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -2965,18 +2976,18 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.8.0(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.9.0(eslint@8.52.0)(typescript@5.2.2) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.51.0 + eslint: 8.52.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0) - has: 1.0.4 - is-core-module: 2.13.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.9.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.52.0) + hasown: 2.0.0 + is-core-module: 2.13.1 is-glob: 4.0.3 minimatch: 3.1.2 object.fromentries: 2.0.7 @@ -2990,8 +3001,8 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.4.2(@typescript-eslint/eslint-plugin@6.8.0)(eslint@8.51.0)(typescript@5.2.2): - resolution: {integrity: sha512-3Nfvv3wbq2+PZlRTf2oaAWXWwbdBejFRBR2O8tAO67o+P8zno+QGbcDYaAXODlreXVg+9gvWhKKmG2rgfb8GEg==} + /eslint-plugin-jest@27.4.3(@typescript-eslint/eslint-plugin@6.9.0)(eslint@8.52.0)(typescript@5.2.2): + resolution: {integrity: sha512-7S6SmmsHsgIm06BAGCAxL+ABd9/IB3MWkz2pudj6Qqor2y1qQpWPfuFU4SG9pWj4xDjF0e+D7Llh5useuSzAZw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 @@ -3003,15 +3014,15 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.51.0)(typescript@5.2.2) - '@typescript-eslint/utils': 5.62.0(eslint@8.51.0)(typescript@5.2.2) - eslint: 8.51.0 + '@typescript-eslint/eslint-plugin': 6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.52.0)(typescript@5.2.2) + eslint: 8.52.0 transitivePeerDependencies: - supports-color - typescript dev: true - /eslint-plugin-jsx-a11y@6.7.1(eslint@8.51.0): + /eslint-plugin-jsx-a11y@6.7.1(eslint@8.52.0): resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} engines: {node: '>=4.0'} peerDependencies: @@ -3026,7 +3037,7 @@ packages: axobject-query: 3.2.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 8.51.0 + eslint: 8.52.0 has: 1.0.4 jsx-ast-utils: 3.3.5 language-tags: 1.0.5 @@ -3036,7 +3047,7 @@ packages: semver: 6.3.1 dev: true - /eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.4.2)(eslint@8.51.0): + /eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.4.3)(eslint@8.52.0): resolution: {integrity: sha512-DcHpF0SLbNeh9MT4pMzUGuUSnJ7q5MWbP8sSEFIMS6j7Ggnduq8ghNlfhURgty4c1YFny7Ge9xYTO1FSAoV2Vw==} peerDependencies: eslint: '>=7' @@ -3045,20 +3056,20 @@ packages: eslint-plugin-jest: optional: true dependencies: - eslint: 8.51.0 - eslint-plugin-jest: 27.4.2(@typescript-eslint/eslint-plugin@6.8.0)(eslint@8.51.0)(typescript@5.2.2) + eslint: 8.52.0 + eslint-plugin-jest: 27.4.3(@typescript-eslint/eslint-plugin@6.9.0)(eslint@8.52.0)(typescript@5.2.2) dev: true - /eslint-plugin-react-hooks@4.6.0(eslint@8.51.0): + /eslint-plugin-react-hooks@4.6.0(eslint@8.52.0): resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - eslint: 8.51.0 + eslint: 8.52.0 dev: true - /eslint-plugin-react@7.33.2(eslint@8.51.0): + /eslint-plugin-react@7.33.2(eslint@8.52.0): resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} engines: {node: '>=4'} peerDependencies: @@ -3069,7 +3080,7 @@ packages: array.prototype.tosorted: 1.1.2 doctrine: 2.1.0 es-iterator-helpers: 1.0.15 - eslint: 8.51.0 + eslint: 8.52.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 @@ -3083,14 +3094,14 @@ packages: string.prototype.matchall: 4.0.10 dev: true - /eslint-plugin-testing-library@6.1.0(eslint@8.51.0)(typescript@5.2.2): + /eslint-plugin-testing-library@6.1.0(eslint@8.52.0)(typescript@5.2.2): resolution: {integrity: sha512-r7kE+az3tbp8vyRwfyAGZ6V/xw+XvdWFPicIo6jbOPZoossOFDeHizARqPGV6gEkyF8hyCFhhH3mlQOGS3N5Sg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.51.0)(typescript@5.2.2) - eslint: 8.51.0 + '@typescript-eslint/utils': 5.62.0(eslint@8.52.0)(typescript@5.2.2) + eslint: 8.52.0 transitivePeerDependencies: - supports-color - typescript @@ -3103,17 +3114,17 @@ packages: '@microsoft/tsdoc-config': 0.16.2 dev: true - /eslint-plugin-unicorn@48.0.1(eslint@8.51.0): + /eslint-plugin-unicorn@48.0.1(eslint@8.52.0): resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} engines: {node: '>=16'} peerDependencies: eslint: '>=8.44.0' dependencies: '@babel/helper-validator-identifier': 7.22.20 - '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) ci-info: 3.9.0 clean-regexp: 1.0.0 - eslint: 8.51.0 + eslint: 8.52.0 esquery: 1.5.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 @@ -3153,18 +3164,19 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.51.0: - resolution: {integrity: sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==} + /eslint@8.52.0: + resolution: {integrity: sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) '@eslint-community/regexpp': 4.9.1 '@eslint/eslintrc': 2.1.2 - '@eslint/js': 8.51.0 - '@humanwhocodes/config-array': 0.11.11 + '@eslint/js': 8.52.0 + '@humanwhocodes/config-array': 0.11.13 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 @@ -3434,9 +3446,9 @@ packages: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-abstract: 1.22.3 functions-have-names: 1.2.3 dev: true @@ -3458,13 +3470,13 @@ packages: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} dev: true - /get-intrinsic@1.2.1: - resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} dependencies: function-bind: 1.1.2 - has: 1.0.4 has-proto: 1.0.1 has-symbols: 1.0.3 + hasown: 2.0.0 /get-stdin@9.0.0: resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} @@ -3480,8 +3492,8 @@ packages: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 dev: true /get-tsconfig@4.7.2: @@ -3575,7 +3587,7 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.2 /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -3599,11 +3611,10 @@ packages: engines: {node: '>=8'} dev: true - /has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + /has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} dependencies: - get-intrinsic: 1.2.1 - dev: true + get-intrinsic: 1.2.2 /has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} @@ -3622,6 +3633,7 @@ packages: /has@1.0.4: resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} engines: {node: '>= 0.4.0'} + dev: true /hash.js@1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} @@ -3630,6 +3642,12 @@ packages: minimalistic-assert: 1.0.1 dev: false + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + /hey-listen@1.0.8: resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} dev: false @@ -3695,12 +3713,12 @@ packages: /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - /internal-slot@1.0.5: - resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} + /internal-slot@1.0.6: + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.1 - has: 1.0.4 + get-intrinsic: 1.2.2 + hasown: 2.0.0 side-channel: 1.0.4 dev: true @@ -3708,15 +3726,15 @@ packages: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 has-tostringtag: 1.0.0 dev: false /is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 is-typed-array: 1.1.12 dev: true @@ -3748,7 +3766,7 @@ packages: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 has-tostringtag: 1.0.0 dev: true @@ -3763,10 +3781,10 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - /is-core-module@2.13.0: - resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: - has: 1.0.4 + hasown: 2.0.0 dev: true /is-date-object@1.0.5: @@ -3796,7 +3814,7 @@ packages: /is-finalizationregistry@1.0.2: resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 dev: true /is-fullwidth-code-point@3.0.0: @@ -3860,7 +3878,7 @@ packages: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 has-tostringtag: 1.0.0 dev: true @@ -3871,7 +3889,7 @@ packages: /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 dev: true /is-stream@2.0.1: @@ -3902,7 +3920,7 @@ packages: resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} engines: {node: '>= 0.4'} dependencies: - which-typed-array: 1.1.11 + which-typed-array: 1.1.13 /is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} @@ -3915,14 +3933,14 @@ packages: /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 dev: true /is-weakset@2.0.2: resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 dev: true /is-wsl@2.2.0: @@ -3992,7 +4010,7 @@ packages: resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} dependencies: define-properties: 1.2.1 - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.2 has-symbols: 1.0.3 reflect.getprototypeof: 1.0.4 set-function-name: 2.0.1 @@ -4439,8 +4457,8 @@ packages: engines: {node: '>=0.10.0'} dev: true - /object-inspect@1.13.0: - resolution: {integrity: sha512-HQ4J+ic8hKrgIt3mqk6cVOVrW2ozL4KdvHlqpBv9vDYWx9ysAgENAdvy4FoGF+KFdhR7nQTNm5J0ctAeOwn+3g==} + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} @@ -4451,7 +4469,7 @@ packages: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 @@ -4461,43 +4479,43 @@ packages: resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-abstract: 1.22.3 dev: true /object.fromentries@2.0.7: resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-abstract: 1.22.3 dev: true /object.groupby@1.0.1: resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 - get-intrinsic: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 dev: true /object.hasown@1.1.3: resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} dependencies: define-properties: 1.2.1 - es-abstract: 1.22.2 + es-abstract: 1.22.3 dev: true /object.values@1.1.7: resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-abstract: 1.22.3 dev: true /on-exit-leak-free@0.2.0: @@ -4718,7 +4736,7 @@ packages: optional: true dependencies: lilconfig: 2.1.0 - ts-node: 10.9.1(@types/node@20.8.7)(typescript@5.2.2) + ts-node: 10.9.1(@types/node@20.8.8)(typescript@5.2.2) yaml: 2.3.3 dev: true @@ -4900,10 +4918,10 @@ packages: resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 - get-intrinsic: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 globalthis: 1.0.3 which-builtin-type: 1.1.3 dev: true @@ -4920,7 +4938,7 @@ packages: resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 set-function-name: 2.0.1 dev: true @@ -4958,7 +4976,7 @@ packages: /resolve@1.19.0: resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} dependencies: - is-core-module: 2.13.0 + is-core-module: 2.13.1 path-parse: 1.0.7 dev: true @@ -4966,7 +4984,7 @@ packages: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true dependencies: - is-core-module: 2.13.0 + is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true @@ -4975,7 +4993,7 @@ packages: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true dependencies: - is-core-module: 2.13.0 + is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true @@ -5036,8 +5054,8 @@ packages: resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} engines: {node: '>=0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 has-symbols: 1.0.3 isarray: 2.0.5 dev: true @@ -5053,8 +5071,8 @@ packages: /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 is-regex: 1.1.4 dev: true @@ -5084,13 +5102,22 @@ packages: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: false + /set-function-length@1.1.1: + resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + /set-function-name@2.0.1: resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.1 functions-have-names: 1.2.3 - has-property-descriptors: 1.0.0 + has-property-descriptors: 1.0.1 dev: true /sha.js@2.4.11: @@ -5125,9 +5152,9 @@ packages: /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - object-inspect: 1.13.0 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + object-inspect: 1.13.1 /siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -5255,12 +5282,12 @@ packages: /string.prototype.matchall@4.0.10: resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 - get-intrinsic: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 has-symbols: 1.0.3 - internal-slot: 1.0.5 + internal-slot: 1.0.6 regexp.prototype.flags: 1.5.1 set-function-name: 2.0.1 side-channel: 1.0.4 @@ -5270,25 +5297,25 @@ packages: resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-abstract: 1.22.3 dev: true /string.prototype.trimend@1.0.7: resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-abstract: 1.22.3 dev: true /string.prototype.trimstart@1.0.7: resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-abstract: 1.22.3 dev: true /string_decoder@1.3.0: @@ -5494,7 +5521,7 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-node@10.9.1(@types/node@20.8.7)(typescript@5.2.2): + /ts-node@10.9.1(@types/node@20.8.8)(typescript@5.2.2): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -5513,7 +5540,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.8.7 + '@types/node': 20.8.8 acorn: 8.10.0 acorn-walk: 8.2.0 arg: 4.1.3 @@ -5617,8 +5644,8 @@ packages: resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 is-typed-array: 1.1.12 dev: true @@ -5626,7 +5653,7 @@ packages: resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 @@ -5637,7 +5664,7 @@ packages: engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.5 - call-bind: 1.0.2 + call-bind: 1.0.5 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 @@ -5646,7 +5673,7 @@ packages: /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 for-each: 0.3.3 is-typed-array: 1.1.12 dev: true @@ -5703,7 +5730,7 @@ packages: /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 @@ -5712,12 +5739,12 @@ packages: /undici-types@5.25.3: resolution: {integrity: sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==} - /undici@5.26.3: - resolution: {integrity: sha512-H7n2zmKEWgOllKkIUkLvFmsJQj062lSm3uA4EYApG8gLuiOM0/go9bIoC3HVaSnfg4xunowDE2i9p8drkXuvDw==} + /undici@5.26.5: + resolution: {integrity: sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==} engines: {node: '>=14.0'} dependencies: '@fastify/busboy': 2.0.0 - dev: false + dev: true /untildify@4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} @@ -5768,7 +5795,7 @@ packages: is-arguments: 1.1.1 is-generator-function: 1.0.10 is-typed-array: 1.1.12 - which-typed-array: 1.1.11 + which-typed-array: 1.1.13 dev: false /uuid@8.3.2: @@ -5835,7 +5862,7 @@ packages: - utf-8-validate - zod - /vite-node@0.34.6(@types/node@20.8.7): + /vite-node@0.34.6(@types/node@20.8.8): resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==} engines: {node: '>=v14.18.0'} hasBin: true @@ -5845,7 +5872,7 @@ packages: mlly: 1.4.2 pathe: 1.1.1 picocolors: 1.0.0 - vite: 4.5.0(@types/node@20.8.7) + vite: 4.5.0(@types/node@20.8.8) transitivePeerDependencies: - '@types/node' - less @@ -5857,7 +5884,7 @@ packages: - terser dev: true - /vite@4.5.0(@types/node@20.8.7): + /vite@4.5.0(@types/node@20.8.8): resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -5885,7 +5912,7 @@ packages: terser: optional: true dependencies: - '@types/node': 20.8.7 + '@types/node': 20.8.8 esbuild: 0.18.20 postcss: 8.4.31 rollup: 3.29.4 @@ -5926,7 +5953,7 @@ packages: dependencies: '@types/chai': 4.3.9 '@types/chai-subset': 1.3.4 - '@types/node': 20.8.7 + '@types/node': 20.8.8 '@vitest/expect': 0.34.6 '@vitest/runner': 0.34.6 '@vitest/snapshot': 0.34.6 @@ -5945,8 +5972,8 @@ packages: strip-literal: 1.3.0 tinybench: 2.5.1 tinypool: 0.7.0 - vite: 4.5.0(@types/node@20.8.7) - vite-node: 0.34.6(@types/node@20.8.7) + vite: 4.5.0(@types/node@20.8.8) + vite-node: 0.34.6(@types/node@20.8.8) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -6014,7 +6041,7 @@ packages: isarray: 2.0.5 which-boxed-primitive: 1.0.2 which-collection: 1.0.1 - which-typed-array: 1.1.11 + which-typed-array: 1.1.13 dev: true /which-collection@1.0.1: @@ -6030,12 +6057,12 @@ packages: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} dev: false - /which-typed-array@1.1.11: - resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} + /which-typed-array@1.1.13: + resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.5 - call-bind: 1.0.2 + call-bind: 1.0.5 for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 @@ -6171,8 +6198,8 @@ packages: engines: {node: '>=12.20'} dev: true - /zustand@4.4.3(react@18.2.0): - resolution: {integrity: sha512-oRy+X3ZazZvLfmv6viIaQmtLOMeij1noakIsK/Y47PWYhT8glfXzQ4j0YcP5i0P0qI1A4rIB//SGROGyZhx91A==} + /zustand@4.4.4(react@18.2.0): + resolution: {integrity: sha512-5UTUIAiHMNf5+mFp7/AnzJXS7+XxktULFN0+D1sCiZWyX7ZG+AQpqs2qpYrynRij4QvoDdCD+U+bmg/cG3Ucxw==} engines: {node: '>=12.7.0'} peerDependencies: '@types/react': '>=16.8' diff --git a/src/abis/clearinghouse.ts b/src/abi/clearinghouse.ts similarity index 100% rename from src/abis/clearinghouse.ts rename to src/abi/clearinghouse.ts diff --git a/src/abis/index.ts b/src/abi/index.ts similarity index 100% rename from src/abis/index.ts rename to src/abi/index.ts diff --git a/src/abis/seaport-order-validator.ts b/src/abi/seaport-order-validator.ts similarity index 100% rename from src/abis/seaport-order-validator.ts rename to src/abi/seaport-order-validator.ts diff --git a/src/abis/seaport.ts b/src/abi/seaport.ts similarity index 100% rename from src/abis/seaport.ts rename to src/abi/seaport.ts diff --git a/src/constants.ts b/src/constants.ts index 229053d5..2e3dd457 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -5,8 +5,6 @@ export const SUPPORTED_CHAINS = { arbitrum, arbitrumGoerli, }; -export type SupportedChain = - (typeof SUPPORTED_CHAINS)[keyof typeof SUPPORTED_CHAINS]; /** Contracts */ // Valorem Clearinghouse on Arbitrum One (mainnet) & Arbitrum Goerli (testnet) diff --git a/src/entities/contracts/base-contract.ts b/src/entities/contracts/base-contract.ts index 24038ec8..5f7f904d 100644 --- a/src/entities/contracts/base-contract.ts +++ b/src/entities/contracts/base-contract.ts @@ -9,7 +9,7 @@ import type { CLEAR_ABI, SEAPORT_V1_5_ABI, SEAPORT_VALIDATOR_ABI, -} from '../../abis'; +} from '../../abi'; type IContract = ReturnType< typeof getContract< diff --git a/src/entities/contracts/clearinghouse.ts b/src/entities/contracts/clearinghouse.ts index f4bfa751..7784aae4 100644 --- a/src/entities/contracts/clearinghouse.ts +++ b/src/entities/contracts/clearinghouse.ts @@ -1,5 +1,5 @@ import { CLEAR_ADDRESS } from '../../constants'; -import { CLEAR_ABI } from '../../abis'; +import { CLEAR_ABI } from '../../abi'; import type { IClearinghouse, ContractConstructorArgs } from './base-contract'; import { Contract } from './base-contract'; diff --git a/src/entities/contracts/index.ts b/src/entities/contracts/index.ts index d718b7af..f7c1ba47 100644 --- a/src/entities/contracts/index.ts +++ b/src/entities/contracts/index.ts @@ -1,4 +1,11 @@ -export * from './clearinghouse'; -export * from './erc20'; -export * from './seaport'; -export * from './seaport-validator'; +export type { + ContractConstructorArgs, + IClearinghouse, + IERC20, + ISeaport, + ISeaportValidator, +} from './base-contract'; +export { ClearinghouseContract } from './clearinghouse'; +export { ERC20Contract } from './erc20'; +export { SeaportContract } from './seaport'; +export { SeaportValidatorContract } from './seaport-validator'; diff --git a/src/entities/contracts/seaport-validator.ts b/src/entities/contracts/seaport-validator.ts index 1dd320c6..96eca93c 100644 --- a/src/entities/contracts/seaport-validator.ts +++ b/src/entities/contracts/seaport-validator.ts @@ -1,6 +1,6 @@ import type { Address } from 'viem'; import { getContract } from 'viem'; -import { SEAPORT_VALIDATOR_ABI } from '../../abis'; +import { SEAPORT_VALIDATOR_ABI } from '../../abi'; import { VALIDATOR_ADDRESS } from '../../constants'; import type { ContractConstructorArgs, diff --git a/src/entities/contracts/seaport.ts b/src/entities/contracts/seaport.ts index 53d1cf29..ce8a8c99 100644 --- a/src/entities/contracts/seaport.ts +++ b/src/entities/contracts/seaport.ts @@ -1,4 +1,4 @@ -import { SEAPORT_V1_5_ABI } from '../../abis'; +import { SEAPORT_V1_5_ABI } from '../../abi'; import { SEAPORT_ADDRESS } from '../../constants'; import type { ContractConstructorArgs, ISeaport } from './base-contract'; import { Contract } from './base-contract'; diff --git a/src/entities/index.ts b/src/entities/index.ts index e226353a..a3cdb958 100644 --- a/src/entities/index.ts +++ b/src/entities/index.ts @@ -1,3 +1,20 @@ -export * from './trader'; -export * from './contracts'; -export * from './options'; +export { + type ContractConstructorArgs, + type IClearinghouse, + type IERC20, + type ISeaport, + type ISeaportValidator, + ClearinghouseContract, + ERC20Contract, + SeaportContract, + SeaportValidatorContract, +} from './contracts'; +export { WebTaker, Maker, Taker } from './trader'; +export { + OptionType, + type OptionTypeArgs, + Option, + type OptionArgs, + Claim, + type ClaimArgs, +} from './options'; diff --git a/src/entities/options/exercisable-option.ts b/src/entities/options/exercisable-option.ts index d285de90..c3344066 100644 --- a/src/entities/options/exercisable-option.ts +++ b/src/entities/options/exercisable-option.ts @@ -1,9 +1,24 @@ import type { Trader } from '../trader/base-trader'; import type { SimulatedTxRequest } from '../../types'; import type { ClearinghouseContract } from '../contracts'; +import type { OptionTypeArgs } from './option-type'; import { OptionType } from './option-type'; +export interface OptionArgs extends OptionTypeArgs { + tokenId: bigint; + tokenType: 0 | 1; +} + export class Option extends OptionType { + public tokenId: bigint; + public tokenType: 0 | 1; + + public constructor(args: OptionArgs) { + super(args); + this.tokenId = args.tokenId; + this.tokenType = args.tokenType; + } + public async exerciseOption({ amount, trader, @@ -33,12 +48,19 @@ export class Option extends OptionType { } static async fromId(optionId: bigint, clearinghouse: ClearinghouseContract) { - const type = await super.fromId(optionId, clearinghouse); + const tokenType = await super.getTokenType(optionId, clearinghouse); + if (tokenType === 2) { + throw new Error( + 'The provided tokenId corresponds to a redeemable Claim, not an exercisable Option. Please use Claim.fromId instead.', + ); + } + const optionType = await super.fromId(optionId, clearinghouse); return new this({ - optionInfo: type.optionInfo, - optionTypeId: type.optionTypeId, - tokenId: type.tokenId, - tokenType: type.tokenType, + optionInfo: optionType.optionInfo, + optionTypeId: optionType.optionTypeId, + typeExists: optionType.typeExists, + tokenId: optionId, + tokenType, }); } } diff --git a/src/entities/options/index.ts b/src/entities/options/index.ts index 60877e5b..3fb744d4 100644 --- a/src/entities/options/index.ts +++ b/src/entities/options/index.ts @@ -1,3 +1,4 @@ -export * from './exercisable-option'; -export * from './option-type'; -export * from './redeemable-claim'; +export { OptionType, type OptionTypeArgs } from './option-type'; + +export { Option, type OptionArgs } from './exercisable-option'; +export { Claim, type ClaimArgs } from './redeemable-claim'; diff --git a/src/entities/options/option-type.test.ts b/src/entities/options/option-type.test.ts index 0db2fb9b..61f9aa84 100644 --- a/src/entities/options/option-type.test.ts +++ b/src/entities/options/option-type.test.ts @@ -21,9 +21,10 @@ describe('Option Class', () => { }); expect(optionType.optionTypeId).toEqual(expectedOptionTypeId); - expect(optionType.tokenId).toEqual(expectedOptionTypeId); - expect(optionType.typeExists).toBeTruthy(); - expect(optionType.tokenType).toEqual(1); expect(optionType.optionInfo).toBeDefined(); + expect(optionType.typeExists).toBeTruthy(); + + expect(optionType.tokenType).not.toBeDefined(); + expect(optionType.tokenId).not.toBeDefined(); }); }); diff --git a/src/entities/options/option-type.ts b/src/entities/options/option-type.ts index 27bea583..4b126863 100644 --- a/src/entities/options/option-type.ts +++ b/src/entities/options/option-type.ts @@ -1,4 +1,3 @@ -import type { Address } from 'viem'; import { bytesToBigInt, encodeAbiParameters, @@ -7,49 +6,30 @@ import { sliceHex, toBytes, } from 'viem'; -import type { SimulatedTxRequest } from '../../types'; +import type { OptionTypeInfo, SimulatedTxRequest } from '../../types'; import type { Trader } from '../trader/base-trader'; import type { ClearinghouseContract } from '../contracts/clearinghouse'; -export interface OptionTypeInfo { - underlyingAsset: Address; - underlyingAmount: bigint; - exerciseAsset: Address; - exerciseAmount: bigint; - exerciseTimestamp: number; - expiryTimestamp: number; -} - -interface OptionTypeArgs { +export interface OptionTypeArgs { optionInfo: OptionTypeInfo; optionTypeId: bigint; - tokenId: bigint; - tokenType: 0 | 1 | 2; + typeExists: boolean; } export class OptionType { // Specific to OptionTypes public optionInfo: OptionTypeInfo; public optionTypeId: bigint; + public typeExists: boolean; // Specific to Options (Exercisable Options + Redeemable Claims) - public tokenId: bigint; - public tokenType: 0 | 1 | 2; + public tokenId: bigint | undefined = undefined; + public tokenType: 0 | 1 | 2 | undefined = undefined; - public constructor({ - optionInfo, - optionTypeId, - tokenId, - tokenType, - }: OptionTypeArgs) { + public constructor({ optionInfo, optionTypeId, typeExists }: OptionTypeArgs) { this.optionInfo = optionInfo; this.optionTypeId = optionTypeId; - this.tokenId = tokenId; - this.tokenType = tokenType; - } - - public get typeExists() { - return this.tokenType !== 0; + this.typeExists = typeExists; } public async createOptionType(trader: Trader) { @@ -74,7 +54,7 @@ export class OptionType { console.log( `Successfully created new option type. txHash: ${receipt.transactionHash}`, ); - this.tokenType = 1; + this.typeExists = true; } } @@ -92,9 +72,8 @@ export class OptionType { ); return new this({ optionInfo, - tokenId: optionTypeId, optionTypeId, - tokenType, + typeExists: tokenType !== 0, }); } @@ -104,31 +83,33 @@ export class OptionType { clearinghouse, ); const optionTypeId = OptionType.getOptionTypeId(optionInfo); - const tokenType = await OptionType.getTokenType(tokenId, clearinghouse); + const tokenType = await OptionType.getTokenType( + optionTypeId, + clearinghouse, + ); return new this({ optionInfo, optionTypeId, - tokenId, - tokenType, + typeExists: tokenType !== 0, }); } - private static async getOptionTypeInfo( + protected static async getOptionTypeInfo( tokenId: bigint, clearinghouse: ClearinghouseContract, ) { return clearinghouse.read.option([tokenId]); } - private static async getTokenType( + protected static async getTokenType( tokenId: bigint, clearinghouse: ClearinghouseContract, ): Promise<0 | 1 | 2> { return clearinghouse.read.tokenType([tokenId]) as Promise<0 | 1 | 2>; } - private static getOptionTypeId(info: OptionTypeInfo) { + protected static getOptionTypeId(info: OptionTypeInfo) { const encoded = encodeAbiParameters( [ { type: 'address', name: 'underlyingAsset' }, diff --git a/src/entities/options/redeemable-claim.test.ts b/src/entities/options/redeemable-claim.test.ts index 3707bbbc..6897c9cb 100644 --- a/src/entities/options/redeemable-claim.test.ts +++ b/src/entities/options/redeemable-claim.test.ts @@ -14,7 +14,8 @@ describe('Redeemable Claim', () => { const claim = await Claim.fromId(claimId, clearinghouse); expect(claim.tokenId).toEqual(claimId); - expect(claim.tokenType).toEqual(2); + expect(claim.tokenType).toEqual(0); + expect(claim.redeemed).toBeTruthy(); expect(claim.typeExists).toBeTruthy(); expect(claim.optionTypeId).toEqual(expectedOptionTypeId); expect(claim.optionInfo).toBeDefined(); diff --git a/src/entities/options/redeemable-claim.ts b/src/entities/options/redeemable-claim.ts index 5c473fef..42a79723 100644 --- a/src/entities/options/redeemable-claim.ts +++ b/src/entities/options/redeemable-claim.ts @@ -1,9 +1,24 @@ import type { Trader } from '../trader/base-trader'; import type { SimulatedTxRequest } from '../../types'; import type { ClearinghouseContract } from '../contracts'; +import type { OptionTypeArgs } from './option-type'; import { OptionType } from './option-type'; +export interface ClaimArgs extends OptionTypeArgs { + tokenId: bigint; + tokenType: 0 | 2; +} + export class Claim extends OptionType { + public tokenId: bigint; + public tokenType: 0 | 2; + + public constructor(args: ClaimArgs) { + super(args); + this.tokenId = args.tokenId; + this.tokenType = args.tokenType; + } + public async redeemClaim(trader: Trader) { if (!this.tokenId) { console.log('Missing TokenId'); @@ -25,13 +40,24 @@ export class Claim extends OptionType { } } + public get redeemed() { + return this.tokenType === 0; + } + static async fromId(claimId: bigint, clearinghouse: ClearinghouseContract) { - const type = await super.fromId(claimId, clearinghouse); + const tokenType = await super.getTokenType(claimId, clearinghouse); + if (tokenType === 1) { + throw new Error( + 'The provided tokenId corresponds to an exercisable Option, not a redeemable Claim. Please use Option.fromId instead.', + ); + } + const optionType = await super.fromId(claimId, clearinghouse); return new this({ - optionInfo: type.optionInfo, - optionTypeId: type.optionTypeId, - tokenId: type.tokenId, - tokenType: type.tokenType, + optionInfo: optionType.optionInfo, + optionTypeId: optionType.optionTypeId, + typeExists: optionType.typeExists, + tokenId: claimId, + tokenType, }); } } diff --git a/src/entities/trader/base-trader.ts b/src/entities/trader/base-trader.ts index 355f66a4..10a9f0b4 100644 --- a/src/entities/trader/base-trader.ts +++ b/src/entities/trader/base-trader.ts @@ -18,25 +18,30 @@ import type { PartialMessage } from '@bufbuild/protobuf'; import { ConnectError } from '@connectrpc/connect'; import { ERC20Contract } from '../contracts/erc20'; import type { SimulatedTxRequest } from '../../types'; -import type { ParsedQuoteResponse } from '../../utils'; import { parseQuoteResponse, - rfqClient, - handleGRPCRequest, - authClient, - createSIWEMessage, toH256, toH160, fromH160ToAddress, -} from '../../utils'; + handleGRPCRequest, + type AuthClient, + type FeesClient, + type RFQClient, + type SpotClient, + type ParsedQuoteResponse, + type ValoremGRPCClients, +} from '../../grpc'; +import { createSIWEMessage } from '../../utils'; import { CLEAR_ADDRESS, SEAPORT_ADDRESS, NULL_BYTES32 } from '../../constants'; import { ClearinghouseContract, SeaportContract } from '../contracts'; import { Action, QuoteRequest } from '../../lib/codegen/rfq_pb'; import { ItemType } from '../../lib/codegen/seaport_pb'; -export interface TraderConstructorArgs { +export interface TraderConstructorArgs extends ValoremGRPCClients { account: Account; chain: Chain; + authClient: AuthClient; + rfqClient: RFQClient; } type Spender = typeof CLEAR_ADDRESS | typeof SEAPORT_ADDRESS; @@ -50,6 +55,11 @@ export class Trader { public seaport: SeaportContract; public clearinghouse: ClearinghouseContract; + public authClient: AuthClient; + private feesClient?: FeesClient; + public rfqClient: RFQClient; + private spotClient?: SpotClient; + /** cached results */ private erc20Balances = new Map(); private erc20Allowances = new Map< @@ -60,7 +70,14 @@ export class Trader { } >(); - public constructor({ account, chain }: TraderConstructorArgs) { + public constructor({ + account, + chain, + authClient, + feesClient, + rfqClient, + spotClient, + }: TraderConstructorArgs) { this.publicClient = createPublicClient({ chain, transport: http(), @@ -82,6 +99,11 @@ export class Trader { publicClient: this.publicClient, walletClient: this.walletClient, }); + + this.authClient = authClient; + this.feesClient = feesClient; + this.rfqClient = rfqClient; + this.spotClient = spotClient; } /** @@ -110,14 +132,14 @@ export class Trader { } public async getNonce() { - const res = await handleGRPCRequest(async () => authClient.nonce({})); + const res = await handleGRPCRequest(async () => this.authClient.nonce({})); if (res === null) throw new Error('Failed to get nonce for SIWE message.'); return res.nonce; } public async checkAuthentication() { const res = await handleGRPCRequest(async () => - authClient.authenticate({}), + this.authClient.authenticate({}), ); if (res) this.authenticated = @@ -128,7 +150,7 @@ export class Trader { public async verifyWithSIWE(message: string, signature: `0x${string}`) { const res = await handleGRPCRequest(async () => - authClient.verify({ + this.authClient.verify({ body: JSON.stringify({ message, signature, @@ -200,11 +222,11 @@ export class Trader { try { for await (const quoteResponse of method === 'taker' - ? rfqClient.taker( + ? this.rfqClient.taker( (request as () => AsyncIterable>)(), options, ) - : rfqClient.webTaker( + : this.rfqClient.webTaker( request as PartialMessage, options, )) { diff --git a/src/entities/trader/index.ts b/src/entities/trader/index.ts index d5b4761c..a461b265 100644 --- a/src/entities/trader/index.ts +++ b/src/entities/trader/index.ts @@ -1,3 +1,3 @@ -export * from './maker'; -export * from './taker'; -export * from './web-taker'; +export { Maker } from './maker'; +export { Taker } from './taker'; +export { WebTaker } from './web-taker'; diff --git a/src/entities/trader/taker.ts b/src/entities/trader/taker.ts index 83c356e2..c8c9055e 100644 --- a/src/entities/trader/taker.ts +++ b/src/entities/trader/taker.ts @@ -1,4 +1,4 @@ -import type { ParsedQuoteResponse } from '../../utils'; +import type { ParsedQuoteResponse } from '../../grpc'; import type { QuoteRequest } from '../../lib/codegen/rfq_pb'; import { Trader } from './base-trader'; import type { TraderConstructorArgs } from './base-trader'; diff --git a/src/entities/trader/trader.test.ts b/src/entities/trader/trader.test.ts index 63f00020..bbfc3b35 100644 --- a/src/entities/trader/trader.test.ts +++ b/src/entities/trader/trader.test.ts @@ -1,11 +1,17 @@ import { arbitrumGoerli } from 'viem/chains'; import { privateKeyToAccount } from 'viem/accounts'; import { describe, expect, it, vi } from 'vitest'; +import { createPromiseClient } from '@connectrpc/connect'; +import { Auth, RFQ } from '../../lib'; +import { transport } from '../../../test'; import { Trader } from './base-trader'; const PRIVATE_KEY = '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80'; +const authClient = createPromiseClient(Auth, transport); +const rfqClient = createPromiseClient(RFQ, transport); + describe('Trader Class', () => { it('Should fail to sign in due to access pass', async () => { const logSpy = vi.spyOn(console, 'log'); @@ -17,6 +23,8 @@ describe('Trader Class', () => { const trader = new Trader({ account, chain: arbitrumGoerli, + authClient, + rfqClient, }); await trader.signIn(); diff --git a/src/entities/trader/web-taker.ts b/src/entities/trader/web-taker.ts index 0933169b..ff9c0595 100644 --- a/src/entities/trader/web-taker.ts +++ b/src/entities/trader/web-taker.ts @@ -1,4 +1,4 @@ -import type { ParsedQuoteResponse } from '../../utils'; +import type { ParsedQuoteResponse } from '../../grpc'; import type { QuoteRequest } from '../../lib/codegen/rfq_pb'; import { Trader } from './base-trader'; import type { TraderConstructorArgs } from './base-trader'; diff --git a/src/grpc/clients.ts b/src/grpc/clients.ts new file mode 100644 index 00000000..873d745c --- /dev/null +++ b/src/grpc/clients.ts @@ -0,0 +1,14 @@ +import type { createPromiseClient } from '@connectrpc/connect'; +import type { Auth, Fees, RFQ, Spot } from '../lib'; + +export type AuthClient = ReturnType>; +export type FeesClient = ReturnType>; +export type RFQClient = ReturnType>; +export type SpotClient = ReturnType>; + +export interface ValoremGRPCClients { + authClient?: AuthClient; + feesClient?: FeesClient; // not yet in use + rfqClient?: RFQClient; + spotClient?: SpotClient; // not yet in use +} diff --git a/src/utils/hi-lo-bit-segmentation/bigint-to-hi-lo.ts b/src/grpc/hi-lo-bit-segmentation/bigint-to-hi-lo.ts similarity index 100% rename from src/utils/hi-lo-bit-segmentation/bigint-to-hi-lo.ts rename to src/grpc/hi-lo-bit-segmentation/bigint-to-hi-lo.ts diff --git a/src/utils/hi-lo-bit-segmentation/hi-lo-to-big-int.ts b/src/grpc/hi-lo-bit-segmentation/hi-lo-to-big-int.ts similarity index 100% rename from src/utils/hi-lo-bit-segmentation/hi-lo-to-big-int.ts rename to src/grpc/hi-lo-bit-segmentation/hi-lo-to-big-int.ts diff --git a/src/utils/hi-lo-bit-segmentation/index.ts b/src/grpc/hi-lo-bit-segmentation/index.ts similarity index 59% rename from src/utils/hi-lo-bit-segmentation/index.ts rename to src/grpc/hi-lo-bit-segmentation/index.ts index e96a422c..491c6ff9 100644 --- a/src/utils/hi-lo-bit-segmentation/index.ts +++ b/src/grpc/hi-lo-bit-segmentation/index.ts @@ -1,7 +1,4 @@ -export type { ParsedQuoteResponse } from './parse-quote-response'; - export { toH40, toH96, toH128, toH160, toH256 } from './bigint-to-hi-lo'; -export { parseQuoteResponse } from './parse-quote-response'; export { fromH40, fromH96, @@ -10,3 +7,7 @@ export { fromH160ToAddress, fromH256, } from './hi-lo-to-big-int'; +export { + parseQuoteResponse, + type ParsedQuoteResponse, +} from './parse-quote-response'; diff --git a/src/utils/hi-lo-bit-segmentation/parse-quote-response.ts b/src/grpc/hi-lo-bit-segmentation/parse-quote-response.ts similarity index 100% rename from src/utils/hi-lo-bit-segmentation/parse-quote-response.ts rename to src/grpc/hi-lo-bit-segmentation/parse-quote-response.ts diff --git a/src/grpc/index.ts b/src/grpc/index.ts new file mode 100644 index 00000000..4bb737e4 --- /dev/null +++ b/src/grpc/index.ts @@ -0,0 +1,24 @@ +export type { + AuthClient, + FeesClient, + RFQClient, + SpotClient, + ValoremGRPCClients, +} from './clients'; +export { + toH40, + toH96, + toH128, + toH160, + toH256, + fromH40, + fromH96, + fromH128, + fromH160, + fromH160ToAddress, + fromH256, + parseQuoteResponse, + type ParsedQuoteResponse, +} from './hi-lo-bit-segmentation'; +export { trackCookieInterceptor } from './interceptors'; +export { handleGRPCRequest } from './utils'; diff --git a/src/grpc/interceptors.ts b/src/grpc/interceptors.ts new file mode 100644 index 00000000..5783b5a6 --- /dev/null +++ b/src/grpc/interceptors.ts @@ -0,0 +1,15 @@ +import type { Interceptor } from '@connectrpc/connect'; + +let COOKIE: string | undefined; // to be used for all server interactions + +/** + * Custom Connect transport interceptor for retrieving & storing session cookie + */ +export const trackCookieInterceptor: Interceptor = (next) => async (req) => { + if (COOKIE !== undefined) { + req.header.set('cookie', COOKIE); + } + const res = await next(req); + COOKIE = res.header.get('set-cookie')?.split(';')[0] ?? COOKIE; + return res; +}; diff --git a/src/grpc/utils.ts b/src/grpc/utils.ts new file mode 100644 index 00000000..0caf921c --- /dev/null +++ b/src/grpc/utils.ts @@ -0,0 +1,13 @@ +import { ConnectError } from '@connectrpc/connect'; + +export const handleGRPCRequest = async ( + request: () => Promise, +): Promise => { + try { + return await request(); + } catch (error) { + const err = ConnectError.from(error); + console.error(`\nGRPC Error: ${err.message}\nCode: ${err.code}\n`); + return null; + } +}; diff --git a/src/index.ts b/src/index.ts index ccfc894b..9e9eb53f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,7 +1,96 @@ -export * from './abis'; -export * from './constants'; -export * from './entities'; -export * from './lib'; -export * from './sdk'; -export * from './types'; -export * from './utils'; +export { CLEAR_ABI, SEAPORT_V1_5_ABI, SEAPORT_VALIDATOR_ABI } from './abi'; + +export { + GRPC_ENDPOINT, + CLEAR_ADDRESS, + SEAPORT_ADDRESS, + VALIDATOR_ADDRESS, + SUPPORTED_CHAINS, + NULL_BYTES32, +} from './constants'; + +export { + type ContractConstructorArgs, + type IClearinghouse, + type IERC20, + type ISeaport, + type ISeaportValidator, + ClearinghouseContract, + ERC20Contract, + SeaportContract, + SeaportValidatorContract, + WebTaker, + Maker, + Taker, + OptionType, + type OptionTypeArgs, + Option, + type OptionArgs, + Claim, + type ClaimArgs, +} from './entities'; + +export { + type AuthClient, + type FeesClient, + type RFQClient, + type SpotClient, + type ValoremGRPCClients, + trackCookieInterceptor, + handleGRPCRequest, + toH40, + toH96, + toH128, + toH160, + toH256, + fromH40, + fromH96, + fromH128, + fromH160, + fromH160ToAddress, + fromH256, + parseQuoteResponse, + type ParsedQuoteResponse, +} from './grpc'; + +export { + Auth, + NonceText, + VerifyText, + Fees, + FeeStructure, + TradeFees, + RFQ, + Action, + QuoteRequest, + QuoteResponse, + ConsiderationItem, + ItemType, + OfferItem, + Order, + OrderType, + SignedOrder, + Spot, + SpotPriceInfo, + SpotPriceRequest, + SpotPriceResponse, + Empty, + EthSignature, + H40, + H96, + H128, + H160, + H256, +} from './lib'; + +export { ValoremSDK } from './sdk'; + +export type { + OptionTypeInfo, + SimulatedTxRequest, + SupportedAssetSymbol, + SupportedChain, + SupportedChainId, +} from './types'; + +export { createSIWEMessage, get24HrTimestamps, get8AMUTCDate } from './utils'; diff --git a/src/lib/index.ts b/src/lib/index.ts index 3db88525..ab327a4b 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -12,6 +12,12 @@ export { OrderType, SignedOrder, } from './codegen/seaport_pb'; +export { Spot } from './codegen/spot_connect'; +export { + SpotPriceInfo, + SpotPriceRequest, + SpotPriceResponse, +} from './codegen/spot_pb'; export { Empty, EthSignature, diff --git a/src/sdk.ts b/src/sdk.ts index 680caa43..685b5270 100644 --- a/src/sdk.ts +++ b/src/sdk.ts @@ -1,19 +1,18 @@ import type { Chain, PrivateKeyAccount, Account, LocalAccount } from 'viem'; import { arbitrum, arbitrumGoerli } from 'viem/chains'; import type { PublicClient, WalletClient } from '@wagmi/core'; -import { - Taker, - Maker, - ClearinghouseContract, - SeaportContract, - WebTaker, -} from './entities'; - -interface SDKOptions { +import { ClearinghouseContract, SeaportContract, WebTaker } from './entities'; +import { Maker } from './entities/trader/maker'; +import { Taker } from './entities/trader/taker'; +import type { ValoremGRPCClients } from './grpc/clients'; + +interface ViemClients { publicClient: PublicClient; walletClient?: WalletClient; } +type SDKOptions = ViemClients & ValoremGRPCClients; + export class ValoremSDK { public chain: Chain; public publicClient: PublicClient; @@ -28,7 +27,12 @@ export class ValoremSDK { private _taker?: Taker; private _webTaker?: WebTaker; - constructor({ publicClient, walletClient }: SDKOptions) { + constructor({ + publicClient, + walletClient, + authClient, + rfqClient, + }: SDKOptions) { const isSupportedNetwork = publicClient.chain.id === arbitrum.id || publicClient.chain.id === arbitrumGoerli.id; @@ -46,22 +50,30 @@ export class ValoremSDK { this.account = walletClient.account; if ( + authClient && + rfqClient && (this.account as LocalAccount<'privateKey' | 'custom'>).source === - 'privateKey' + 'privateKey' ) { this._taker = new Taker({ chain: this.chain, account: this.account as PrivateKeyAccount, + authClient, + rfqClient, }); this._webTaker = new WebTaker({ chain: this.chain, account: this.account as PrivateKeyAccount, + authClient, + rfqClient, }); this._maker = new Maker({ chain: this.chain, account: this.account as PrivateKeyAccount, + authClient, + rfqClient, }); } } diff --git a/src/types.ts b/src/types.ts index c8f0c10f..7dfd86d5 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,11 @@ -import type { Abi, Account, Chain, WriteContractParameters } from 'viem'; +import type { + Abi, + Account, + Address, + Chain, + WriteContractParameters, +} from 'viem'; +import type { SUPPORTED_CHAINS } from './constants'; export type SimulatedTxRequest = WriteContractParameters< Abi, @@ -7,3 +14,18 @@ export type SimulatedTxRequest = WriteContractParameters< Account | undefined, Chain >; + +export type SupportedChain = + (typeof SUPPORTED_CHAINS)[keyof typeof SUPPORTED_CHAINS]; +export type SupportedChainId = SupportedChain['id']; + +export type SupportedAssetSymbol = 'USDC' | 'WETH'; + +export interface OptionTypeInfo { + underlyingAsset: Address; + underlyingAmount: bigint; + exerciseAsset: Address; + exerciseAmount: bigint; + exerciseTimestamp: number; + expiryTimestamp: number; +} diff --git a/src/utils/grpc.ts b/src/utils/grpc.ts deleted file mode 100644 index ea071e97..00000000 --- a/src/utils/grpc.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { createGrpcTransport } from '@connectrpc/connect-node'; -import { ConnectError, createPromiseClient } from '@connectrpc/connect'; -import { Auth, RFQ } from '../lib'; -import { GRPC_ENDPOINT } from '../constants'; - -let COOKIE: string | undefined; // to be used for all server interactions - -// custom Connect-node transport interceptor for retrieving cookie -// eslint-disable-next-line @typescript-eslint/no-explicit-any -const trackCookie = (next: any) => async (req: any) => { - if (COOKIE !== undefined) { - req.header = [['cookie', COOKIE]]; - } - const res = await next({ - ...req, - headers: { ...req.headers, cookie: COOKIE }, - }); - COOKIE = res.header?.get('set-cookie')?.split(';')[0] ?? COOKIE; - return res; -}; - -// transport for connection to Valorem Trade gRPC server -const transport = createGrpcTransport({ - baseUrl: GRPC_ENDPOINT, - httpVersion: '2', - interceptors: [trackCookie], - nodeOptions: { - // TODO THIS IS INSECURE - // cert: TLS_CERT, // doesnt work - // ca: CA, // doesnt work - rejectUnauthorized: false, // insecure - }, -}); - -export const authClient: ReturnType> = - createPromiseClient(Auth, transport); -export const rfqClient: ReturnType> = - createPromiseClient(RFQ, transport); - -export const handleGRPCRequest = async ( - request: () => Promise, -): Promise => { - try { - return await request(); - } catch (error) { - const err = ConnectError.from(error); - console.error(`\nGRPC Error: ${err.message}\nCode: ${err.code}\n`); - return null; - } -}; diff --git a/src/utils/index.ts b/src/utils/index.ts index 9cc61b53..f7e3e786 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,4 +1,2 @@ -export * from './hi-lo-bit-segmentation'; -export * from './siwe'; -export * from './timestamps'; -export * from './grpc'; +export { createSIWEMessage } from './siwe'; +export { get24HrTimestamps, get8AMUTCDate } from './timestamps'; diff --git a/test/index.ts b/test/index.ts index dff010f6..cc4527c9 100644 --- a/test/index.ts +++ b/test/index.ts @@ -1,7 +1,9 @@ import type { PublicClient } from '@wagmi/core'; import { http, createPublicClient } from 'viem'; import { arbitrumGoerli } from 'viem/chains'; -import { ClearinghouseContract } from '../src'; +import { createGrpcTransport } from '@connectrpc/connect-node'; +import { ClearinghouseContract, GRPC_ENDPOINT } from '../src'; +import { trackCookieInterceptor } from '../src/grpc'; // our mock USDC on Arbitrum Goerli export const USDC_ADDRESS = '0x8AE0EeedD35DbEFe460Df12A20823eFDe9e03458'; @@ -16,3 +18,16 @@ export const publicClient: PublicClient = createPublicClient({ export const clearinghouse = new ClearinghouseContract({ publicClient, }); + +// transport for connection to Valorem Trade gRPC server +export const transport = createGrpcTransport({ + baseUrl: GRPC_ENDPOINT, + httpVersion: '2', + interceptors: [trackCookieInterceptor], + nodeOptions: { + // TODO THIS IS INSECURE + // cert: TLS_CERT, // doesnt work + // ca: CA, // doesnt work + rejectUnauthorized: false, // insecure + }, +}); diff --git a/tsup.cjs.ts b/tsup.cjs.ts new file mode 100644 index 00000000..a41fc4cc --- /dev/null +++ b/tsup.cjs.ts @@ -0,0 +1,9 @@ +import { defineConfig } from 'tsup'; +import { baseTsupConfig } from './tsup.esm'; + +export default defineConfig({ + ...baseTsupConfig, + format: ['cjs'], + outDir: 'dist/_cjs', + sourcemap: true, +}); diff --git a/tsup.config.ts b/tsup.config.ts deleted file mode 100644 index 1c32eb2c..00000000 --- a/tsup.config.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { defineConfig } from 'tsup'; - -export default defineConfig({ - entry: ['src/index.ts'], - sourcemap: true, - clean: true, - dts: true, - bundle: true, - format: ['esm'], - splitting: true, - target: 'es2021', - shims: true, -}); diff --git a/tsup.esm.ts b/tsup.esm.ts new file mode 100644 index 00000000..7345a6f7 --- /dev/null +++ b/tsup.esm.ts @@ -0,0 +1,18 @@ +import { defineConfig, Options } from 'tsup'; +import { dependencies, peerDependencies } from './package.json'; + +export const baseTsupConfig: Options = { + entry: ['src/index.ts'], + target: 'es2021', + bundle: true, + treeshake: true, + platform: 'neutral', + external: [...Object.keys(dependencies), ...Object.keys(peerDependencies)], +}; + +export default defineConfig({ + ...baseTsupConfig, + format: ['esm'], + outDir: 'dist/_esm', + dts: true, +});