diff --git a/npm/CHANGELOG.md b/npm/CHANGELOG.md index 426fdcb..3515de0 100644 --- a/npm/CHANGELOG.md +++ b/npm/CHANGELOG.md @@ -1,5 +1,11 @@ # @penumbra-labs/registry +## 5.0.0 + +### Major Changes + +- New registry class + ## 4.1.0 ### Minor Changes diff --git a/npm/package.json b/npm/package.json index 4b01ad9..d203088 100644 --- a/npm/package.json +++ b/npm/package.json @@ -1,6 +1,6 @@ { "name": "@penumbra-labs/registry", - "version": "4.1.0", + "version": "5.0.0", "description": "Chain and asset registry for Penumbra", "main": "./dist/index.js", "module": "./dist/index.mjs", @@ -15,15 +15,16 @@ "test": "vitest run" }, "devDependencies": { - "@buf/penumbra-zone_penumbra.bufbuild_es": "1.8.0-20240415223544-c0a709144747.2", + "@buf/penumbra-zone_penumbra.bufbuild_es": "1.9.0-20240423164216-32b3675faa56.1", + "@bufbuild/protobuf": "^1.9.0", "@changesets/cli": "^2.27.1", "@eslint/eslintrc": "^3.0.2", - "@eslint/js": "^9.0.0", - "eslint": "^9.0.0", + "@eslint/js": "^9.1.1", + "eslint": "^9.1.1", "prettier": "^3.2.5", "tsup": "^8.0.2", "typescript": "^5.4.5", - "typescript-eslint": "^7.7.0", + "typescript-eslint": "^7.7.1", "vitest": "^1.5.0" }, "files": [ diff --git a/npm/pnpm-lock.yaml b/npm/pnpm-lock.yaml index fcea19d..1614484 100644 --- a/npm/pnpm-lock.yaml +++ b/npm/pnpm-lock.yaml @@ -6,8 +6,11 @@ settings: devDependencies: '@buf/penumbra-zone_penumbra.bufbuild_es': - specifier: 1.8.0-20240415223544-c0a709144747.2 - version: 1.8.0-20240415223544-c0a709144747.2(@bufbuild/protobuf@1.8.0) + specifier: 1.9.0-20240423164216-32b3675faa56.1 + version: 1.9.0-20240423164216-32b3675faa56.1(@bufbuild/protobuf@1.9.0) + '@bufbuild/protobuf': + specifier: ^1.9.0 + version: 1.9.0 '@changesets/cli': specifier: ^2.27.1 version: 2.27.1 @@ -15,11 +18,11 @@ devDependencies: specifier: ^3.0.2 version: 3.0.2 '@eslint/js': - specifier: ^9.0.0 - version: 9.0.0 + specifier: ^9.1.1 + version: 9.1.1 eslint: - specifier: ^9.0.0 - version: 9.0.0 + specifier: ^9.1.1 + version: 9.1.1 prettier: specifier: ^3.2.5 version: 3.2.5 @@ -30,8 +33,8 @@ devDependencies: specifier: ^5.4.5 version: 5.4.5 typescript-eslint: - specifier: ^7.7.0 - version: 7.7.0(eslint@9.0.0)(typescript@5.4.5) + specifier: ^7.7.1 + version: 7.7.1(eslint@9.1.1)(typescript@5.4.5) vitest: specifier: ^1.5.0 version: 1.5.0 @@ -87,148 +90,148 @@ packages: regenerator-runtime: 0.14.1 dev: true - /@buf/cosmos_cosmos-proto.bufbuild_es@1.8.0-20211202220400-1935555c206d.2(@bufbuild/protobuf@1.8.0): + /@buf/cosmos_cosmos-proto.bufbuild_es@1.9.0-20211202220400-1935555c206d.1(@bufbuild/protobuf@1.9.0): resolution: { - tarball: https://buf.build/gen/npm/v1/@buf/cosmos_cosmos-proto.bufbuild_es/-/cosmos_cosmos-proto.bufbuild_es-1.8.0-20211202220400-1935555c206d.2.tgz, + tarball: https://buf.build/gen/npm/v1/@buf/cosmos_cosmos-proto.bufbuild_es/-/cosmos_cosmos-proto.bufbuild_es-1.9.0-20211202220400-1935555c206d.1.tgz, } peerDependencies: - '@bufbuild/protobuf': ^1.8.0 + '@bufbuild/protobuf': ^1.9.0 dependencies: - '@bufbuild/protobuf': 1.8.0 + '@bufbuild/protobuf': 1.9.0 dev: true - /@buf/cosmos_cosmos-sdk.bufbuild_es@1.8.0-20230522115704-e7a85cef453e.2(@bufbuild/protobuf@1.8.0): + /@buf/cosmos_cosmos-sdk.bufbuild_es@1.9.0-20230522115704-e7a85cef453e.1(@bufbuild/protobuf@1.9.0): resolution: { - tarball: https://buf.build/gen/npm/v1/@buf/cosmos_cosmos-sdk.bufbuild_es/-/cosmos_cosmos-sdk.bufbuild_es-1.8.0-20230522115704-e7a85cef453e.2.tgz, + tarball: https://buf.build/gen/npm/v1/@buf/cosmos_cosmos-sdk.bufbuild_es/-/cosmos_cosmos-sdk.bufbuild_es-1.9.0-20230522115704-e7a85cef453e.1.tgz, } peerDependencies: - '@bufbuild/protobuf': ^1.8.0 + '@bufbuild/protobuf': ^1.9.0 dependencies: - '@buf/cosmos_cosmos-proto.bufbuild_es': 1.8.0-20211202220400-1935555c206d.2(@bufbuild/protobuf@1.8.0) - '@buf/cosmos_gogo-proto.bufbuild_es': 1.8.0-20221020125208-34d970b699f8.2(@bufbuild/protobuf@1.8.0) - '@buf/googleapis_googleapis.bufbuild_es': 1.8.0-20221214150216-75b4300737fb.2(@bufbuild/protobuf@1.8.0) - '@bufbuild/protobuf': 1.8.0 + '@buf/cosmos_cosmos-proto.bufbuild_es': 1.9.0-20211202220400-1935555c206d.1(@bufbuild/protobuf@1.9.0) + '@buf/cosmos_gogo-proto.bufbuild_es': 1.9.0-20221020125208-34d970b699f8.1(@bufbuild/protobuf@1.9.0) + '@buf/googleapis_googleapis.bufbuild_es': 1.9.0-20221214150216-75b4300737fb.1(@bufbuild/protobuf@1.9.0) + '@bufbuild/protobuf': 1.9.0 dev: true - /@buf/cosmos_cosmos-sdk.bufbuild_es@1.8.0-20230719110346-aa25660f4ff7.2(@bufbuild/protobuf@1.8.0): + /@buf/cosmos_cosmos-sdk.bufbuild_es@1.9.0-20230719110346-aa25660f4ff7.1(@bufbuild/protobuf@1.9.0): resolution: { - tarball: https://buf.build/gen/npm/v1/@buf/cosmos_cosmos-sdk.bufbuild_es/-/cosmos_cosmos-sdk.bufbuild_es-1.8.0-20230719110346-aa25660f4ff7.2.tgz, + tarball: https://buf.build/gen/npm/v1/@buf/cosmos_cosmos-sdk.bufbuild_es/-/cosmos_cosmos-sdk.bufbuild_es-1.9.0-20230719110346-aa25660f4ff7.1.tgz, } peerDependencies: - '@bufbuild/protobuf': ^1.8.0 + '@bufbuild/protobuf': ^1.9.0 dependencies: - '@buf/cosmos_cosmos-proto.bufbuild_es': 1.8.0-20211202220400-1935555c206d.2(@bufbuild/protobuf@1.8.0) - '@buf/cosmos_gogo-proto.bufbuild_es': 1.8.0-20230509103710-5e5b9fdd0180.2(@bufbuild/protobuf@1.8.0) - '@buf/googleapis_googleapis.bufbuild_es': 1.8.0-20230502210827-cc916c318597.2(@bufbuild/protobuf@1.8.0) - '@bufbuild/protobuf': 1.8.0 + '@buf/cosmos_cosmos-proto.bufbuild_es': 1.9.0-20211202220400-1935555c206d.1(@bufbuild/protobuf@1.9.0) + '@buf/cosmos_gogo-proto.bufbuild_es': 1.9.0-20230509103710-5e5b9fdd0180.1(@bufbuild/protobuf@1.9.0) + '@buf/googleapis_googleapis.bufbuild_es': 1.9.0-20230502210827-cc916c318597.1(@bufbuild/protobuf@1.9.0) + '@bufbuild/protobuf': 1.9.0 dev: true - /@buf/cosmos_gogo-proto.bufbuild_es@1.8.0-20221020125208-34d970b699f8.2(@bufbuild/protobuf@1.8.0): + /@buf/cosmos_gogo-proto.bufbuild_es@1.9.0-20221020125208-34d970b699f8.1(@bufbuild/protobuf@1.9.0): resolution: { - tarball: https://buf.build/gen/npm/v1/@buf/cosmos_gogo-proto.bufbuild_es/-/cosmos_gogo-proto.bufbuild_es-1.8.0-20221020125208-34d970b699f8.2.tgz, + tarball: https://buf.build/gen/npm/v1/@buf/cosmos_gogo-proto.bufbuild_es/-/cosmos_gogo-proto.bufbuild_es-1.9.0-20221020125208-34d970b699f8.1.tgz, } peerDependencies: - '@bufbuild/protobuf': ^1.8.0 + '@bufbuild/protobuf': ^1.9.0 dependencies: - '@bufbuild/protobuf': 1.8.0 + '@bufbuild/protobuf': 1.9.0 dev: true - /@buf/cosmos_gogo-proto.bufbuild_es@1.8.0-20230509103710-5e5b9fdd0180.2(@bufbuild/protobuf@1.8.0): + /@buf/cosmos_gogo-proto.bufbuild_es@1.9.0-20230509103710-5e5b9fdd0180.1(@bufbuild/protobuf@1.9.0): resolution: { - tarball: https://buf.build/gen/npm/v1/@buf/cosmos_gogo-proto.bufbuild_es/-/cosmos_gogo-proto.bufbuild_es-1.8.0-20230509103710-5e5b9fdd0180.2.tgz, + tarball: https://buf.build/gen/npm/v1/@buf/cosmos_gogo-proto.bufbuild_es/-/cosmos_gogo-proto.bufbuild_es-1.9.0-20230509103710-5e5b9fdd0180.1.tgz, } peerDependencies: - '@bufbuild/protobuf': ^1.8.0 + '@bufbuild/protobuf': ^1.9.0 dependencies: - '@bufbuild/protobuf': 1.8.0 + '@bufbuild/protobuf': 1.9.0 dev: true - /@buf/cosmos_ibc.bufbuild_es@1.8.0-20230913112312-7ab44ae956a0.2(@bufbuild/protobuf@1.8.0): + /@buf/cosmos_ibc.bufbuild_es@1.9.0-20230913112312-7ab44ae956a0.1(@bufbuild/protobuf@1.9.0): resolution: { - tarball: https://buf.build/gen/npm/v1/@buf/cosmos_ibc.bufbuild_es/-/cosmos_ibc.bufbuild_es-1.8.0-20230913112312-7ab44ae956a0.2.tgz, + tarball: https://buf.build/gen/npm/v1/@buf/cosmos_ibc.bufbuild_es/-/cosmos_ibc.bufbuild_es-1.9.0-20230913112312-7ab44ae956a0.1.tgz, } peerDependencies: - '@bufbuild/protobuf': ^1.8.0 + '@bufbuild/protobuf': ^1.9.0 dependencies: - '@buf/cosmos_cosmos-proto.bufbuild_es': 1.8.0-20211202220400-1935555c206d.2(@bufbuild/protobuf@1.8.0) - '@buf/cosmos_cosmos-sdk.bufbuild_es': 1.8.0-20230719110346-aa25660f4ff7.2(@bufbuild/protobuf@1.8.0) - '@buf/cosmos_gogo-proto.bufbuild_es': 1.8.0-20221020125208-34d970b699f8.2(@bufbuild/protobuf@1.8.0) - '@buf/cosmos_ics23.bufbuild_es': 1.8.0-20221207100654-55085f7c710a.2(@bufbuild/protobuf@1.8.0) - '@buf/googleapis_googleapis.bufbuild_es': 1.8.0-20220908150232-8d7204855ec1.2(@bufbuild/protobuf@1.8.0) - '@bufbuild/protobuf': 1.8.0 + '@buf/cosmos_cosmos-proto.bufbuild_es': 1.9.0-20211202220400-1935555c206d.1(@bufbuild/protobuf@1.9.0) + '@buf/cosmos_cosmos-sdk.bufbuild_es': 1.9.0-20230719110346-aa25660f4ff7.1(@bufbuild/protobuf@1.9.0) + '@buf/cosmos_gogo-proto.bufbuild_es': 1.9.0-20221020125208-34d970b699f8.1(@bufbuild/protobuf@1.9.0) + '@buf/cosmos_ics23.bufbuild_es': 1.9.0-20221207100654-55085f7c710a.1(@bufbuild/protobuf@1.9.0) + '@buf/googleapis_googleapis.bufbuild_es': 1.9.0-20220908150232-8d7204855ec1.1(@bufbuild/protobuf@1.9.0) + '@bufbuild/protobuf': 1.9.0 dev: true - /@buf/cosmos_ics23.bufbuild_es@1.8.0-20221207100654-55085f7c710a.2(@bufbuild/protobuf@1.8.0): + /@buf/cosmos_ics23.bufbuild_es@1.9.0-20221207100654-55085f7c710a.1(@bufbuild/protobuf@1.9.0): resolution: { - tarball: https://buf.build/gen/npm/v1/@buf/cosmos_ics23.bufbuild_es/-/cosmos_ics23.bufbuild_es-1.8.0-20221207100654-55085f7c710a.2.tgz, + tarball: https://buf.build/gen/npm/v1/@buf/cosmos_ics23.bufbuild_es/-/cosmos_ics23.bufbuild_es-1.9.0-20221207100654-55085f7c710a.1.tgz, } peerDependencies: - '@bufbuild/protobuf': ^1.8.0 + '@bufbuild/protobuf': ^1.9.0 dependencies: - '@bufbuild/protobuf': 1.8.0 + '@bufbuild/protobuf': 1.9.0 dev: true - /@buf/googleapis_googleapis.bufbuild_es@1.8.0-20220908150232-8d7204855ec1.2(@bufbuild/protobuf@1.8.0): + /@buf/googleapis_googleapis.bufbuild_es@1.9.0-20220908150232-8d7204855ec1.1(@bufbuild/protobuf@1.9.0): resolution: { - tarball: https://buf.build/gen/npm/v1/@buf/googleapis_googleapis.bufbuild_es/-/googleapis_googleapis.bufbuild_es-1.8.0-20220908150232-8d7204855ec1.2.tgz, + tarball: https://buf.build/gen/npm/v1/@buf/googleapis_googleapis.bufbuild_es/-/googleapis_googleapis.bufbuild_es-1.9.0-20220908150232-8d7204855ec1.1.tgz, } peerDependencies: - '@bufbuild/protobuf': ^1.8.0 + '@bufbuild/protobuf': ^1.9.0 dependencies: - '@bufbuild/protobuf': 1.8.0 + '@bufbuild/protobuf': 1.9.0 dev: true - /@buf/googleapis_googleapis.bufbuild_es@1.8.0-20221214150216-75b4300737fb.2(@bufbuild/protobuf@1.8.0): + /@buf/googleapis_googleapis.bufbuild_es@1.9.0-20221214150216-75b4300737fb.1(@bufbuild/protobuf@1.9.0): resolution: { - tarball: https://buf.build/gen/npm/v1/@buf/googleapis_googleapis.bufbuild_es/-/googleapis_googleapis.bufbuild_es-1.8.0-20221214150216-75b4300737fb.2.tgz, + tarball: https://buf.build/gen/npm/v1/@buf/googleapis_googleapis.bufbuild_es/-/googleapis_googleapis.bufbuild_es-1.9.0-20221214150216-75b4300737fb.1.tgz, } peerDependencies: - '@bufbuild/protobuf': ^1.8.0 + '@bufbuild/protobuf': ^1.9.0 dependencies: - '@bufbuild/protobuf': 1.8.0 + '@bufbuild/protobuf': 1.9.0 dev: true - /@buf/googleapis_googleapis.bufbuild_es@1.8.0-20230502210827-cc916c318597.2(@bufbuild/protobuf@1.8.0): + /@buf/googleapis_googleapis.bufbuild_es@1.9.0-20230502210827-cc916c318597.1(@bufbuild/protobuf@1.9.0): resolution: { - tarball: https://buf.build/gen/npm/v1/@buf/googleapis_googleapis.bufbuild_es/-/googleapis_googleapis.bufbuild_es-1.8.0-20230502210827-cc916c318597.2.tgz, + tarball: https://buf.build/gen/npm/v1/@buf/googleapis_googleapis.bufbuild_es/-/googleapis_googleapis.bufbuild_es-1.9.0-20230502210827-cc916c318597.1.tgz, } peerDependencies: - '@bufbuild/protobuf': ^1.8.0 + '@bufbuild/protobuf': ^1.9.0 dependencies: - '@bufbuild/protobuf': 1.8.0 + '@bufbuild/protobuf': 1.9.0 dev: true - /@buf/penumbra-zone_penumbra.bufbuild_es@1.8.0-20240415223544-c0a709144747.2(@bufbuild/protobuf@1.8.0): + /@buf/penumbra-zone_penumbra.bufbuild_es@1.9.0-20240423164216-32b3675faa56.1(@bufbuild/protobuf@1.9.0): resolution: { - tarball: https://buf.build/gen/npm/v1/@buf/penumbra-zone_penumbra.bufbuild_es/-/penumbra-zone_penumbra.bufbuild_es-1.8.0-20240415223544-c0a709144747.2.tgz, + tarball: https://buf.build/gen/npm/v1/@buf/penumbra-zone_penumbra.bufbuild_es/-/penumbra-zone_penumbra.bufbuild_es-1.9.0-20240423164216-32b3675faa56.1.tgz, } peerDependencies: - '@bufbuild/protobuf': ^1.8.0 + '@bufbuild/protobuf': ^1.9.0 dependencies: - '@buf/cosmos_cosmos-proto.bufbuild_es': 1.8.0-20211202220400-1935555c206d.2(@bufbuild/protobuf@1.8.0) - '@buf/cosmos_cosmos-sdk.bufbuild_es': 1.8.0-20230522115704-e7a85cef453e.2(@bufbuild/protobuf@1.8.0) - '@buf/cosmos_gogo-proto.bufbuild_es': 1.8.0-20221020125208-34d970b699f8.2(@bufbuild/protobuf@1.8.0) - '@buf/cosmos_ibc.bufbuild_es': 1.8.0-20230913112312-7ab44ae956a0.2(@bufbuild/protobuf@1.8.0) - '@buf/cosmos_ics23.bufbuild_es': 1.8.0-20221207100654-55085f7c710a.2(@bufbuild/protobuf@1.8.0) - '@buf/googleapis_googleapis.bufbuild_es': 1.8.0-20221214150216-75b4300737fb.2(@bufbuild/protobuf@1.8.0) - '@bufbuild/protobuf': 1.8.0 + '@buf/cosmos_cosmos-proto.bufbuild_es': 1.9.0-20211202220400-1935555c206d.1(@bufbuild/protobuf@1.9.0) + '@buf/cosmos_cosmos-sdk.bufbuild_es': 1.9.0-20230522115704-e7a85cef453e.1(@bufbuild/protobuf@1.9.0) + '@buf/cosmos_gogo-proto.bufbuild_es': 1.9.0-20221020125208-34d970b699f8.1(@bufbuild/protobuf@1.9.0) + '@buf/cosmos_ibc.bufbuild_es': 1.9.0-20230913112312-7ab44ae956a0.1(@bufbuild/protobuf@1.9.0) + '@buf/cosmos_ics23.bufbuild_es': 1.9.0-20221207100654-55085f7c710a.1(@bufbuild/protobuf@1.9.0) + '@buf/googleapis_googleapis.bufbuild_es': 1.9.0-20221214150216-75b4300737fb.1(@bufbuild/protobuf@1.9.0) + '@bufbuild/protobuf': 1.9.0 dev: true - /@bufbuild/protobuf@1.8.0: + /@bufbuild/protobuf@1.9.0: resolution: { - integrity: sha512-qR9FwI8QKIveDnUYutvfzbC21UZJJryYrLuZGjeZ/VGz+vXelUkK+xgkOHsvPEdYEdxtgUUq4313N8QtOehJ1Q==, + integrity: sha512-W7gp8Q/v1NlCZLsv8pQ3Y0uCu/SHgXOVFK+eUluUKWXmsb6VHkpNx0apdOWWcDbB9sJoKeP8uPrjmehJz6xETQ==, } dev: true @@ -1018,7 +1021,7 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@9.0.0): + /@eslint-community/eslint-utils@4.4.0(eslint@9.1.1): resolution: { integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==, @@ -1027,7 +1030,7 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 9.0.0 + eslint: 9.1.1 eslint-visitor-keys: 3.4.3 dev: true @@ -1059,18 +1062,18 @@ packages: - supports-color dev: true - /@eslint/js@9.0.0: + /@eslint/js@9.1.1: resolution: { - integrity: sha512-RThY/MnKrhubF6+s1JflwUjPEsnCEmYCWwqa/aRISKWNXGZ9epUwft4bUMM35SdKF9xvBrLydAM1RDHd1Z//ZQ==, + integrity: sha512-5WoDz3Y19Bg2BnErkZTp0en+c/i9PvgFS7MBe1+m60HjFr0hrphlAGp4yzI7pxpt4xShln4ZyYp4neJm8hmOkQ==, } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } dev: true - /@humanwhocodes/config-array@0.12.3: + /@humanwhocodes/config-array@0.13.0: resolution: { - integrity: sha512-jsNnTBlMWuTpDkeE3on7+dWJi0D6fdDfeANj/w7MpS8ztROCoLvIO2nG0CcFj+E4k8j4QrSTh4Oryi3i2G669g==, + integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==, } engines: { node: '>=10.10.0' } dependencies: @@ -1096,6 +1099,14 @@ packages: } dev: true + /@humanwhocodes/retry@0.2.3: + resolution: + { + integrity: sha512-X38nUbachlb01YMlvPFojKoiXq+LzZvuSce70KPMPdeM1Rj03k4dR7lDslhbqXn3Ang4EU3+EAmwEAsbrjHW3g==, + } + engines: { node: '>=18.18' } + dev: true + /@isaacs/cliui@8.0.2: resolution: { @@ -1232,10 +1243,10 @@ packages: dev: true optional: true - /@rollup/rollup-android-arm-eabi@4.14.3: + /@rollup/rollup-android-arm-eabi@4.16.4: resolution: { - integrity: sha512-X9alQ3XM6I9IlSlmC8ddAvMSyG1WuHk5oUnXGw+yUBs3BFoTizmG1La/Gr8fVJvDWAq+zlYTZ9DBgrlKRVY06g==, + integrity: sha512-GkhjAaQ8oUTOKE4g4gsZ0u8K/IHU1+2WQSgS1TwTcYvL+sjbaQjNHFXbOJ6kgqGHIO1DfUhI/Sphi9GkRT9K+Q==, } cpu: [arm] os: [android] @@ -1243,10 +1254,10 @@ packages: dev: true optional: true - /@rollup/rollup-android-arm64@4.14.3: + /@rollup/rollup-android-arm64@4.16.4: resolution: { - integrity: sha512-eQK5JIi+POhFpzk+LnjKIy4Ks+pwJ+NXmPxOCSvOKSNRPONzKuUvWE+P9JxGZVxrtzm6BAYMaL50FFuPe0oWMQ==, + integrity: sha512-Bvm6D+NPbGMQOcxvS1zUl8H7DWlywSXsphAeOnVeiZLQ+0J6Is8T7SrjGTH29KtYkiY9vld8ZnpV3G2EPbom+w==, } cpu: [arm64] os: [android] @@ -1254,10 +1265,10 @@ packages: dev: true optional: true - /@rollup/rollup-darwin-arm64@4.14.3: + /@rollup/rollup-darwin-arm64@4.16.4: resolution: { - integrity: sha512-Od4vE6f6CTT53yM1jgcLqNfItTsLt5zE46fdPaEmeFHvPs5SjZYlLpHrSiHEKR1+HdRfxuzXHjDOIxQyC3ptBA==, + integrity: sha512-i5d64MlnYBO9EkCOGe5vPR/EeDwjnKOGGdd7zKFhU5y8haKhQZTN2DgVtpODDMxUr4t2K90wTUJg7ilgND6bXw==, } cpu: [arm64] os: [darwin] @@ -1265,10 +1276,10 @@ packages: dev: true optional: true - /@rollup/rollup-darwin-x64@4.14.3: + /@rollup/rollup-darwin-x64@4.16.4: resolution: { - integrity: sha512-0IMAO21axJeNIrvS9lSe/PGthc8ZUS+zC53O0VhF5gMxfmcKAP4ESkKOCwEi6u2asUrt4mQv2rjY8QseIEb1aw==, + integrity: sha512-WZupV1+CdUYehaZqjaFTClJI72fjJEgTXdf4NbW69I9XyvdmztUExBtcI2yIIU6hJtYvtwS6pkTkHJz+k08mAQ==, } cpu: [x64] os: [darwin] @@ -1276,10 +1287,10 @@ packages: dev: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.14.3: + /@rollup/rollup-linux-arm-gnueabihf@4.16.4: resolution: { - integrity: sha512-ge2DC7tHRHa3caVEoSbPRJpq7azhG+xYsd6u2MEnJ6XzPSzQsTKyXvh6iWjXRf7Rt9ykIUWHtl0Uz3T6yXPpKw==, + integrity: sha512-ADm/xt86JUnmAfA9mBqFcRp//RVRt1ohGOYF6yL+IFCYqOBNwy5lbEK05xTsEoJq+/tJzg8ICUtS82WinJRuIw==, } cpu: [arm] os: [linux] @@ -1287,10 +1298,10 @@ packages: dev: true optional: true - /@rollup/rollup-linux-arm-musleabihf@4.14.3: + /@rollup/rollup-linux-arm-musleabihf@4.16.4: resolution: { - integrity: sha512-ljcuiDI4V3ySuc7eSk4lQ9wU8J8r8KrOUvB2U+TtK0TiW6OFDmJ+DdIjjwZHIw9CNxzbmXY39wwpzYuFDwNXuw==, + integrity: sha512-tJfJaXPiFAG+Jn3cutp7mCs1ePltuAgRqdDZrzb1aeE3TktWWJ+g7xK9SNlaSUFw6IU4QgOxAY4rA+wZUT5Wfg==, } cpu: [arm] os: [linux] @@ -1298,10 +1309,10 @@ packages: dev: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.14.3: + /@rollup/rollup-linux-arm64-gnu@4.16.4: resolution: { - integrity: sha512-Eci2us9VTHm1eSyn5/eEpaC7eP/mp5n46gTRB3Aar3BgSvDQGJZuicyq6TsH4HngNBgVqC5sDYxOzTExSU+NjA==, + integrity: sha512-7dy1BzQkgYlUTapDTvK997cgi0Orh5Iu7JlZVBy1MBURk7/HSbHkzRnXZa19ozy+wwD8/SlpJnOOckuNZtJR9w==, } cpu: [arm64] os: [linux] @@ -1309,10 +1320,10 @@ packages: dev: true optional: true - /@rollup/rollup-linux-arm64-musl@4.14.3: + /@rollup/rollup-linux-arm64-musl@4.16.4: resolution: { - integrity: sha512-UrBoMLCq4E92/LCqlh+blpqMz5h1tJttPIniwUgOFJyjWI1qrtrDhhpHPuFxULlUmjFHfloWdixtDhSxJt5iKw==, + integrity: sha512-zsFwdUw5XLD1gQe0aoU2HVceI6NEW7q7m05wA46eUAyrkeNYExObfRFQcvA6zw8lfRc5BHtan3tBpo+kqEOxmg==, } cpu: [arm64] os: [linux] @@ -1320,10 +1331,10 @@ packages: dev: true optional: true - /@rollup/rollup-linux-powerpc64le-gnu@4.14.3: + /@rollup/rollup-linux-powerpc64le-gnu@4.16.4: resolution: { - integrity: sha512-5aRjvsS8q1nWN8AoRfrq5+9IflC3P1leMoy4r2WjXyFqf3qcqsxRCfxtZIV58tCxd+Yv7WELPcO9mY9aeQyAmw==, + integrity: sha512-p8C3NnxXooRdNrdv6dBmRTddEapfESEUflpICDNKXpHvTjRRq1J82CbU5G3XfebIZyI3B0s074JHMWD36qOW6w==, } cpu: [ppc64] os: [linux] @@ -1331,10 +1342,10 @@ packages: dev: true optional: true - /@rollup/rollup-linux-riscv64-gnu@4.14.3: + /@rollup/rollup-linux-riscv64-gnu@4.16.4: resolution: { - integrity: sha512-sk/Qh1j2/RJSX7FhEpJn8n0ndxy/uf0kI/9Zc4b1ELhqULVdTfN6HL31CDaTChiBAOgLcsJ1sgVZjWv8XNEsAQ==, + integrity: sha512-Lh/8ckoar4s4Id2foY7jNgitTOUQczwMWNYi+Mjt0eQ9LKhr6sK477REqQkmy8YHY3Ca3A2JJVdXnfb3Rrwkng==, } cpu: [riscv64] os: [linux] @@ -1342,10 +1353,10 @@ packages: dev: true optional: true - /@rollup/rollup-linux-s390x-gnu@4.14.3: + /@rollup/rollup-linux-s390x-gnu@4.16.4: resolution: { - integrity: sha512-jOO/PEaDitOmY9TgkxF/TQIjXySQe5KVYB57H/8LRP/ux0ZoO8cSHCX17asMSv3ruwslXW/TLBcxyaUzGRHcqg==, + integrity: sha512-1xwwn9ZCQYuqGmulGsTZoKrrn0z2fAur2ujE60QgyDpHmBbXbxLaQiEvzJWDrscRq43c8DnuHx3QorhMTZgisQ==, } cpu: [s390x] os: [linux] @@ -1353,10 +1364,10 @@ packages: dev: true optional: true - /@rollup/rollup-linux-x64-gnu@4.14.3: + /@rollup/rollup-linux-x64-gnu@4.16.4: resolution: { - integrity: sha512-8ybV4Xjy59xLMyWo3GCfEGqtKV5M5gCSrZlxkPGvEPCGDLNla7v48S662HSGwRd6/2cSneMQWiv+QzcttLrrOA==, + integrity: sha512-LuOGGKAJ7dfRtxVnO1i3qWc6N9sh0Em/8aZ3CezixSTM+E9Oq3OvTsvC4sm6wWjzpsIlOCnZjdluINKESflJLA==, } cpu: [x64] os: [linux] @@ -1364,10 +1375,10 @@ packages: dev: true optional: true - /@rollup/rollup-linux-x64-musl@4.14.3: + /@rollup/rollup-linux-x64-musl@4.16.4: resolution: { - integrity: sha512-s+xf1I46trOY10OqAtZ5Rm6lzHre/UiLA1J2uOhCFXWkbZrJRkYBPO6FhvGfHmdtQ3Bx793MNa7LvoWFAm93bg==, + integrity: sha512-ch86i7KkJKkLybDP2AtySFTRi5fM3KXp0PnHocHuJMdZwu7BuyIKi35BE9guMlmTpwwBTB3ljHj9IQXnTCD0vA==, } cpu: [x64] os: [linux] @@ -1375,10 +1386,10 @@ packages: dev: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.14.3: + /@rollup/rollup-win32-arm64-msvc@4.16.4: resolution: { - integrity: sha512-+4h2WrGOYsOumDQ5S2sYNyhVfrue+9tc9XcLWLh+Kw3UOxAvrfOrSMFon60KspcDdytkNDh7K2Vs6eMaYImAZg==, + integrity: sha512-Ma4PwyLfOWZWayfEsNQzTDBVW8PZ6TUUN1uFTBQbF2Chv/+sjenE86lpiEwj2FiviSmSZ4Ap4MaAfl1ciF4aSA==, } cpu: [arm64] os: [win32] @@ -1386,10 +1397,10 @@ packages: dev: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.14.3: + /@rollup/rollup-win32-ia32-msvc@4.16.4: resolution: { - integrity: sha512-T1l7y/bCeL/kUwh9OD4PQT4aM7Bq43vX05htPJJ46RTI4r5KNt6qJRzAfNfM+OYMNEVBWQzR2Gyk+FXLZfogGw==, + integrity: sha512-9m/ZDrQsdo/c06uOlP3W9G2ENRVzgzbSXmXHT4hwVaDQhYcRpi9bgBT0FTG9OhESxwK0WjQxYOSfv40cU+T69w==, } cpu: [ia32] os: [win32] @@ -1397,10 +1408,10 @@ packages: dev: true optional: true - /@rollup/rollup-win32-x64-msvc@4.14.3: + /@rollup/rollup-win32-x64-msvc@4.16.4: resolution: { - integrity: sha512-/BypzV0H1y1HzgYpxqRaXGBRqfodgoBBCcsrujT6QRcakDQdfU+Lq9PENPh5jB4I44YWq+0C2eHsHya+nZY1sA==, + integrity: sha512-YunpoOAyGLDseanENHmbFvQSfVL5BxW3k7hhy0eN4rb3gS/ct75dVD0EXOWIqFT/nE8XYW6LP6vz6ctKRi0k9A==, } cpu: [x64] os: [win32] @@ -1457,10 +1468,10 @@ packages: } dev: true - /@typescript-eslint/eslint-plugin@7.7.0(@typescript-eslint/parser@7.7.0)(eslint@9.0.0)(typescript@5.4.5): + /@typescript-eslint/eslint-plugin@7.7.1(@typescript-eslint/parser@7.7.1)(eslint@9.1.1)(typescript@5.4.5): resolution: { - integrity: sha512-GJWR0YnfrKnsRoluVO3PRb9r5aMZriiMMM/RHj5nnTrBy1/wIgk76XCtCKcnXGjpZQJQRFtGV9/0JJ6n30uwpQ==, + integrity: sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q==, } engines: { node: ^18.18.0 || >=20.0.0 } peerDependencies: @@ -1472,13 +1483,13 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.7.0(eslint@9.0.0)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 7.7.0 - '@typescript-eslint/type-utils': 7.7.0(eslint@9.0.0)(typescript@5.4.5) - '@typescript-eslint/utils': 7.7.0(eslint@9.0.0)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.7.0 + '@typescript-eslint/parser': 7.7.1(eslint@9.1.1)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.7.1 + '@typescript-eslint/type-utils': 7.7.1(eslint@9.1.1)(typescript@5.4.5) + '@typescript-eslint/utils': 7.7.1(eslint@9.1.1)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.7.1 debug: 4.3.4 - eslint: 9.0.0 + eslint: 9.1.1 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 @@ -1489,10 +1500,10 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@7.7.0(eslint@9.0.0)(typescript@5.4.5): + /@typescript-eslint/parser@7.7.1(eslint@9.1.1)(typescript@5.4.5): resolution: { - integrity: sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==, + integrity: sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==, } engines: { node: ^18.18.0 || >=20.0.0 } peerDependencies: @@ -1502,32 +1513,32 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 7.7.0 - '@typescript-eslint/types': 7.7.0 - '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.7.0 + '@typescript-eslint/scope-manager': 7.7.1 + '@typescript-eslint/types': 7.7.1 + '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.7.1 debug: 4.3.4 - eslint: 9.0.0 + eslint: 9.1.1 typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@7.7.0: + /@typescript-eslint/scope-manager@7.7.1: resolution: { - integrity: sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==, + integrity: sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==, } engines: { node: ^18.18.0 || >=20.0.0 } dependencies: - '@typescript-eslint/types': 7.7.0 - '@typescript-eslint/visitor-keys': 7.7.0 + '@typescript-eslint/types': 7.7.1 + '@typescript-eslint/visitor-keys': 7.7.1 dev: true - /@typescript-eslint/type-utils@7.7.0(eslint@9.0.0)(typescript@5.4.5): + /@typescript-eslint/type-utils@7.7.1(eslint@9.1.1)(typescript@5.4.5): resolution: { - integrity: sha512-bOp3ejoRYrhAlnT/bozNQi3nio9tIgv3U5C0mVDdZC7cpcQEDZXvq8inrHYghLVwuNABRqrMW5tzAv88Vy77Sg==, + integrity: sha512-ZksJLW3WF7o75zaBPScdW1Gbkwhd/lyeXGf1kQCxJaOeITscoSl0MjynVvCzuV5boUz/3fOI06Lz8La55mu29Q==, } engines: { node: ^18.18.0 || >=20.0.0 } peerDependencies: @@ -1537,28 +1548,28 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5) - '@typescript-eslint/utils': 7.7.0(eslint@9.0.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.4.5) + '@typescript-eslint/utils': 7.7.1(eslint@9.1.1)(typescript@5.4.5) debug: 4.3.4 - eslint: 9.0.0 + eslint: 9.1.1 ts-api-utils: 1.3.0(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@7.7.0: + /@typescript-eslint/types@7.7.1: resolution: { - integrity: sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==, + integrity: sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==, } engines: { node: ^18.18.0 || >=20.0.0 } dev: true - /@typescript-eslint/typescript-estree@7.7.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@7.7.1(typescript@5.4.5): resolution: { - integrity: sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==, + integrity: sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==, } engines: { node: ^18.18.0 || >=20.0.0 } peerDependencies: @@ -1567,8 +1578,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 7.7.0 - '@typescript-eslint/visitor-keys': 7.7.0 + '@typescript-eslint/types': 7.7.1 + '@typescript-eslint/visitor-keys': 7.7.1 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -1580,36 +1591,36 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@7.7.0(eslint@9.0.0)(typescript@5.4.5): + /@typescript-eslint/utils@7.7.1(eslint@9.1.1)(typescript@5.4.5): resolution: { - integrity: sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig==, + integrity: sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==, } engines: { node: ^18.18.0 || >=20.0.0 } peerDependencies: eslint: ^8.56.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.1.1) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 7.7.0 - '@typescript-eslint/types': 7.7.0 - '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5) - eslint: 9.0.0 + '@typescript-eslint/scope-manager': 7.7.1 + '@typescript-eslint/types': 7.7.1 + '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.4.5) + eslint: 9.1.1 semver: 7.6.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@7.7.0: + /@typescript-eslint/visitor-keys@7.7.1: resolution: { - integrity: sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==, + integrity: sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==, } engines: { node: ^18.18.0 || >=20.0.0 } dependencies: - '@typescript-eslint/types': 7.7.0 + '@typescript-eslint/types': 7.7.1 eslint-visitor-keys: 3.4.3 dev: true @@ -1938,10 +1949,10 @@ packages: wcwidth: 1.0.1 dev: true - /bundle-require@4.0.2(esbuild@0.19.12): + /bundle-require@4.0.3(esbuild@0.19.12): resolution: { - integrity: sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==, + integrity: sha512-2iscZ3fcthP2vka4Y7j277YJevwmsby/FpFDwjgw34Nl7dtCpt7zz/4TexmHMzY6KZEih7En9ImlbbgUNNQGtA==, } engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } peerDependencies: @@ -2647,20 +2658,21 @@ packages: engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } dev: true - /eslint@9.0.0: + /eslint@9.1.1: resolution: { - integrity: sha512-IMryZ5SudxzQvuod6rUdIUz29qFItWx281VhtFVc2Psy/ZhlCeD/5DT6lBIJ4H3G+iamGJoTln1v+QSuPw0p7Q==, + integrity: sha512-b4cRQ0BeZcSEzPpY2PjFY70VbO32K7BStTGtBsnIGdTSEEQzBi8hPBcGQmTG2zUvFr9uLe0TK42bw8YszuHEqg==, } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.1.1) '@eslint-community/regexpp': 4.10.0 '@eslint/eslintrc': 3.0.2 - '@eslint/js': 9.0.0 - '@humanwhocodes/config-array': 0.12.3 + '@eslint/js': 9.1.1 + '@humanwhocodes/config-array': 0.13.0 '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.2.3 '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 chalk: 4.1.2 @@ -2676,7 +2688,6 @@ packages: file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - graphemer: 1.4.0 ignore: 5.3.1 imurmurhash: 0.1.4 is-glob: 4.0.3 @@ -4628,32 +4639,32 @@ packages: engines: { iojs: '>=1.0.0', node: '>=0.10.0' } dev: true - /rollup@4.14.3: + /rollup@4.16.4: resolution: { - integrity: sha512-ag5tTQKYsj1bhrFC9+OEWqb5O6VYgtQDO9hPDBMmIbePwhfSr+ExlcU741t8Dhw5DkPCQf6noz0jb36D6W9/hw==, + integrity: sha512-kuaTJSUbz+Wsb2ATGvEknkI12XV40vIiHmLuFlejoo7HtDok/O5eDDD0UpCVY5bBX5U5RYo8wWP83H7ZsqVEnA==, } engines: { node: '>=18.0.0', npm: '>=8.0.0' } hasBin: true dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.14.3 - '@rollup/rollup-android-arm64': 4.14.3 - '@rollup/rollup-darwin-arm64': 4.14.3 - '@rollup/rollup-darwin-x64': 4.14.3 - '@rollup/rollup-linux-arm-gnueabihf': 4.14.3 - '@rollup/rollup-linux-arm-musleabihf': 4.14.3 - '@rollup/rollup-linux-arm64-gnu': 4.14.3 - '@rollup/rollup-linux-arm64-musl': 4.14.3 - '@rollup/rollup-linux-powerpc64le-gnu': 4.14.3 - '@rollup/rollup-linux-riscv64-gnu': 4.14.3 - '@rollup/rollup-linux-s390x-gnu': 4.14.3 - '@rollup/rollup-linux-x64-gnu': 4.14.3 - '@rollup/rollup-linux-x64-musl': 4.14.3 - '@rollup/rollup-win32-arm64-msvc': 4.14.3 - '@rollup/rollup-win32-ia32-msvc': 4.14.3 - '@rollup/rollup-win32-x64-msvc': 4.14.3 + '@rollup/rollup-android-arm-eabi': 4.16.4 + '@rollup/rollup-android-arm64': 4.16.4 + '@rollup/rollup-darwin-arm64': 4.16.4 + '@rollup/rollup-darwin-x64': 4.16.4 + '@rollup/rollup-linux-arm-gnueabihf': 4.16.4 + '@rollup/rollup-linux-arm-musleabihf': 4.16.4 + '@rollup/rollup-linux-arm64-gnu': 4.16.4 + '@rollup/rollup-linux-arm64-musl': 4.16.4 + '@rollup/rollup-linux-powerpc64le-gnu': 4.16.4 + '@rollup/rollup-linux-riscv64-gnu': 4.16.4 + '@rollup/rollup-linux-s390x-gnu': 4.16.4 + '@rollup/rollup-linux-x64-gnu': 4.16.4 + '@rollup/rollup-linux-x64-musl': 4.16.4 + '@rollup/rollup-win32-arm64-msvc': 4.16.4 + '@rollup/rollup-win32-ia32-msvc': 4.16.4 + '@rollup/rollup-win32-x64-msvc': 4.16.4 fsevents: 2.3.3 dev: true @@ -5258,7 +5269,7 @@ packages: typescript: optional: true dependencies: - bundle-require: 4.0.2(esbuild@0.19.12) + bundle-require: 4.0.3(esbuild@0.19.12) cac: 6.7.14 chokidar: 3.6.0 debug: 4.3.4 @@ -5268,7 +5279,7 @@ packages: joycon: 3.1.1 postcss-load-config: 4.0.2 resolve-from: 5.0.0 - rollup: 4.14.3 + rollup: 4.16.4 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tree-kill: 1.2.2 @@ -5393,10 +5404,10 @@ packages: possible-typed-array-names: 1.0.0 dev: true - /typescript-eslint@7.7.0(eslint@9.0.0)(typescript@5.4.5): + /typescript-eslint@7.7.1(eslint@9.1.1)(typescript@5.4.5): resolution: { - integrity: sha512-wZZ+7mTQJCn4mGAvzdERtL4vwKGM/mF9cMSMeKUllz3Hgbd1Mdd5L60Q+nJmCio9RB4OyMMr0EX4Ry2Q7jiAyw==, + integrity: sha512-ykEBfa3xx3odjZy6GRED4SCPrjo0rgHwstLlEgLX4EMEuv7QeIDSmfV+S6Kk+XkbsYn4BDEcPvsci1X26lRpMQ==, } engines: { node: ^18.18.0 || >=20.0.0 } peerDependencies: @@ -5406,10 +5417,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 7.7.0(@typescript-eslint/parser@7.7.0)(eslint@9.0.0)(typescript@5.4.5) - '@typescript-eslint/parser': 7.7.0(eslint@9.0.0)(typescript@5.4.5) - '@typescript-eslint/utils': 7.7.0(eslint@9.0.0)(typescript@5.4.5) - eslint: 9.0.0 + '@typescript-eslint/eslint-plugin': 7.7.1(@typescript-eslint/parser@7.7.1)(eslint@9.1.1)(typescript@5.4.5) + '@typescript-eslint/parser': 7.7.1(eslint@9.1.1)(typescript@5.4.5) + '@typescript-eslint/utils': 7.7.1(eslint@9.1.1)(typescript@5.4.5) + eslint: 9.1.1 typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -5527,7 +5538,7 @@ packages: dependencies: esbuild: 0.20.2 postcss: 8.4.38 - rollup: 4.14.3 + rollup: 4.16.4 optionalDependencies: fsevents: 2.3.3 dev: true diff --git a/npm/src/client.ts b/npm/src/client.ts index a4700a4..7e0f45d 100644 --- a/npm/src/client.ts +++ b/npm/src/client.ts @@ -1,41 +1,6 @@ import { GithubFetcher } from './github'; -import { - AssetId, - Metadata, -} from '@buf/penumbra-zone_penumbra.bufbuild_es/penumbra/core/asset/v1/asset_pb'; import { deriveTestnetChainIdFromPreview, isTestnetPreviewChainId } from './utils'; - -// @ts-expect-error alias for dev only -// eslint-disable-next-line @typescript-eslint/no-unused-vars -type Jsonified = string; - -export interface Registry { - chainId: string; - ibcConnections: Chain[]; - rpcs: Rpc[]; - assetById: Record, Jsonified>; - stakingAssetId: Jsonified; - numeraires: Jsonified[]; -} - -export interface Chain { - addressPrefix: string; - chainId: string; - ibcChannel: string; - images: Image[]; - displayName: string; -} - -export interface Rpc { - name: string; - url: string; - images: Image[]; -} - -export interface Image { - png?: string; - svg?: string; -} +import { Registry } from './registry'; export class ChainRegistryClient { private readonly github: GithubFetcher; diff --git a/npm/src/github.ts b/npm/src/github.ts index e759461..8b5005f 100644 --- a/npm/src/github.ts +++ b/npm/src/github.ts @@ -1,20 +1,14 @@ -import { Registry } from './client'; +import { Metadata } from '@buf/penumbra-zone_penumbra.bufbuild_es/penumbra/core/asset/v1/asset_pb'; +import { Jsonified } from './utils'; +import { Base64AssetId, Chain, Registry, Rpc } from './registry'; -export interface GithubContentsRes { - name: string; - path: string; - sha: string; - size: number; - url: string; - html_url: string; - git_url: string; - download_url: string; - type: string; - _links: { - self: string; - git: string; - html: string; - }; +export interface GithubRegistryResponse { + chainId: string; + ibcConnections: Chain[]; + rpcs: Rpc[]; + assetById: Record>; + stakingAssetId: Base64AssetId; + numeraires: Base64AssetId[]; } const REGISTRY_BASE_URL = 'https://raw.githubusercontent.com/prax-wallet/registry/main/registry'; @@ -26,7 +20,10 @@ export class GithubFetcher { async fetchRegistryData(chainId: ChainId): Promise { if (this.cache[chainId]) return this.cache[chainId]!; - return this.typedFetcher(`${REGISTRY_BASE_URL}/${chainId}.json`); + const response = await this.typedFetcher( + `${REGISTRY_BASE_URL}/${chainId}.json`, + ); + return new Registry(response); } clearCache(): void { diff --git a/npm/src/index.ts b/npm/src/index.ts index 4f1cce4..2dab484 100644 --- a/npm/src/index.ts +++ b/npm/src/index.ts @@ -1 +1,2 @@ export * from './client'; +export * from './registry'; diff --git a/npm/src/registry.test.ts b/npm/src/registry.test.ts new file mode 100644 index 0000000..cba4d64 --- /dev/null +++ b/npm/src/registry.test.ts @@ -0,0 +1,101 @@ +import { describe, expect, it } from 'vitest'; +import { base64ToUint8Array } from './utils'; +import { Registry } from './registry'; +import { GithubRegistryResponse } from './github'; +import { AssetId } from '@buf/penumbra-zone_penumbra.bufbuild_es/penumbra/core/asset/v1/asset_pb'; + +const testRegistry: GithubRegistryResponse = { + chainId: 'penumbra-testnet-deimos-6', + ibcConnections: [ + { + addressPrefix: 'osmo', + chainId: 'osmo-test-5', + ibcChannel: 'channel-3', + displayName: 'Osmosis', + images: [ + { + svg: 'https://raw.githubusercontent.com/cosmos/chain-registry/f1348793beb994c6cc0256ed7ebdb48c7aa70003/osmosis/images/osmo.svg', + }, + ], + }, + ], + rpcs: [ + { + name: 'Penumbra Labs Testnet RPC', + url: 'https://grpc.testnet.penumbra.zone', + images: [ + { + png: 'https://raw.githubusercontent.com/prax-wallet/registry/main/images/penumbra-favicon.png', + }, + ], + }, + ], + assetById: { + 'KeqcLzNx9qSH5+lcJHBB9KNW+YPrBk5dKzvPMiypahA=': { + denomUnits: [ + { + denom: 'penumbra', + exponent: 6, + }, + { + denom: 'mpenumbra', + exponent: 3, + }, + { + denom: 'upenumbra', + }, + ], + base: 'upenumbra', + display: 'penumbra', + symbol: 'UM', + penumbraAssetId: { + inner: 'KeqcLzNx9qSH5+lcJHBB9KNW+YPrBk5dKzvPMiypahA=', + }, + images: [ + { + svg: 'https://raw.githubusercontent.com/prax-wallet/registry/main/images/um.svg', + }, + ], + }, + 'reum7wQmk/owgvGMWMZn/6RFPV24zIKq3W6In/WwZgg=': { + denomUnits: [ + { + denom: 'test_usd', + exponent: 18, + }, + { + denom: 'wtest_usd', + }, + ], + base: 'wtest_usd', + display: 'test_usd', + symbol: 'TestUSD', + penumbraAssetId: { + inner: 'reum7wQmk/owgvGMWMZn/6RFPV24zIKq3W6In/WwZgg=', + }, + images: [ + { + svg: 'https://raw.githubusercontent.com/prax-wallet/registry/main/images/test-usd.svg', + }, + ], + }, + }, + stakingAssetId: 'KeqcLzNx9qSH5+lcJHBB9KNW+YPrBk5dKzvPMiypahA=', + numeraires: ['reum7wQmk/owgvGMWMZn/6RFPV24zIKq3W6In/WwZgg='], +}; + +describe('Registry', () => { + it('get metadata successfully', () => { + const registry = new Registry(testRegistry); + const usdcId = base64ToUint8Array('reum7wQmk/owgvGMWMZn/6RFPV24zIKq3W6In/WwZgg='); + const res = registry.getMetadata(new AssetId({ inner: usdcId })); + expect(res.base).toEqual('wtest_usd'); + }); + + it('throw when searching for metadata that does not exist', () => { + const registry = new Registry(testRegistry); + const cubeId = base64ToUint8Array('6KBVsPINa8gWSHhfH+kAFJC4afEJA3EtuB2HyCqJUws='); + const getCubeMetadata = () => registry.getMetadata(new AssetId({ inner: cubeId })); + expect(getCubeMetadata).toThrow(); + }); +}); diff --git a/npm/src/registry.ts b/npm/src/registry.ts new file mode 100644 index 0000000..26f3cfa --- /dev/null +++ b/npm/src/registry.ts @@ -0,0 +1,55 @@ +import { + AssetId, + Metadata, +} from '@buf/penumbra-zone_penumbra.bufbuild_es/penumbra/core/asset/v1/asset_pb'; +import { base64ToUint8Array, mapObjectValues, Stringified, uint8ArrayToBase64 } from './utils'; +import { GithubRegistryResponse } from './github'; + +export type Base64AssetId = Stringified; + +export interface Chain { + addressPrefix: string; + chainId: string; + ibcChannel: string; + images: Image[]; + displayName: string; +} + +export interface Rpc { + name: string; + url: string; + images: Image[]; +} + +export interface Image { + png?: string; + svg?: string; +} + +export class Registry { + public readonly chainId: string; + public readonly ibcConnections: Chain[]; + public readonly rpcs: Rpc[]; + public readonly stakingAssetId: AssetId; + public readonly numeraires: AssetId[]; + + private readonly assetById: Record; + + constructor(response: GithubRegistryResponse) { + this.chainId = response.chainId; + this.ibcConnections = response.ibcConnections; + this.rpcs = response.rpcs; + this.assetById = mapObjectValues(response.assetById, id => Metadata.fromJson(id)); + this.stakingAssetId = new AssetId({ inner: base64ToUint8Array(response.stakingAssetId) }); + this.numeraires = response.numeraires.map(a => new AssetId({ inner: base64ToUint8Array(a) })); + } + + getMetadata(id: AssetId): Metadata { + const key = uint8ArrayToBase64(id.inner); + const metadata = this.assetById[key]; + if (!metadata) { + throw new Error(`No metadata in registry for asset id: ${key}`); + } + return metadata; + } +} diff --git a/npm/src/utils.test.ts b/npm/src/utils.test.ts index 279b9f5..6cfb450 100644 --- a/npm/src/utils.test.ts +++ b/npm/src/utils.test.ts @@ -1,21 +1,27 @@ -import { describe, expect, test } from 'vitest'; -import { deriveTestnetChainIdFromPreview, isTestnetPreviewChainId } from './utils'; +import { describe, expect, it } from 'vitest'; +import { + base64ToUint8Array, + deriveTestnetChainIdFromPreview, + isTestnetPreviewChainId, + mapObjectValues, + uint8ArrayToBase64, +} from './utils'; describe('testnet-preview helper', () => { - test('should correctly identify testnet-preview chain-id', () => { + it('should correctly identify testnet-preview chain-id', () => { expect(isTestnetPreviewChainId('penumbra-testnet-deimos-6-711be12a')).toBeTruthy(); expect(isTestnetPreviewChainId('penumbra-testnet-deimos-222-711be12a')).toBeTruthy(); expect(isTestnetPreviewChainId('penumbra-testnet-rhea-8b2dfc5c')).toBeTruthy(); expect(isTestnetPreviewChainId('penumbra-testnet-tethy12-8777cb20')).toBeTruthy(); }); - test('should not identify chain-id as testnet-preview', () => { + it('should not identify chain-id as testnet-preview', () => { expect(isTestnetPreviewChainId('penumbra-mainnet')).toBeFalsy(); expect(isTestnetPreviewChainId('penumbra-testnet-rhea')).toBeFalsy(); expect(isTestnetPreviewChainId('penumbra-testnet-deimos-6')).toBeFalsy(); }); - test('should correctly derive testnet chain-id from testnet-preview chain-id', () => { + it('should correctly derive testnet chain-id from testnet-preview chain-id', () => { expect(deriveTestnetChainIdFromPreview('penumbra-testnet-deimos-6-711be12a')).toEqual( 'penumbra-testnet-deimos-6', ); @@ -27,3 +33,67 @@ describe('testnet-preview helper', () => { ); }); }); + +describe('mapObjectValues', () => { + it('should apply a function to each value in the object', () => { + const original = { a: 1, b: 2, c: 3 }; + const expected = { a: 2, b: 3, c: 4 }; + const result = mapObjectValues(original, x => x + 1); + expect(result).toEqual(expected); + }); + + it('should handle objects with various types of values', () => { + const original = { a: 'hello', b: true, c: 10 }; + const expected = { a: 'HELLO', b: 'TRUE', c: '10' }; + const result = mapObjectValues(original, x => String(x).toUpperCase()); + expect(result).toEqual(expected); + }); + + it('should not mutate the original object', () => { + const original = { a: 1, b: 2, c: 3 }; + const originalCopy = { ...original }; + mapObjectValues(original, x => x * 10); + expect(original).toEqual(originalCopy); + }); +}); + +describe('uint8ArrayToBase64', () => { + it('converts an empty Uint8Array to an empty string', () => { + const byteArray = new Uint8Array(); + const result = uint8ArrayToBase64(byteArray); + expect(result).toBe(''); + }); + + it('correctly converts a Uint8Array to a base64 string', () => { + const byteArray = new Uint8Array([104, 101, 108, 108, 111]); // ASCII for "hello" + const result = uint8ArrayToBase64(byteArray); + expect(result).toBe('aGVsbG8='); // base64 for "hello" + }); + + it('correctly converts a large Uint8Array to a base64 string', () => { + const largeArray = new Uint8Array(1024).fill(97); // 1024 bytes all set to ASCII for "a" + const result = uint8ArrayToBase64(largeArray); + expect(result).toBe(Buffer.from(largeArray).toString('base64')); // compare with Node's built-in conversion + }); +}); + +describe('base64ToUint8Array', () => { + it('should correctly convert a Base64 string to Uint8Array', () => { + const base64String = 'SGVsbG8gd29ybGQ='; // 'Hello world' in Base64 + const expectedUint8Array = new Uint8Array([ + 72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, + ]); // 'Hello world' in ASCII values + expect(base64ToUint8Array(base64String)).toEqual(expectedUint8Array); + }); + + it('should return an empty Uint8Array for an empty Base64 string', () => { + const base64String = ''; + const expectedUint8Array = new Uint8Array([]); + expect(base64ToUint8Array(base64String)).toEqual(expectedUint8Array); + }); + + it('should handle non-Base64 strings', () => { + const nonBase64String = 'This is not a Base64 string'; + expect(() => base64ToUint8Array(nonBase64String)).toThrow(); + }); +}); diff --git a/npm/src/utils.ts b/npm/src/utils.ts index 0b8a48c..25cfb83 100644 --- a/npm/src/utils.ts +++ b/npm/src/utils.ts @@ -1,3 +1,39 @@ +import { JsonValue } from '@bufbuild/protobuf'; + +// @ts-expect-error alias for dev only +// eslint-disable-next-line @typescript-eslint/no-unused-vars +export type Jsonified = JsonValue; + +// @ts-expect-error alias for dev only +// eslint-disable-next-line @typescript-eslint/no-unused-vars +export type Stringified = string; + +type MapFunction = (value: T) => U; + +export const mapObjectValues = ( + obj: Record, + mapFn: MapFunction, +): Record => { + const mappedEntries = Object.entries(obj).map(([key, value]): [string, U] => [key, mapFn(value)]); + return Object.fromEntries(mappedEntries); +}; + +export const uint8ArrayToBase64 = (byteArray: Uint8Array): string => { + const binString = String.fromCodePoint(...byteArray); + return btoa(binString); +}; + +export const base64ToUint8Array = (base64: string): Uint8Array => { + const base64Regex = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/; + + if (!base64Regex.test(base64)) { + throw new Error('Input string is not a valid Base64 encoded string'); + } + + const binString = atob(base64); + return Uint8Array.from(binString, byte => byte.codePointAt(0)!); +}; + const TESTNET_PREVIEW_PATTERN = /^(penumbra-testnet-(?:\w+-)*\w+)-[a-f0-9]{8}$/; export const isTestnetPreviewChainId = (chainId: string) => {