From ebc46e8b8a3f3edcc0faa0d32af537a99b793e43 Mon Sep 17 00:00:00 2001 From: Gabe Rodriguez Date: Wed, 10 Jul 2024 15:45:45 +0200 Subject: [PATCH] expose remote registry fetching methods (#57) * expose remote registry fetching methods * update workflow * tests * Rework version api + tests --- .github/workflows/typescript-check.yml | 3 + input/chains/penumbra-testnet-deimos-6.json | 211 ------ input/chains/penumbra-testnet-deimos-7.json | 211 ------ npm/CHANGELOG.md | 6 + npm/package.json | 7 +- npm/pnpm-lock.yaml | 643 ++++++++---------- npm/src/{client.test.ts => bundled.test.ts} | 14 +- npm/src/bundled.ts | 20 + npm/src/client.ts | 37 +- npm/src/github.ts | 39 ++ npm/src/globals.test.ts | 19 + npm/src/globals.ts | 20 + npm/src/json.ts | 26 +- npm/src/preview.ts | 11 + npm/src/registry.test.ts | 81 +-- npm/src/registry.ts | 5 + npm/src/remote.test.ts | 61 ++ npm/src/remote.ts | 17 + npm/src/utils/commit-info-vite-plugin.ts | 28 - npm/src/utils/sha256.test.ts | 26 + npm/src/utils/sha256.ts | 14 + npm/vite-env.d.ts | 4 - npm/vite.config.ts | 3 +- .../chains/penumbra-testnet-deimos-6.json | 368 ---------- .../chains/penumbra-testnet-deimos-7.json | 368 ---------- 25 files changed, 571 insertions(+), 1671 deletions(-) delete mode 100644 input/chains/penumbra-testnet-deimos-6.json delete mode 100644 input/chains/penumbra-testnet-deimos-7.json rename npm/src/{client.test.ts => bundled.test.ts} (69%) create mode 100644 npm/src/bundled.ts create mode 100644 npm/src/github.ts create mode 100644 npm/src/globals.test.ts create mode 100644 npm/src/globals.ts create mode 100644 npm/src/preview.ts create mode 100644 npm/src/remote.test.ts create mode 100644 npm/src/remote.ts delete mode 100644 npm/src/utils/commit-info-vite-plugin.ts create mode 100644 npm/src/utils/sha256.test.ts create mode 100644 npm/src/utils/sha256.ts delete mode 100644 npm/vite-env.d.ts delete mode 100644 registry/chains/penumbra-testnet-deimos-6.json delete mode 100644 registry/chains/penumbra-testnet-deimos-7.json diff --git a/.github/workflows/typescript-check.yml b/.github/workflows/typescript-check.yml index 557ef3e..a0309ea 100644 --- a/.github/workflows/typescript-check.yml +++ b/.github/workflows/typescript-check.yml @@ -62,6 +62,9 @@ jobs: - uses: pnpm/action-setup@v3 with: version: 9 + - uses: buildjet/setup-node@v4 + with: + node-version: '22' - name: Install dependencies run: pnpm install diff --git a/input/chains/penumbra-testnet-deimos-6.json b/input/chains/penumbra-testnet-deimos-6.json deleted file mode 100644 index d67ca87..0000000 --- a/input/chains/penumbra-testnet-deimos-6.json +++ /dev/null @@ -1,211 +0,0 @@ -{ - "chainId": "penumbra-testnet-deimos-6", - "ibcConnections": [ - { - "displayName": "Osmosis", - "chainId": "osmo-test-5", - "channelId": "channel-4", - "counterpartyChannelId": "channel-7780", - "addressPrefix": "osmo", - "cosmosRegistryDir": "testnets/osmosistestnet", - "images": [ - { - "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/f1348793beb994c6cc0256ed7ebdb48c7aa70003/osmosis/images/osmo.svg" - } - ] - }, - { - "displayName": "Noble", - "chainId": "grand-1", - "channelId": "channel-3", - "counterpartyChannelId": "channel-164", - "addressPrefix": "noble", - "cosmosRegistryDir": "testnets/nobletestnet", - "images": [ - { - "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/2ca39d0e4eaf3431cca13991948e099801f02e46/noble/images/stake.svg" - } - ] - } - ], - "validators": [], - "nativeAssets": [ - { - "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" - } - ] - }, - { - "denomUnits": [ - { - "denom": "gm", - "exponent": 6 - }, - { - "denom": "mgm", - "exponent": 3 - }, - { - "denom": "ugm" - } - ], - "base": "ugm", - "display": "gm", - "symbol": "GM", - "penumbraAssetId": { - "inner": "HW2Eq3UZVSBttoUwUi/MUtE7rr2UU7/UH500byp7OAc=" - } - }, - { - "denomUnits": [ - { - "denom": "gn", - "exponent": 6 - }, - { - "denom": "mgn", - "exponent": 3 - }, - { - "denom": "ugn" - } - ], - "base": "ugn", - "display": "gn", - "symbol": "GN", - "penumbraAssetId": { - "inner": "nwPDkQq3OvLnBwGTD+nmv1Ifb2GEmFCgNHrU++9BsRE=" - } - }, - { - "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" - } - ] - }, - { - "denomUnits": [ - { - "denom": "cube" - } - ], - "base": "cube", - "display": "cube", - "symbol": "CUBE", - "penumbraAssetId": { - "inner": "6KBVsPINa8gWSHhfH+kAFJC4afEJA3EtuB2HyCqJUws=" - } - }, - { - "denomUnits": [ - { - "denom": "pizza" - } - ], - "base": "pizza", - "display": "pizza", - "symbol": "PIZZA", - "penumbraAssetId": { - "inner": "nDjzm+ldIrNMJha1anGMDVxpA5cLCPnUYQ1clmHF1gw=" - }, - "images": [ - { - "svg": "https://raw.githubusercontent.com/prax-wallet/registry/main/images/pizza.svg" - } - ] - }, - { - "denomUnits": [ - { - "denom": "delegation_penumbravalid18nkv0r3sfp2seleq6du5kt3mhfce3k6cqm77kj2e7mhakmyw9v9qx42a20", - "exponent": 6 - }, - { - "denom": "mdelegation_penumbravalid18nkv0r3sfp2seleq6du5kt3mhfce3k6cqm77kj2e7mhakmyw9v9qx42a20", - "exponent": 3 - }, - { - "denom": "udelegation_penumbravalid18nkv0r3sfp2seleq6du5kt3mhfce3k6cqm77kj2e7mhakmyw9v9qx42a20" - } - ], - "base": "udelegation_penumbravalid18nkv0r3sfp2seleq6du5kt3mhfce3k6cqm77kj2e7mhakmyw9v9qx42a20", - "display": "delegation_penumbravalid18nkv0r3sfp2seleq6du5kt3mhfce3k6cqm77kj2e7mhakmyw9v9qx42a20", - "penumbraAssetId": { - "inner": "CwpUYIdQ9H5Dnf3oQ1l7ISeVMVahWbVNNvMA0dBSdwI=" - }, - "symbol": "Delegation (Penumbra Labs CI 1)", - "images": [ - { - "png": "https://raw.githubusercontent.com/prax-wallet/registry/main/images/penumbra-favicon.png" - } - ] - }, - { - "denomUnits": [ - { - "denom": "delegation_penumbravalid1qfxldejdhanmu302kcn5fm98q5d7d2upfhzqhaz95hyjdn82pqysqfq050", - "exponent": 6 - }, - { - "denom": "mdelegation_penumbravalid1qfxldejdhanmu302kcn5fm98q5d7d2upfhzqhaz95hyjdn82pqysqfq050", - "exponent": 3 - }, - { - "denom": "udelegation_penumbravalid1qfxldejdhanmu302kcn5fm98q5d7d2upfhzqhaz95hyjdn82pqysqfq050" - } - ], - "base": "udelegation_penumbravalid1qfxldejdhanmu302kcn5fm98q5d7d2upfhzqhaz95hyjdn82pqysqfq050", - "display": "delegation_penumbravalid1qfxldejdhanmu302kcn5fm98q5d7d2upfhzqhaz95hyjdn82pqysqfq050", - "penumbraAssetId": { - "inner": "qUn70lKZ3qQlCT5gj5sakux4daiTPKj0AN6ZuuFldQU=" - }, - "symbol": "Delegation (Penumbra Labs CI 2)", - "images": [ - { - "png": "https://raw.githubusercontent.com/prax-wallet/registry/main/images/penumbra-favicon.png" - } - ] - } - ], - "canonicalNumeraires": [ - "wtest_usd", - "transfer/channel-3/uusdc" - ] -} \ No newline at end of file diff --git a/input/chains/penumbra-testnet-deimos-7.json b/input/chains/penumbra-testnet-deimos-7.json deleted file mode 100644 index b090fe4..0000000 --- a/input/chains/penumbra-testnet-deimos-7.json +++ /dev/null @@ -1,211 +0,0 @@ -{ - "chainId": "penumbra-testnet-deimos-7", - "ibcConnections": [ - { - "displayName": "Osmosis", - "chainId": "osmo-test-5", - "channelId": "channel-4", - "counterpartyChannelId": "channel-7780", - "addressPrefix": "osmo", - "cosmosRegistryDir": "testnets/osmosistestnet", - "images": [ - { - "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/f1348793beb994c6cc0256ed7ebdb48c7aa70003/osmosis/images/osmo.svg" - } - ] - }, - { - "displayName": "Noble", - "chainId": "grand-1", - "channelId": "channel-3", - "counterpartyChannelId": "channel-164", - "addressPrefix": "noble", - "cosmosRegistryDir": "testnets/nobletestnet", - "images": [ - { - "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/2ca39d0e4eaf3431cca13991948e099801f02e46/noble/images/stake.svg" - } - ] - } - ], - "validators": [], - "nativeAssets": [ - { - "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" - } - ] - }, - { - "denomUnits": [ - { - "denom": "gm", - "exponent": 6 - }, - { - "denom": "mgm", - "exponent": 3 - }, - { - "denom": "ugm" - } - ], - "base": "ugm", - "display": "gm", - "symbol": "GM", - "penumbraAssetId": { - "inner": "HW2Eq3UZVSBttoUwUi/MUtE7rr2UU7/UH500byp7OAc=" - } - }, - { - "denomUnits": [ - { - "denom": "gn", - "exponent": 6 - }, - { - "denom": "mgn", - "exponent": 3 - }, - { - "denom": "ugn" - } - ], - "base": "ugn", - "display": "gn", - "symbol": "GN", - "penumbraAssetId": { - "inner": "nwPDkQq3OvLnBwGTD+nmv1Ifb2GEmFCgNHrU++9BsRE=" - } - }, - { - "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" - } - ] - }, - { - "denomUnits": [ - { - "denom": "cube" - } - ], - "base": "cube", - "display": "cube", - "symbol": "CUBE", - "penumbraAssetId": { - "inner": "6KBVsPINa8gWSHhfH+kAFJC4afEJA3EtuB2HyCqJUws=" - } - }, - { - "denomUnits": [ - { - "denom": "pizza" - } - ], - "base": "pizza", - "display": "pizza", - "symbol": "PIZZA", - "penumbraAssetId": { - "inner": "nDjzm+ldIrNMJha1anGMDVxpA5cLCPnUYQ1clmHF1gw=" - }, - "images": [ - { - "svg": "https://raw.githubusercontent.com/prax-wallet/registry/main/images/pizza.svg" - } - ] - }, - { - "denomUnits": [ - { - "denom": "delegation_penumbravalid18nkv0r3sfp2seleq6du5kt3mhfce3k6cqm77kj2e7mhakmyw9v9qx42a20", - "exponent": 6 - }, - { - "denom": "mdelegation_penumbravalid18nkv0r3sfp2seleq6du5kt3mhfce3k6cqm77kj2e7mhakmyw9v9qx42a20", - "exponent": 3 - }, - { - "denom": "udelegation_penumbravalid18nkv0r3sfp2seleq6du5kt3mhfce3k6cqm77kj2e7mhakmyw9v9qx42a20" - } - ], - "base": "udelegation_penumbravalid18nkv0r3sfp2seleq6du5kt3mhfce3k6cqm77kj2e7mhakmyw9v9qx42a20", - "display": "delegation_penumbravalid18nkv0r3sfp2seleq6du5kt3mhfce3k6cqm77kj2e7mhakmyw9v9qx42a20", - "penumbraAssetId": { - "inner": "CwpUYIdQ9H5Dnf3oQ1l7ISeVMVahWbVNNvMA0dBSdwI=" - }, - "symbol": "Delegation (Penumbra Labs CI 1)", - "images": [ - { - "png": "https://raw.githubusercontent.com/prax-wallet/registry/main/images/penumbra-favicon.png" - } - ] - }, - { - "denomUnits": [ - { - "denom": "delegation_penumbravalid1qfxldejdhanmu302kcn5fm98q5d7d2upfhzqhaz95hyjdn82pqysqfq050", - "exponent": 6 - }, - { - "denom": "mdelegation_penumbravalid1qfxldejdhanmu302kcn5fm98q5d7d2upfhzqhaz95hyjdn82pqysqfq050", - "exponent": 3 - }, - { - "denom": "udelegation_penumbravalid1qfxldejdhanmu302kcn5fm98q5d7d2upfhzqhaz95hyjdn82pqysqfq050" - } - ], - "base": "udelegation_penumbravalid1qfxldejdhanmu302kcn5fm98q5d7d2upfhzqhaz95hyjdn82pqysqfq050", - "display": "delegation_penumbravalid1qfxldejdhanmu302kcn5fm98q5d7d2upfhzqhaz95hyjdn82pqysqfq050", - "penumbraAssetId": { - "inner": "qUn70lKZ3qQlCT5gj5sakux4daiTPKj0AN6ZuuFldQU=" - }, - "symbol": "Delegation (Penumbra Labs CI 2)", - "images": [ - { - "png": "https://raw.githubusercontent.com/prax-wallet/registry/main/images/penumbra-favicon.png" - } - ] - } - ], - "canonicalNumeraires": [ - "wtest_usd", - "transfer/channel-3/uusdc" - ] -} \ No newline at end of file diff --git a/npm/CHANGELOG.md b/npm/CHANGELOG.md index 3cef8f1..f89ac09 100644 --- a/npm/CHANGELOG.md +++ b/npm/CHANGELOG.md @@ -1,5 +1,11 @@ # @penumbra-labs/registry +## 10.0.0 + +### Major Changes + +- Expose remote fetching methods + ## 9.4.0 ### Minor Changes diff --git a/npm/package.json b/npm/package.json index ba5df4a..4d04e82 100644 --- a/npm/package.json +++ b/npm/package.json @@ -1,6 +1,6 @@ { "name": "@penumbra-labs/registry", - "version": "9.4.0", + "version": "10.0.0", "description": "Chain and asset registry for Penumbra", "main": "./dist/index.js", "module": "./dist/index.mjs", @@ -22,13 +22,14 @@ "@eslint/eslintrc": "^3.1.0", "@eslint/js": "^9.6.0", "eslint": "^9.6.0", + "fetch-mock": "^10.0.7", "prettier": "^3.3.2", "tsup": "^8.1.0", "typescript": "^5.5.3", - "typescript-eslint": "^7.15.0", + "typescript-eslint": "^7.16.0", "vite": "^5.3.3", "vite-plugin-dts": "^3.9.1", - "vitest": "^1.6.0" + "vitest": "^2.0.1" }, "files": [ "dist", diff --git a/npm/pnpm-lock.yaml b/npm/pnpm-lock.yaml index 7395f97..68985c3 100644 --- a/npm/pnpm-lock.yaml +++ b/npm/pnpm-lock.yaml @@ -25,6 +25,9 @@ importers: eslint: specifier: ^9.6.0 version: 9.6.0 + fetch-mock: + specifier: ^10.0.7 + version: 10.0.7 prettier: specifier: ^3.3.2 version: 3.3.2 @@ -35,19 +38,26 @@ importers: specifier: ^5.5.3 version: 5.5.3 typescript-eslint: - specifier: ^7.15.0 - version: 7.15.0(eslint@9.6.0)(typescript@5.5.3) + specifier: ^7.16.0 + version: 7.16.0(eslint@9.6.0)(typescript@5.5.3) vite: specifier: ^5.3.3 version: 5.3.3 vite-plugin-dts: specifier: ^3.9.1 - version: 3.9.1(rollup@4.18.0)(typescript@5.5.3)(vite@5.3.3) + version: 3.9.1(rollup@4.18.1)(typescript@5.5.3)(vite@5.3.3) vitest: - specifier: ^1.6.0 - version: 1.6.0 + specifier: ^2.0.1 + version: 2.0.1 packages: + '@ampproject/remapping@2.3.0': + resolution: + { + integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==, + } + engines: { node: '>=6.0.0' } + '@babel/helper-string-parser@7.24.7': resolution: { @@ -587,10 +597,10 @@ packages: } engines: { node: '>=6.0.0' } - '@jridgewell/sourcemap-codec@1.4.15': + '@jridgewell/sourcemap-codec@1.5.0': resolution: { - integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==, + integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==, } '@jridgewell/trace-mapping@0.3.25': @@ -701,130 +711,130 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.18.0': + '@rollup/rollup-android-arm-eabi@4.18.1': resolution: { - integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==, + integrity: sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA==, } cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.18.0': + '@rollup/rollup-android-arm64@4.18.1': resolution: { - integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==, + integrity: sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg==, } cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.18.0': + '@rollup/rollup-darwin-arm64@4.18.1': resolution: { - integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==, + integrity: sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ==, } cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.18.0': + '@rollup/rollup-darwin-x64@4.18.1': resolution: { - integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==, + integrity: sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA==, } cpu: [x64] os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.18.0': + '@rollup/rollup-linux-arm-gnueabihf@4.18.1': resolution: { - integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==, + integrity: sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g==, } cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.18.0': + '@rollup/rollup-linux-arm-musleabihf@4.18.1': resolution: { - integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==, + integrity: sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ==, } cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.18.0': + '@rollup/rollup-linux-arm64-gnu@4.18.1': resolution: { - integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==, + integrity: sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ==, } cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.18.0': + '@rollup/rollup-linux-arm64-musl@4.18.1': resolution: { - integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==, + integrity: sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ==, } cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.18.1': resolution: { - integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==, + integrity: sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ==, } cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.18.0': + '@rollup/rollup-linux-riscv64-gnu@4.18.1': resolution: { - integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==, + integrity: sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg==, } cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.18.0': + '@rollup/rollup-linux-s390x-gnu@4.18.1': resolution: { - integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==, + integrity: sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg==, } cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.18.0': + '@rollup/rollup-linux-x64-gnu@4.18.1': resolution: { - integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==, + integrity: sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g==, } cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.18.0': + '@rollup/rollup-linux-x64-musl@4.18.1': resolution: { - integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==, + integrity: sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ==, } cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.18.0': + '@rollup/rollup-win32-arm64-msvc@4.18.1': resolution: { - integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==, + integrity: sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g==, } cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.18.0': + '@rollup/rollup-win32-ia32-msvc@4.18.1': resolution: { - integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==, + integrity: sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg==, } cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.18.0': + '@rollup/rollup-win32-x64-msvc@4.18.1': resolution: { - integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==, + integrity: sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw==, } cpu: [x64] os: [win32] @@ -921,10 +931,10 @@ packages: integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==, } - '@typescript-eslint/eslint-plugin@7.15.0': + '@typescript-eslint/eslint-plugin@7.16.0': resolution: { - integrity: sha512-uiNHpyjZtFrLwLDpHnzaDlP3Tt6sGMqTCiqmxaN4n4RP0EfYZDODJyddiFDF44Hjwxr5xAcaYxVKm9QKQFJFLA==, + integrity: sha512-py1miT6iQpJcs1BiJjm54AMzeuMPBSPuKPlnT8HlfudbcS5rYeX5jajpLf3mrdRh9dA/Ec2FVUY0ifeVNDIhZw==, } engines: { node: ^18.18.0 || >=20.0.0 } peerDependencies: @@ -935,10 +945,10 @@ packages: typescript: optional: true - '@typescript-eslint/parser@7.15.0': + '@typescript-eslint/parser@7.16.0': resolution: { - integrity: sha512-k9fYuQNnypLFcqORNClRykkGOMOj+pV6V91R4GO/l1FDGwpqmSwoOQrOHo3cGaH63e+D3ZiCAOsuS/D2c99j/A==, + integrity: sha512-ar9E+k7CU8rWi2e5ErzQiC93KKEFAXA2Kky0scAlPcxYblLt8+XZuHUZwlyfXILyQa95P6lQg+eZgh/dDs3+Vw==, } engines: { node: ^18.18.0 || >=20.0.0 } peerDependencies: @@ -948,17 +958,17 @@ packages: typescript: optional: true - '@typescript-eslint/scope-manager@7.15.0': + '@typescript-eslint/scope-manager@7.16.0': resolution: { - integrity: sha512-Q/1yrF/XbxOTvttNVPihxh1b9fxamjEoz2Os/Pe38OHwxC24CyCqXxGTOdpb4lt6HYtqw9HetA/Rf6gDGaMPlw==, + integrity: sha512-8gVv3kW6n01Q6TrI1cmTZ9YMFi3ucDT7i7aI5lEikk2ebk1AEjrwX8MDTdaX5D7fPXMBLvnsaa0IFTAu+jcfOw==, } engines: { node: ^18.18.0 || >=20.0.0 } - '@typescript-eslint/type-utils@7.15.0': + '@typescript-eslint/type-utils@7.16.0': resolution: { - integrity: sha512-SkgriaeV6PDvpA6253PDVep0qCqgbO1IOBiycjnXsszNTVQe5flN5wR5jiczoEoDEnAqYFSFFc9al9BSGVltkg==, + integrity: sha512-j0fuUswUjDHfqV/UdW6mLtOQQseORqfdmoBNDFOqs9rvNVR2e+cmu6zJu/Ku4SDuqiJko6YnhwcL8x45r8Oqxg==, } engines: { node: ^18.18.0 || >=20.0.0 } peerDependencies: @@ -968,17 +978,17 @@ packages: typescript: optional: true - '@typescript-eslint/types@7.15.0': + '@typescript-eslint/types@7.16.0': resolution: { - integrity: sha512-aV1+B1+ySXbQH0pLK0rx66I3IkiZNidYobyfn0WFsdGhSXw+P3YOqeTq5GED458SfB24tg+ux3S+9g118hjlTw==, + integrity: sha512-fecuH15Y+TzlUutvUl9Cc2XJxqdLr7+93SQIbcZfd4XRGGKoxyljK27b+kxKamjRkU7FYC6RrbSCg0ALcZn/xw==, } engines: { node: ^18.18.0 || >=20.0.0 } - '@typescript-eslint/typescript-estree@7.15.0': + '@typescript-eslint/typescript-estree@7.16.0': resolution: { - integrity: sha512-gjyB/rHAopL/XxfmYThQbXbzRMGhZzGw6KpcMbfe8Q3nNQKStpxnUKeXb0KiN/fFDR42Z43szs6rY7eHk0zdGQ==, + integrity: sha512-a5NTvk51ZndFuOLCh5OaJBELYc2O3Zqxfl3Js78VFE1zE46J2AaVuW+rEbVkQznjkmlzWsUI15BG5tQMixzZLw==, } engines: { node: ^18.18.0 || >=20.0.0 } peerDependencies: @@ -987,50 +997,50 @@ packages: typescript: optional: true - '@typescript-eslint/utils@7.15.0': + '@typescript-eslint/utils@7.16.0': resolution: { - integrity: sha512-hfDMDqaqOqsUVGiEPSMLR/AjTSCsmJwjpKkYQRo1FNbmW4tBwBspYDwO9eh7sKSTwMQgBw9/T4DHudPaqshRWA==, + integrity: sha512-PqP4kP3hb4r7Jav+NiRCntlVzhxBNWq6ZQ+zQwII1y/G/1gdIPeYDCKr2+dH6049yJQsWZiHU6RlwvIFBXXGNA==, } engines: { node: ^18.18.0 || >=20.0.0 } peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/visitor-keys@7.15.0': + '@typescript-eslint/visitor-keys@7.16.0': resolution: { - integrity: sha512-Hqgy/ETgpt2L5xueA/zHHIl4fJI2O4XUE9l4+OIfbJIRSnTJb/QscncdqqZzofQegIJugRIF57OJea1khw2SDw==, + integrity: sha512-rMo01uPy9C7XxG7AFsxa8zLnWXTF8N3PYclekWSrurvhwiw1eW88mrKiAYe6s53AUY57nTRz8dJsuuXdkAhzCg==, } engines: { node: ^18.18.0 || >=20.0.0 } - '@vitest/expect@1.6.0': + '@vitest/expect@2.0.1': resolution: { - integrity: sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==, + integrity: sha512-yw70WL3ZwzbI2O3MOXYP2Shf4vqVkS3q5FckLJ6lhT9VMMtDyWdofD53COZcoeuHwsBymdOZp99r5bOr5g+oeA==, } - '@vitest/runner@1.6.0': + '@vitest/runner@2.0.1': resolution: { - integrity: sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==, + integrity: sha512-XfcSXOGGxgR2dQ466ZYqf0ZtDLLDx9mZeQcKjQDLQ9y6Cmk2Wl7wxMuhiYK4Fo1VxCtLcFEGW2XpcfMuiD1Maw==, } - '@vitest/snapshot@1.6.0': + '@vitest/snapshot@2.0.1': resolution: { - integrity: sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==, + integrity: sha512-rst79a4Q+J5vrvHRapdfK4BdqpMH0eF58jVY1vYeBo/1be+nkyenGI5SCSohmjf6MkCkI20/yo5oG+0R8qrAnA==, } - '@vitest/spy@1.6.0': + '@vitest/spy@2.0.1': resolution: { - integrity: sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==, + integrity: sha512-NLkdxbSefAtJN56GtCNcB4GiHFb5i9q1uh4V229lrlTZt2fnwsTyjLuWIli1xwK2fQspJJmHXHyWx0Of3KTXWA==, } - '@vitest/utils@1.6.0': + '@vitest/utils@2.0.1': resolution: { - integrity: sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==, + integrity: sha512-STH+2fHZxlveh1mpU4tKzNgRk7RZJyr6kFGJYCI5vocdfqfPsQrgVC6k7dBWHfin5QNB4TLvRS0Ckly3Dt1uWw==, } '@volar/language-core@1.11.1': @@ -1088,13 +1098,6 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.3: - resolution: - { - integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==, - } - engines: { node: '>=0.4.0' } - acorn@8.12.1: resolution: { @@ -1224,11 +1227,12 @@ packages: } engines: { node: '>=8' } - assertion-error@1.1.0: + assertion-error@2.0.1: resolution: { - integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==, + integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==, } + engines: { node: '>=12' } balanced-match@1.0.2: resolution: @@ -1292,12 +1296,12 @@ packages: } engines: { node: '>=6' } - chai@4.4.1: + chai@5.1.1: resolution: { - integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==, + integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==, } - engines: { node: '>=4' } + engines: { node: '>=12' } chalk@2.4.2: resolution: @@ -1319,11 +1323,12 @@ packages: integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==, } - check-error@1.0.3: + check-error@2.1.1: resolution: { - integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==, + integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==, } + engines: { node: '>= 16' } chokidar@3.6.0: resolution: @@ -1390,12 +1395,6 @@ packages: integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, } - confbox@0.1.7: - resolution: - { - integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==, - } - cross-spawn@5.1.0: resolution: { @@ -1427,10 +1426,10 @@ packages: supports-color: optional: true - deep-eql@4.1.4: + deep-eql@5.0.2: resolution: { - integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==, + integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==, } engines: { node: '>=6' } @@ -1559,10 +1558,10 @@ packages: engines: { node: '>=4' } hasBin: true - esquery@1.5.0: + esquery@1.6.0: resolution: { - integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==, + integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==, } engines: { node: '>=0.10' } @@ -1657,6 +1656,18 @@ packages: integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==, } + fetch-mock@10.0.7: + resolution: + { + integrity: sha512-TFG42kMRJ6dZpUDeVTdXNjh5O4TchHU/UNk41a050TwKzRr5RJQbtckXDjXiQFHPKgXGUG5l2TY3ZZ2gokiXaQ==, + } + engines: { node: '>=4.0.0' } + peerDependencies: + node-fetch: '*' + peerDependenciesMeta: + node-fetch: + optional: true + file-entry-cache@8.0.0: resolution: { @@ -1773,12 +1784,17 @@ packages: } engines: { node: '>=10.13.0' } - glob@10.4.3: + glob-to-regexp@0.4.1: resolution: { - integrity: sha512-Q38SGlYRpVtDBPSWEylRyctn7uDeTp4NQERTLiCT1FqA9JXPYWqAVmQU6qh4r/zMM5ehxTcbaO8EjhWnvEhmyg==, + integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==, + } + + glob@10.4.5: + resolution: + { + integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==, } - engines: { node: '>=18' } hasBin: true globals@14.0.0: @@ -1960,6 +1976,12 @@ packages: } engines: { node: '>=4' } + is-subset@0.1.1: + resolution: + { + integrity: sha512-6Ybun0IkarhmEqxXCNw/C0bna6Zb/TkfUX9UbwJtK6ObwAVCxmAP308WWTHviM/zAqXk05cdhYsUsZeGQh99iw==, + } + is-windows@1.0.2: resolution: { @@ -1973,12 +1995,12 @@ packages: integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, } - jackspeak@3.4.1: + jackspeak@3.4.2: resolution: { - integrity: sha512-U23pQPDnmYybVkYjObcuYMk43VRlMLLqLI+RdZy8s8WV8WsxO9SnqSroKaluuvcNOdCAlauKszDwd+umbot5Mg==, + integrity: sha512-qH3nOSj8q/8+Eg8LUPOq3C+6HWkpUioIjDsq1+D4zY91oZvpPttw8GwtF1nReRYKXl+1AORyFqtm2f5Q1SB6/Q==, } - engines: { node: '>=18' } + engines: { node: 14 >=14.21 || 16 >=16.20 || >=18 } jju@1.4.0: resolution: @@ -1993,12 +2015,6 @@ packages: } engines: { node: '>=10' } - js-tokens@9.0.0: - resolution: - { - integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==, - } - js-yaml@3.14.1: resolution: { @@ -2089,13 +2105,6 @@ packages: } engines: { node: '>=6' } - local-pkg@0.5.0: - resolution: - { - integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==, - } - engines: { node: '>=14' } - locate-path@5.0.0: resolution: { @@ -2146,18 +2155,17 @@ packages: integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, } - loupe@2.3.7: + loupe@3.1.1: resolution: { - integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==, + integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==, } - lru-cache@10.3.1: + lru-cache@10.4.3: resolution: { - integrity: sha512-9/8QXrtbGeMB6LxwQd4x1tIMnsmUxMvIH/qWGsccz6bt9Uln3S+sgAaqfQNhbGA8ufzs2fHuP/yqapGgP9Hh2g==, + integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==, } - engines: { node: '>=18' } lru-cache@4.1.5: resolution: @@ -2238,12 +2246,6 @@ packages: } engines: { node: '>=16 || 14 >=14.17' } - mlly@1.7.1: - resolution: - { - integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==, - } - mri@1.2.0: resolution: { @@ -2366,13 +2368,6 @@ packages: } engines: { node: '>=10' } - p-limit@5.0.0: - resolution: - { - integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==, - } - engines: { node: '>=18' } - p-locate@4.1.0: resolution: { @@ -2454,6 +2449,12 @@ packages: } engines: { node: '>=16 || 14 >=14.18' } + path-to-regexp@2.4.0: + resolution: + { + integrity: sha512-G6zHoVqC6GGTQkZwF4lkuEyMbVOjoBKAEybQUypI1WTkqinCOrq2x6U2+phkJ1XsEMTy4LjtwPI7HW+NVrRR2w==, + } + path-type@4.0.0: resolution: { @@ -2467,11 +2468,12 @@ packages: integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==, } - pathval@1.1.1: + pathval@2.0.0: resolution: { - integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==, + integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==, } + engines: { node: '>= 14.16' } picocolors@1.0.1: resolution: @@ -2507,12 +2509,6 @@ packages: } engines: { node: '>=8' } - pkg-types@1.1.3: - resolution: - { - integrity: sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==, - } - postcss-load-config@4.0.2: resolution: { @@ -2585,6 +2581,14 @@ packages: } engines: { node: '>=6' } + querystring@0.2.1: + resolution: + { + integrity: sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==, + } + engines: { node: '>=0.4.x' } + deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. + queue-microtask@1.2.3: resolution: { @@ -2658,10 +2662,10 @@ packages: } engines: { iojs: '>=1.0.0', node: '>=0.10.0' } - rollup@4.18.0: + rollup@4.18.1: resolution: { - integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==, + integrity: sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A==, } engines: { node: '>=18.0.0', npm: '>=8.0.0' } hasBin: true @@ -2856,12 +2860,6 @@ packages: } engines: { node: '>=8' } - strip-literal@2.1.0: - resolution: - { - integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==, - } - sucrase@3.35.0: resolution: { @@ -2930,17 +2928,17 @@ packages: integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==, } - tinypool@0.8.4: + tinypool@1.0.0: resolution: { - integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==, + integrity: sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==, } - engines: { node: '>=14.0.0' } + engines: { node: ^18.0.0 || >=20.0.0 } - tinyspy@2.2.1: + tinyspy@3.0.0: resolution: { - integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==, + integrity: sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==, } engines: { node: '>=14.0.0' } @@ -3022,17 +3020,10 @@ packages: } engines: { node: '>= 0.8.0' } - type-detect@4.0.8: - resolution: - { - integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==, - } - engines: { node: '>=4' } - - typescript-eslint@7.15.0: + typescript-eslint@7.16.0: resolution: { - integrity: sha512-Ta40FhMXBCwHura4X4fncaCVkVcnJ9jnOq5+Lp4lN8F4DzHZtOwZdRvVBiNUGznUDHPwdGnrnwxmUOU2fFQqFA==, + integrity: sha512-kaVRivQjOzuoCXU6+hLnjo3/baxyzWVO5GrnExkFzETRYJKVHYkrJglOu2OCm8Hi9RPDWX1PTNNTpU5KRV0+RA==, } engines: { node: ^18.18.0 || >=20.0.0 } peerDependencies: @@ -3058,12 +3049,6 @@ packages: engines: { node: '>=14.17' } hasBin: true - ufo@1.5.3: - resolution: - { - integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==, - } - universalify@0.1.2: resolution: { @@ -3084,10 +3069,10 @@ packages: } engines: { node: '>= 0.10' } - vite-node@1.6.0: + vite-node@2.0.1: resolution: { - integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==, + integrity: sha512-nVd6kyhPAql0s+xIVJzuF+RSRH8ZimNrm6U8ZvTA4MXv8CHI17TFaQwRaFiK75YX6XeFqZD4IoAaAfi9OR1XvQ==, } engines: { node: ^18.0.0 || >=20.0.0 } hasBin: true @@ -3136,18 +3121,18 @@ packages: terser: optional: true - vitest@1.6.0: + vitest@2.0.1: resolution: { - integrity: sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==, + integrity: sha512-PBPvNXRJiywtI9NmbnEqHIhcXlk8mB0aKf6REQIaYGY4JtWF1Pg8Am+N0vAuxdg/wUSlxPSVJr8QdjwcVxc2Hg==, } engines: { node: ^18.0.0 || >=20.0.0 } hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 1.6.0 - '@vitest/ui': 1.6.0 + '@vitest/browser': 2.0.1 + '@vitest/ui': 2.0.1 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -3213,10 +3198,10 @@ packages: engines: { node: '>= 8' } hasBin: true - why-is-node-running@2.2.2: + why-is-node-running@2.3.0: resolution: { - integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==, + integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==, } engines: { node: '>=8' } hasBin: true @@ -3269,13 +3254,6 @@ packages: } engines: { node: '>=10' } - yocto-queue@1.1.1: - resolution: - { - integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==, - } - engines: { node: '>=12.20' } - z-schema@5.0.5: resolution: { @@ -3285,6 +3263,11 @@ packages: hasBin: true snapshots: + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + '@babel/helper-string-parser@7.24.7': {} '@babel/helper-validator-identifier@7.24.7': {} @@ -3644,19 +3627,19 @@ snapshots: '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/set-array@1.2.1': {} - '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.0': {} '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@manypkg/find-root@1.1.0': dependencies: @@ -3763,60 +3746,60 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@rollup/pluginutils@5.1.0(rollup@4.18.0)': + '@rollup/pluginutils@5.1.0(rollup@4.18.1)': dependencies: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 optionalDependencies: - rollup: 4.18.0 + rollup: 4.18.1 - '@rollup/rollup-android-arm-eabi@4.18.0': + '@rollup/rollup-android-arm-eabi@4.18.1': optional: true - '@rollup/rollup-android-arm64@4.18.0': + '@rollup/rollup-android-arm64@4.18.1': optional: true - '@rollup/rollup-darwin-arm64@4.18.0': + '@rollup/rollup-darwin-arm64@4.18.1': optional: true - '@rollup/rollup-darwin-x64@4.18.0': + '@rollup/rollup-darwin-x64@4.18.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.18.0': + '@rollup/rollup-linux-arm-gnueabihf@4.18.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.18.0': + '@rollup/rollup-linux-arm-musleabihf@4.18.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.18.0': + '@rollup/rollup-linux-arm64-gnu@4.18.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.18.0': + '@rollup/rollup-linux-arm64-musl@4.18.1': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.18.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.18.0': + '@rollup/rollup-linux-riscv64-gnu@4.18.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.18.0': + '@rollup/rollup-linux-s390x-gnu@4.18.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.18.0': + '@rollup/rollup-linux-x64-gnu@4.18.1': optional: true - '@rollup/rollup-linux-x64-musl@4.18.0': + '@rollup/rollup-linux-x64-musl@4.18.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.18.0': + '@rollup/rollup-win32-arm64-msvc@4.18.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.18.0': + '@rollup/rollup-win32-ia32-msvc@4.18.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.18.0': + '@rollup/rollup-win32-x64-msvc@4.18.1': optional: true '@rushstack/node-core-library@4.0.2': @@ -3885,14 +3868,14 @@ snapshots: '@types/semver@7.5.8': {} - '@typescript-eslint/eslint-plugin@7.15.0(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.3))(eslint@9.6.0)(typescript@5.5.3)': + '@typescript-eslint/eslint-plugin@7.16.0(@typescript-eslint/parser@7.16.0(eslint@9.6.0)(typescript@5.5.3))(eslint@9.6.0)(typescript@5.5.3)': dependencies: '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 7.15.0(eslint@9.6.0)(typescript@5.5.3) - '@typescript-eslint/scope-manager': 7.15.0 - '@typescript-eslint/type-utils': 7.15.0(eslint@9.6.0)(typescript@5.5.3) - '@typescript-eslint/utils': 7.15.0(eslint@9.6.0)(typescript@5.5.3) - '@typescript-eslint/visitor-keys': 7.15.0 + '@typescript-eslint/parser': 7.16.0(eslint@9.6.0)(typescript@5.5.3) + '@typescript-eslint/scope-manager': 7.16.0 + '@typescript-eslint/type-utils': 7.16.0(eslint@9.6.0)(typescript@5.5.3) + '@typescript-eslint/utils': 7.16.0(eslint@9.6.0)(typescript@5.5.3) + '@typescript-eslint/visitor-keys': 7.16.0 eslint: 9.6.0 graphemer: 1.4.0 ignore: 5.3.1 @@ -3903,12 +3886,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.3)': + '@typescript-eslint/parser@7.16.0(eslint@9.6.0)(typescript@5.5.3)': dependencies: - '@typescript-eslint/scope-manager': 7.15.0 - '@typescript-eslint/types': 7.15.0 - '@typescript-eslint/typescript-estree': 7.15.0(typescript@5.5.3) - '@typescript-eslint/visitor-keys': 7.15.0 + '@typescript-eslint/scope-manager': 7.16.0 + '@typescript-eslint/types': 7.16.0 + '@typescript-eslint/typescript-estree': 7.16.0(typescript@5.5.3) + '@typescript-eslint/visitor-keys': 7.16.0 debug: 4.3.5 eslint: 9.6.0 optionalDependencies: @@ -3916,15 +3899,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@7.15.0': + '@typescript-eslint/scope-manager@7.16.0': dependencies: - '@typescript-eslint/types': 7.15.0 - '@typescript-eslint/visitor-keys': 7.15.0 + '@typescript-eslint/types': 7.16.0 + '@typescript-eslint/visitor-keys': 7.16.0 - '@typescript-eslint/type-utils@7.15.0(eslint@9.6.0)(typescript@5.5.3)': + '@typescript-eslint/type-utils@7.16.0(eslint@9.6.0)(typescript@5.5.3)': dependencies: - '@typescript-eslint/typescript-estree': 7.15.0(typescript@5.5.3) - '@typescript-eslint/utils': 7.15.0(eslint@9.6.0)(typescript@5.5.3) + '@typescript-eslint/typescript-estree': 7.16.0(typescript@5.5.3) + '@typescript-eslint/utils': 7.16.0(eslint@9.6.0)(typescript@5.5.3) debug: 4.3.5 eslint: 9.6.0 ts-api-utils: 1.3.0(typescript@5.5.3) @@ -3933,12 +3916,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@7.15.0': {} + '@typescript-eslint/types@7.16.0': {} - '@typescript-eslint/typescript-estree@7.15.0(typescript@5.5.3)': + '@typescript-eslint/typescript-estree@7.16.0(typescript@5.5.3)': dependencies: - '@typescript-eslint/types': 7.15.0 - '@typescript-eslint/visitor-keys': 7.15.0 + '@typescript-eslint/types': 7.16.0 + '@typescript-eslint/visitor-keys': 7.16.0 debug: 4.3.5 globby: 11.1.0 is-glob: 4.0.3 @@ -3950,49 +3933,48 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.15.0(eslint@9.6.0)(typescript@5.5.3)': + '@typescript-eslint/utils@7.16.0(eslint@9.6.0)(typescript@5.5.3)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@9.6.0) - '@typescript-eslint/scope-manager': 7.15.0 - '@typescript-eslint/types': 7.15.0 - '@typescript-eslint/typescript-estree': 7.15.0(typescript@5.5.3) + '@typescript-eslint/scope-manager': 7.16.0 + '@typescript-eslint/types': 7.16.0 + '@typescript-eslint/typescript-estree': 7.16.0(typescript@5.5.3) eslint: 9.6.0 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/visitor-keys@7.15.0': + '@typescript-eslint/visitor-keys@7.16.0': dependencies: - '@typescript-eslint/types': 7.15.0 + '@typescript-eslint/types': 7.16.0 eslint-visitor-keys: 3.4.3 - '@vitest/expect@1.6.0': + '@vitest/expect@2.0.1': dependencies: - '@vitest/spy': 1.6.0 - '@vitest/utils': 1.6.0 - chai: 4.4.1 + '@vitest/spy': 2.0.1 + '@vitest/utils': 2.0.1 + chai: 5.1.1 - '@vitest/runner@1.6.0': + '@vitest/runner@2.0.1': dependencies: - '@vitest/utils': 1.6.0 - p-limit: 5.0.0 + '@vitest/utils': 2.0.1 pathe: 1.1.2 - '@vitest/snapshot@1.6.0': + '@vitest/snapshot@2.0.1': dependencies: magic-string: 0.30.10 pathe: 1.1.2 pretty-format: 29.7.0 - '@vitest/spy@1.6.0': + '@vitest/spy@2.0.1': dependencies: - tinyspy: 2.2.1 + tinyspy: 3.0.0 - '@vitest/utils@1.6.0': + '@vitest/utils@2.0.1': dependencies: diff-sequences: 29.6.3 estree-walker: 3.0.3 - loupe: 2.3.7 + loupe: 3.1.1 pretty-format: 29.7.0 '@volar/language-core@1.11.1': @@ -4041,10 +4023,6 @@ snapshots: dependencies: acorn: 8.12.1 - acorn-walk@8.3.3: - dependencies: - acorn: 8.12.1 - acorn@8.12.1: {} ajv-draft-04@1.0.0(ajv@8.13.0): @@ -4113,7 +4091,7 @@ snapshots: array-union@2.1.0: {} - assertion-error@1.1.0: {} + assertion-error@2.0.1: {} balanced-match@1.0.2: {} @@ -4145,15 +4123,13 @@ snapshots: callsites@3.1.0: {} - chai@4.4.1: + chai@5.1.1: dependencies: - assertion-error: 1.1.0 - check-error: 1.0.3 - deep-eql: 4.1.4 - get-func-name: 2.0.2 - loupe: 2.3.7 - pathval: 1.1.1 - type-detect: 4.0.8 + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.1 + pathval: 2.0.0 chalk@2.4.2: dependencies: @@ -4168,9 +4144,7 @@ snapshots: chardet@0.7.0: {} - check-error@1.0.3: - dependencies: - get-func-name: 2.0.2 + check-error@2.1.1: {} chokidar@3.6.0: dependencies: @@ -4207,8 +4181,6 @@ snapshots: concat-map@0.0.1: {} - confbox@0.1.7: {} - cross-spawn@5.1.0: dependencies: lru-cache: 4.1.5 @@ -4227,9 +4199,7 @@ snapshots: dependencies: ms: 2.1.2 - deep-eql@4.1.4: - dependencies: - type-detect: 4.0.8 + deep-eql@5.0.2: {} deep-is@0.1.4: {} @@ -4311,7 +4281,7 @@ snapshots: eslint-scope: 8.0.1 eslint-visitor-keys: 4.0.0 espree: 10.1.0 - esquery: 1.5.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 8.0.0 @@ -4340,7 +4310,7 @@ snapshots: esprima@4.0.1: {} - esquery@1.5.0: + esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -4408,6 +4378,17 @@ snapshots: dependencies: reusify: 1.0.4 + fetch-mock@10.0.7: + dependencies: + debug: 4.3.5 + glob-to-regexp: 0.4.1 + is-subset: 0.1.1 + lodash.isequal: 4.5.0 + path-to-regexp: 2.4.0 + querystring: 0.2.1 + transitivePeerDependencies: + - supports-color + file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -4474,10 +4455,12 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@10.4.3: + glob-to-regexp@0.4.1: {} + + glob@10.4.5: dependencies: foreground-child: 3.2.1 - jackspeak: 3.4.1 + jackspeak: 3.4.2 minimatch: 9.0.5 minipass: 7.1.2 package-json-from-dist: 1.0.0 @@ -4557,11 +4540,13 @@ snapshots: dependencies: better-path-resolve: 1.0.0 + is-subset@0.1.1: {} + is-windows@1.0.2: {} isexe@2.0.0: {} - jackspeak@3.4.1: + jackspeak@3.4.2: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: @@ -4571,8 +4556,6 @@ snapshots: joycon@3.1.1: {} - js-tokens@9.0.0: {} - js-yaml@3.14.1: dependencies: argparse: 1.0.10 @@ -4619,11 +4602,6 @@ snapshots: pify: 4.0.1 strip-bom: 3.0.0 - local-pkg@0.5.0: - dependencies: - mlly: 1.7.1 - pkg-types: 1.1.3 - locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -4644,11 +4622,11 @@ snapshots: lodash@4.17.21: {} - loupe@2.3.7: + loupe@3.1.1: dependencies: get-func-name: 2.0.2 - lru-cache@10.3.1: {} + lru-cache@10.4.3: {} lru-cache@4.1.5: dependencies: @@ -4661,7 +4639,7 @@ snapshots: magic-string@0.30.10: dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 merge-stream@2.0.0: {} @@ -4690,13 +4668,6 @@ snapshots: minipass@7.1.2: {} - mlly@1.7.1: - dependencies: - acorn: 8.12.1 - pathe: 1.1.2 - pkg-types: 1.1.3 - ufo: 1.5.3 - mri@1.2.0: {} ms@2.1.2: {} @@ -4758,10 +4729,6 @@ snapshots: dependencies: yocto-queue: 0.1.0 - p-limit@5.0.0: - dependencies: - yocto-queue: 1.1.1 - p-locate@4.1.0: dependencies: p-limit: 2.3.0 @@ -4792,14 +4759,16 @@ snapshots: path-scurry@1.11.1: dependencies: - lru-cache: 10.3.1 + lru-cache: 10.4.3 minipass: 7.1.2 + path-to-regexp@2.4.0: {} + path-type@4.0.0: {} pathe@1.1.2: {} - pathval@1.1.1: {} + pathval@2.0.0: {} picocolors@1.0.1: {} @@ -4813,12 +4782,6 @@ snapshots: dependencies: find-up: 4.1.0 - pkg-types@1.1.3: - dependencies: - confbox: 0.1.7 - mlly: 1.7.1 - pathe: 1.1.2 - postcss-load-config@4.0.2(postcss@8.4.39): dependencies: lilconfig: 3.1.2 @@ -4855,6 +4818,8 @@ snapshots: punycode@2.3.1: {} + querystring@0.2.1: {} + queue-microtask@1.2.3: {} react-is@18.3.1: {} @@ -4892,26 +4857,26 @@ snapshots: reusify@1.0.4: {} - rollup@4.18.0: + rollup@4.18.1: dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.18.0 - '@rollup/rollup-android-arm64': 4.18.0 - '@rollup/rollup-darwin-arm64': 4.18.0 - '@rollup/rollup-darwin-x64': 4.18.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.18.0 - '@rollup/rollup-linux-arm-musleabihf': 4.18.0 - '@rollup/rollup-linux-arm64-gnu': 4.18.0 - '@rollup/rollup-linux-arm64-musl': 4.18.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.18.0 - '@rollup/rollup-linux-riscv64-gnu': 4.18.0 - '@rollup/rollup-linux-s390x-gnu': 4.18.0 - '@rollup/rollup-linux-x64-gnu': 4.18.0 - '@rollup/rollup-linux-x64-musl': 4.18.0 - '@rollup/rollup-win32-arm64-msvc': 4.18.0 - '@rollup/rollup-win32-ia32-msvc': 4.18.0 - '@rollup/rollup-win32-x64-msvc': 4.18.0 + '@rollup/rollup-android-arm-eabi': 4.18.1 + '@rollup/rollup-android-arm64': 4.18.1 + '@rollup/rollup-darwin-arm64': 4.18.1 + '@rollup/rollup-darwin-x64': 4.18.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.18.1 + '@rollup/rollup-linux-arm-musleabihf': 4.18.1 + '@rollup/rollup-linux-arm64-gnu': 4.18.1 + '@rollup/rollup-linux-arm64-musl': 4.18.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.18.1 + '@rollup/rollup-linux-riscv64-gnu': 4.18.1 + '@rollup/rollup-linux-s390x-gnu': 4.18.1 + '@rollup/rollup-linux-x64-gnu': 4.18.1 + '@rollup/rollup-linux-x64-musl': 4.18.1 + '@rollup/rollup-win32-arm64-msvc': 4.18.1 + '@rollup/rollup-win32-ia32-msvc': 4.18.1 + '@rollup/rollup-win32-x64-msvc': 4.18.1 fsevents: 2.3.3 run-parallel@1.2.0: @@ -4995,15 +4960,11 @@ snapshots: strip-json-comments@3.1.1: {} - strip-literal@2.1.0: - dependencies: - js-tokens: 9.0.0 - sucrase@3.35.0: dependencies: '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 - glob: 10.4.3 + glob: 10.4.5 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.6 @@ -5037,9 +4998,9 @@ snapshots: tinybench@2.8.0: {} - tinypool@0.8.4: {} + tinypool@1.0.0: {} - tinyspy@2.2.1: {} + tinyspy@3.0.0: {} tmp@0.0.33: dependencies: @@ -5075,7 +5036,7 @@ snapshots: joycon: 3.1.1 postcss-load-config: 4.0.2(postcss@8.4.39) resolve-from: 5.0.0 - rollup: 4.18.0 + rollup: 4.18.1 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tree-kill: 1.2.2 @@ -5091,13 +5052,11 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-detect@4.0.8: {} - - typescript-eslint@7.15.0(eslint@9.6.0)(typescript@5.5.3): + typescript-eslint@7.16.0(eslint@9.6.0)(typescript@5.5.3): dependencies: - '@typescript-eslint/eslint-plugin': 7.15.0(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.3))(eslint@9.6.0)(typescript@5.5.3) - '@typescript-eslint/parser': 7.15.0(eslint@9.6.0)(typescript@5.5.3) - '@typescript-eslint/utils': 7.15.0(eslint@9.6.0)(typescript@5.5.3) + '@typescript-eslint/eslint-plugin': 7.16.0(@typescript-eslint/parser@7.16.0(eslint@9.6.0)(typescript@5.5.3))(eslint@9.6.0)(typescript@5.5.3) + '@typescript-eslint/parser': 7.16.0(eslint@9.6.0)(typescript@5.5.3) + '@typescript-eslint/utils': 7.16.0(eslint@9.6.0)(typescript@5.5.3) eslint: 9.6.0 optionalDependencies: typescript: 5.5.3 @@ -5108,8 +5067,6 @@ snapshots: typescript@5.5.3: {} - ufo@1.5.3: {} - universalify@0.1.2: {} uri-js@4.4.1: @@ -5118,7 +5075,7 @@ snapshots: validator@13.12.0: {} - vite-node@1.6.0: + vite-node@2.0.1: dependencies: cac: 6.7.14 debug: 4.3.5 @@ -5135,10 +5092,10 @@ snapshots: - supports-color - terser - vite-plugin-dts@3.9.1(rollup@4.18.0)(typescript@5.5.3)(vite@5.3.3): + vite-plugin-dts@3.9.1(rollup@4.18.1)(typescript@5.5.3)(vite@5.3.3): dependencies: '@microsoft/api-extractor': 7.43.0 - '@rollup/pluginutils': 5.1.0(rollup@4.18.0) + '@rollup/pluginutils': 5.1.0(rollup@4.18.1) '@vue/language-core': 1.8.27(typescript@5.5.3) debug: 4.3.5 kolorist: 1.8.0 @@ -5156,32 +5113,30 @@ snapshots: dependencies: esbuild: 0.21.5 postcss: 8.4.39 - rollup: 4.18.0 + rollup: 4.18.1 optionalDependencies: fsevents: 2.3.3 - vitest@1.6.0: + vitest@2.0.1: dependencies: - '@vitest/expect': 1.6.0 - '@vitest/runner': 1.6.0 - '@vitest/snapshot': 1.6.0 - '@vitest/spy': 1.6.0 - '@vitest/utils': 1.6.0 - acorn-walk: 8.3.3 - chai: 4.4.1 + '@ampproject/remapping': 2.3.0 + '@vitest/expect': 2.0.1 + '@vitest/runner': 2.0.1 + '@vitest/snapshot': 2.0.1 + '@vitest/spy': 2.0.1 + '@vitest/utils': 2.0.1 + chai: 5.1.1 debug: 4.3.5 execa: 8.0.1 - local-pkg: 0.5.0 magic-string: 0.30.10 pathe: 1.1.2 picocolors: 1.0.1 std-env: 3.7.0 - strip-literal: 2.1.0 tinybench: 2.8.0 - tinypool: 0.8.4 + tinypool: 1.0.0 vite: 5.3.3 - vite-node: 1.6.0 - why-is-node-running: 2.2.2 + vite-node: 2.0.1 + why-is-node-running: 2.3.0 transitivePeerDependencies: - less - lightningcss @@ -5224,7 +5179,7 @@ snapshots: dependencies: isexe: 2.0.0 - why-is-node-running@2.2.2: + why-is-node-running@2.3.0: dependencies: siginfo: 2.0.0 stackback: 0.0.2 @@ -5251,8 +5206,6 @@ snapshots: yocto-queue@0.1.0: {} - yocto-queue@1.1.1: {} - z-schema@5.0.5: dependencies: lodash.get: 4.4.2 diff --git a/npm/src/client.test.ts b/npm/src/bundled.test.ts similarity index 69% rename from npm/src/client.test.ts rename to npm/src/bundled.test.ts index 3cfe2d5..499b50c 100644 --- a/npm/src/client.test.ts +++ b/npm/src/bundled.test.ts @@ -4,27 +4,27 @@ import { Registry } from './registry'; import { AssetId } from '@buf/penumbra-zone_penumbra.bufbuild_es/penumbra/core/asset/v1/asset_pb'; import { base64ToUint8Array } from './utils/base64'; -describe('ChainRegistryClient', () => { - const client = new ChainRegistryClient(); +describe('BundledClient', () => { + const { bundled } = new ChainRegistryClient(); it('returns a Registry object for valid chain IDs', () => { - const registry = client.get('penumbra-1'); + const registry = bundled.get('penumbra-1'); expect(registry).toBeInstanceOf(Registry); expect(registry.chainId).toEqual('penumbra-1'); }); it('throws an error when no registry is found', () => { - expect(() => client.get('unknown')).toThrow('Registry not found for unknown'); + expect(() => bundled.get('unknown')).toThrow('Registry not found for unknown'); }); it('handles preview chain IDs by swapping them', () => { - const registry = client.get('penumbra-testnet-deimos-7-xf2dbce94'); + const registry = bundled.get('penumbra-testnet-deimos-8-xf2dbce94'); expect(registry).toBeInstanceOf(Registry); - expect(registry.chainId).toEqual('penumbra-testnet-deimos-7'); + expect(registry.chainId).toEqual('penumbra-testnet-deimos-8'); }); it('returns staking asset global as expected', () => { - const registry = client.globals(); + const registry = bundled.globals(); const umStakingAsset = new AssetId({ inner: base64ToUint8Array('KeqcLzNx9qSH5+lcJHBB9KNW+YPrBk5dKzvPMiypahA='), }); diff --git a/npm/src/bundled.ts b/npm/src/bundled.ts new file mode 100644 index 0000000..fe524df --- /dev/null +++ b/npm/src/bundled.ts @@ -0,0 +1,20 @@ +import { Registry } from './registry'; +import { allJsonRegistries } from './json'; +import { swapIfPreviewChain } from './preview'; +import * as GlobalsJson from '../../registry/globals.json'; +import { RegistryGlobals } from './globals'; + +export class BundledClient { + get(chainId: string): Registry { + const chainIdToIndex = swapIfPreviewChain(chainId); + const jsonRegistry = allJsonRegistries[chainIdToIndex]; + if (!jsonRegistry) { + throw new Error(`Registry not found for ${chainIdToIndex}`); + } + return new Registry(jsonRegistry); + } + + globals(): RegistryGlobals { + return new RegistryGlobals(GlobalsJson); + } +} diff --git a/npm/src/client.ts b/npm/src/client.ts index 2b99339..7ece5d8 100644 --- a/npm/src/client.ts +++ b/npm/src/client.ts @@ -1,36 +1,7 @@ -import { deriveTestnetChainIdFromPreview, isTestnetPreviewChainId } from './utils/testnet-parser'; -import { Registry } from './registry'; -import { allJsonRegistries, registryGlobals, RegistryGlobals } from './json'; +import { BundledClient } from './bundled'; +import { RemoteClient } from './remote'; export class ChainRegistryClient { - get(chainId: string): Registry { - const chainIdToIndex = this.swapIfPreviewChain(chainId); - const jsonRegistry = allJsonRegistries[chainIdToIndex]; - if (!jsonRegistry) { - throw new Error(`Registry not found for ${chainIdToIndex}`); - } - - return new Registry(jsonRegistry); - } - - globals(): RegistryGlobals { - return registryGlobals; - } - - version() { - return { - commit: __COMMIT_HASH__, - date: new Date(__COMMIT_DATE__), - }; - } - - private swapIfPreviewChain(chainId: string): string { - if (!isTestnetPreviewChainId(chainId)) return chainId; - - const derivedChainId = deriveTestnetChainIdFromPreview(chainId); - if (!derivedChainId) { - throw new Error(`Chain id could not be derived from testnet preview chain: ${chainId}`); - } - return derivedChainId; - } + public readonly bundled = new BundledClient(); + public readonly remote = new RemoteClient(); } diff --git a/npm/src/github.ts b/npm/src/github.ts new file mode 100644 index 0000000..be02d7e --- /dev/null +++ b/npm/src/github.ts @@ -0,0 +1,39 @@ +import { Base64AssetId, Chain, Registry, Rpc } from './registry'; +import { JsonGlobals, JsonMetadata } from './json'; +import { RegistryGlobals } from './globals'; + +export interface GithubRegistryResponse { + chainId: string; + ibcConnections: Chain[]; + rpcs: Rpc[]; + assetById: Record; + stakingAssetId: Base64AssetId; + numeraires: Base64AssetId[]; +} + +export const REGISTRY_BASE_URL = + 'https://raw.githubusercontent.com/prax-wallet/registry/main/registry'; + +type ChainId = string; + +export class GithubFetcher { + async fetchRegistry(chainId: ChainId): Promise { + const response = await this.typedFetcher( + `${REGISTRY_BASE_URL}/chains/${chainId}.json`, + ); + return new Registry(response); + } + + async fetchGlobals(): Promise { + const response = await this.typedFetcher(`${REGISTRY_BASE_URL}/globals.json`); + return new RegistryGlobals(response); + } + + private async typedFetcher(url: string): Promise { + const response = await fetch(url); + if (!response.ok) { + throw new Error(`Failed to fetch from: ${url}`); + } + return (await response.json()) as T; + } +} diff --git a/npm/src/globals.test.ts b/npm/src/globals.test.ts new file mode 100644 index 0000000..f616c02 --- /dev/null +++ b/npm/src/globals.test.ts @@ -0,0 +1,19 @@ +import { describe, expect, it } from 'vitest'; +import { RegistryGlobals } from './globals'; +import { JsonGlobals } from './json'; + +const testGlobals: JsonGlobals = { + rpcs: [{ name: 'rpc1', images: [], url: 'http://rpc1.com' }], + frontends: ['frontend1', 'frontend2', 'frontend3'], + stakingAssetId: { + inner: 'KeqcLzNx9qSH5+lcJHBB9KNW+YPrBk5dKzvPMiypahA=', + }, +}; + +describe('Globals', () => { + it('versions correctly', async () => { + const registry = new RegistryGlobals(testGlobals); + const version = await registry.version(); + expect(version).toEqual('7e4059f5641482cfc817222cb5cbd6f62174d578d8473ff4b0a13ef643363b7e'); + }); +}); diff --git a/npm/src/globals.ts b/npm/src/globals.ts new file mode 100644 index 0000000..3afce5e --- /dev/null +++ b/npm/src/globals.ts @@ -0,0 +1,20 @@ +import { Rpc } from './registry'; +import { AssetId } from '@buf/penumbra-zone_penumbra.bufbuild_es/penumbra/core/asset/v1/asset_pb'; +import { JsonGlobals } from './json'; +import { sha256Hash } from './utils/sha256'; + +export class RegistryGlobals { + readonly stakingAssetId: AssetId; + readonly rpcs: Rpc[]; + readonly frontends: string[]; + + constructor(json: JsonGlobals) { + this.rpcs = json.rpcs; + this.frontends = json.frontends; + this.stakingAssetId = AssetId.fromJson(json.stakingAssetId); + } + + async version(): Promise { + return sha256Hash(JSON.stringify(this)); + } +} diff --git a/npm/src/json.ts b/npm/src/json.ts index 66d2097..36d3911 100644 --- a/npm/src/json.ts +++ b/npm/src/json.ts @@ -1,17 +1,6 @@ -import * as Deimos6 from '../../registry/chains/penumbra-testnet-deimos-6.json'; -import * as Deimos7 from '../../registry/chains/penumbra-testnet-deimos-7.json'; import * as Deimos8 from '../../registry/chains/penumbra-testnet-deimos-8.json'; import * as Penumbra1 from '../../registry/chains/penumbra-1.json'; -import * as GlobalsJson from '../../registry/globals.json'; - import { Base64AssetId, Chain, Rpc } from './registry'; -import { AssetId } from '@buf/penumbra-zone_penumbra.bufbuild_es/penumbra/core/asset/v1/asset_pb'; - -export interface RegistryGlobals { - rpcs: Rpc[]; - frontends: string[]; - stakingAssetId: AssetId; -} export interface JsonRegistry { chainId: string; @@ -20,7 +9,13 @@ export interface JsonRegistry { numeraires: Base64AssetId[]; } -interface JsonMetadata { +export interface JsonGlobals { + rpcs: Rpc[]; + frontends: string[]; + stakingAssetId: { inner: string }; +} + +export interface JsonMetadata { description?: string; denomUnits: DenomUnit[]; base: string; @@ -46,13 +41,6 @@ interface Image { } export const allJsonRegistries: Record = { - 'penumbra-testnet-deimos-6': Deimos6, - 'penumbra-testnet-deimos-7': Deimos7, 'penumbra-testnet-deimos-8': Deimos8, 'penumbra-1': Penumbra1, }; - -export const registryGlobals: RegistryGlobals = { - ...GlobalsJson, - stakingAssetId: AssetId.fromJson(GlobalsJson.stakingAssetId), -}; diff --git a/npm/src/preview.ts b/npm/src/preview.ts new file mode 100644 index 0000000..f2e7571 --- /dev/null +++ b/npm/src/preview.ts @@ -0,0 +1,11 @@ +import { deriveTestnetChainIdFromPreview, isTestnetPreviewChainId } from './utils/testnet-parser'; + +export const swapIfPreviewChain = (chainId: string): string => { + if (!isTestnetPreviewChainId(chainId)) return chainId; + + const derivedChainId = deriveTestnetChainIdFromPreview(chainId); + if (!derivedChainId) { + throw new Error(`Chain id could not be derived from testnet preview chain: ${chainId}`); + } + return derivedChainId; +}; diff --git a/npm/src/registry.test.ts b/npm/src/registry.test.ts index 0e12c85..a5c6ef8 100644 --- a/npm/src/registry.test.ts +++ b/npm/src/registry.test.ts @@ -1,77 +1,8 @@ import { describe, expect, it } from 'vitest'; import { Registry } from './registry'; import { AssetId } from '@buf/penumbra-zone_penumbra.bufbuild_es/penumbra/core/asset/v1/asset_pb'; -import { JsonRegistry } from './json'; import { base64ToUint8Array } from './utils/base64'; - -const testRegistry: JsonRegistry = { - chainId: 'penumbra-testnet-deimos-6', - ibcConnections: [ - { - addressPrefix: 'osmo', - chainId: 'osmo-test-5', - channelId: 'channel-4', - counterpartyChannelId: 'channel-7780', - displayName: 'Osmosis', - images: [ - { - svg: 'https://raw.githubusercontent.com/cosmos/chain-registry/f1348793beb994c6cc0256ed7ebdb48c7aa70003/osmosis/images/osmo.svg', - }, - ], - }, - ], - 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', - }, - ], - }, - }, - numeraires: ['reum7wQmk/owgvGMWMZn/6RFPV24zIKq3W6In/WwZgg='], -}; +import * as testRegistry from '../../registry/chains/penumbra-testnet-deimos-8.json'; describe('Registry', () => { it('gets metadata successfully', () => { @@ -83,7 +14,7 @@ describe('Registry', () => { it('throws when searching for metadata that does not exist', () => { const registry = new Registry(testRegistry); - const cubeId = base64ToUint8Array('6KBVsPINa8gWSHhfH+kAFJC4afEJA3EtuB2HyCqJUws='); + const cubeId = base64ToUint8Array('aGVsbG8gd29ybGQ='); const getCubeMetadata = () => registry.getMetadata(new AssetId({ inner: cubeId })); expect(getCubeMetadata).toThrow(); }); @@ -91,6 +22,12 @@ describe('Registry', () => { it('gets all assets successfully', () => { const registry = new Registry(testRegistry); const res = registry.getAllAssets(); - expect(res.length).toEqual(2); + expect(res.length).toEqual(20); + }); + + it('versions correctly', async () => { + const registry = new Registry(testRegistry); + const version = await registry.version(); + expect(version).toEqual('9eaf48c7cbf3248e6979830cfc982f2208eeec0fcc4c0e2802f0bd43c8bffad3'); }); }); diff --git a/npm/src/registry.ts b/npm/src/registry.ts index 36e725c..2fe15d8 100644 --- a/npm/src/registry.ts +++ b/npm/src/registry.ts @@ -6,6 +6,7 @@ import { JsonRegistry } from './json'; import { JsonValue } from '@bufbuild/protobuf'; import { base64ToUint8Array, uint8ArrayToBase64 } from './utils/base64'; import { mapObjectValues } from './utils/object-mapping'; +import { sha256Hash } from './utils/sha256'; // @ts-expect-error alias for dev only // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -61,4 +62,8 @@ export class Registry { getAllAssets(): Metadata[] { return Object.values(this.assetById); } + + async version(): Promise { + return sha256Hash(JSON.stringify(this)); + } } diff --git a/npm/src/remote.test.ts b/npm/src/remote.test.ts new file mode 100644 index 0000000..3bd987e --- /dev/null +++ b/npm/src/remote.test.ts @@ -0,0 +1,61 @@ +import { it, describe, expect, beforeEach, afterAll } from 'vitest'; +import fetchMock from 'fetch-mock'; +import { RemoteClient } from './remote'; +import { REGISTRY_BASE_URL } from './github'; +import { ChainRegistryClient } from './client'; +import * as Deimos8 from '../../registry/chains/penumbra-testnet-deimos-8.json'; +import * as GlobalsJson from '../../registry/globals.json'; + +describe('RemoteClient', () => { + let rClient: RemoteClient; + + beforeEach(() => { + const client = new ChainRegistryClient(); + rClient = client.remote; + fetchMock.reset(); + }); + + afterAll(() => { + fetchMock.restore(); + }); + + it('should fetch registry remotely and parse it', async () => { + const chainId = 'test-chain-7'; + const endpoint = `${REGISTRY_BASE_URL}/chains/${chainId}.json`; + fetchMock.mock(endpoint, { + status: 200, + body: Deimos8, + }); + + const registry = await rClient.get(chainId); + + expect(fetchMock.called(endpoint)).toBe(true); + expect(registry.chainId).toEqual(Deimos8.chainId); + expect(registry.ibcConnections).toEqual(Deimos8.ibcConnections); + expect(registry.getAllAssets().length).toEqual(Object.keys(Deimos8.assetById).length); + }); + + it('should throw if there is not a remote version', async () => { + const chainId = 'test-not-real-3242'; + const endpoint = `${REGISTRY_BASE_URL}/chains/${chainId}.json`; + fetchMock.mock(endpoint, { + status: 404, + }); + await expect(rClient.get(chainId)).rejects.toThrow(`Failed to fetch from: ${endpoint}`); + }); + + it('should fetch globals remotely and parse it', async () => { + const endpoint = `${REGISTRY_BASE_URL}/globals.json`; + fetchMock.mock(endpoint, { + status: 200, + body: GlobalsJson, + }); + + const registry = await rClient.globals(); + + expect(fetchMock.called(endpoint)).toBe(true); + expect(registry.stakingAssetId.toJson()).toEqual(GlobalsJson.stakingAssetId); + expect(registry.frontends).toEqual(GlobalsJson.frontends); + expect(registry.rpcs).toEqual(GlobalsJson.rpcs); + }); +}); diff --git a/npm/src/remote.ts b/npm/src/remote.ts new file mode 100644 index 0000000..654b88c --- /dev/null +++ b/npm/src/remote.ts @@ -0,0 +1,17 @@ +import { Registry } from './registry'; +import { GithubFetcher } from './github'; +import { swapIfPreviewChain } from './preview'; +import { RegistryGlobals } from './globals'; + +export class RemoteClient { + private readonly github = new GithubFetcher(); + + async get(chainId: string): Promise { + const chainIdToQuery = swapIfPreviewChain(chainId); + return this.github.fetchRegistry(chainIdToQuery); + } + + async globals(): Promise { + return this.github.fetchGlobals(); + } +} diff --git a/npm/src/utils/commit-info-vite-plugin.ts b/npm/src/utils/commit-info-vite-plugin.ts deleted file mode 100644 index b7eb4d3..0000000 --- a/npm/src/utils/commit-info-vite-plugin.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Plugin } from 'vite'; -import { execSync } from 'child_process'; - -// Vite plugin used to inject the current commit hash + commit date + origin into React -// so the user can be informed the version of minifront they are using -export const commitInfoPlugin = (): Plugin => { - const commitHash = execSync('git rev-parse HEAD').toString().trim(); - const commitDate = execSync('git log -1 --format=%cI').toString().trim(); - const gitOriginUrl = execSync('git remote get-url origin') - .toString() - .trim() - .replace(/\.git$/, ''); // Origin urls often appended with .git - - return { - name: 'vite-plugin-commit-info', - enforce: 'pre', - config() { - return { - // Inject the env variables into the code - define: { - __COMMIT_HASH__: JSON.stringify(commitHash), - __COMMIT_DATE__: JSON.stringify(commitDate), - __GIT_ORIGIN_URL__: JSON.stringify(gitOriginUrl), - }, - }; - }, - }; -}; diff --git a/npm/src/utils/sha256.test.ts b/npm/src/utils/sha256.test.ts new file mode 100644 index 0000000..335d60c --- /dev/null +++ b/npm/src/utils/sha256.test.ts @@ -0,0 +1,26 @@ +import { describe, it, expect } from 'vitest'; +import { sha256Hash } from './sha256'; + +describe('sha256Hash', () => { + it('correctly hashes an empty string', async () => { + const result = await sha256Hash(''); + expect(result).toBe('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'); + }); + + it('correctly hashes "Hello, world!"', async () => { + const result = await sha256Hash('Hello, world!'); + expect(result).toBe('315f5bdb76d078c43b8ac0064e4a0164612b1fce77c869345bfc94c75894edd3'); + }); + + it('correctly hashes unicode characters', async () => { + const result = await sha256Hash('こんにちは'); + expect(result).toBe('125aeadf27b0459b8760c13a3d80912dfa8a81a68261906f60d87f4a0268646c'); + }); + + it('correctly hashes hashes', async () => { + const resultA = await sha256Hash('A'); + const resultB = await sha256Hash('B'); + const resultC = await sha256Hash(resultA + resultB); + expect(resultC).toBe('b30ab174f7459cdd40a3acdf15d0c9444fec2adcfb9d579aa154c084885edd0a'); + }); +}); diff --git a/npm/src/utils/sha256.ts b/npm/src/utils/sha256.ts new file mode 100644 index 0000000..5fbf653 --- /dev/null +++ b/npm/src/utils/sha256.ts @@ -0,0 +1,14 @@ +// Function to convert a byte to a hexadecimal string +const byteToHex = (byte: number): string => byte.toString(16).padStart(2, '0'); + +const sha256BuffHash = async (inputBuffer: Uint8Array): Promise => { + const digestBuffer = await crypto.subtle.digest('SHA-256', inputBuffer); + return new Uint8Array(digestBuffer); +}; + +export const sha256Hash = async (inputString: string): Promise => { + const encoder = new TextEncoder(); + const encodedString = encoder.encode(inputString); + const uint8Arr = await sha256BuffHash(encodedString); + return Array.from(uint8Arr).map(byteToHex).join(''); +}; diff --git a/npm/vite-env.d.ts b/npm/vite-env.d.ts deleted file mode 100644 index 4c831f6..0000000 --- a/npm/vite-env.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -/// -declare const __COMMIT_HASH__: string; -declare const __COMMIT_DATE__: string; -declare const __GIT_ORIGIN_URL__: string; diff --git a/npm/vite.config.ts b/npm/vite.config.ts index a260226..6349dbd 100644 --- a/npm/vite.config.ts +++ b/npm/vite.config.ts @@ -1,5 +1,4 @@ import { defineConfig } from 'vite'; -import { commitInfoPlugin } from './src/utils/commit-info-vite-plugin'; import dts from 'vite-plugin-dts'; export default defineConfig({ @@ -9,5 +8,5 @@ export default defineConfig({ formats: ['es', 'cjs'], }, }, - plugins: [commitInfoPlugin(), dts({ rollupTypes: true })], + plugins: [dts({ rollupTypes: true })], }); diff --git a/registry/chains/penumbra-testnet-deimos-6.json b/registry/chains/penumbra-testnet-deimos-6.json deleted file mode 100644 index 6f72a41..0000000 --- a/registry/chains/penumbra-testnet-deimos-6.json +++ /dev/null @@ -1,368 +0,0 @@ -{ - "chainId": "penumbra-testnet-deimos-6", - "ibcConnections": [ - { - "addressPrefix": "osmo", - "chainId": "osmo-test-5", - "channelId": "channel-4", - "counterpartyChannelId": "channel-7780", - "displayName": "Osmosis", - "images": [ - { - "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/f1348793beb994c6cc0256ed7ebdb48c7aa70003/osmosis/images/osmo.svg" - } - ] - }, - { - "addressPrefix": "noble", - "chainId": "grand-1", - "channelId": "channel-3", - "counterpartyChannelId": "channel-164", - "displayName": "Noble", - "images": [ - { - "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/2ca39d0e4eaf3431cca13991948e099801f02e46/noble/images/stake.svg" - } - ] - } - ], - "assetById": { - "6KBVsPINa8gWSHhfH+kAFJC4afEJA3EtuB2HyCqJUws=": { - "denomUnits": [ - { - "denom": "cube" - } - ], - "base": "cube", - "display": "cube", - "symbol": "CUBE", - "penumbraAssetId": { - "inner": "6KBVsPINa8gWSHhfH+kAFJC4afEJA3EtuB2HyCqJUws=" - } - }, - "CKBQapu+DkQpsKyTfKESLTV19/NPWR5sNZtvQsd3Hw8=": { - "description": "USD Coin", - "denomUnits": [ - { - "denom": "transfer/channel-3/uusdc" - }, - { - "denom": "transfer/channel-3/usdc", - "exponent": 6 - } - ], - "base": "transfer/channel-3/uusdc", - "display": "transfer/channel-3/usdc", - "name": "USD Coin", - "symbol": "USDC", - "penumbraAssetId": { - "inner": "CKBQapu+DkQpsKyTfKESLTV19/NPWR5sNZtvQsd3Hw8=" - }, - "images": [ - { - "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/usdc.svg" - } - ] - }, - "CwpUYIdQ9H5Dnf3oQ1l7ISeVMVahWbVNNvMA0dBSdwI=": { - "denomUnits": [ - { - "denom": "delegation_penumbravalid18nkv0r3sfp2seleq6du5kt3mhfce3k6cqm77kj2e7mhakmyw9v9qx42a20", - "exponent": 6 - }, - { - "denom": "mdelegation_penumbravalid18nkv0r3sfp2seleq6du5kt3mhfce3k6cqm77kj2e7mhakmyw9v9qx42a20", - "exponent": 3 - }, - { - "denom": "udelegation_penumbravalid18nkv0r3sfp2seleq6du5kt3mhfce3k6cqm77kj2e7mhakmyw9v9qx42a20" - } - ], - "base": "udelegation_penumbravalid18nkv0r3sfp2seleq6du5kt3mhfce3k6cqm77kj2e7mhakmyw9v9qx42a20", - "display": "delegation_penumbravalid18nkv0r3sfp2seleq6du5kt3mhfce3k6cqm77kj2e7mhakmyw9v9qx42a20", - "symbol": "Delegation (Penumbra Labs CI 1)", - "penumbraAssetId": { - "inner": "CwpUYIdQ9H5Dnf3oQ1l7ISeVMVahWbVNNvMA0dBSdwI=" - }, - "images": [ - { - "png": "https://raw.githubusercontent.com/prax-wallet/registry/main/images/penumbra-favicon.png" - } - ] - }, - "HW2Eq3UZVSBttoUwUi/MUtE7rr2UU7/UH500byp7OAc=": { - "denomUnits": [ - { - "denom": "gm", - "exponent": 6 - }, - { - "denom": "mgm", - "exponent": 3 - }, - { - "denom": "ugm" - } - ], - "base": "ugm", - "display": "gm", - "symbol": "GM", - "penumbraAssetId": { - "inner": "HW2Eq3UZVSBttoUwUi/MUtE7rr2UU7/UH500byp7OAc=" - } - }, - "Hqn6gTCqE7mCBsVa4agsTFmrO0Rip5xmLcipnGKH9AI=": { - "description": "Love is a test tokenfactory asset controlled by the Strangelove Team", - "denomUnits": [ - { - "denom": "transfer/channel-3/ulove" - }, - { - "denom": "transfer/channel-3/love", - "exponent": 6 - } - ], - "base": "transfer/channel-3/ulove", - "display": "transfer/channel-3/love", - "name": "Love", - "symbol": "LOVE", - "penumbraAssetId": { - "inner": "Hqn6gTCqE7mCBsVa4agsTFmrO0Rip5xmLcipnGKH9AI=" - } - }, - "KSOgqHs6JCHxZcyFPb9zqb2vtdoNlIVktgWcsCF8RAc=": { - "description": "The native token of Osmosis", - "denomUnits": [ - { - "denom": "transfer/channel-4/uosmo" - }, - { - "denom": "transfer/channel-4/osmo", - "exponent": 6 - } - ], - "base": "transfer/channel-4/uosmo", - "display": "transfer/channel-4/osmo", - "name": "Osmosis Testnet", - "symbol": "OSMO", - "penumbraAssetId": { - "inner": "KSOgqHs6JCHxZcyFPb9zqb2vtdoNlIVktgWcsCF8RAc=" - }, - "images": [ - { - "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", - "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" - } - ] - }, - "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" - } - ] - }, - "VDuTDzoFOg4mMrNeyqCEC1L4lSjtJUJ5jJ2D6SQsRgM=": { - "description": "Ondo US Dollar Yield", - "denomUnits": [ - { - "denom": "transfer/channel-3/ausdy" - }, - { - "denom": "transfer/channel-3/usdy", - "exponent": 18 - } - ], - "base": "transfer/channel-3/ausdy", - "display": "transfer/channel-3/usdy", - "name": "Ondo US Dollar Yield", - "symbol": "USDY", - "penumbraAssetId": { - "inner": "VDuTDzoFOg4mMrNeyqCEC1L4lSjtJUJ5jJ2D6SQsRgM=" - }, - "images": [ - { - "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/testnets/nobletestnet/images/usdy.png", - "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/testnets/nobletestnet/images/usdy.svg" - } - ] - }, - "ZPcze3Lhpgavnk2eQ/N49hJGttezr+Gl3TiJeL6MvhE=": { - "denomUnits": [ - { - "denom": "transfer/channel-4/factory/osmo1zlkzu72774ynac53necz46u4ycqtp36wedrar0/willyz" - }, - { - "denom": "transfer/channel-4/willyz", - "exponent": 6 - } - ], - "base": "transfer/channel-4/factory/osmo1zlkzu72774ynac53necz46u4ycqtp36wedrar0/willyz", - "display": "transfer/channel-4/willyz", - "name": "Willyz", - "symbol": "WILLYZ", - "penumbraAssetId": { - "inner": "ZPcze3Lhpgavnk2eQ/N49hJGttezr+Gl3TiJeL6MvhE=" - }, - "images": [ - { - "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/testnets/osmosistestnet/images/willyz.png", - "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/testnets/osmosistestnet/images/willyz.svg" - } - ] - }, - "hGwO3SuE1/D05ooLMUVVe7XvYbAFnxAUbIRIZdG3TwI=": { - "description": "The controlled staking asset for Noble Chain", - "denomUnits": [ - { - "denom": "transfer/channel-3/ustake" - }, - { - "denom": "transfer/channel-3/stake", - "exponent": 6 - } - ], - "base": "transfer/channel-3/ustake", - "display": "transfer/channel-3/stake", - "name": "Stake", - "symbol": "STAKE", - "penumbraAssetId": { - "inner": "hGwO3SuE1/D05ooLMUVVe7XvYbAFnxAUbIRIZdG3TwI=" - } - }, - "nDjzm+ldIrNMJha1anGMDVxpA5cLCPnUYQ1clmHF1gw=": { - "denomUnits": [ - { - "denom": "pizza" - } - ], - "base": "pizza", - "display": "pizza", - "symbol": "PIZZA", - "penumbraAssetId": { - "inner": "nDjzm+ldIrNMJha1anGMDVxpA5cLCPnUYQ1clmHF1gw=" - }, - "images": [ - { - "svg": "https://raw.githubusercontent.com/prax-wallet/registry/main/images/pizza.svg" - } - ] - }, - "nwPDkQq3OvLnBwGTD+nmv1Ifb2GEmFCgNHrU++9BsRE=": { - "denomUnits": [ - { - "denom": "gn", - "exponent": 6 - }, - { - "denom": "mgn", - "exponent": 3 - }, - { - "denom": "ugn" - } - ], - "base": "ugn", - "display": "gn", - "symbol": "GN", - "penumbraAssetId": { - "inner": "nwPDkQq3OvLnBwGTD+nmv1Ifb2GEmFCgNHrU++9BsRE=" - } - }, - "qUn70lKZ3qQlCT5gj5sakux4daiTPKj0AN6ZuuFldQU=": { - "denomUnits": [ - { - "denom": "delegation_penumbravalid1qfxldejdhanmu302kcn5fm98q5d7d2upfhzqhaz95hyjdn82pqysqfq050", - "exponent": 6 - }, - { - "denom": "mdelegation_penumbravalid1qfxldejdhanmu302kcn5fm98q5d7d2upfhzqhaz95hyjdn82pqysqfq050", - "exponent": 3 - }, - { - "denom": "udelegation_penumbravalid1qfxldejdhanmu302kcn5fm98q5d7d2upfhzqhaz95hyjdn82pqysqfq050" - } - ], - "base": "udelegation_penumbravalid1qfxldejdhanmu302kcn5fm98q5d7d2upfhzqhaz95hyjdn82pqysqfq050", - "display": "delegation_penumbravalid1qfxldejdhanmu302kcn5fm98q5d7d2upfhzqhaz95hyjdn82pqysqfq050", - "symbol": "Delegation (Penumbra Labs CI 2)", - "penumbraAssetId": { - "inner": "qUn70lKZ3qQlCT5gj5sakux4daiTPKj0AN6ZuuFldQU=" - }, - "images": [ - { - "png": "https://raw.githubusercontent.com/prax-wallet/registry/main/images/penumbra-favicon.png" - } - ] - }, - "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" - } - ] - }, - "xNdg/Pc2CvrtawUX41EBLTlgj83RTenRJaBFXxsSTwk=": { - "denomUnits": [ - { - "denom": "transfer/channel-4/uion" - }, - { - "denom": "transfer/channel-4/ion", - "exponent": 6 - } - ], - "base": "transfer/channel-4/uion", - "display": "transfer/channel-4/ion", - "name": "Ion", - "symbol": "ION", - "penumbraAssetId": { - "inner": "xNdg/Pc2CvrtawUX41EBLTlgj83RTenRJaBFXxsSTwk=" - }, - "images": [ - { - "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", - "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" - } - ] - } - }, - "numeraires": [ - "reum7wQmk/owgvGMWMZn/6RFPV24zIKq3W6In/WwZgg=", - "CKBQapu+DkQpsKyTfKESLTV19/NPWR5sNZtvQsd3Hw8=" - ] -} \ No newline at end of file diff --git a/registry/chains/penumbra-testnet-deimos-7.json b/registry/chains/penumbra-testnet-deimos-7.json deleted file mode 100644 index 6c5823f..0000000 --- a/registry/chains/penumbra-testnet-deimos-7.json +++ /dev/null @@ -1,368 +0,0 @@ -{ - "chainId": "penumbra-testnet-deimos-7", - "ibcConnections": [ - { - "addressPrefix": "osmo", - "chainId": "osmo-test-5", - "channelId": "channel-4", - "counterpartyChannelId": "channel-7780", - "displayName": "Osmosis", - "images": [ - { - "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/f1348793beb994c6cc0256ed7ebdb48c7aa70003/osmosis/images/osmo.svg" - } - ] - }, - { - "addressPrefix": "noble", - "chainId": "grand-1", - "channelId": "channel-3", - "counterpartyChannelId": "channel-164", - "displayName": "Noble", - "images": [ - { - "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/2ca39d0e4eaf3431cca13991948e099801f02e46/noble/images/stake.svg" - } - ] - } - ], - "assetById": { - "6KBVsPINa8gWSHhfH+kAFJC4afEJA3EtuB2HyCqJUws=": { - "denomUnits": [ - { - "denom": "cube" - } - ], - "base": "cube", - "display": "cube", - "symbol": "CUBE", - "penumbraAssetId": { - "inner": "6KBVsPINa8gWSHhfH+kAFJC4afEJA3EtuB2HyCqJUws=" - } - }, - "CKBQapu+DkQpsKyTfKESLTV19/NPWR5sNZtvQsd3Hw8=": { - "description": "USD Coin", - "denomUnits": [ - { - "denom": "transfer/channel-3/uusdc" - }, - { - "denom": "transfer/channel-3/usdc", - "exponent": 6 - } - ], - "base": "transfer/channel-3/uusdc", - "display": "transfer/channel-3/usdc", - "name": "USD Coin", - "symbol": "USDC", - "penumbraAssetId": { - "inner": "CKBQapu+DkQpsKyTfKESLTV19/NPWR5sNZtvQsd3Hw8=" - }, - "images": [ - { - "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/usdc.svg" - } - ] - }, - "CwpUYIdQ9H5Dnf3oQ1l7ISeVMVahWbVNNvMA0dBSdwI=": { - "denomUnits": [ - { - "denom": "delegation_penumbravalid18nkv0r3sfp2seleq6du5kt3mhfce3k6cqm77kj2e7mhakmyw9v9qx42a20", - "exponent": 6 - }, - { - "denom": "mdelegation_penumbravalid18nkv0r3sfp2seleq6du5kt3mhfce3k6cqm77kj2e7mhakmyw9v9qx42a20", - "exponent": 3 - }, - { - "denom": "udelegation_penumbravalid18nkv0r3sfp2seleq6du5kt3mhfce3k6cqm77kj2e7mhakmyw9v9qx42a20" - } - ], - "base": "udelegation_penumbravalid18nkv0r3sfp2seleq6du5kt3mhfce3k6cqm77kj2e7mhakmyw9v9qx42a20", - "display": "delegation_penumbravalid18nkv0r3sfp2seleq6du5kt3mhfce3k6cqm77kj2e7mhakmyw9v9qx42a20", - "symbol": "Delegation (Penumbra Labs CI 1)", - "penumbraAssetId": { - "inner": "CwpUYIdQ9H5Dnf3oQ1l7ISeVMVahWbVNNvMA0dBSdwI=" - }, - "images": [ - { - "png": "https://raw.githubusercontent.com/prax-wallet/registry/main/images/penumbra-favicon.png" - } - ] - }, - "HW2Eq3UZVSBttoUwUi/MUtE7rr2UU7/UH500byp7OAc=": { - "denomUnits": [ - { - "denom": "gm", - "exponent": 6 - }, - { - "denom": "mgm", - "exponent": 3 - }, - { - "denom": "ugm" - } - ], - "base": "ugm", - "display": "gm", - "symbol": "GM", - "penumbraAssetId": { - "inner": "HW2Eq3UZVSBttoUwUi/MUtE7rr2UU7/UH500byp7OAc=" - } - }, - "Hqn6gTCqE7mCBsVa4agsTFmrO0Rip5xmLcipnGKH9AI=": { - "description": "Love is a test tokenfactory asset controlled by the Strangelove Team", - "denomUnits": [ - { - "denom": "transfer/channel-3/ulove" - }, - { - "denom": "transfer/channel-3/love", - "exponent": 6 - } - ], - "base": "transfer/channel-3/ulove", - "display": "transfer/channel-3/love", - "name": "Love", - "symbol": "LOVE", - "penumbraAssetId": { - "inner": "Hqn6gTCqE7mCBsVa4agsTFmrO0Rip5xmLcipnGKH9AI=" - } - }, - "KSOgqHs6JCHxZcyFPb9zqb2vtdoNlIVktgWcsCF8RAc=": { - "description": "The native token of Osmosis", - "denomUnits": [ - { - "denom": "transfer/channel-4/uosmo" - }, - { - "denom": "transfer/channel-4/osmo", - "exponent": 6 - } - ], - "base": "transfer/channel-4/uosmo", - "display": "transfer/channel-4/osmo", - "name": "Osmosis Testnet", - "symbol": "OSMO", - "penumbraAssetId": { - "inner": "KSOgqHs6JCHxZcyFPb9zqb2vtdoNlIVktgWcsCF8RAc=" - }, - "images": [ - { - "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.png", - "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/osmo.svg" - } - ] - }, - "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" - } - ] - }, - "VDuTDzoFOg4mMrNeyqCEC1L4lSjtJUJ5jJ2D6SQsRgM=": { - "description": "Ondo US Dollar Yield", - "denomUnits": [ - { - "denom": "transfer/channel-3/ausdy" - }, - { - "denom": "transfer/channel-3/usdy", - "exponent": 18 - } - ], - "base": "transfer/channel-3/ausdy", - "display": "transfer/channel-3/usdy", - "name": "Ondo US Dollar Yield", - "symbol": "USDY", - "penumbraAssetId": { - "inner": "VDuTDzoFOg4mMrNeyqCEC1L4lSjtJUJ5jJ2D6SQsRgM=" - }, - "images": [ - { - "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/testnets/nobletestnet/images/usdy.png", - "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/testnets/nobletestnet/images/usdy.svg" - } - ] - }, - "ZPcze3Lhpgavnk2eQ/N49hJGttezr+Gl3TiJeL6MvhE=": { - "denomUnits": [ - { - "denom": "transfer/channel-4/factory/osmo1zlkzu72774ynac53necz46u4ycqtp36wedrar0/willyz" - }, - { - "denom": "transfer/channel-4/willyz", - "exponent": 6 - } - ], - "base": "transfer/channel-4/factory/osmo1zlkzu72774ynac53necz46u4ycqtp36wedrar0/willyz", - "display": "transfer/channel-4/willyz", - "name": "Willyz", - "symbol": "WILLYZ", - "penumbraAssetId": { - "inner": "ZPcze3Lhpgavnk2eQ/N49hJGttezr+Gl3TiJeL6MvhE=" - }, - "images": [ - { - "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/testnets/osmosistestnet/images/willyz.png", - "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/testnets/osmosistestnet/images/willyz.svg" - } - ] - }, - "hGwO3SuE1/D05ooLMUVVe7XvYbAFnxAUbIRIZdG3TwI=": { - "description": "The controlled staking asset for Noble Chain", - "denomUnits": [ - { - "denom": "transfer/channel-3/ustake" - }, - { - "denom": "transfer/channel-3/stake", - "exponent": 6 - } - ], - "base": "transfer/channel-3/ustake", - "display": "transfer/channel-3/stake", - "name": "Stake", - "symbol": "STAKE", - "penumbraAssetId": { - "inner": "hGwO3SuE1/D05ooLMUVVe7XvYbAFnxAUbIRIZdG3TwI=" - } - }, - "nDjzm+ldIrNMJha1anGMDVxpA5cLCPnUYQ1clmHF1gw=": { - "denomUnits": [ - { - "denom": "pizza" - } - ], - "base": "pizza", - "display": "pizza", - "symbol": "PIZZA", - "penumbraAssetId": { - "inner": "nDjzm+ldIrNMJha1anGMDVxpA5cLCPnUYQ1clmHF1gw=" - }, - "images": [ - { - "svg": "https://raw.githubusercontent.com/prax-wallet/registry/main/images/pizza.svg" - } - ] - }, - "nwPDkQq3OvLnBwGTD+nmv1Ifb2GEmFCgNHrU++9BsRE=": { - "denomUnits": [ - { - "denom": "gn", - "exponent": 6 - }, - { - "denom": "mgn", - "exponent": 3 - }, - { - "denom": "ugn" - } - ], - "base": "ugn", - "display": "gn", - "symbol": "GN", - "penumbraAssetId": { - "inner": "nwPDkQq3OvLnBwGTD+nmv1Ifb2GEmFCgNHrU++9BsRE=" - } - }, - "qUn70lKZ3qQlCT5gj5sakux4daiTPKj0AN6ZuuFldQU=": { - "denomUnits": [ - { - "denom": "delegation_penumbravalid1qfxldejdhanmu302kcn5fm98q5d7d2upfhzqhaz95hyjdn82pqysqfq050", - "exponent": 6 - }, - { - "denom": "mdelegation_penumbravalid1qfxldejdhanmu302kcn5fm98q5d7d2upfhzqhaz95hyjdn82pqysqfq050", - "exponent": 3 - }, - { - "denom": "udelegation_penumbravalid1qfxldejdhanmu302kcn5fm98q5d7d2upfhzqhaz95hyjdn82pqysqfq050" - } - ], - "base": "udelegation_penumbravalid1qfxldejdhanmu302kcn5fm98q5d7d2upfhzqhaz95hyjdn82pqysqfq050", - "display": "delegation_penumbravalid1qfxldejdhanmu302kcn5fm98q5d7d2upfhzqhaz95hyjdn82pqysqfq050", - "symbol": "Delegation (Penumbra Labs CI 2)", - "penumbraAssetId": { - "inner": "qUn70lKZ3qQlCT5gj5sakux4daiTPKj0AN6ZuuFldQU=" - }, - "images": [ - { - "png": "https://raw.githubusercontent.com/prax-wallet/registry/main/images/penumbra-favicon.png" - } - ] - }, - "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" - } - ] - }, - "xNdg/Pc2CvrtawUX41EBLTlgj83RTenRJaBFXxsSTwk=": { - "denomUnits": [ - { - "denom": "transfer/channel-4/uion" - }, - { - "denom": "transfer/channel-4/ion", - "exponent": 6 - } - ], - "base": "transfer/channel-4/uion", - "display": "transfer/channel-4/ion", - "name": "Ion", - "symbol": "ION", - "penumbraAssetId": { - "inner": "xNdg/Pc2CvrtawUX41EBLTlgj83RTenRJaBFXxsSTwk=" - }, - "images": [ - { - "png": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.png", - "svg": "https://raw.githubusercontent.com/cosmos/chain-registry/master/osmosis/images/ion.svg" - } - ] - } - }, - "numeraires": [ - "reum7wQmk/owgvGMWMZn/6RFPV24zIKq3W6In/WwZgg=", - "CKBQapu+DkQpsKyTfKESLTV19/NPWR5sNZtvQsd3Hw8=" - ] -} \ No newline at end of file