From c3070ab5a096ddeccd0eea8251200e4f9ad37c94 Mon Sep 17 00:00:00 2001 From: SatoshiQaziMuhammed Date: Sun, 15 Nov 2026 05:09:49 +0400 Subject: [PATCH] Drop zod 3 from the tree (GHSA-mrhx-c7xc-m3w5) (#31) zod 3.25.76 reached the extension along two paths, and 3.x has no fix: - extension-compat-metamask took all of web3 4 for one call, Web3.utils.sha3 on the eth_sign payload; web3-validator pins zod ^3.21.4 and has had no release since. ethSignHash replaces it with keccakAsHex from @pezkuwi/util-crypto. Both read hex as bytes and anything else as UTF-8, and agree on every input but empty data, for which web3 returned nothing and MetaMask rejected the request; that is now refused up front. web3 leaves the lockfile (about 480 lines). - extension-ui used @paraspell/xcm-analyser 1.x, whose last release depends on zod 3. 3.4.0 uses zod 4, renames convertMultilocationToUrl to convertLocationToUrl, and no longer accepts the digit-grouped strings that SignerPayload.toHuman() produces ("1,984"), so a plain bump would have dropped the readable asset location from the signing popup without an error. assetIdUrl turns those strings back into numbers first. zod resolves to 4.6.7 alone. Lockfile changes resolved with a 14-day minimum release age. --- .../extension-compat-metamask/package.json | 4 +- .../extension-compat-metamask/src/bundle.ts | 5 +- .../src/ethSignHash.spec.ts | 24 + .../src/ethSignHash.ts | 19 + .../tsconfig.build.json | 3 + .../tsconfig.spec.json | 16 + packages/extension-ui/package.json | 2 +- .../src/Popup/Signing/Extrinsic.tsx | 12 +- .../src/Popup/Signing/assetIdUrl.spec.ts | 27 + .../src/Popup/Signing/assetIdUrl.ts | 31 ++ tsconfig.build.json | 1 + yarn.lock | 502 +----------------- 12 files changed, 144 insertions(+), 502 deletions(-) create mode 100644 packages/extension-compat-metamask/src/ethSignHash.spec.ts create mode 100644 packages/extension-compat-metamask/src/ethSignHash.ts create mode 100644 packages/extension-compat-metamask/tsconfig.spec.json create mode 100644 packages/extension-ui/src/Popup/Signing/assetIdUrl.spec.ts create mode 100644 packages/extension-ui/src/Popup/Signing/assetIdUrl.ts diff --git a/packages/extension-compat-metamask/package.json b/packages/extension-compat-metamask/package.json index 02392b1..c0d88fb 100644 --- a/packages/extension-compat-metamask/package.json +++ b/packages/extension-compat-metamask/package.json @@ -25,8 +25,8 @@ "@pezkuwi/extension-inject": "0.62.27", "@pezkuwi/types": "^16.5.37", "@pezkuwi/util": "^14.0.26", - "tslib": "^2.8.1", - "web3": "^4.7.0" + "@pezkuwi/util-crypto": "^14.0.26", + "tslib": "^2.8.1" }, "peerDependencies": { "@pezkuwi/api": "*", diff --git a/packages/extension-compat-metamask/src/bundle.ts b/packages/extension-compat-metamask/src/bundle.ts index 99d5e58..dd675b3 100644 --- a/packages/extension-compat-metamask/src/bundle.ts +++ b/packages/extension-compat-metamask/src/bundle.ts @@ -6,10 +6,11 @@ import type { SignerPayloadRaw, SignerResult } from '@pezkuwi/types/types'; import type { HexString } from '@pezkuwi/util/types'; import detectEthereumProvider from '@metamask/detect-provider'; -import Web3 from 'web3'; import { assert } from '@pezkuwi/util'; +import { ethSignHash } from './ethSignHash.js'; + export { packageInfo } from './packageInfo.js'; interface RequestArguments { @@ -77,7 +78,7 @@ function injectMetaMaskWeb3 (win: Web3Window): void { }, signer: { signRaw: async (raw: SignerPayloadRaw): Promise => { - const signature = (await provider.request({ method: 'eth_sign', params: [raw.address, Web3.utils.sha3(raw.data)] })) as HexString; + const signature = (await provider.request({ method: 'eth_sign', params: [raw.address, ethSignHash(raw.data)] })) as HexString; return { id: 0, signature }; } diff --git a/packages/extension-compat-metamask/src/ethSignHash.spec.ts b/packages/extension-compat-metamask/src/ethSignHash.spec.ts new file mode 100644 index 0000000..649ad5b --- /dev/null +++ b/packages/extension-compat-metamask/src/ethSignHash.spec.ts @@ -0,0 +1,24 @@ +// Copyright 2019-2026 @pezkuwi/extension-compat-metamask authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +/// + +import { ethSignHash } from './ethSignHash.js'; + +// Expected values were produced by web3 4.16 Web3.utils.sha3, which this replaces. +describe('ethSignHash', (): void => { + it('hashes hex data as bytes', (): void => { + expect(ethSignHash('0x1234abcd')).toBe('0xfb89609961b35c222ceb5dacad207b44f9e09c11fa5f5f02a7cf958c030b7261'); + expect(ethSignHash('0xABCDEF')).toBe('0x800d501693feda2226878e1ec7869eef8919dbc5bd10c2bcd031b94d73492860'); + }); + + it('hashes other data as UTF-8', (): void => { + expect(ethSignHash('hello')).toBe('0x1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8'); + expect(ethSignHash('0x1234')).toBe('0xf844540359c03c3ff02fb9afa4fca69333774af89989dd1f18a555e30414d27e'); + }); + + it('refuses empty data', (): void => { + expect(() => ethSignHash('')).toThrow('Cannot sign empty data'); + expect(() => ethSignHash('0x')).toThrow('Cannot sign empty data'); + }); +}); diff --git a/packages/extension-compat-metamask/src/ethSignHash.ts b/packages/extension-compat-metamask/src/ethSignHash.ts new file mode 100644 index 0000000..86f1430 --- /dev/null +++ b/packages/extension-compat-metamask/src/ethSignHash.ts @@ -0,0 +1,19 @@ +// Copyright 2019-2026 @pezkuwi/extension-compat-metamask authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { HexString } from '@pezkuwi/util/types'; + +import { assert } from '@pezkuwi/util'; +import { keccakAsHex } from '@pezkuwi/util-crypto'; + +/** + * The digest handed to MetaMask's eth_sign: keccak-256 of the data, read as + * bytes when it is hex and as UTF-8 otherwise (what web3's utils.sha3 did). + * web3 returned nothing for empty data and the request failed in MetaMask; + * this refuses it here instead of signing the empty-input hash. + */ +export function ethSignHash (data: string): HexString { + assert(data !== '' && data !== '0x', 'Cannot sign empty data'); + + return keccakAsHex(data); +} diff --git a/packages/extension-compat-metamask/tsconfig.build.json b/packages/extension-compat-metamask/tsconfig.build.json index b27ae67..e080ec5 100644 --- a/packages/extension-compat-metamask/tsconfig.build.json +++ b/packages/extension-compat-metamask/tsconfig.build.json @@ -5,6 +5,9 @@ "outDir": "./build", "rootDir": "./src" }, + "exclude": [ + "**/*.spec.ts" + ], "references": [ { "path": "../extension-inject/tsconfig.build.json" } ] diff --git a/packages/extension-compat-metamask/tsconfig.spec.json b/packages/extension-compat-metamask/tsconfig.spec.json new file mode 100644 index 0000000..b09dfb1 --- /dev/null +++ b/packages/extension-compat-metamask/tsconfig.spec.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "baseUrl": "..", + "outDir": "./build", + "rootDir": "./src", + "emitDeclarationOnly": false, + "noEmit": true + }, + "include": [ + "**/*.spec.ts" + ], + "references": [ + { "path": "../extension-compat-metamask/tsconfig.build.json" } + ] +} diff --git a/packages/extension-ui/package.json b/packages/extension-ui/package.json index 9937f76..36eee1b 100644 --- a/packages/extension-ui/package.json +++ b/packages/extension-ui/package.json @@ -22,7 +22,7 @@ "@fortawesome/free-regular-svg-icons": "^6.7.2", "@fortawesome/free-solid-svg-icons": "^6.7.2", "@fortawesome/react-fontawesome": "^0.2.0", - "@paraspell/xcm-analyser": "^1.3.1", + "@paraspell/xcm-analyser": "^3.4.0", "@pezkuwi/api": "^16.5.37", "@pezkuwi/extension-base": "0.62.27", "@pezkuwi/extension-chains": "0.62.27", diff --git a/packages/extension-ui/src/Popup/Signing/Extrinsic.tsx b/packages/extension-ui/src/Popup/Signing/Extrinsic.tsx index fa093af..1890ca6 100644 --- a/packages/extension-ui/src/Popup/Signing/Extrinsic.tsx +++ b/packages/extension-ui/src/Popup/Signing/Extrinsic.tsx @@ -7,13 +7,13 @@ import type { AnyJson, SignerPayloadJSON } from '@pezkuwi/types/types'; import type { BN } from '@pezkuwi/util'; import type { TFunction } from '../../hooks/useTranslation.js'; -import { convertMultilocationToUrl } from '@paraspell/xcm-analyser'; import React, { useMemo, useRef } from 'react'; import { bnToBn, formatNumber } from '@pezkuwi/util'; import { Table } from '../../components/index.js'; import { useMetadata, useTranslation } from '../../hooks/index.js'; +import { assetIdUrl } from './assetIdUrl.js'; interface Decoded { args: AnyJson | null; @@ -107,14 +107,6 @@ function mortalityAsString (era: ExtrinsicEra, hexBlockNumber: string, t: TFunct }); } -function getHumanReadableAssetId (assetId: unknown): string | undefined { - try { - return convertMultilocationToUrl(assetId); - } catch (_) { - return undefined; - } -} - function Extrinsic ({ className, payload, request: { blockNumber, genesisHash, method, specVersion: hexSpec }, url }: Props): React.ReactElement { const { t } = useTranslation(); const chain = useMetadata(genesisHash); @@ -128,7 +120,7 @@ function Extrinsic ({ className, payload, request: { blockNumber, genesisHash, m const humanReadablePayload = payload.toHuman() as Record; const assetId = humanReadablePayload['assetId']; - const humanReadableAssetId = getHumanReadableAssetId(assetId); + const humanReadableAssetId = assetIdUrl(assetId); return ( + +import { assetIdUrl } from './assetIdUrl.js'; + +// Inputs are in the shape SignerPayload.toHuman() gives the signing popup. +describe('assetIdUrl', (): void => { + it('reads grouped digit strings as numbers', (): void => { + expect(assetIdUrl({ interior: { X2: [{ PalletInstance: '50' }, { GeneralIndex: '1,984' }] }, parents: '0' })).toBe('./PalletInstance(50)/GeneralIndex(1984)'); + expect(assetIdUrl({ interior: { X1: { Parachain: '1,000' } }, parents: '1' })).toBe('../Parachain(1000)'); + expect(assetIdUrl({ interior: { X1: [{ Parachain: '2,034' }] }, parents: '1' })).toBe('../Parachain(2034)'); + }); + + it('leaves hex and names alone', (): void => { + expect(assetIdUrl({ interior: { X2: [{ Parachain: '2,004' }, { AccountKey20: { key: '0x931715fee2d06333043d11f658c8ce934ac61d0c', network: null } }] }, parents: '1' })).toBe('../Parachain(2004)/AccountKey20(null, 0x931715fee2d06333043d11f658c8ce934ac61d0c)'); + expect(assetIdUrl({ interior: { X1: { GlobalConsensus: 'Polkadot' } }, parents: '2' })).toBe('../../GlobalConsensus(Polkadot)'); + }); + + it('gives nothing for what is not a location', (): void => { + expect(assetIdUrl(undefined)).toBeUndefined(); + expect(assetIdUrl(null)).toBeUndefined(); + expect(assetIdUrl('1,984')).toBeUndefined(); + expect(assetIdUrl({})).toBeUndefined(); + }); +}); diff --git a/packages/extension-ui/src/Popup/Signing/assetIdUrl.ts b/packages/extension-ui/src/Popup/Signing/assetIdUrl.ts new file mode 100644 index 0000000..84d540e --- /dev/null +++ b/packages/extension-ui/src/Popup/Signing/assetIdUrl.ts @@ -0,0 +1,31 @@ +// Copyright 2019-2026 @pezkuwi/extension-ui authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import { convertLocationToUrl } from '@paraspell/xcm-analyser'; + +// toHuman() renders integers as grouped digit strings ("1,984"); the +// analyser's schema takes numbers, so those are turned back before parsing. +const GROUPED_INTEGER = /^\d{1,3}(,\d{3})*$/; + +function fromHuman (value: unknown): unknown { + if (typeof value === 'string') { + return GROUPED_INTEGER.test(value) + ? Number(value.replace(/,/g, '')) + : value; + } else if (Array.isArray(value)) { + return value.map(fromHuman); + } else if (value && typeof value === 'object') { + return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, fromHuman(v)])); + } + + return value; +} + +/** The asset location of a signing payload, from its toHuman() form, as an XCM path. */ +export function assetIdUrl (assetId: unknown): string | undefined { + try { + return convertLocationToUrl(fromHuman(assetId)); + } catch { + return undefined; + } +} diff --git a/tsconfig.build.json b/tsconfig.build.json index 4eceb04..4adf09c 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -10,6 +10,7 @@ { "path": "./packages/extension-base/tsconfig.spec.json" }, { "path": "./packages/extension-chains/tsconfig.build.json" }, { "path": "./packages/extension-compat-metamask/tsconfig.build.json" }, + { "path": "./packages/extension-compat-metamask/tsconfig.spec.json" }, { "path": "./packages/extension-dapp/tsconfig.build.json" }, { "path": "./packages/extension-dapp/tsconfig.spec.json" }, { "path": "./packages/extension-inject/tsconfig.build.json" }, diff --git a/yarn.lock b/yarn.lock index bec11ac..e3004b6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,13 +5,6 @@ __metadata: version: 8 cacheKey: 10 -"@adraffy/ens-normalize@npm:^1.8.8": - version: 1.11.1 - resolution: "@adraffy/ens-normalize@npm:1.11.1" - checksum: 10/dd19274d9fcaf99bf08a62b64e54f4748de11b235767addbd3f7385ae1b7777bd704d17ff003ffaa3295a0b9d035929381cf3b38329c96260bff96aab8ad7b37 - languageName: node - linkType: hard - "@asamuzakjp/css-color@npm:^3.2.0": version: 3.2.0 resolution: "@asamuzakjp/css-color@npm:3.2.0" @@ -629,24 +622,6 @@ __metadata: languageName: node linkType: hard -"@ethereumjs/rlp@npm:^4.0.1": - version: 4.0.1 - resolution: "@ethereumjs/rlp@npm:4.0.1" - bin: - rlp: bin/rlp - checksum: 10/bfdffd634ce72f3b17e3d085d071f2fe7ce9680aebdf10713d74b30afd80ef882d17f19ff7175fcb049431a56e800bd3558d3b028bd0d82341927edb303ab450 - languageName: node - linkType: hard - -"@ethereumjs/rlp@npm:^5.0.2": - version: 5.0.2 - resolution: "@ethereumjs/rlp@npm:5.0.2" - bin: - rlp: bin/rlp.cjs - checksum: 10/2af80d98faf7f64dfb6d739c2df7da7350ff5ad52426c3219897e843ee441215db0ffa346873200a6be6d11142edb9536e66acd62436b5005fa935baaf7eb6bd - languageName: node - linkType: hard - "@fortawesome/fontawesome-common-types@npm:6.7.2": version: 6.7.2 resolution: "@fortawesome/fontawesome-common-types@npm:6.7.2" @@ -1241,15 +1216,6 @@ __metadata: languageName: node linkType: hard -"@noble/curves@npm:1.4.2, @noble/curves@npm:~1.4.0": - version: 1.4.2 - resolution: "@noble/curves@npm:1.4.2" - dependencies: - "@noble/hashes": "npm:1.4.0" - checksum: 10/f433a2e8811ae345109388eadfa18ef2b0004c1f79417553241db4f0ad0d59550be6298a4f43d989c627e9f7551ffae6e402a4edf0173981e6da95fc7cab5123 - languageName: node - linkType: hard - "@noble/curves@npm:^1.9.7, @noble/curves@npm:~1.9.2": version: 1.9.7 resolution: "@noble/curves@npm:1.9.7" @@ -1259,13 +1225,6 @@ __metadata: languageName: node linkType: hard -"@noble/hashes@npm:1.4.0, @noble/hashes@npm:~1.4.0": - version: 1.4.0 - resolution: "@noble/hashes@npm:1.4.0" - checksum: 10/e156e65794c473794c52fa9d06baf1eb20903d0d96719530f523cc4450f6c721a957c544796e6efd0197b2296e7cd70efeb312f861465e17940a3e3c7e0febc6 - languageName: node - linkType: hard - "@noble/hashes@npm:1.8.0, @noble/hashes@npm:^1.3.3, @noble/hashes@npm:^1.8.0, @noble/hashes@npm:~1.8.0": version: 1.8.0 resolution: "@noble/hashes@npm:1.8.0" @@ -1470,12 +1429,12 @@ __metadata: languageName: node linkType: hard -"@paraspell/xcm-analyser@npm:^1.3.1": - version: 1.5.9 - resolution: "@paraspell/xcm-analyser@npm:1.5.9" +"@paraspell/xcm-analyser@npm:^3.4.0": + version: 3.4.0 + resolution: "@paraspell/xcm-analyser@npm:3.4.0" dependencies: - zod: "npm:^3.25.67" - checksum: 10/2027550108cd7aa299c5a980eb2080ba930f1952f8993e8acdadd8677aa3ccd2e0753ca7acaa08bd8d84eac2012d473d32d61c3b189dcf081bf3a2f5206fe6c4 + zod: "npm:^4.6.7" + checksum: 10/6a11cd9352145c552c26efe85b2a0cc02e8490cd013df53ba71a4105acfb3348e88974f8ee88df60a9c91da31703df6e92644411f94bad327a3e3c86656a6c49 languageName: node linkType: hard @@ -1852,8 +1811,8 @@ __metadata: "@pezkuwi/extension-inject": "npm:0.62.27" "@pezkuwi/types": "npm:^16.5.37" "@pezkuwi/util": "npm:^14.0.26" + "@pezkuwi/util-crypto": "npm:^14.0.26" tslib: "npm:^2.8.1" - web3: "npm:^4.7.0" peerDependencies: "@pezkuwi/api": "*" "@pezkuwi/util": "*" @@ -1914,7 +1873,7 @@ __metadata: "@fortawesome/free-regular-svg-icons": "npm:^6.7.2" "@fortawesome/free-solid-svg-icons": "npm:^6.7.2" "@fortawesome/react-fontawesome": "npm:^0.2.0" - "@paraspell/xcm-analyser": "npm:^1.3.1" + "@paraspell/xcm-analyser": "npm:^3.4.0" "@pezkuwi/api": "npm:^16.5.37" "@pezkuwi/dev-test": "npm:^0.86.3" "@pezkuwi/extension-base": "npm:0.62.27" @@ -2831,34 +2790,6 @@ __metadata: languageName: node linkType: hard -"@scure/base@npm:~1.1.6": - version: 1.1.9 - resolution: "@scure/base@npm:1.1.9" - checksum: 10/f0ab7f687bbcdee2a01377fe3cd808bf63977999672751295b6a92625d5322f4754a96d40f6bd579bc367aad48ecf8a4e6d0390e70296e6ded1076f52adb16bb - languageName: node - linkType: hard - -"@scure/bip32@npm:1.4.0": - version: 1.4.0 - resolution: "@scure/bip32@npm:1.4.0" - dependencies: - "@noble/curves": "npm:~1.4.0" - "@noble/hashes": "npm:~1.4.0" - "@scure/base": "npm:~1.1.6" - checksum: 10/6cd5062d902564d9e970597ec8b1adacb415b2eadfbb95aee1a1a0480a52eb0de4d294d3753aa8b48548064c9795ed108d348a31a8ce3fc88785377bb12c63b9 - languageName: node - linkType: hard - -"@scure/bip39@npm:1.3.0": - version: 1.3.0 - resolution: "@scure/bip39@npm:1.3.0" - dependencies: - "@noble/hashes": "npm:~1.4.0" - "@scure/base": "npm:~1.1.6" - checksum: 10/7d71fd58153de22fe8cd65b525f6958a80487bc9d0fbc32c71c328aeafe41fa259f989d2f1e0fa4fdfeaf83b8fcf9310d52ed9862987e46c2f2bfb9dd8cf9fc1 - languageName: node - linkType: hard - "@sinonjs/commons@npm:^1, @sinonjs/commons@npm:^1.3.0, @sinonjs/commons@npm:^1.4.0, @sinonjs/commons@npm:^1.7.0": version: 1.8.6 resolution: "@sinonjs/commons@npm:1.8.6" @@ -3377,15 +3308,6 @@ __metadata: languageName: node linkType: hard -"@types/ws@npm:8.5.3": - version: 8.5.3 - resolution: "@types/ws@npm:8.5.3" - dependencies: - "@types/node": "npm:*" - checksum: 10/08aac698ce6480b532d8311f790a8744ae489ccdd98f374cfe4b8245855439825c64b031abcbba4f30fb280da6cc2b02a4e261e16341d058ffaeecaa24ba2bd3 - languageName: node - linkType: hard - "@types/ws@npm:^8.18.1": version: 8.18.2 resolution: "@types/ws@npm:8.18.2" @@ -4059,19 +3981,6 @@ __metadata: languageName: node linkType: hard -"abitype@npm:0.7.1": - version: 0.7.1 - resolution: "abitype@npm:0.7.1" - peerDependencies: - typescript: ">=4.9.4" - zod: ^3 >=3.19.1 - peerDependenciesMeta: - zod: - optional: true - checksum: 10/deee4a18c9c7218ab2e5e57e07e4cb3e2f3e785657be364d098ab0587cd552c4fbb41e1bdddbc6fa52387f51ebd181461fe70a13127cc77091655775fdfb18fe - languageName: node - linkType: hard - "accepts@npm:^2.0.0": version: 2.0.0 resolution: "accepts@npm:2.0.0" @@ -5305,24 +5214,6 @@ __metadata: languageName: node linkType: hard -"crc-32@npm:^1.2.2": - version: 1.2.2 - resolution: "crc-32@npm:1.2.2" - bin: - crc32: bin/crc32.njs - checksum: 10/824f696a5baaf617809aa9cd033313c8f94f12d15ebffa69f10202480396be44aef9831d900ab291638a8022ed91c360696dd5b1ba691eb3f34e60be8835b7c3 - languageName: node - linkType: hard - -"cross-fetch@npm:^4.0.0": - version: 4.1.0 - resolution: "cross-fetch@npm:4.1.0" - dependencies: - node-fetch: "npm:^2.7.0" - checksum: 10/07624940607b64777d27ec9c668ddb6649e8c59ee0a5a10e63a51ce857e2bbb1294a45854a31c10eccb91b65909a5b199fcb0217339b44156f85900a7384f489 - languageName: node - linkType: hard - "cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.6": version: 7.0.6 resolution: "cross-spawn@npm:7.0.6" @@ -6680,18 +6571,6 @@ __metadata: languageName: node linkType: hard -"ethereum-cryptography@npm:^2.0.0": - version: 2.2.1 - resolution: "ethereum-cryptography@npm:2.2.1" - dependencies: - "@noble/curves": "npm:1.4.2" - "@noble/hashes": "npm:1.4.0" - "@scure/bip32": "npm:1.4.0" - "@scure/bip39": "npm:1.3.0" - checksum: 10/ab123bbfe843500ac2d645ce9edc4bc814962ffb598db6bf8bf01fbecac656e6c81ff4cf2472f1734844bbcbad2bf658d8b699cb7248d768e0f06ae13ecf43b8 - languageName: node - linkType: hard - "eventemitter3@npm:^5.0.1": version: 5.0.4 resolution: "eventemitter3@npm:5.0.4" @@ -7896,16 +7775,6 @@ __metadata: languageName: node linkType: hard -"is-arguments@npm:^1.0.4": - version: 1.2.0 - resolution: "is-arguments@npm:1.2.0" - dependencies: - call-bound: "npm:^1.0.2" - has-tostringtag: "npm:^1.0.2" - checksum: 10/471a8ef631b8ee8829c43a8ab05c081700c0e25180c73d19f3bf819c1a8448c426a9e8e601f278973eca68966384b16ceb78b8c63af795b099cd199ea5afc457 - languageName: node - linkType: hard - "is-array-buffer@npm:^3.0.4, is-array-buffer@npm:^3.0.5": version: 3.0.5 resolution: "is-array-buffer@npm:3.0.5" @@ -8036,7 +7905,7 @@ __metadata: languageName: node linkType: hard -"is-generator-function@npm:^1.0.10, is-generator-function@npm:^1.0.7": +"is-generator-function@npm:^1.0.10": version: 1.1.2 resolution: "is-generator-function@npm:1.1.2" dependencies: @@ -8244,7 +8113,7 @@ __metadata: languageName: node linkType: hard -"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.14, is-typed-array@npm:^1.1.15, is-typed-array@npm:^1.1.3": +"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.14, is-typed-array@npm:^1.1.15": version: 1.1.15 resolution: "is-typed-array@npm:1.1.15" dependencies: @@ -8351,15 +8220,6 @@ __metadata: languageName: node linkType: hard -"isomorphic-ws@npm:^5.0.0": - version: 5.0.0 - resolution: "isomorphic-ws@npm:5.0.0" - peerDependencies: - ws: "*" - checksum: 10/e20eb2aee09ba96247465fda40c6d22c1153394c0144fa34fe6609f341af4c8c564f60ea3ba762335a7a9c306809349f9b863c8beedf2beea09b299834ad5398 - languageName: node - linkType: hard - "iterator.prototype@npm:^1.1.5": version: 1.1.5 resolution: "iterator.prototype@npm:1.1.5" @@ -9273,20 +9133,6 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.7.0": - version: 2.7.0 - resolution: "node-fetch@npm:2.7.0" - dependencies: - whatwg-url: "npm:^5.0.0" - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - checksum: 10/b24f8a3dc937f388192e59bcf9d0857d7b6940a2496f328381641cb616efccc9866e89ec43f2ec956bbd6c3d3ee05524ce77fe7b29ccd34692b3a16f237d6676 - languageName: node - linkType: hard - "node-fetch@npm:^3.3.2": version: 3.3.2 resolution: "node-fetch@npm:3.3.2" @@ -11110,13 +10956,6 @@ __metadata: languageName: node linkType: hard -"setimmediate@npm:^1.0.5": - version: 1.0.5 - resolution: "setimmediate@npm:1.0.5" - checksum: 10/76e3f5d7f4b581b6100ff819761f04a984fa3f3990e72a6554b57188ded53efce2d3d6c0932c10f810b7c59414f85e2ab3c11521877d1dea1ce0b56dc906f485 - languageName: node - linkType: hard - "setprototypeof@npm:1.2.0, setprototypeof@npm:~1.2.0": version: 1.2.0 resolution: "setprototypeof@npm:1.2.0" @@ -11987,13 +11826,6 @@ __metadata: languageName: node linkType: hard -"tr46@npm:~0.0.3": - version: 0.0.3 - resolution: "tr46@npm:0.0.3" - checksum: 10/8f1f5aa6cb232f9e1bdc86f485f916b7aa38caee8a778b378ffec0b70d9307873f253f5cbadbe2955ece2ac5c83d0dc14a77513166ccd0a0c7fe197e21396695 - languageName: node - linkType: hard - "tree-dump@npm:^1.0.3, tree-dump@npm:^1.1.0": version: 1.1.0 resolution: "tree-dump@npm:1.1.0" @@ -12430,19 +12262,6 @@ __metadata: languageName: node linkType: hard -"util@npm:^0.12.5": - version: 0.12.5 - resolution: "util@npm:0.12.5" - dependencies: - inherits: "npm:^2.0.3" - is-arguments: "npm:^1.0.4" - is-generator-function: "npm:^1.0.7" - is-typed-array: "npm:^1.1.3" - which-typed-array: "npm:^1.1.2" - checksum: 10/61a10de7753353dd4d744c917f74cdd7d21b8b46379c1e48e1c4fd8e83f8190e6bd9978fc4e5102ab6a10ebda6019d1b36572fa4a325e175ec8b789a121f6147 - languageName: node - linkType: hard - "value-equal@npm:^1.0.1": version: 1.0.1 resolution: "value-equal@npm:1.0.1" @@ -12571,280 +12390,6 @@ __metadata: languageName: node linkType: hard -"web3-core@npm:^4.4.0, web3-core@npm:^4.5.0, web3-core@npm:^4.6.0, web3-core@npm:^4.7.1": - version: 4.7.1 - resolution: "web3-core@npm:4.7.1" - dependencies: - web3-errors: "npm:^1.3.1" - web3-eth-accounts: "npm:^4.3.1" - web3-eth-iban: "npm:^4.0.7" - web3-providers-http: "npm:^4.2.0" - web3-providers-ipc: "npm:^4.0.7" - web3-providers-ws: "npm:^4.0.8" - web3-types: "npm:^1.10.0" - web3-utils: "npm:^4.3.3" - web3-validator: "npm:^2.0.6" - dependenciesMeta: - web3-providers-ipc: - optional: true - checksum: 10/c6b9447e62f5c57ccc3c96492adf5630cb3256968c15ce5675c660dec1f6da0bf60397efa88588029640f749ff45a1adaa0167a402ba0b4a46e600d8eda76334 - languageName: node - linkType: hard - -"web3-errors@npm:^1.1.3, web3-errors@npm:^1.2.0, web3-errors@npm:^1.3.0, web3-errors@npm:^1.3.1": - version: 1.3.1 - resolution: "web3-errors@npm:1.3.1" - dependencies: - web3-types: "npm:^1.10.0" - checksum: 10/0d1cb0e02701a4bd619f856b0a6702fdd4cdc0a434029c3c3dcde3f3cc4acaca418117ad10238002aa697745840e7fd312bd43ad5341482b3ff8f9e6eb438a31 - languageName: node - linkType: hard - -"web3-eth-abi@npm:^4.4.1": - version: 4.4.1 - resolution: "web3-eth-abi@npm:4.4.1" - dependencies: - abitype: "npm:0.7.1" - web3-errors: "npm:^1.3.1" - web3-types: "npm:^1.10.0" - web3-utils: "npm:^4.3.3" - web3-validator: "npm:^2.0.6" - checksum: 10/0c7f4f9f05f04e0ac98f6029edfb3bf7e514efc325f6be83e999203f49c7a0cdc9759f4b1011ce12d80c2044c74a867f7fc0ee83538408c2ebb4c9f407027b7f - languageName: node - linkType: hard - -"web3-eth-accounts@npm:^4.3.1": - version: 4.3.1 - resolution: "web3-eth-accounts@npm:4.3.1" - dependencies: - "@ethereumjs/rlp": "npm:^4.0.1" - crc-32: "npm:^1.2.2" - ethereum-cryptography: "npm:^2.0.0" - web3-errors: "npm:^1.3.1" - web3-types: "npm:^1.10.0" - web3-utils: "npm:^4.3.3" - web3-validator: "npm:^2.0.6" - checksum: 10/f8b689146c908d88b983bd467c3e794ed96e284490aa3f74e665580202db4f0826d4108f0aa95dc6ef1e14f9a8a41939ff2c4485e9713744dc6474d7082d9239 - languageName: node - linkType: hard - -"web3-eth-contract@npm:^4.5.0, web3-eth-contract@npm:^4.7.2": - version: 4.7.2 - resolution: "web3-eth-contract@npm:4.7.2" - dependencies: - "@ethereumjs/rlp": "npm:^5.0.2" - web3-core: "npm:^4.7.1" - web3-errors: "npm:^1.3.1" - web3-eth: "npm:^4.11.1" - web3-eth-abi: "npm:^4.4.1" - web3-types: "npm:^1.10.0" - web3-utils: "npm:^4.3.3" - web3-validator: "npm:^2.0.6" - checksum: 10/f5dd22199a69c6f10b0c38daee790341f80247a0155bad03e7c1a9ffad2d6c47722010b4fd0e3fe7832a43eb72a2fceadfd2892712ef199898c1e43067a92c0d - languageName: node - linkType: hard - -"web3-eth-ens@npm:^4.4.0": - version: 4.4.0 - resolution: "web3-eth-ens@npm:4.4.0" - dependencies: - "@adraffy/ens-normalize": "npm:^1.8.8" - web3-core: "npm:^4.5.0" - web3-errors: "npm:^1.2.0" - web3-eth: "npm:^4.8.0" - web3-eth-contract: "npm:^4.5.0" - web3-net: "npm:^4.1.0" - web3-types: "npm:^1.7.0" - web3-utils: "npm:^4.3.0" - web3-validator: "npm:^2.0.6" - checksum: 10/25a1535e095d8ffcbc0641041af69e42aa60ba2989477108a5678c42a06135df9134ccc6024c89c216cb3408848e3905ee178d5b12e3bb740e895ee6ee0bd2cf - languageName: node - linkType: hard - -"web3-eth-iban@npm:^4.0.7": - version: 4.0.7 - resolution: "web3-eth-iban@npm:4.0.7" - dependencies: - web3-errors: "npm:^1.1.3" - web3-types: "npm:^1.3.0" - web3-utils: "npm:^4.0.7" - web3-validator: "npm:^2.0.3" - checksum: 10/9d7521b4d4aef3a0d697905c7859d8e4d7ce82234320beecba9b24d254592a7ccf0354f329289b4e11a816fcbe3eceb842c4c87678f5e8ec622c8351bc1b9170 - languageName: node - linkType: hard - -"web3-eth-personal@npm:^4.1.0": - version: 4.1.0 - resolution: "web3-eth-personal@npm:4.1.0" - dependencies: - web3-core: "npm:^4.6.0" - web3-eth: "npm:^4.9.0" - web3-rpc-methods: "npm:^1.3.0" - web3-types: "npm:^1.8.0" - web3-utils: "npm:^4.3.1" - web3-validator: "npm:^2.0.6" - checksum: 10/a560b0ef1f28961101c47824aa6fc71722c4e581ef5ffc5b68cf1b7db0fd5804032239f872a167a589b3c0ebe223353b8112b38e247e1f5b5ac48991e12f853c - languageName: node - linkType: hard - -"web3-eth@npm:^4.11.1, web3-eth@npm:^4.8.0, web3-eth@npm:^4.9.0": - version: 4.11.1 - resolution: "web3-eth@npm:4.11.1" - dependencies: - setimmediate: "npm:^1.0.5" - web3-core: "npm:^4.7.1" - web3-errors: "npm:^1.3.1" - web3-eth-abi: "npm:^4.4.1" - web3-eth-accounts: "npm:^4.3.1" - web3-net: "npm:^4.1.0" - web3-providers-ws: "npm:^4.0.8" - web3-rpc-methods: "npm:^1.3.0" - web3-types: "npm:^1.10.0" - web3-utils: "npm:^4.3.3" - web3-validator: "npm:^2.0.6" - checksum: 10/b39f5f1559a012ece0017f3976207ffb5358c4ebb2e8518721efcc4975005ed8948814613795d1ceee67eb28f33608cbc89f6b231534241052de231c6477ed17 - languageName: node - linkType: hard - -"web3-net@npm:^4.1.0": - version: 4.1.0 - resolution: "web3-net@npm:4.1.0" - dependencies: - web3-core: "npm:^4.4.0" - web3-rpc-methods: "npm:^1.3.0" - web3-types: "npm:^1.6.0" - web3-utils: "npm:^4.3.0" - checksum: 10/2899ed28d9afda9f9faee6424752cb967dabf79128bce25321318e069a41571b9bd9477b480f290fd65f07cd6c0c641def0d72f31a730705112bd14c301f4e5e - languageName: node - linkType: hard - -"web3-providers-http@npm:^4.2.0": - version: 4.2.0 - resolution: "web3-providers-http@npm:4.2.0" - dependencies: - cross-fetch: "npm:^4.0.0" - web3-errors: "npm:^1.3.0" - web3-types: "npm:^1.7.0" - web3-utils: "npm:^4.3.1" - checksum: 10/812b05d1e0dd8b6c5005bdcfe3c5fbddfe6cdd082bd2654dfe171ad98c3b7ff85b0bab371c70366d2bace2cf45fbf7d2f087b4cb281dbfa12372b902b8138eeb - languageName: node - linkType: hard - -"web3-providers-ipc@npm:^4.0.7": - version: 4.0.7 - resolution: "web3-providers-ipc@npm:4.0.7" - dependencies: - web3-errors: "npm:^1.1.3" - web3-types: "npm:^1.3.0" - web3-utils: "npm:^4.0.7" - checksum: 10/b953818479f5d9c7b748e10977430fd7e377696f9160ae19b1917c0317e89671c4be824c06723b6fda190258927160fcec0e8e7c1aa87a5f0344008ef7649cda - languageName: node - linkType: hard - -"web3-providers-ws@npm:^4.0.8": - version: 4.0.8 - resolution: "web3-providers-ws@npm:4.0.8" - dependencies: - "@types/ws": "npm:8.5.3" - isomorphic-ws: "npm:^5.0.0" - web3-errors: "npm:^1.2.0" - web3-types: "npm:^1.7.0" - web3-utils: "npm:^4.3.1" - ws: "npm:^8.17.1" - checksum: 10/9b9fa96fa1fc9455fb1b632de50f542d2589710002ea2cb0cd6a5c1ed9f72960d80ce219ac66b038ea6d0a767056fe653aa258a1c084aa78d5745870cc2703b4 - languageName: node - linkType: hard - -"web3-rpc-methods@npm:^1.3.0": - version: 1.3.0 - resolution: "web3-rpc-methods@npm:1.3.0" - dependencies: - web3-core: "npm:^4.4.0" - web3-types: "npm:^1.6.0" - web3-validator: "npm:^2.0.6" - checksum: 10/8c134b1f2ae1cf94d5c452c53fe699d5951c22c62ea82084559db06722a5f0db2047be4209172ff90432c42f70cf8081fea0ea85a024e4cbcd0e037efd9acfa8 - languageName: node - linkType: hard - -"web3-rpc-providers@npm:^1.0.0-rc.4": - version: 1.0.0-rc.4 - resolution: "web3-rpc-providers@npm:1.0.0-rc.4" - dependencies: - web3-errors: "npm:^1.3.1" - web3-providers-http: "npm:^4.2.0" - web3-providers-ws: "npm:^4.0.8" - web3-types: "npm:^1.10.0" - web3-utils: "npm:^4.3.3" - web3-validator: "npm:^2.0.6" - checksum: 10/a6dff5ce76e6905eb3e8e7175984305b859a35f17ffad9511371e0840097cdccc4d8dd4a4bc893aeb78f93c22034b4c73cac79551a4d7cba204e55590018909b - languageName: node - linkType: hard - -"web3-types@npm:^1.10.0, web3-types@npm:^1.3.0, web3-types@npm:^1.6.0, web3-types@npm:^1.7.0, web3-types@npm:^1.8.0": - version: 1.10.0 - resolution: "web3-types@npm:1.10.0" - checksum: 10/849f05a001896b27082c5b5c46c62b65a28f463366eeec7223802418a61db6d3487ebfb73d1fe6dcad3f0849a76e20706098819cb4e266df4f75ca24617e62a1 - languageName: node - linkType: hard - -"web3-utils@npm:^4.0.7, web3-utils@npm:^4.3.0, web3-utils@npm:^4.3.1, web3-utils@npm:^4.3.3": - version: 4.3.3 - resolution: "web3-utils@npm:4.3.3" - dependencies: - ethereum-cryptography: "npm:^2.0.0" - eventemitter3: "npm:^5.0.1" - web3-errors: "npm:^1.3.1" - web3-types: "npm:^1.10.0" - web3-validator: "npm:^2.0.6" - checksum: 10/c91ebbe67e469fe184ab258564b1f002f6f0e563a91637429c8e5bd3f0653b970d0c45dac544402021a5512297f0bea39aa2dd0b4c9bc6f54d4b58897f2dd002 - languageName: node - linkType: hard - -"web3-validator@npm:^2.0.3, web3-validator@npm:^2.0.6": - version: 2.0.6 - resolution: "web3-validator@npm:2.0.6" - dependencies: - ethereum-cryptography: "npm:^2.0.0" - util: "npm:^0.12.5" - web3-errors: "npm:^1.2.0" - web3-types: "npm:^1.6.0" - zod: "npm:^3.21.4" - checksum: 10/4df08e5317d55cdb674cbd11d7534a6cb41abfa4912cf3ff976c2b34a98e84500732fa0cade68a848e57b61259b4c9b377773f57de6bb69a5029c2ddef1cd0ab - languageName: node - linkType: hard - -"web3@npm:^4.7.0": - version: 4.16.0 - resolution: "web3@npm:4.16.0" - dependencies: - web3-core: "npm:^4.7.1" - web3-errors: "npm:^1.3.1" - web3-eth: "npm:^4.11.1" - web3-eth-abi: "npm:^4.4.1" - web3-eth-accounts: "npm:^4.3.1" - web3-eth-contract: "npm:^4.7.2" - web3-eth-ens: "npm:^4.4.0" - web3-eth-iban: "npm:^4.0.7" - web3-eth-personal: "npm:^4.1.0" - web3-net: "npm:^4.1.0" - web3-providers-http: "npm:^4.2.0" - web3-providers-ws: "npm:^4.0.8" - web3-rpc-methods: "npm:^1.3.0" - web3-rpc-providers: "npm:^1.0.0-rc.4" - web3-types: "npm:^1.10.0" - web3-utils: "npm:^4.3.3" - web3-validator: "npm:^2.0.6" - checksum: 10/8d63e70404914d2717d2675ba19350f112b07e50583a0703a68dd326eeb43a5c82b56f1165f4339cd89e697967581e0cd65fdb42ca0f1150fb7a3ce612f1a829 - languageName: node - linkType: hard - -"webidl-conversions@npm:^3.0.0": - version: 3.0.1 - resolution: "webidl-conversions@npm:3.0.1" - checksum: 10/b65b9f8d6854572a84a5c69615152b63371395f0c5dcd6729c45789052296df54314db2bc3e977df41705eacb8bc79c247cee139a63fa695192f95816ed528ad - languageName: node - linkType: hard - "webidl-conversions@npm:^7.0.0": version: 7.0.0 resolution: "webidl-conversions@npm:7.0.0" @@ -13097,16 +12642,6 @@ __metadata: languageName: node linkType: hard -"whatwg-url@npm:^5.0.0": - version: 5.0.0 - resolution: "whatwg-url@npm:5.0.0" - dependencies: - tr46: "npm:~0.0.3" - webidl-conversions: "npm:^3.0.0" - checksum: 10/f95adbc1e80820828b45cc671d97da7cd5e4ef9deb426c31bcd5ab00dc7103042291613b3ef3caec0a2335ed09e0d5ed026c940755dbb6d404e2b27f940fdf07 - languageName: node - linkType: hard - "which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": version: 1.1.1 resolution: "which-boxed-primitive@npm:1.1.1" @@ -13153,7 +12688,7 @@ __metadata: languageName: node linkType: hard -"which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.19, which-typed-array@npm:^1.1.2": +"which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.19": version: 1.1.20 resolution: "which-typed-array@npm:1.1.20" dependencies: @@ -13222,7 +12757,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^8.17.1, ws@npm:^8.18.0, ws@npm:^8.20.0, ws@npm:^8.8.1": +"ws@npm:^8.18.0, ws@npm:^8.20.0, ws@npm:^8.8.1": version: 8.22.0 resolution: "ws@npm:8.22.0" peerDependencies: @@ -13334,16 +12869,9 @@ __metadata: languageName: node linkType: hard -"zod@npm:^3.21.4, zod@npm:^3.25.67": - version: 3.25.76 - resolution: "zod@npm:3.25.76" - checksum: 10/f0c963ec40cd96858451d1690404d603d36507c1fc9682f2dae59ab38b578687d542708a7fdbf645f77926f78c9ed558f57c3d3aa226c285f798df0c4da16995 - languageName: node - linkType: hard - -"zod@npm:^3.25.0 || ^4.0.0": - version: 4.6.6 - resolution: "zod@npm:4.6.6" - checksum: 10/ce628fb33400b531f48b63ad1bd9b5ab95ec3ac60d4e8025892d90af9ca5d03b168aaaf74071928345ad1b1bcd735a7d5cf33230ece7de885240bb0f2b7bb492 +"zod@npm:^3.25.0 || ^4.0.0, zod@npm:^4.6.7": + version: 4.6.7 + resolution: "zod@npm:4.6.7" + checksum: 10/3ca8b8d6bb401538e59504c543db629ea7beaa775e504c3f22269b406fdffbf1431c856d59a597bf66d8487e4d2be12b03a55d76fc2c63d9f046eae1ca173bca languageName: node linkType: hard