From d4ebb8746d9726443928f7d56c3bc054429cd8fc Mon Sep 17 00:00:00 2001 From: Kheops <26880866+0xKheops@users.noreply.github.com> Date: Tue, 21 Jan 2025 15:48:32 +0900 Subject: [PATCH] chore: move sapi to its own package (#1779) * chore: move sapi to its own package * chore: cleanup * chore: cleanup * chore: comment about nonce --- .changeset/config.json | 3 +- apps/extension/package.json | 1 + .../PolkadotSignRequestContext.ts | 2 +- .../Substrate/decode/SubSignDecodedBatch.tsx | 3 +- .../decode/SubSignDecodedBatchDrawer.tsx | 2 +- .../SubSignDecodedBatchDrawerContext.ts | 2 +- .../SubSignDecodedCallButtonContent.tsx | 2 +- .../decode/SubSignDecodedCallContent.tsx | 2 +- .../decode/SubSignDecodedCallDrawer.tsx | 2 +- .../summary/calls/SummaryBalances.tsx | 2 +- .../summary/calls/SummaryNominationPools.tsx | 2 +- .../src/ui/domains/Sign/Substrate/types.ts | 3 +- .../Substrate/util/getGovernanceTrackName.ts | 3 +- .../Substrate/util/useDecodedCallComponent.ts | 3 +- .../src/ui/domains/Staking/helpers.ts | 3 +- .../hooks/bittensor/useCanStakeBittensor.ts | 3 +- .../useGetBittensorStakingPayload.ts | 3 +- ...useGetBittensorTotalHotkeyColdkeyStakes.ts | 3 +- .../bittensor/useGetBittensorUnbondPayload.ts | 3 +- .../nomPools/useGetNomPoolPlanksToUnbond.ts | 3 +- .../nomPools/useGetNomPoolStakingPayload.ts | 3 +- .../nomPools/useGetNomPoolUnbondPayload.ts | 3 +- .../hooks/nomPools/useNomPoolStakingStatus.ts | 2 +- .../Staking/shared/useGetFeeEstimate.ts | 3 +- .../Staking/shared/useGetLatestBlockNumber.ts | 3 +- .../domains/Staking/shared/useGetStakeInfo.ts | 3 +- .../Staking/shared/useGetUnbondInfo.ts | 3 +- .../src/ui/hooks/sapi/useScaleApi.ts | 8 +- .../ui/hooks/useSubstratePayloadMetadata.ts | 9 +- apps/extension/src/ui/util/scaleApi/sapi.ts | 525 ---------- apps/extension/src/ui/util/scaleApi/types.ts | 13 - lib/README.md | 2 + lib/sapi/package.json | 23 + .../sapi/src/helpers}/errors.ts | 27 +- lib/sapi/src/helpers/getCallDocs.ts | 26 + lib/sapi/src/helpers/getChainInfo.ts | 25 + lib/sapi/src/helpers/getConstantValue.ts | 25 + lib/sapi/src/helpers/getDecodedCall.ts | 23 + lib/sapi/src/helpers/getDryRunCall.ts | 65 ++ .../src/helpers/getExtrinsicDispatchInfo.ts | 53 + lib/sapi/src/helpers/getFeeEstimate.ts | 55 + .../src/helpers/getPayloadWithMetadataHash.ts | 63 ++ lib/sapi/src/helpers/getRuntimeCallResult.ts | 20 + lib/sapi/src/helpers/getSapiConnector.ts | 12 + lib/sapi/src/helpers/getSendRequestResult.ts | 10 + lib/sapi/src/helpers/getSignerPayloadJSON.ts | 68 ++ lib/sapi/src/helpers/getStorageValue.ts | 21 + lib/sapi/src/helpers/getTypeRegistry.ts | 18 + lib/sapi/src/helpers/isApiAvailable.ts | 7 + lib/sapi/src/helpers/papi.ts | 28 + lib/sapi/src/helpers/types.ts | 27 + .../util/scaleApi => lib/sapi/src}/index.ts | 0 lib/sapi/src/sapi.ts | 101 ++ lib/sapi/src/types.ts | 24 + lib/sapi/tsconfig.json | 5 + pnpm-lock.yaml | 981 +++++++++++++++--- pnpm-workspace.yaml | 1 + 57 files changed, 1604 insertions(+), 731 deletions(-) delete mode 100644 apps/extension/src/ui/util/scaleApi/sapi.ts delete mode 100644 apps/extension/src/ui/util/scaleApi/types.ts create mode 100644 lib/README.md create mode 100644 lib/sapi/package.json rename {apps/extension/src/ui/util/scaleApi => lib/sapi/src/helpers}/errors.ts (84%) create mode 100644 lib/sapi/src/helpers/getCallDocs.ts create mode 100644 lib/sapi/src/helpers/getChainInfo.ts create mode 100644 lib/sapi/src/helpers/getConstantValue.ts create mode 100644 lib/sapi/src/helpers/getDecodedCall.ts create mode 100644 lib/sapi/src/helpers/getDryRunCall.ts create mode 100644 lib/sapi/src/helpers/getExtrinsicDispatchInfo.ts create mode 100644 lib/sapi/src/helpers/getFeeEstimate.ts create mode 100644 lib/sapi/src/helpers/getPayloadWithMetadataHash.ts create mode 100644 lib/sapi/src/helpers/getRuntimeCallResult.ts create mode 100644 lib/sapi/src/helpers/getSapiConnector.ts create mode 100644 lib/sapi/src/helpers/getSendRequestResult.ts create mode 100644 lib/sapi/src/helpers/getSignerPayloadJSON.ts create mode 100644 lib/sapi/src/helpers/getStorageValue.ts create mode 100644 lib/sapi/src/helpers/getTypeRegistry.ts create mode 100644 lib/sapi/src/helpers/isApiAvailable.ts create mode 100644 lib/sapi/src/helpers/papi.ts create mode 100644 lib/sapi/src/helpers/types.ts rename {apps/extension/src/ui/util/scaleApi => lib/sapi/src}/index.ts (100%) create mode 100644 lib/sapi/src/sapi.ts create mode 100644 lib/sapi/src/types.ts create mode 100644 lib/sapi/tsconfig.json diff --git a/.changeset/config.json b/.changeset/config.json index d1033f2c8a..4e2a3097ee 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -17,6 +17,7 @@ "extension-core", "extension-shared", "playground", - "talisman-ui" + "talisman-ui", + "sapi" ] } diff --git a/apps/extension/package.json b/apps/extension/package.json index dc6f8eccd3..864631be03 100644 --- a/apps/extension/package.json +++ b/apps/extension/package.json @@ -82,6 +82,7 @@ "dompurify": "^3.1.7", "extension-core": "workspace:*", "extension-shared": "workspace:*", + "sapi": "workspace:*", "framer-motion": "11.11.9", "highlight.js": "11.10.0", "html-react-parser": "5.1.18", diff --git a/apps/extension/src/ui/domains/Sign/SignRequestContext/PolkadotSignRequestContext.ts b/apps/extension/src/ui/domains/Sign/SignRequestContext/PolkadotSignRequestContext.ts index ae878a1439..8adef93c53 100644 --- a/apps/extension/src/ui/domains/Sign/SignRequestContext/PolkadotSignRequestContext.ts +++ b/apps/extension/src/ui/domains/Sign/SignRequestContext/PolkadotSignRequestContext.ts @@ -4,6 +4,7 @@ import { HexString } from "@polkadot/util/types" import { papiStringify } from "@talismn/scale" import { useQuery } from "@tanstack/react-query" import { useCallback, useEffect, useMemo } from "react" +import { DecodedCall, ScaleApi } from "sapi" import { Address, isJsonPayload, SubstrateSigningRequest } from "@extension/core" import { log } from "@extension/shared" @@ -11,7 +12,6 @@ import { provideContext } from "@talisman/util/provideContext" import { api } from "@ui/api" import { useBalancesHydrate, useChainByGenesisHash } from "@ui/state" import { getExtrinsicDispatchInfo } from "@ui/util/getExtrinsicDispatchInfo" -import { DecodedCall, ScaleApi } from "@ui/util/scaleApi" import { useSubstratePayloadMetadataSuspense } from "../../../hooks/useSubstratePayloadMetadata" import { useAnySigningRequest } from "./AnySignRequestContext" diff --git a/apps/extension/src/ui/domains/Sign/Substrate/decode/SubSignDecodedBatch.tsx b/apps/extension/src/ui/domains/Sign/Substrate/decode/SubSignDecodedBatch.tsx index 505ba4807d..c51c6fc481 100644 --- a/apps/extension/src/ui/domains/Sign/Substrate/decode/SubSignDecodedBatch.tsx +++ b/apps/extension/src/ui/domains/Sign/Substrate/decode/SubSignDecodedBatch.tsx @@ -1,6 +1,5 @@ import { useMemo } from "react" - -import { DecodedCall } from "@ui/util/scaleApi" +import { DecodedCall } from "sapi" import { DecodedBatchArgs, DecodedCallComponent, isBatchCall } from "../types" import { SubSignDecodedBatchDrawer } from "./SubSignDecodedBatchDrawer" diff --git a/apps/extension/src/ui/domains/Sign/Substrate/decode/SubSignDecodedBatchDrawer.tsx b/apps/extension/src/ui/domains/Sign/Substrate/decode/SubSignDecodedBatchDrawer.tsx index b88a6818bb..0b9f67b3ff 100644 --- a/apps/extension/src/ui/domains/Sign/Substrate/decode/SubSignDecodedBatchDrawer.tsx +++ b/apps/extension/src/ui/domains/Sign/Substrate/decode/SubSignDecodedBatchDrawer.tsx @@ -2,10 +2,10 @@ import { ChevronLeftIcon, ChevronRightIcon } from "@talismn/icons" import { SignerPayloadJSON } from "extension-core" import { FC } from "react" import { useTranslation } from "react-i18next" +import { ScaleApi } from "sapi" import { Button, Drawer } from "talisman-ui" import { ScrollContainer } from "@talisman/components/ScrollContainer" -import { ScaleApi } from "@ui/util/scaleApi" import { useSubSignDecodedBatchDrawer } from "./SubSignDecodedBatchDrawerContext" import { SubSignDecodedCallContent } from "./SubSignDecodedCallContent" diff --git a/apps/extension/src/ui/domains/Sign/Substrate/decode/SubSignDecodedBatchDrawerContext.ts b/apps/extension/src/ui/domains/Sign/Substrate/decode/SubSignDecodedBatchDrawerContext.ts index 79ca148979..4e7397bf32 100644 --- a/apps/extension/src/ui/domains/Sign/Substrate/decode/SubSignDecodedBatchDrawerContext.ts +++ b/apps/extension/src/ui/domains/Sign/Substrate/decode/SubSignDecodedBatchDrawerContext.ts @@ -1,7 +1,7 @@ import { useCallback, useEffect, useMemo, useState } from "react" +import { DecodedCall } from "sapi" import { provideContext } from "@talisman/util/provideContext" -import { DecodedCall } from "@ui/util/scaleApi" import { DecodedBatchCall } from "../types" diff --git a/apps/extension/src/ui/domains/Sign/Substrate/decode/SubSignDecodedCallButtonContent.tsx b/apps/extension/src/ui/domains/Sign/Substrate/decode/SubSignDecodedCallButtonContent.tsx index 074cd51f20..1e6f7aca1f 100644 --- a/apps/extension/src/ui/domains/Sign/Substrate/decode/SubSignDecodedCallButtonContent.tsx +++ b/apps/extension/src/ui/domains/Sign/Substrate/decode/SubSignDecodedCallButtonContent.tsx @@ -1,7 +1,7 @@ import { FC } from "react" +import { DecodedCall } from "sapi" import { FallbackErrorBoundary } from "@talisman/components/FallbackErrorBoundary" -import { DecodedCall } from "@ui/util/scaleApi" import { SUMMARY_COMPONENTS } from "../summary/calls" import { DecodedCallComponent, SummaryButtonDisplayMode } from "../types" diff --git a/apps/extension/src/ui/domains/Sign/Substrate/decode/SubSignDecodedCallContent.tsx b/apps/extension/src/ui/domains/Sign/Substrate/decode/SubSignDecodedCallContent.tsx index 9edceb2878..06617db62c 100644 --- a/apps/extension/src/ui/domains/Sign/Substrate/decode/SubSignDecodedCallContent.tsx +++ b/apps/extension/src/ui/domains/Sign/Substrate/decode/SubSignDecodedCallContent.tsx @@ -9,10 +9,10 @@ import { marked } from "marked" import { Binary } from "polkadot-api" import { FC, Suspense, useMemo } from "react" import { useTranslation } from "react-i18next" +import { DecodedCall, ScaleApi } from "sapi" import { CodeBlock } from "@talisman/components/CodeBlock" import { FallbackErrorBoundary } from "@talisman/components/FallbackErrorBoundary" -import { DecodedCall, ScaleApi } from "@ui/util/scaleApi" import { SubSignDecodedCallSummaryBlock } from "./SubSignDecodedCallSummaryBlock" diff --git a/apps/extension/src/ui/domains/Sign/Substrate/decode/SubSignDecodedCallDrawer.tsx b/apps/extension/src/ui/domains/Sign/Substrate/decode/SubSignDecodedCallDrawer.tsx index 22074e2a87..c4ec5704a4 100644 --- a/apps/extension/src/ui/domains/Sign/Substrate/decode/SubSignDecodedCallDrawer.tsx +++ b/apps/extension/src/ui/domains/Sign/Substrate/decode/SubSignDecodedCallDrawer.tsx @@ -2,10 +2,10 @@ import { XIcon } from "@talismn/icons" import { SignerPayloadJSON } from "extension-core" import { FC } from "react" import { useTranslation } from "react-i18next" +import { DecodedCall, ScaleApi } from "sapi" import { Button, Drawer, IconButton } from "talisman-ui" import { ScrollContainer } from "@talisman/components/ScrollContainer" -import { DecodedCall, ScaleApi } from "@ui/util/scaleApi" import { SubSignDecodedCallContent } from "./SubSignDecodedCallContent" diff --git a/apps/extension/src/ui/domains/Sign/Substrate/summary/calls/SummaryBalances.tsx b/apps/extension/src/ui/domains/Sign/Substrate/summary/calls/SummaryBalances.tsx index 884c88c83f..89280ac3c5 100644 --- a/apps/extension/src/ui/domains/Sign/Substrate/summary/calls/SummaryBalances.tsx +++ b/apps/extension/src/ui/domains/Sign/Substrate/summary/calls/SummaryBalances.tsx @@ -3,9 +3,9 @@ import { useSuspenseQuery } from "@tanstack/react-query" import { Address } from "extension-core" import { useMemo } from "react" import { Trans, useTranslation } from "react-i18next" +import { ScaleApi } from "sapi" import { useChain, useToken } from "@ui/state" -import { ScaleApi } from "@ui/util/scaleApi" import { DecodedCallSummaryComponent, DecodedCallSummaryComponentDefs } from "../../types" import { getAddressFromMultiAddress } from "../../util/getAddressFromMultiAddress" diff --git a/apps/extension/src/ui/domains/Sign/Substrate/summary/calls/SummaryNominationPools.tsx b/apps/extension/src/ui/domains/Sign/Substrate/summary/calls/SummaryNominationPools.tsx index 039e761d8b..ea4dc859b4 100644 --- a/apps/extension/src/ui/domains/Sign/Substrate/summary/calls/SummaryNominationPools.tsx +++ b/apps/extension/src/ui/domains/Sign/Substrate/summary/calls/SummaryNominationPools.tsx @@ -3,10 +3,10 @@ import { useSuspenseQuery } from "@tanstack/react-query" import { Binary } from "polkadot-api" import { FC, useMemo } from "react" import { Trans, useTranslation } from "react-i18next" +import { ScaleApi } from "sapi" import { cleanupNomPoolName } from "@ui/domains/Staking/helpers" import { useChain } from "@ui/state" -import { ScaleApi } from "@ui/util/scaleApi" import { DecodedCallSummaryComponent, DecodedCallSummaryComponentDefs } from "../../types" import { SummaryContainer, SummaryContent, SummarySeparator } from "../shared/SummaryContainer" diff --git a/apps/extension/src/ui/domains/Sign/Substrate/types.ts b/apps/extension/src/ui/domains/Sign/Substrate/types.ts index fd1e9c4eb8..d8bcb2bb3e 100644 --- a/apps/extension/src/ui/domains/Sign/Substrate/types.ts +++ b/apps/extension/src/ui/domains/Sign/Substrate/types.ts @@ -1,8 +1,7 @@ import { PolkadotCalls } from "@polkadot-api/descriptors" import { SignerPayloadJSON } from "extension-core" import { FC } from "react" - -import { DecodedCall, ScaleApi } from "@ui/util/scaleApi" +import { DecodedCall, ScaleApi } from "sapi" export type DecodedBatchCall = | { diff --git a/apps/extension/src/ui/domains/Sign/Substrate/util/getGovernanceTrackName.ts b/apps/extension/src/ui/domains/Sign/Substrate/util/getGovernanceTrackName.ts index e678214c78..e77789597d 100644 --- a/apps/extension/src/ui/domains/Sign/Substrate/util/getGovernanceTrackName.ts +++ b/apps/extension/src/ui/domains/Sign/Substrate/util/getGovernanceTrackName.ts @@ -1,7 +1,6 @@ import { PolkadotConstants } from "@polkadot-api/descriptors" import { capitalize } from "lodash" - -import { ScaleApi } from "@ui/util/scaleApi" +import { ScaleApi } from "sapi" export const getConvictionVotingTrackName = (sapi: ScaleApi, trackId: number): string | null => { const tracks = sapi.getConstant("Referenda", "Tracks") as PolkadotConstants["Referenda"]["Tracks"] diff --git a/apps/extension/src/ui/domains/Sign/Substrate/util/useDecodedCallComponent.ts b/apps/extension/src/ui/domains/Sign/Substrate/util/useDecodedCallComponent.ts index 5c558f2800..90a5d2f476 100644 --- a/apps/extension/src/ui/domains/Sign/Substrate/util/useDecodedCallComponent.ts +++ b/apps/extension/src/ui/domains/Sign/Substrate/util/useDecodedCallComponent.ts @@ -1,6 +1,5 @@ import { useMemo } from "react" - -import { DecodedCall } from "@ui/util/scaleApi" +import { DecodedCall } from "sapi" import { DecodedCallComponentDefs } from "../types" diff --git a/apps/extension/src/ui/domains/Staking/helpers.ts b/apps/extension/src/ui/domains/Staking/helpers.ts index 16c1e26968..bcbb75204a 100644 --- a/apps/extension/src/ui/domains/Staking/helpers.ts +++ b/apps/extension/src/ui/domains/Staking/helpers.ts @@ -1,8 +1,7 @@ import { Enum } from "@polkadot-api/substrate-bindings" import { range } from "lodash" import { Binary } from "polkadot-api" - -import { ScaleApi } from "@ui/util/scaleApi" +import { ScaleApi } from "sapi" export const getStakingErasPerYear = (sapi: ScaleApi) => { const MS_PER_YEAR = 1000n * 60n * 60n * 24n * 365n diff --git a/apps/extension/src/ui/domains/Staking/hooks/bittensor/useCanStakeBittensor.ts b/apps/extension/src/ui/domains/Staking/hooks/bittensor/useCanStakeBittensor.ts index 489361a120..676e53549c 100644 --- a/apps/extension/src/ui/domains/Staking/hooks/bittensor/useCanStakeBittensor.ts +++ b/apps/extension/src/ui/domains/Staking/hooks/bittensor/useCanStakeBittensor.ts @@ -1,7 +1,6 @@ import { ChainId } from "extension-core" import { useEffect, useMemo, useState } from "react" - -import { ScaleApi } from "@ui/util/scaleApi" +import { ScaleApi } from "sapi" import { useGetLatestBlockNumber } from "../../shared/useGetLatestBlockNumber" import { useGetBittensorTotalHotkeyColdkeyStakes } from "./useGetBittensorTotalHotkeyColdkeyStakes" diff --git a/apps/extension/src/ui/domains/Staking/hooks/bittensor/useGetBittensorStakingPayload.ts b/apps/extension/src/ui/domains/Staking/hooks/bittensor/useGetBittensorStakingPayload.ts index 77ca1ec321..2f988c2a54 100644 --- a/apps/extension/src/ui/domains/Staking/hooks/bittensor/useGetBittensorStakingPayload.ts +++ b/apps/extension/src/ui/domains/Staking/hooks/bittensor/useGetBittensorStakingPayload.ts @@ -1,7 +1,6 @@ import { useQuery } from "@tanstack/react-query" import { useMemo } from "react" - -import { ScaleApi } from "@ui/util/scaleApi" +import { ScaleApi } from "sapi" import { getBittensorStakingPayload } from "../../helpers" diff --git a/apps/extension/src/ui/domains/Staking/hooks/bittensor/useGetBittensorTotalHotkeyColdkeyStakes.ts b/apps/extension/src/ui/domains/Staking/hooks/bittensor/useGetBittensorTotalHotkeyColdkeyStakes.ts index 6368300841..7113262df0 100644 --- a/apps/extension/src/ui/domains/Staking/hooks/bittensor/useGetBittensorTotalHotkeyColdkeyStakes.ts +++ b/apps/extension/src/ui/domains/Staking/hooks/bittensor/useGetBittensorTotalHotkeyColdkeyStakes.ts @@ -1,6 +1,5 @@ import { useQuery } from "@tanstack/react-query" - -import { ScaleApi } from "@ui/util/scaleApi" +import { ScaleApi } from "sapi" type GetBittensorTotalHotkeyColdkeyStakes = { sapi: ScaleApi | undefined | null diff --git a/apps/extension/src/ui/domains/Staking/hooks/bittensor/useGetBittensorUnbondPayload.ts b/apps/extension/src/ui/domains/Staking/hooks/bittensor/useGetBittensorUnbondPayload.ts index f83fab6676..66ca7ffa05 100644 --- a/apps/extension/src/ui/domains/Staking/hooks/bittensor/useGetBittensorUnbondPayload.ts +++ b/apps/extension/src/ui/domains/Staking/hooks/bittensor/useGetBittensorUnbondPayload.ts @@ -1,6 +1,5 @@ import { useQuery } from "@tanstack/react-query" - -import { ScaleApi } from "@ui/util/scaleApi" +import { ScaleApi } from "sapi" type GetBittensorUnbondPayload = { sapi: ScaleApi | undefined | null diff --git a/apps/extension/src/ui/domains/Staking/hooks/nomPools/useGetNomPoolPlanksToUnbond.ts b/apps/extension/src/ui/domains/Staking/hooks/nomPools/useGetNomPoolPlanksToUnbond.ts index 656186b605..9a024b0212 100644 --- a/apps/extension/src/ui/domains/Staking/hooks/nomPools/useGetNomPoolPlanksToUnbond.ts +++ b/apps/extension/src/ui/domains/Staking/hooks/nomPools/useGetNomPoolPlanksToUnbond.ts @@ -1,7 +1,6 @@ import { papiStringify } from "@talismn/scale" import { useQuery } from "@tanstack/react-query" - -import { ScaleApi } from "@ui/util/scaleApi" +import { ScaleApi } from "sapi" import { NomPoolMember } from "../../types" diff --git a/apps/extension/src/ui/domains/Staking/hooks/nomPools/useGetNomPoolStakingPayload.ts b/apps/extension/src/ui/domains/Staking/hooks/nomPools/useGetNomPoolStakingPayload.ts index 7d33614847..e8402b3a1b 100644 --- a/apps/extension/src/ui/domains/Staking/hooks/nomPools/useGetNomPoolStakingPayload.ts +++ b/apps/extension/src/ui/domains/Staking/hooks/nomPools/useGetNomPoolStakingPayload.ts @@ -1,7 +1,6 @@ import { useQuery } from "@tanstack/react-query" import { useMemo } from "react" - -import { ScaleApi } from "@ui/util/scaleApi" +import { ScaleApi } from "sapi" import { getNomPoolStakingPayload } from "../../helpers" diff --git a/apps/extension/src/ui/domains/Staking/hooks/nomPools/useGetNomPoolUnbondPayload.ts b/apps/extension/src/ui/domains/Staking/hooks/nomPools/useGetNomPoolUnbondPayload.ts index dee1477235..ffb27266bd 100644 --- a/apps/extension/src/ui/domains/Staking/hooks/nomPools/useGetNomPoolUnbondPayload.ts +++ b/apps/extension/src/ui/domains/Staking/hooks/nomPools/useGetNomPoolUnbondPayload.ts @@ -1,8 +1,7 @@ import { Enum } from "@polkadot-api/substrate-bindings" import { papiStringify } from "@talismn/scale" import { useQuery } from "@tanstack/react-query" - -import { ScaleApi } from "@ui/util/scaleApi" +import { ScaleApi } from "sapi" import { NomPoolMember } from "../../types" diff --git a/apps/extension/src/ui/domains/Staking/hooks/nomPools/useNomPoolStakingStatus.ts b/apps/extension/src/ui/domains/Staking/hooks/nomPools/useNomPoolStakingStatus.ts index e123ef85ee..bc7ecb2575 100644 --- a/apps/extension/src/ui/domains/Staking/hooks/nomPools/useNomPoolStakingStatus.ts +++ b/apps/extension/src/ui/domains/Staking/hooks/nomPools/useNomPoolStakingStatus.ts @@ -2,11 +2,11 @@ import { TokenId } from "@talismn/chaindata-provider" import { useQuery } from "@tanstack/react-query" import { log } from "extension-shared" import { useMemo } from "react" +import { ScaleApi } from "sapi" import { usePortfolioNavigation } from "@ui/domains/Portfolio/usePortfolioNavigation" import { useScaleApi } from "@ui/hooks/sapi/useScaleApi" import { useBalances, useToken } from "@ui/state" -import { ScaleApi } from "@ui/util/scaleApi" import { getStakingEraDurationMs } from "../../helpers" import { useGetMinJoinBond } from "../../shared/useGetMinJoinBond" diff --git a/apps/extension/src/ui/domains/Staking/shared/useGetFeeEstimate.ts b/apps/extension/src/ui/domains/Staking/shared/useGetFeeEstimate.ts index 10b17e46e8..51bb836a5c 100644 --- a/apps/extension/src/ui/domains/Staking/shared/useGetFeeEstimate.ts +++ b/apps/extension/src/ui/domains/Staking/shared/useGetFeeEstimate.ts @@ -1,7 +1,6 @@ import { SignerPayloadJSON } from "@polkadot/types/types" import { useQuery } from "@tanstack/react-query" - -import { ScaleApi } from "@ui/util/scaleApi" +import { ScaleApi } from "sapi" type GetNomPoolFeeEstimate = { sapi: ScaleApi | undefined | null diff --git a/apps/extension/src/ui/domains/Staking/shared/useGetLatestBlockNumber.ts b/apps/extension/src/ui/domains/Staking/shared/useGetLatestBlockNumber.ts index 9e5245d6cf..c02d887de6 100644 --- a/apps/extension/src/ui/domains/Staking/shared/useGetLatestBlockNumber.ts +++ b/apps/extension/src/ui/domains/Staking/shared/useGetLatestBlockNumber.ts @@ -1,6 +1,5 @@ import { useQuery } from "@tanstack/react-query" - -import { ScaleApi } from "@ui/util/scaleApi" +import { ScaleApi } from "sapi" type GetLatestBlockNumber = { sapi: ScaleApi | undefined | null diff --git a/apps/extension/src/ui/domains/Staking/shared/useGetStakeInfo.ts b/apps/extension/src/ui/domains/Staking/shared/useGetStakeInfo.ts index 76f6bc7705..fca954a66f 100644 --- a/apps/extension/src/ui/domains/Staking/shared/useGetStakeInfo.ts +++ b/apps/extension/src/ui/domains/Staking/shared/useGetStakeInfo.ts @@ -1,8 +1,7 @@ import { UseQueryResult } from "@tanstack/react-query" import { ChainId, SignerPayloadJSON } from "extension-core" import { useMemo } from "react" - -import { ScaleApi } from "@ui/util/scaleApi" +import { ScaleApi } from "sapi" import { useCanStakeBittensor } from "../hooks/bittensor/useCanStakeBittensor" import { useGetBittensorStakeHotkeys } from "../hooks/bittensor/useGetBittensorStakeHotkeys" diff --git a/apps/extension/src/ui/domains/Staking/shared/useGetUnbondInfo.ts b/apps/extension/src/ui/domains/Staking/shared/useGetUnbondInfo.ts index 804fc39aad..4cf22880b1 100644 --- a/apps/extension/src/ui/domains/Staking/shared/useGetUnbondInfo.ts +++ b/apps/extension/src/ui/domains/Staking/shared/useGetUnbondInfo.ts @@ -1,6 +1,5 @@ import { ChainId } from "extension-core" - -import { ScaleApi } from "@ui/util/scaleApi" +import { ScaleApi } from "sapi" import { useCanStakeBittensor } from "../hooks/bittensor/useCanStakeBittensor" import { useGetBittensorStakeByHotKey } from "../hooks/bittensor/useGetBittensorStakeByHotKey" diff --git a/apps/extension/src/ui/hooks/sapi/useScaleApi.ts b/apps/extension/src/ui/hooks/sapi/useScaleApi.ts index e69900fb1a..747961a90c 100644 --- a/apps/extension/src/ui/hooks/sapi/useScaleApi.ts +++ b/apps/extension/src/ui/hooks/sapi/useScaleApi.ts @@ -4,10 +4,10 @@ import { useQuery } from "@tanstack/react-query" import { ChainId } from "extension-core" import { getMetadataRpcFromDef } from "extension-shared" import { useMemo } from "react" +import { getScaleApi, ScaleApi } from "sapi" import { api } from "@ui/api" import { useChain, useChainByGenesisHash, useToken } from "@ui/state" -import { getScaleApi, ScaleApi } from "@ui/util/scaleApi" /** * useScaleApi instantiates a ScaleApi object for a given chainIdOrHash, specVersion, and blockHash. @@ -36,7 +36,11 @@ export const useScaleApi = ( if (!metadataRpc) return null return getScaleApi( - chain.id, + { + chainId: chain.id, + send: (...args) => api.subSend(chain.id, ...args), + submit: api.subSubmit, + }, metadataRpc, token, chain.hasCheckMetadataHash, diff --git a/apps/extension/src/ui/hooks/useSubstratePayloadMetadata.ts b/apps/extension/src/ui/hooks/useSubstratePayloadMetadata.ts index 4f250da0fb..ba173afed4 100644 --- a/apps/extension/src/ui/hooks/useSubstratePayloadMetadata.ts +++ b/apps/extension/src/ui/hooks/useSubstratePayloadMetadata.ts @@ -3,11 +3,12 @@ import { assert, hexToNumber, u8aToHex } from "@polkadot/util" import { Chain, Token } from "@talismn/chaindata-provider" import { useQuery, useSuspenseQuery } from "@tanstack/react-query" import { SignerPayloadJSON } from "extension-core" +import { getScaleApi } from "sapi" import { log } from "@extension/shared" +import { api } from "@ui/api" import { useChainByGenesisHash, useToken } from "@ui/state" import { getFrontendTypeRegistry } from "@ui/util/getFrontendTypeRegistry" -import { getScaleApi } from "@ui/util/scaleApi" export const useSubstratePayloadMetadata = (payload: SignerPayloadJSON | null) => { const chain = useChainByGenesisHash(payload?.genesisHash) @@ -67,7 +68,11 @@ const getSubstratePayloadMetadata = async ({ const sapi = metadata.version > 14 ? getScaleApi( - chain.id, + { + chainId: chain.id, + send: (...args) => api.subSend(chain.id, ...args), + submit: api.subSubmit, + }, metadataRpc, token, chain.hasCheckMetadataHash, diff --git a/apps/extension/src/ui/util/scaleApi/sapi.ts b/apps/extension/src/ui/util/scaleApi/sapi.ts deleted file mode 100644 index 8b2f8ad7fb..0000000000 --- a/apps/extension/src/ui/util/scaleApi/sapi.ts +++ /dev/null @@ -1,525 +0,0 @@ -import { polkadot, polkadotAssetHub, PolkadotRuntimeOriginCaller } from "@polkadot-api/descriptors" -import { merkleizeMetadata } from "@polkadot-api/merkleize-metadata" -import { Bytes, enhanceEncoder, u16 } from "@polkadot-api/substrate-bindings" -import { mergeUint8, toHex } from "@polkadot-api/utils" -import { Metadata, TypeRegistry } from "@polkadot/types" -import { ExtDef } from "@polkadot/types/extrinsic/signedExtensions/types" -import { IRuntimeVersionBase } from "@polkadot/types/types" -import { assert } from "@polkadot/util" -import { decodeMetadata, getDynamicBuilder, getLookupFn } from "@talismn/scale" -import { ChainId, SignerPayloadJSON } from "extension-core" -import { log } from "extension-shared" -import { Binary, TypedApi } from "polkadot-api" -import { Hex } from "viem" - -import { api } from "@ui/api" - -import { getExtrinsicDispatchInfo } from "../getExtrinsicDispatchInfo" -import { getDispatchErrorMessage } from "./errors" -import { DecodedCall, PayloadSignerConfig, ScaleBuilder, ScaleLookup, ScaleMetadata } from "./types" - -export type ScaleApi = NonNullable> - -export const getScaleApi = ( - chainId: ChainId, - hexMetadata: Hex, - token: { symbol: string; decimals: number }, - hasCheckMetadataHash?: boolean, - signedExtensions?: ExtDef, - registryTypes?: unknown, -) => { - const stop = log.timer("[sapi] getScaleApi " + chainId) - - const decoded = decodeMetadata(hexMetadata) - assert(decoded.metadata, `Missing Metadata V14+ for chain ${chainId}`) - const { metadata } = decoded - const lookup = getLookupFn(metadata) - const builder = getDynamicBuilder(lookup) - - const { - spec_name: specName, - spec_version: specVersion, - transaction_version: transactionVersion, - } = getConstantValue<{ - spec_name: string - spec_version: number - transaction_version: number - }>(chainId, metadata, builder, "System", "Version") - - const base58Prefix = getConstantValue(chainId, metadata, builder, "System", "SS58Prefix") - - const { symbol, decimals } = token - - const chainInfo = { - token: { symbol, decimals }, - hasCheckMetadataHash, - specName, - specVersion, - transactionVersion, - base58Prefix, - signedExtensions, - registryTypes, - } - - const sapi = { - id: `${chainId}::${specName}::${specVersion}`, - chainId, - specName, - specVersion, - hasCheckMetadataHash, - base58Prefix, - token: chainInfo.token, - - getConstant: (pallet: string, constant: string) => - getConstantValue(chainId, metadata, builder, pallet, constant), - - getStorage: (pallet: string, entry: string, keys: unknown[], at?: string) => - getStorageValue(chainId, builder, pallet, entry, keys, at), - - getDecodedCall: (pallet: string, method: string, args: unknown) => - getDecodedCall(pallet, method, args), - - getDecodedCallFromPayload: (payload: SignerPayloadJSON) => - getDecodedCallFromPayload(builder, lookup, payload), - - getExtrinsicPayload: ( - pallet: string, - method: string, - args: unknown, - config: PayloadSignerConfig, - ) => - getSignerPayloadJSON( - chainId, - hexMetadata, - metadata, - builder, - pallet, - method, - args, - config, - chainInfo, - ), - - getFeeEstimate: (payload: SignerPayloadJSON) => - getFeeEstimate(chainId, hexMetadata, builder, payload, chainInfo), - - getRuntimeCallValue: (apiName: string, method: string, args: unknown[]) => - getRuntimeCallValue(chainId, builder, apiName, method, args), - - getTypeRegistry: (payload: SignerPayloadJSON) => - getTypeRegistry(hexMetadata, payload, chainInfo), - - submit: (payload: SignerPayloadJSON, signature?: Hex) => api.subSubmit(payload, signature), - - getCallDocs: (pallet: string, method: string) => getCallDocs(pallet, method, metadata), - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - getDryRunCall: (from: string, decodedCall: DecodedCall) => - getDryRunCall(chainId, metadata, builder, from, decodedCall), - - isApiAvailable: (name: string, method: string) => isApiAvailable(metadata, name, method), - } - - stop() - - return sapi -} - -type ChainInfo = { - specName: string - specVersion: number - transactionVersion: number - base58Prefix: number - token: { symbol: string; decimals: number } - hasCheckMetadataHash?: boolean - signedExtensions?: ExtDef - registryTypes?: unknown -} - -const getTypeRegistry = (hexMetadata: Hex, payload: SignerPayloadJSON, chainInfo: ChainInfo) => { - const stop = log.timer("[sapi] getTypeRegistry") - const registry = new TypeRegistry() - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - if (chainInfo.registryTypes) registry.register(chainInfo.registryTypes as any) - - const meta = new Metadata(registry, hexMetadata) - registry.setMetadata(meta, payload.signedExtensions, chainInfo.signedExtensions) // ~30ms - - stop() - return registry -} - -const getPayloadWithMetadataHash = ( - hexMetadata: Hex, - builder: ScaleBuilder, - chainInfo: ChainInfo, - payload: SignerPayloadJSON, -): { payload: SignerPayloadJSON; txMetadata?: Uint8Array } => { - if (!chainInfo.hasCheckMetadataHash || !payload.signedExtensions.includes("CheckMetadataHash")) - return { - payload, - txMetadata: undefined, - } - - try { - const { - token: { decimals, symbol: tokenSymbol }, - base58Prefix, - specName, - specVersion, - } = chainInfo - - // since ultimately this needs a V15 object, would be nice if this accepted one directly as input - const merkleizedMetadata = merkleizeMetadata(hexMetadata, { - tokenSymbol, - decimals, - base58Prefix, - specName, - specVersion, - }) - - const metadataHash = toHex(merkleizedMetadata.digest()) as Hex - - const payloadWithMetadataHash = { - ...payload, - mode: 1, - metadataHash, - withSignedTransaction: true, - } - - // TODO do this without PJS / registry => waiting for @polkadot-api/tx-utils - // const { extra, additionalSigned } = getSignedExtensionValues(payload, metadata) - // const badExtPayload = mergeUint8(fromHex(payload.method), ...extra, ...additionalSigned) - // log.debug("[sapi] bad ExtPayload", { badExtPayload }) - - const registry = getTypeRegistry(hexMetadata, payload, chainInfo) - const extPayload = registry.createType("ExtrinsicPayload", payloadWithMetadataHash) - const barePayload = extPayload.toU8a(true) - - const txMetadata = merkleizedMetadata.getProofForExtrinsicPayload(barePayload) - - return { - payload: payloadWithMetadataHash, - txMetadata, - } - } catch (err) { - log.error("Failed to get shortened metadata", { error: err }) - return { - payload, - txMetadata: undefined, - } - } -} - -const getDecodedCall = (palletName: string, methodName: string, args: unknown) => ({ - type: palletName, - value: { type: methodName, value: args }, -}) - -const getDecodedCallFromPayload = ( - builder: ScaleBuilder, - lookup: ScaleLookup, - payload: SignerPayloadJSON, -): Res => { - const def = builder.buildDefinition(lookup.call!) - const decoded = def.dec(payload.method) - - return { - pallet: decoded.type, - method: decoded.value.type, - args: decoded.value.value, - } as Res -} - -const getCallDocs = (pallet: string, method: string, metadata: ScaleMetadata): string | null => { - try { - const typeIdCalls = metadata.pallets.find(({ name }) => name === pallet)?.calls - if (!typeIdCalls) return null - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - let palletCalls: any = metadata.lookup[typeIdCalls] - if (!palletCalls || palletCalls.id !== typeIdCalls) - palletCalls = metadata.lookup.find((v) => v.id === typeIdCalls) - - if (!palletCalls) return null - - const call = palletCalls.def.value.find( - (c: { name: string; docs?: string[] | null }) => c.name === method, - ) - - return call?.docs?.join("\n") ?? null - } catch (err) { - log.error("Failed to find call docs", { pallet, method, metadata }) - return null - } -} - -const getSignerPayloadJSON = async ( - chainId: ChainId, - hexMetadata: Hex, - metadata: ScaleMetadata, - builder: ScaleBuilder, - palletName: string, - methodName: string, - args: unknown, - signerConfig: PayloadSignerConfig, - chainInfo: ChainInfo, -): Promise<{ payload: SignerPayloadJSON; txMetadata?: Uint8Array }> => { - const { codec, location } = builder.buildCall(palletName, methodName) - const method = Binary.fromBytes(mergeUint8(new Uint8Array(location), codec.enc(args))) - - const blockNumber = await getStorageValue(chainId, builder, "System", "Number", []) - if (blockNumber === null) throw new Error("Block number not found") - - const [account, genesisHash, blockHash] = await Promise.all([ - getStorageValue<{ nonce: number }>(chainId, builder, "System", "Account", [ - signerConfig.address, - ]), // TODO if V15 available, use a runtime call instead : AccountNonceApi/account_nonce - getStorageValue(chainId, builder, "System", "BlockHash", [0]), - api.subSend(chainId, "chain_getBlockHash", [blockNumber], false), // TODO find the right way to fetch this with new RPC api, this is not available in storage yet - ]) - if (!genesisHash) throw new Error("Genesis hash not found") - if (!blockHash) throw new Error("Block hash not found") - - const nonce = account ? account.nonce : 0 - const era = mortal({ period: 16, phase: blockNumber % 16 }) - const signedExtensions = metadata.extrinsic.signedExtensions.map((ext) => - ext.identifier.toString(), - ) - - const basePayload: SignerPayloadJSON = { - address: signerConfig.address, - genesisHash: genesisHash.asHex() as Hex, - blockHash, - method: method.asHex(), - signedExtensions, - nonce: toPjsHex(nonce, 4), - specVersion: toPjsHex(chainInfo.specVersion, 4), - transactionVersion: toPjsHex(chainInfo.transactionVersion, 4), - blockNumber: toPjsHex(blockNumber, 4), - era: toHex(era) as Hex, - tip: toPjsHex(0, 16), // TODO gas station (required for Astar) - assetId: undefined, - version: 4, - } - - const { payload, txMetadata } = getPayloadWithMetadataHash( - hexMetadata, - builder, - chainInfo, - basePayload, - ) - - // Avail support - if (payload.signedExtensions.includes("CheckAppId")) - (payload as SignerPayloadJSON & { appId: number }).appId = 0 - - log.log("[sapi] payload", { newPayload: payload, txMetadata }) - - return { payload, txMetadata } -} - -const getFeeEstimate = async ( - chainId: ChainId, - hexMetadata: Hex, - builder: ScaleBuilder, - payload: SignerPayloadJSON, - chainInfo: ChainInfo, -) => { - // TODO do this without PJS / registry => waiting for @polkadot-api/tx-utils - const registry = getTypeRegistry(hexMetadata, payload, chainInfo) - const extrinsic = registry.createType("Extrinsic", payload) - - extrinsic.signFake(payload.address, { - appId: 0, - nonce: payload.nonce, - blockHash: payload.blockHash, - genesisHash: payload.genesisHash, - runtimeVersion: { - specVersion: chainInfo.specVersion, - transactionVersion: chainInfo.transactionVersion, - // other fields aren't necessary for signing - } as IRuntimeVersionBase, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } as any) - - const bytes = extrinsic.toU8a(true) - const binary = Binary.fromBytes(bytes) - - try { - const result = await getRuntimeCallValue<{ partial_fee: bigint }>( - chainId, - builder, - "TransactionPaymentApi", - "query_info", - [binary, bytes.length], - ) - // Do not throw if partialFee is 0n. This is a valid response, eg: Bittensor remove_stake fee estimation is 0n. - if (!result?.partial_fee && result.partial_fee !== 0n) { - throw new Error("partialFee is not found") - } - return result.partial_fee - } catch (err) { - log.error("Failed to get fee estimate using getRuntimeCallValue", { err }) - } - - // fallback to pjs encoded state call, in case the above fails (extracting runtime calls codecs might require metadata V15) - // Note: PAPI will consider TransactionPaymentApi as first class api so it should work even without V15, but this is not the case yet. - const { partialFee } = await getExtrinsicDispatchInfo(chainId, extrinsic) - - return BigInt(partialFee) -} - -type DryRunRefChain = typeof polkadot | typeof polkadotAssetHub -type DryRunResult = Awaited< - ReturnType["apis"]["DryRunApi"]["dry_run_call"]> -> - -const getDryRunCall = async ( - chainId: ChainId, - metadata: ScaleMetadata, - builder: ScaleBuilder, - from: string, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - decodedCall: DecodedCall, -) => { - const stop = log.timer("[sapi] getDryRun") - try { - if (!isApiAvailable(metadata, "DryRunApi", "dry_run_call")) - return { - available: false, - data: null, - } - - const origin = PolkadotRuntimeOriginCaller.system({ - type: "Signed", - value: from, - }) - - const { pallet, method, args } = decodedCall - const call = { type: pallet, value: { type: method, value: args } } - - // This will throw an error if the api is not available on that chain - const data = await getRuntimeCallValue( - chainId, - builder, - "DryRunApi", - "dry_run_call", - [origin, call], - ) - - const ok = data.success && data.value.execution_result.success - const errorMessage = - data.success && !data.value.execution_result.success - ? getDispatchErrorMessage(chainId, metadata, data.value.execution_result.value.error) - : null - - return { - available: true, - data, - ok, - errorMessage, - } - } catch (err) { - // Note : err is null if chain doesnt have the api - log.error("Failed to dry run", { chainId, err }) - return { - available: false, - data: null, - } - } finally { - stop() - } -} - -const getRuntimeCallValue = async ( - chainId: ChainId, - scaleBuilder: ScaleBuilder, - apiName: string, - method: string, - args: unknown[], -) => { - const stop = log.timer("[sapi] getRuntimeCallValue") - const call = scaleBuilder.buildRuntimeCall(apiName, method) - - const hex = await api.subSend(chainId, "state_call", [ - `${apiName}_${method}`, - toHex(call.args.enc(args)), - ]) - - const res = call.value.dec(hex) as T - stop() - - return res -} - -const getConstantValue = ( - chainId: ChainId, - metadata: ScaleMetadata, - scaleBuilder: ScaleBuilder, - pallet: string, - constant: string, -) => { - try { - const storageCodec = scaleBuilder.buildConstant(pallet, constant) - - const encodedValue = metadata.pallets - .find(({ name }) => name === pallet) - ?.constants.find(({ name }) => name === constant)?.value - - if (!encodedValue) throw new Error(`Constant ${pallet}.${constant} not found`) - - return storageCodec.dec(encodedValue) as T - } catch (err) { - log.error("Failed to get constant value", { err, chainId, pallet, constant }) - throw err - } -} - -const getStorageValue = async ( - chainId: ChainId, - scaleBuilder: ScaleBuilder, - pallet: string, - entry: string, - keys: unknown[], - at?: string, -) => { - const storageCodec = scaleBuilder.buildStorage(pallet, entry) - const stateKey = storageCodec.enc(...keys) - - const hexValue = await api.subSend(chainId, "state_getStorage", [stateKey, at]) - if (!hexValue) return null as T // caller will need to expect null when applicable - - return storageCodec.dec(hexValue) as T -} - -const isApiAvailable = (metadata: ScaleMetadata, name: string, method: string) => { - return metadata.apis.some((a) => a.name === name && a.methods.some((m) => m.name === method)) -} - -////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////// Utilities from PAPI ///////////////////////////// -////////////////////////////////////////////////////////////////////////////////////////////////////////////// -function trailingZeroes(n: number) { - let i = 0 - while (!(n & 1)) { - i++ - n >>= 1 - } - return i -} - -const toPjsHex = (value: number | bigint, minByteLen?: number) => { - let inner = value.toString(16) - inner = (inner.length % 2 ? "0" : "") + inner - const nPaddedBytes = Math.max(0, (minByteLen || 0) - inner.length / 2) - return ("0x" + "00".repeat(nPaddedBytes) + inner) as Hex -} - -const mortal = enhanceEncoder(Bytes(2).enc, (value: { period: number; phase: number }) => { - const factor = Math.max(value.period >> 12, 1) - const left = Math.min(Math.max(trailingZeroes(value.period) - 1, 1), 15) - const right = (value.phase / factor) << 4 - return u16.enc(left | right) -}) diff --git a/apps/extension/src/ui/util/scaleApi/types.ts b/apps/extension/src/ui/util/scaleApi/types.ts deleted file mode 100644 index 3f8d88c245..0000000000 --- a/apps/extension/src/ui/util/scaleApi/types.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { getDynamicBuilder, getLookupFn, V14, V15 } from "@talismn/scale" - -export type ScaleMetadata = V14 | V15 -export type ScaleBuilder = ReturnType -export type ScaleLookup = ReturnType - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export type DecodedCall = { pallet: string; method: string; args: Args } - -export type PayloadSignerConfig = { - address: string - tip?: bigint -} diff --git a/lib/README.md b/lib/README.md new file mode 100644 index 0000000000..e69a123287 --- /dev/null +++ b/lib/README.md @@ -0,0 +1,2 @@ +This folder contains internal packages that are simple shared code containers, and do not need to be built or published to npm. +These are outside of the packages/\* folder to avoid problems with preconstruct. diff --git a/lib/sapi/package.json b/lib/sapi/package.json new file mode 100644 index 0000000000..3a095cbd1a --- /dev/null +++ b/lib/sapi/package.json @@ -0,0 +1,23 @@ +{ + "name": "sapi", + "private": true, + "exports" :{ + ".": "./src/index.ts" + }, + "dependencies": { + "extension-shared": "workspace:*", + "@polkadot-api/descriptors": "workspace:*", + "@polkadot-api/metadata-builders": "0.9.1", + "@polkadot-api/merkleize-metadata": "1.1.9", + "@polkadot/types": "15.0.1", + "@polkadot/types-codec": "15.0.1", + "@polkadot-api/utils": "0.1.2", + "@polkadot/util": "13.2.3" + }, + "devDependencies": { + "@talismn/eslint-config": "workspace:*", + "@talismn/tsconfig": "workspace:*", + "eslint": "^8.57.1", + "typescript": "^5.6.3" + } +} diff --git a/apps/extension/src/ui/util/scaleApi/errors.ts b/lib/sapi/src/helpers/errors.ts similarity index 84% rename from apps/extension/src/ui/util/scaleApi/errors.ts rename to lib/sapi/src/helpers/errors.ts index 2bf45617fc..38804f1ba8 100644 --- a/apps/extension/src/ui/util/scaleApi/errors.ts +++ b/lib/sapi/src/helpers/errors.ts @@ -1,14 +1,9 @@ import { getLookupFn } from "@polkadot-api/metadata-builders" -import { ChainId } from "extension-core" import { log } from "extension-shared" -import { ScaleMetadata } from "./types" +import { Chain } from "./types" -export const getDispatchErrorMessage = ( - chainId: ChainId, - metadata: ScaleMetadata, - err: unknown, -): string | null => { +export const getDispatchErrorMessage = (chain: Chain, err: unknown): string | null => { try { if (!err) return null @@ -18,7 +13,7 @@ export const getDispatchErrorMessage = ( const lv1 = DISPATCH_ERROR[error.type as keyof typeof DISPATCH_ERROR] if (!lv1) throw new Error("Unknown dispatch error") if (lv1 === ERROR_METADATA_LOOKUP) - return getModuleErrorMessage(chainId, metadata, error.value as UnsafeModuleError) + return getModuleErrorMessage(chain, error.value as UnsafeModuleError) if (typeof lv1 === "string") return lv1 const lv2 = lv1[error.value?.type as keyof typeof lv1] @@ -27,7 +22,7 @@ export const getDispatchErrorMessage = ( throw new Error("Unknown dispatch error") } catch (cause) { - log.error("Failed to parse runtime error", { chainId, cause, err }) + log.error("Failed to parse runtime error", { chainId: chain.connector.chainId, cause, err }) return tryFormatError(err) } } @@ -107,18 +102,14 @@ type UnsafeModuleError = { } } -const getModuleErrorMessage = ( - chainId: ChainId, - metadata: ScaleMetadata, - error: UnsafeModuleError, -): string => { +const getModuleErrorMessage = (chain: Chain, error: UnsafeModuleError): string => { try { - if (!metadata) throw new Error("Could not fetch metadata") + if (!chain.metadata) throw new Error("Could not fetch metadata") - const pallet = metadata.pallets.find((p) => p.name === error.type) + const pallet = chain.metadata.pallets.find((p) => p.name === error.type) if (typeof pallet?.errors !== "number") throw new Error("Unknown pallet") - const lookup = getLookupFn(metadata) + const lookup = getLookupFn(chain.metadata) const palletErrors = lookup(pallet.errors) if (palletErrors.type !== "enum" || !palletErrors.innerDocs[error.value.type]?.length) @@ -127,7 +118,7 @@ const getModuleErrorMessage = ( // biome-ignore lint/style/noNonNullAssertion: return palletErrors.innerDocs[error.value.type]!.join(" ") } catch (err) { - log.error("Failed to parse module error", { chainId, error, err }) + log.error("Failed to parse module error", { chainId: chain.connector.chainId, error, err }) return [error.type, error.value.type].join(": ") } } diff --git a/lib/sapi/src/helpers/getCallDocs.ts b/lib/sapi/src/helpers/getCallDocs.ts new file mode 100644 index 0000000000..3f83656b08 --- /dev/null +++ b/lib/sapi/src/helpers/getCallDocs.ts @@ -0,0 +1,26 @@ +import { log } from "extension-shared" + +import { Chain } from "./types" + +export const getCallDocs = (chain: Chain, pallet: string, method: string): string | null => { + try { + const typeIdCalls = chain.metadata.pallets.find(({ name }) => name === pallet)?.calls + if (!typeIdCalls) return null + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + let palletCalls: any = chain.metadata.lookup[typeIdCalls] + if (!palletCalls || palletCalls.id !== typeIdCalls) + palletCalls = chain.metadata.lookup.find((v) => v.id === typeIdCalls) + + if (!palletCalls) return null + + const call = palletCalls.def.value.find( + (c: { name: string; docs?: string[] | null }) => c.name === method, + ) + + return call?.docs?.join("\n") ?? null + } catch (err) { + log.error("Failed to find call docs", { pallet, method, chain }) + return null + } +} diff --git a/lib/sapi/src/helpers/getChainInfo.ts b/lib/sapi/src/helpers/getChainInfo.ts new file mode 100644 index 0000000000..5f21689e62 --- /dev/null +++ b/lib/sapi/src/helpers/getChainInfo.ts @@ -0,0 +1,25 @@ +import { getConstantValue } from "./getConstantValue" +import { Chain } from "./types" + +type SystemVersion = { + spec_name: string + spec_version: number + transaction_version: number +} + +export const getChainInfo = (chain: Chain) => { + const { + spec_name: specName, + spec_version: specVersion, + transaction_version: transactionVersion, + } = getConstantValue(chain, "System", "Version") + + const base58Prefix = getConstantValue(chain, "System", "SS58Prefix") + + return { + specName, + specVersion, + transactionVersion, + base58Prefix, + } +} diff --git a/lib/sapi/src/helpers/getConstantValue.ts b/lib/sapi/src/helpers/getConstantValue.ts new file mode 100644 index 0000000000..bbf168274b --- /dev/null +++ b/lib/sapi/src/helpers/getConstantValue.ts @@ -0,0 +1,25 @@ +import { log } from "extension-shared" + +import { Chain } from "./types" + +export const getConstantValue = (chain: Chain, pallet: string, constant: string) => { + try { + const storageCodec = chain.builder.buildConstant(pallet, constant) + + const encodedValue = chain.metadata.pallets + .find(({ name }) => name === pallet) + ?.constants.find(({ name }) => name === constant)?.value + + if (!encodedValue) throw new Error(`Constant ${pallet}.${constant} not found`) + + return storageCodec.dec(encodedValue) as T + } catch (err) { + log.error("Failed to get constant value", { + err, + chainId: chain.connector.chainId, + pallet, + constant, + }) + throw err + } +} diff --git a/lib/sapi/src/helpers/getDecodedCall.ts b/lib/sapi/src/helpers/getDecodedCall.ts new file mode 100644 index 0000000000..35f56f1165 --- /dev/null +++ b/lib/sapi/src/helpers/getDecodedCall.ts @@ -0,0 +1,23 @@ +import { SignerPayloadJSON } from "@polkadot/types/types" + +import { DecodedCall } from "../types" +import { Chain } from "./types" + +export const getDecodedCall = (palletName: string, methodName: string, args: unknown) => ({ + type: palletName, + value: { type: methodName, value: args }, +}) + +export const getDecodedCallFromPayload = ( + chain: Chain, + payload: SignerPayloadJSON, +): Res => { + const def = chain.builder.buildDefinition(chain.lookup.call!) + const decoded = def.dec(payload.method) + + return { + pallet: decoded.type, + method: decoded.value.type, + args: decoded.value.value, + } as Res +} diff --git a/lib/sapi/src/helpers/getDryRunCall.ts b/lib/sapi/src/helpers/getDryRunCall.ts new file mode 100644 index 0000000000..ca329ba88d --- /dev/null +++ b/lib/sapi/src/helpers/getDryRunCall.ts @@ -0,0 +1,65 @@ +import { polkadot, polkadotAssetHub, PolkadotRuntimeOriginCaller } from "@polkadot-api/descriptors" +import { log } from "extension-shared" +import { TypedApi } from "polkadot-api" + +import { DecodedCall } from "../types" +import { getDispatchErrorMessage } from "./errors" +import { getRuntimeCallResult } from "./getRuntimeCallResult" +import { isApiAvailable } from "./isApiAvailable" +import { Chain } from "./types" + +type DryRunRefChain = typeof polkadot | typeof polkadotAssetHub +type DryRunResult = Awaited< + ReturnType["apis"]["DryRunApi"]["dry_run_call"]> +> + +export const getDryRunCall = async ( + chain: Chain, + from: string, + decodedCall: DecodedCall, +) => { + const stop = log.timer("[sapi] getDryRun") + try { + if (!isApiAvailable(chain, "DryRunApi", "dry_run_call")) + return { + available: false, + data: null, + } + + const origin = PolkadotRuntimeOriginCaller.system({ + type: "Signed", + value: from, + }) + + const { pallet, method, args } = decodedCall + const call = { type: pallet, value: { type: method, value: args } } + + // This will throw an error if the api is not available on that chain + const data = await getRuntimeCallResult(chain, "DryRunApi", "dry_run_call", [ + origin, + call, + ]) + + const ok = data.success && data.value.execution_result.success + const errorMessage = + data.success && !data.value.execution_result.success + ? getDispatchErrorMessage(chain, data.value.execution_result.value.error) + : null + + return { + available: true, + data, + ok, + errorMessage, + } + } catch (err) { + // Note : err is null if chain doesnt have the api + log.error("Failed to dry run", { chainId: chain.connector.chainId, err }) + return { + available: false, + data: null, + } + } finally { + stop() + } +} diff --git a/lib/sapi/src/helpers/getExtrinsicDispatchInfo.ts b/lib/sapi/src/helpers/getExtrinsicDispatchInfo.ts new file mode 100644 index 0000000000..e6dc091b3a --- /dev/null +++ b/lib/sapi/src/helpers/getExtrinsicDispatchInfo.ts @@ -0,0 +1,53 @@ +import { GenericExtrinsic } from "@polkadot/types" +import { Codec } from "@polkadot/types-codec/types" +import { RuntimeDispatchInfo } from "@polkadot/types/interfaces" +import { assert, u8aConcatStrict } from "@polkadot/util" +import { HexString } from "@polkadot/util/types" + +import { JsonRpcRequestSend } from "../types" +import { Chain } from "./types" + +type ExtrinsicDispatchInfo = { + partialFee: string +} + +// used for chains that dont have metadata v15 yet +export const getExtrinsicDispatchInfo = async ( + chain: Chain, + signedExtrinsic: GenericExtrinsic, +): Promise => { + assert(signedExtrinsic.isSigned, "Extrinsic must be signed (or fakeSigned) in order to query fee") + + const len = signedExtrinsic.registry.createType("u32", signedExtrinsic.encodedLength) + + const dispatchInfo = (await stateCall( + chain.connector.send, + "TransactionPaymentApi_query_info", + "RuntimeDispatchInfo", + [signedExtrinsic, len], + undefined, + true, + )) as RuntimeDispatchInfo + + return { + partialFee: dispatchInfo.partialFee.toString(), + } +} + +const stateCall = async ( + request: JsonRpcRequestSend, + method: string, + resultType: K, + args: Codec[], + blockHash?: HexString, + isCacheable?: boolean, +) => { + // on a state call there are always arguments + const registry = args[0].registry + + const bytes = registry.createType("Raw", u8aConcatStrict(args.map((arg) => arg.toU8a()))) + + const result = await request("state_call", [method, bytes.toHex(), blockHash], isCacheable) + + return registry.createType(resultType, result) +} diff --git a/lib/sapi/src/helpers/getFeeEstimate.ts b/lib/sapi/src/helpers/getFeeEstimate.ts new file mode 100644 index 0000000000..c56ffc7eea --- /dev/null +++ b/lib/sapi/src/helpers/getFeeEstimate.ts @@ -0,0 +1,55 @@ +import { IRuntimeVersionBase, SignatureOptions, SignerPayloadJSON } from "@polkadot/types/types" +import { log } from "extension-shared" +import { Binary } from "polkadot-api" + +import { getExtrinsicDispatchInfo } from "./getExtrinsicDispatchInfo" +import { getRuntimeCallResult } from "./getRuntimeCallResult" +import { getTypeRegistry } from "./getTypeRegistry" +import { Chain, ChainInfo } from "./types" + +export const getFeeEstimate = async ( + chain: Chain, + payload: SignerPayloadJSON, + chainInfo: ChainInfo, +) => { + // TODO do this without PJS / registry => waiting for @polkadot-api/tx-utils + const registry = getTypeRegistry(chain, payload) + const extrinsic = registry.createType("Extrinsic", payload) + + extrinsic.signFake(payload.address, { + appId: 0, + nonce: payload.nonce, + blockHash: payload.blockHash, + genesisHash: payload.genesisHash, + runtimeVersion: { + specVersion: chainInfo.specVersion, + transactionVersion: chainInfo.transactionVersion, + // other fields aren't necessary for signing + } as IRuntimeVersionBase, + } as SignatureOptions) + + const bytes = extrinsic.toU8a(true) + const binary = Binary.fromBytes(bytes) + + try { + const result = await getRuntimeCallResult<{ partial_fee: bigint }>( + chain, + "TransactionPaymentApi", + "query_info", + [binary, bytes.length], + ) + // Do not throw if partialFee is 0n. This is a valid response, eg: Bittensor remove_stake fee estimation is 0n. + if (!result?.partial_fee && result.partial_fee !== 0n) { + throw new Error("partialFee is not found") + } + return result.partial_fee + } catch (err) { + log.error("Failed to get fee estimate using getRuntimeCallValue", { err }) + } + + // fallback to pjs encoded state call, in case the above fails (extracting runtime calls codecs might require metadata V15) + // Note: PAPI will consider TransactionPaymentApi as first class api so it should work even without V15, but this is not the case yet. + const { partialFee } = await getExtrinsicDispatchInfo(chain, extrinsic) + + return BigInt(partialFee) +} diff --git a/lib/sapi/src/helpers/getPayloadWithMetadataHash.ts b/lib/sapi/src/helpers/getPayloadWithMetadataHash.ts new file mode 100644 index 0000000000..0f8c976ce5 --- /dev/null +++ b/lib/sapi/src/helpers/getPayloadWithMetadataHash.ts @@ -0,0 +1,63 @@ +import { merkleizeMetadata } from "@polkadot-api/merkleize-metadata" +import { toHex } from "@polkadot-api/utils" +import { SignerPayloadJSON } from "@polkadot/types/types" +import { log } from "extension-shared" + +import { getTypeRegistry } from "./getTypeRegistry" +import { Chain, ChainInfo } from "./types" + +export const getPayloadWithMetadataHash = ( + chain: Chain, + chainInfo: ChainInfo, + payload: SignerPayloadJSON, +): { payload: SignerPayloadJSON; txMetadata?: Uint8Array } => { + if (!chain.hasCheckMetadataHash || !payload.signedExtensions.includes("CheckMetadataHash")) + return { + payload, + txMetadata: undefined, + } + + try { + const { decimals, symbol: tokenSymbol } = chain.token + const { base58Prefix, specName, specVersion } = chainInfo + + // since ultimately this needs a V15 object, would be nice if this accepted one directly as input + const merkleizedMetadata = merkleizeMetadata(chain.hexMetadata, { + tokenSymbol, + decimals, + base58Prefix, + specName, + specVersion, + }) + + const metadataHash = toHex(merkleizedMetadata.digest()) as `0x${string}` + + const payloadWithMetadataHash = { + ...payload, + mode: 1, + metadataHash, + withSignedTransaction: true, + } + + // TODO do this without PJS / registry => waiting for @polkadot-api/tx-utils + // const { extra, additionalSigned } = getSignedExtensionValues(payload, metadata) + // const badExtPayload = mergeUint8(fromHex(payload.method), ...extra, ...additionalSigned) + + const registry = getTypeRegistry(chain, payload) + const extPayload = registry.createType("ExtrinsicPayload", payloadWithMetadataHash) + const barePayload = extPayload.toU8a(true) + + const txMetadata = merkleizedMetadata.getProofForExtrinsicPayload(barePayload) + + return { + payload: payloadWithMetadataHash, + txMetadata, + } + } catch (err) { + log.error("Failed to get shortened metadata", { error: err }) + return { + payload, + txMetadata: undefined, + } + } +} diff --git a/lib/sapi/src/helpers/getRuntimeCallResult.ts b/lib/sapi/src/helpers/getRuntimeCallResult.ts new file mode 100644 index 0000000000..78ad88be88 --- /dev/null +++ b/lib/sapi/src/helpers/getRuntimeCallResult.ts @@ -0,0 +1,20 @@ +import { toHex } from "@polkadot-api/utils" + +import { getSendRequestResult } from "./getSendRequestResult" +import { Chain } from "./types" + +export const getRuntimeCallResult = async ( + chain: Chain, + apiName: string, + method: string, + args: unknown[], +) => { + const call = chain.builder.buildRuntimeCall(apiName, method) + + const hex = await getSendRequestResult(chain, "state_call", [ + `${apiName}_${method}`, + toHex(call.args.enc(args)), + ]) + + return call.value.dec(hex) as T +} diff --git a/lib/sapi/src/helpers/getSapiConnector.ts b/lib/sapi/src/helpers/getSapiConnector.ts new file mode 100644 index 0000000000..217abbbc3c --- /dev/null +++ b/lib/sapi/src/helpers/getSapiConnector.ts @@ -0,0 +1,12 @@ +import { SapiConnectorProps } from "../types" + +export type SapiConnector = Required + +export const getSapiConnector = ({ chainId, send, submit }: SapiConnectorProps): SapiConnector => ({ + chainId, + send, + submit: (...args) => { + if (submit) return submit(...args) + throw new Error("submit handler not provided") + }, +}) diff --git a/lib/sapi/src/helpers/getSendRequestResult.ts b/lib/sapi/src/helpers/getSendRequestResult.ts new file mode 100644 index 0000000000..d17207b43c --- /dev/null +++ b/lib/sapi/src/helpers/getSendRequestResult.ts @@ -0,0 +1,10 @@ +import { Chain } from "./types" + +export const getSendRequestResult = ( + chain: Chain, + method: string, + params: unknown[], + isCacheable?: boolean, +): Promise => { + return chain.connector.send(method, params, isCacheable) as Promise +} diff --git a/lib/sapi/src/helpers/getSignerPayloadJSON.ts b/lib/sapi/src/helpers/getSignerPayloadJSON.ts new file mode 100644 index 0000000000..b285d15719 --- /dev/null +++ b/lib/sapi/src/helpers/getSignerPayloadJSON.ts @@ -0,0 +1,68 @@ +import { mergeUint8, toHex } from "@polkadot-api/utils" +import { SignerPayloadJSON } from "@polkadot/types/types" +import { log } from "extension-shared" +import { Binary } from "polkadot-api" + +import { PayloadSignerConfig } from "../types" +import { getPayloadWithMetadataHash } from "./getPayloadWithMetadataHash" +import { getSendRequestResult } from "./getSendRequestResult" +import { getStorageValue } from "./getStorageValue" +import { mortal, toPjsHex } from "./papi" +import { Chain, ChainInfo } from "./types" + +export const getSignerPayloadJSON = async ( + chain: Chain, + palletName: string, + methodName: string, + args: unknown, + signerConfig: PayloadSignerConfig, + chainInfo: ChainInfo, +): Promise<{ payload: SignerPayloadJSON; txMetadata?: Uint8Array }> => { + const { codec, location } = chain.builder.buildCall(palletName, methodName) + const method = Binary.fromBytes(mergeUint8(new Uint8Array(location), codec.enc(args))) + + const blockNumber = await getStorageValue(chain, "System", "Number", []) + if (blockNumber === null) throw new Error("Block number not found") + + const [account, genesisHash, blockHash] = await Promise.all([ + // TODO if V15 available, use a runtime call instead : AccountNonceApi/account_nonce + // about nonce https://github.com/paritytech/json-rpc-interface-spec/issues/156 + getStorageValue<{ nonce: number }>(chain, "System", "Account", [signerConfig.address]), + getStorageValue(chain, "System", "BlockHash", [0]), + getSendRequestResult<`0x${string}`>(chain, "chain_getBlockHash", [blockNumber], false), // TODO find the right way to fetch this with new RPC api, this is not available in storage yet + ]) + if (!genesisHash) throw new Error("Genesis hash not found") + if (!blockHash) throw new Error("Block hash not found") + + const nonce = account ? account.nonce : 0 + const era = mortal({ period: 16, phase: blockNumber % 16 }) + const signedExtensions = chain.metadata.extrinsic.signedExtensions.map((ext) => + ext.identifier.toString(), + ) + + const basePayload: SignerPayloadJSON = { + address: signerConfig.address, + genesisHash: genesisHash.asHex() as `0x${string}`, + blockHash, + method: method.asHex(), + signedExtensions, + nonce: toPjsHex(nonce, 4), + specVersion: toPjsHex(chainInfo.specVersion, 4), + transactionVersion: toPjsHex(chainInfo.transactionVersion, 4), + blockNumber: toPjsHex(blockNumber, 4), + era: toHex(era) as `0x${string}`, + tip: toPjsHex(0, 16), // TODO gas station (required for Astar) + assetId: undefined, + version: 4, + } + + const { payload, txMetadata } = getPayloadWithMetadataHash(chain, chainInfo, basePayload) + + // Avail support + if (payload.signedExtensions.includes("CheckAppId")) + (payload as SignerPayloadJSON & { appId: number }).appId = 0 + + log.log("[sapi] payload", { newPayload: payload, txMetadata }) + + return { payload, txMetadata } +} diff --git a/lib/sapi/src/helpers/getStorageValue.ts b/lib/sapi/src/helpers/getStorageValue.ts new file mode 100644 index 0000000000..112124295c --- /dev/null +++ b/lib/sapi/src/helpers/getStorageValue.ts @@ -0,0 +1,21 @@ +import { getSendRequestResult } from "./getSendRequestResult" +import { Chain } from "./types" + +export const getStorageValue = async ( + chain: Chain, + pallet: string, + entry: string, + keys: unknown[], + at?: string, +) => { + const storageCodec = chain.builder.buildStorage(pallet, entry) + const stateKey = storageCodec.enc(...keys) + + const hexValue = await getSendRequestResult(chain, "state_getStorage", [ + stateKey, + at, + ]) + if (!hexValue) return null as T // caller will need to expect null when applicable + + return storageCodec.dec(hexValue) as T +} diff --git a/lib/sapi/src/helpers/getTypeRegistry.ts b/lib/sapi/src/helpers/getTypeRegistry.ts new file mode 100644 index 0000000000..8d4c44bebb --- /dev/null +++ b/lib/sapi/src/helpers/getTypeRegistry.ts @@ -0,0 +1,18 @@ +import { Metadata, TypeRegistry } from "@polkadot/types" +import { RegistryTypes, SignerPayloadJSON } from "@polkadot/types/types" +import { log } from "extension-shared" + +import { Chain } from "./types" + +export const getTypeRegistry = (chain: Chain, payload: SignerPayloadJSON) => { + const stop = log.timer("[sapi] getTypeRegistry") + const registry = new TypeRegistry() + + if (chain.registryTypes) registry.register(chain.registryTypes as RegistryTypes) + + const meta = new Metadata(registry, chain.hexMetadata) + registry.setMetadata(meta, payload.signedExtensions, chain.signedExtensions) // ~30ms + + stop() + return registry +} diff --git a/lib/sapi/src/helpers/isApiAvailable.ts b/lib/sapi/src/helpers/isApiAvailable.ts new file mode 100644 index 0000000000..2588309e34 --- /dev/null +++ b/lib/sapi/src/helpers/isApiAvailable.ts @@ -0,0 +1,7 @@ +import { Chain } from "./types" + +export const isApiAvailable = (chain: Chain, name: string, method: string) => { + return chain.metadata.apis.some( + (a) => a.name === name && a.methods.some((m) => m.name === method), + ) +} diff --git a/lib/sapi/src/helpers/papi.ts b/lib/sapi/src/helpers/papi.ts new file mode 100644 index 0000000000..971f83f9bc --- /dev/null +++ b/lib/sapi/src/helpers/papi.ts @@ -0,0 +1,28 @@ +import { Bytes, enhanceEncoder, u16 } from "@polkadot-api/substrate-bindings" + +////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////// Utilities from PAPI ///////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const toPjsHex = (value: number | bigint, minByteLen?: number) => { + let inner = value.toString(16) + inner = (inner.length % 2 ? "0" : "") + inner + const nPaddedBytes = Math.max(0, (minByteLen || 0) - inner.length / 2) + return ("0x" + "00".repeat(nPaddedBytes) + inner) as `0x${string}` +} + +export const mortal = enhanceEncoder(Bytes(2).enc, (value: { period: number; phase: number }) => { + const factor = Math.max(value.period >> 12, 1) + const left = Math.min(Math.max(trailingZeroes(value.period) - 1, 1), 15) + const right = (value.phase / factor) << 4 + return u16.enc(left | right) +}) + +function trailingZeroes(n: number) { + let i = 0 + while (!(n & 1)) { + i++ + n >>= 1 + } + return i +} diff --git a/lib/sapi/src/helpers/types.ts b/lib/sapi/src/helpers/types.ts new file mode 100644 index 0000000000..e199eb56bb --- /dev/null +++ b/lib/sapi/src/helpers/types.ts @@ -0,0 +1,27 @@ +import { ExtDef } from "@polkadot/types/extrinsic/signedExtensions/types" +import { getDynamicBuilder, getLookupFn, V14, V15 } from "@talismn/scale" + +import { SapiConnector } from "./getSapiConnector" + +export type ScaleMetadata = V14 | V15 +export type ScaleBuilder = ReturnType +export type ScaleLookup = ReturnType + +export type Chain = { + connector: SapiConnector + hexMetadata: `0x${string}` + token: { symbol: string; decimals: number } + hasCheckMetadataHash?: boolean + signedExtensions?: ExtDef + registryTypes?: unknown + metadata: ScaleMetadata + lookup: ScaleLookup + builder: ScaleBuilder +} + +export type ChainInfo = { + specName: string + specVersion: number + transactionVersion: number + base58Prefix: number +} diff --git a/apps/extension/src/ui/util/scaleApi/index.ts b/lib/sapi/src/index.ts similarity index 100% rename from apps/extension/src/ui/util/scaleApi/index.ts rename to lib/sapi/src/index.ts diff --git a/lib/sapi/src/sapi.ts b/lib/sapi/src/sapi.ts new file mode 100644 index 0000000000..aa33b7636a --- /dev/null +++ b/lib/sapi/src/sapi.ts @@ -0,0 +1,101 @@ +import { ExtDef } from "@polkadot/types/extrinsic/signedExtensions/types" +import { SignerPayloadJSON } from "@polkadot/types/types" +import { assert } from "@polkadot/util" +import { decodeMetadata, getDynamicBuilder, getLookupFn } from "@talismn/scale" + +import { getCallDocs } from "./helpers/getCallDocs" +import { getChainInfo } from "./helpers/getChainInfo" +import { getConstantValue } from "./helpers/getConstantValue" +import { getDecodedCall, getDecodedCallFromPayload } from "./helpers/getDecodedCall" +import { getDryRunCall } from "./helpers/getDryRunCall" +import { getFeeEstimate } from "./helpers/getFeeEstimate" +import { getRuntimeCallResult } from "./helpers/getRuntimeCallResult" +import { getSapiConnector } from "./helpers/getSapiConnector" +import { getSignerPayloadJSON } from "./helpers/getSignerPayloadJSON" +import { getStorageValue } from "./helpers/getStorageValue" +import { getTypeRegistry } from "./helpers/getTypeRegistry" +import { isApiAvailable } from "./helpers/isApiAvailable" +import { Chain } from "./helpers/types" +import { DecodedCall, PayloadSignerConfig, SapiConnectorProps } from "./types" + +export type ScaleApi = NonNullable> + +export const getScaleApi = ( + connector: SapiConnectorProps, + hexMetadata: `0x${string}`, + token: { symbol: string; decimals: number }, + hasCheckMetadataHash?: boolean, + signedExtensions?: ExtDef, + registryTypes?: unknown, +) => { + const decoded = decodeMetadata(hexMetadata) + assert(decoded.metadata, `Missing Metadata V14+ for chain ${connector.chainId}`) + + const { metadata } = decoded + const lookup = getLookupFn(metadata) + const builder = getDynamicBuilder(lookup) + + const chain: Chain = { + connector: getSapiConnector(connector), + hexMetadata, + + token, + hasCheckMetadataHash, + signedExtensions, + registryTypes, + + metadata, + lookup, + builder, + } + + const chainInfo = getChainInfo(chain) + + const { specName, specVersion, base58Prefix } = chainInfo + + return { + id: `${connector.chainId}::${specName}::${specVersion}`, + chainId: connector.chainId, + specName, + specVersion, + hasCheckMetadataHash, + base58Prefix, + token: chain.token, + + getConstant: (pallet: string, constant: string) => + getConstantValue(chain, pallet, constant), + + getStorage: (pallet: string, entry: string, keys: unknown[], at?: string) => + getStorageValue(chain, pallet, entry, keys, at), + + getDecodedCall: (pallet: string, method: string, args: unknown) => + getDecodedCall(pallet, method, args), + + getDecodedCallFromPayload: (payload: SignerPayloadJSON) => + getDecodedCallFromPayload(chain, payload), + + getExtrinsicPayload: ( + pallet: string, + method: string, + args: unknown, + config: PayloadSignerConfig, + ) => getSignerPayloadJSON(chain, pallet, method, args, config, chainInfo), + + getFeeEstimate: (payload: SignerPayloadJSON) => getFeeEstimate(chain, payload, chainInfo), + + getRuntimeCallValue: (apiName: string, method: string, args: unknown[]) => + getRuntimeCallResult(chain, apiName, method, args), + + getTypeRegistry: (payload: SignerPayloadJSON) => getTypeRegistry(chain, payload), + + submit: (payload: SignerPayloadJSON, signature?: `0x${string}`) => + chain.connector.submit(payload, signature), + + getCallDocs: (pallet: string, method: string) => getCallDocs(chain, pallet, method), + + getDryRunCall: (from: string, decodedCall: DecodedCall) => + getDryRunCall(chain, from, decodedCall), + + isApiAvailable: (name: string, method: string) => isApiAvailable(chain, name, method), + } +} diff --git a/lib/sapi/src/types.ts b/lib/sapi/src/types.ts new file mode 100644 index 0000000000..613d93c0e5 --- /dev/null +++ b/lib/sapi/src/types.ts @@ -0,0 +1,24 @@ +import { SignerPayloadJSON } from "@polkadot/types/types" + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export type DecodedCall = { pallet: string; method: string; args: Args } + +export type PayloadSignerConfig = { + address: string + tip?: bigint +} + +export type JsonRpcRequestSend = ( + method: string, + params: unknown[], + isCacheable?: boolean, +) => Promise + +export type SapiConnectorProps = { + chainId: string // indicational only, used for logs + send: JsonRpcRequestSend + submit?: ( + payload: SignerPayloadJSON, + signature?: `0x${string}`, + ) => Promise<{ hash: `0x${string}` }> +} diff --git a/lib/sapi/tsconfig.json b/lib/sapi/tsconfig.json new file mode 100644 index 0000000000..ed5b8eacd8 --- /dev/null +++ b/lib/sapi/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "@talismn/tsconfig/es6-node.json", + "include": ["src", "types"], + "exclude": ["node_modules", ".next", ".turbo", ".dist", "**/*.spec.ts", "**/*.test.ts"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3e1695dc06..5160bb7427 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -535,6 +535,9 @@ importers: rxjs: specifier: ^7.8.1 version: 7.8.1 + sapi: + specifier: workspace:* + version: link:../../lib/sapi semver: specifier: 7.6.3 version: 7.6.3 @@ -559,7 +562,7 @@ importers: devDependencies: '@alectalisman/webpack-ext-reloader': specifier: ^1.1.9-a - version: 1.1.9-a(@swc/core@1.7.39(@swc/helpers@0.5.13))(bufferutil@4.0.8)(esbuild@0.24.0)(utf-8-validate@6.0.4)(webpack-cli@5.1.4)(webpack@5.95.0) + version: 1.1.9-a(@swc/core@1.7.39(@swc/helpers@0.5.13))(bufferutil@4.0.8)(utf-8-validate@6.0.4)(webpack-cli@5.1.4)(webpack@5.95.0) '@babel/core': specifier: ^7.25.8 version: 7.25.9 @@ -718,7 +721,7 @@ importers: version: 4.0.2(webpack@5.95.0) remove-files-webpack-plugin: specifier: ^1.5.0 - version: 1.5.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4)(webpack@5.95.0) + version: 1.5.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4)(webpack@5.95.0) sinon-chrome: specifier: ^3.0.1 version: 3.0.1 @@ -736,10 +739,10 @@ importers: version: 3.4.14(ts-node@10.9.2(@swc/core@1.7.39(@swc/helpers@0.5.13))(@types/node@22.9.1)(typescript@5.6.3)) terser-webpack-plugin: specifier: 5.3.10 - version: 5.3.10(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack@5.95.0) + version: 5.3.10(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack@5.95.0) ts-jest: specifier: ^29.2.5 - version: 29.2.5(@babel/core@7.25.9)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.9))(esbuild@0.24.0)(jest@29.7.0(@types/node@22.9.1)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.7.39(@swc/helpers@0.5.13))(@types/node@22.9.1)(typescript@5.6.3)))(typescript@5.6.3) + version: 29.2.5(@babel/core@7.25.9)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.9))(jest@29.7.0(@types/node@22.9.1)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.7.39(@swc/helpers@0.5.13))(@types/node@22.9.1)(typescript@5.6.3)))(typescript@5.6.3) ts-loader: specifier: 9.5.1 version: 9.5.1(typescript@5.6.3)(webpack@5.95.0) @@ -754,7 +757,7 @@ importers: version: 1.1.2 webpack: specifier: ^5.95.0 - version: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4) + version: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4) webpack-bundle-analyzer: specifier: ^4.10.2 version: 4.10.2(bufferutil@4.0.8)(utf-8-validate@6.0.4) @@ -814,7 +817,7 @@ importers: version: 2.21.34(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) wagmi: specifier: ^2.12.25 - version: 2.12.25(@tanstack/query-core@5.59.16)(@tanstack/react-query@5.59.16(react@18.3.1))(@types/react@18.3.12)(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.34(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + version: 2.12.25(@tanstack/query-core@5.59.16)(@tanstack/react-query@5.59.16(react@18.3.1))(@types/react@18.3.12)(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.0(@babel/core@7.26.0)(@babel/preset-env@7.25.9(@babel/core@7.26.0))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.34(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) devDependencies: '@openzeppelin/contracts': specifier: ^5.1.0 @@ -904,6 +907,46 @@ importers: config/tsconfig: {} + lib/sapi: + dependencies: + '@polkadot-api/descriptors': + specifier: workspace:* + version: link:../../.papi/descriptors + '@polkadot-api/merkleize-metadata': + specifier: 1.1.9 + version: 1.1.9 + '@polkadot-api/metadata-builders': + specifier: 0.9.1 + version: 0.9.1 + '@polkadot-api/utils': + specifier: 0.1.2 + version: 0.1.2 + '@polkadot/types': + specifier: 15.0.1 + version: 15.0.1 + '@polkadot/types-codec': + specifier: 15.0.1 + version: 15.0.1 + '@polkadot/util': + specifier: 13.2.3 + version: 13.2.3 + extension-shared: + specifier: workspace:* + version: link:../../packages/extension-shared + devDependencies: + '@talismn/eslint-config': + specifier: workspace:* + version: link:../../config/eslint-config + '@talismn/tsconfig': + specifier: workspace:* + version: link:../../config/tsconfig + eslint: + specifier: ^8.57.1 + version: 8.57.1 + typescript: + specifier: ^5.6.3 + version: 5.6.3 + packages/balances: dependencies: '@polkadot-api/utils': @@ -1452,7 +1495,7 @@ importers: version: 3.0.1 ts-jest: specifier: ^29.2.5 - version: 29.2.5(@babel/core@7.25.9)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.9))(esbuild@0.24.0)(jest@29.7.0(@types/node@22.9.1)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.7.39(@swc/helpers@0.5.13))(@types/node@22.9.1)(typescript@5.6.3)))(typescript@5.6.3) + version: 29.2.5(@babel/core@7.25.9)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.9))(jest@29.7.0(@types/node@22.9.1)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.7.39(@swc/helpers@0.5.13))(@types/node@22.9.1)(typescript@5.6.3)))(typescript@5.6.3) typescript: specifier: ^5.6.3 version: 5.6.3 @@ -4600,7 +4643,7 @@ packages: resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} engines: {node: '>= 8.0.0'} peerDependencies: - rollup: '>=2.79.2' + rollup: '>=4.22.4' '@rollup/pluginutils@4.2.1': resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} @@ -12800,10 +12843,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@alectalisman/webpack-ext-reloader@1.1.9-a(@swc/core@1.7.39(@swc/helpers@0.5.13))(bufferutil@4.0.8)(esbuild@0.24.0)(utf-8-validate@6.0.4)(webpack-cli@5.1.4)(webpack@5.95.0)': + '@alectalisman/webpack-ext-reloader@1.1.9-a(@swc/core@1.7.39(@swc/helpers@0.5.13))(bufferutil@4.0.8)(utf-8-validate@6.0.4)(webpack-cli@5.1.4)(webpack@5.95.0)': dependencies: '@types/webextension-polyfill': 0.8.3 - '@types/webpack': 5.28.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4) + '@types/webpack': 5.28.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4) '@types/webpack-sources': 3.2.0 clean-webpack-plugin: 4.0.0(webpack@5.95.0) colors: 1.4.0 @@ -12812,7 +12855,7 @@ snapshots: minimist: 1.2.8 useragent: 2.3.0 webextension-polyfill: 0.8.0 - webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4) webpack-sources: 3.2.3 ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) transitivePeerDependencies: @@ -12976,6 +13019,13 @@ snapshots: regexpu-core: 6.1.1 semver: 7.6.3 + '@babel/helper-create-regexp-features-plugin@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + regexpu-core: 6.1.1 + semver: 7.6.3 + '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -12987,6 +13037,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + debug: 4.3.7(supports-color@8.1.1) + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -12997,6 +13058,18 @@ snapshots: resolve: 1.22.8 transitivePeerDependencies: - supports-color + optional: true + + '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + debug: 4.3.7(supports-color@8.1.1) + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color '@babel/helper-member-expression-to-functions@7.25.9': dependencies: @@ -13056,6 +13129,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-wrap-function': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/helper-replace-supers@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -13135,16 +13217,34 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -13154,6 +13254,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -13162,6 +13271,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -13174,6 +13291,12 @@ snapshots: dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + optional: true + + '@babel/plugin-proposal-export-default-from@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.26.0)': dependencies: @@ -13194,6 +13317,10 @@ snapshots: dependencies: '@babel/core': 7.25.9 + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -13203,7 +13330,6 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 - optional: true '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.25.9)': dependencies: @@ -13214,7 +13340,6 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 - optional: true '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.9)': dependencies: @@ -13225,7 +13350,6 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 - optional: true '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.9)': dependencies: @@ -13236,17 +13360,28 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 - optional: true '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + optional: true + + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-export-default-from@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + optional: true + + '@babel/plugin-syntax-export-default-from@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-flow@7.25.9(@babel/core@7.25.9)': dependencies: @@ -13257,6 +13392,7 @@ snapshots: dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + optional: true '@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.0)': dependencies: @@ -13268,6 +13404,11 @@ snapshots: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-import-assertions@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-import-attributes@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -13277,7 +13418,6 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 - optional: true '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.9)': dependencies: @@ -13288,7 +13428,6 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 - optional: true '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.9)': dependencies: @@ -13299,7 +13438,6 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 - optional: true '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.25.9)': dependencies: @@ -13320,7 +13458,6 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 - optional: true '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.9)': dependencies: @@ -13341,7 +13478,6 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 - optional: true '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.9)': dependencies: @@ -13352,7 +13488,6 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 - optional: true '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.9)': dependencies: @@ -13363,7 +13498,6 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 - optional: true '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.9)': dependencies: @@ -13384,7 +13518,6 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 - optional: true '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.9)': dependencies: @@ -13395,7 +13528,6 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 - optional: true '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.25.9)': dependencies: @@ -13413,11 +13545,22 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.9) '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -13427,6 +13570,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -13436,16 +13588,35 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-block-scoped-functions@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-block-scoped-functions@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -13454,6 +13625,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-class-static-block@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -13462,6 +13641,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-class-static-block@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-classes@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -13474,39 +13661,84 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) + '@babel/traverse': 7.25.9 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 '@babel/template': 7.25.9 + '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/template': 7.25.9 + '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.9) '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.9) '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-exponentiation-operator@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -13515,16 +13747,30 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-exponentiation-operator@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-flow-strip-types@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.25.9) + optional: true '@babel/plugin-transform-flow-strip-types@7.25.9(@babel/core@7.26.0)': dependencies: @@ -13540,6 +13786,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -13549,26 +13803,55 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-literals@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -13577,6 +13860,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-modules-commonjs@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -13605,6 +13896,16 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -13613,27 +13914,56 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.9) '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-nullish-coalescing-operator@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-nullish-coalescing-operator@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -13641,6 +13971,13 @@ snapshots: '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -13649,11 +13986,24 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -13662,11 +14012,24 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -13675,6 +14038,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -13684,11 +14055,25 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-react-constant-elements@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -13699,6 +14084,11 @@ snapshots: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -13711,11 +14101,21 @@ snapshots: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -13727,6 +14127,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/types': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -13739,11 +14150,22 @@ snapshots: '@babel/helper-plugin-utils': 7.25.9 regenerator-transform: 0.15.2 + '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + regenerator-transform: 0.15.2 + '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-runtime@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -13755,12 +14177,30 @@ snapshots: semver: 7.6.3 transitivePeerDependencies: - supports-color + optional: true + + '@babel/plugin-transform-runtime@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.0) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0) + babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.0) + semver: 7.6.3 + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-spread@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -13769,9 +14209,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.25.9)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.25.9)': @@ -13779,11 +14232,21 @@ snapshots: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-typeof-symbol@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-typeof-symbol@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-typescript@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -13811,24 +14274,47 @@ snapshots: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.9) '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.9) '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.9) '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/preset-env@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/compat-data': 7.25.9 @@ -13903,6 +14389,80 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/preset-env@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/compat-data': 7.25.9 + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0) + '@babel/plugin-syntax-import-assertions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-syntax-import-attributes': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.0) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-block-scoped-functions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-class-static-block': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-exponentiation-operator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-template-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-typeof-symbol': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.0) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.0) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.26.0) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.26.0) + core-js-compat: 3.38.1 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + '@babel/preset-flow@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -13917,6 +14477,13 @@ snapshots: '@babel/types': 7.25.9 esutils: 2.0.3 + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/types': 7.25.9 + esutils: 2.0.3 + '@babel/preset-react@7.25.9(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -14306,7 +14873,7 @@ snapshots: '@dnd-kit/accessibility@3.1.0(react@18.3.1)': dependencies: react: 18.3.1 - tslib: 2.8.0 + tslib: 2.8.1 '@dnd-kit/core@6.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -14326,7 +14893,7 @@ snapshots: '@dnd-kit/utilities@3.2.2(react@18.3.1)': dependencies: react: 18.3.1 - tslib: 2.8.0 + tslib: 2.8.1 '@docknetwork/node-types@0.16.0': {} @@ -15589,31 +16156,31 @@ snapshots: - supports-color optional: true - '@metamask/sdk-install-modal-web@0.30.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)': + '@metamask/sdk-install-modal-web@0.30.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)': dependencies: i18next: 23.11.5 qr-code-styling: 1.8.4 optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-native: 0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) + react-native: 0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@6.0.4) + optional: true - '@metamask/sdk-install-modal-web@0.30.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)': + '@metamask/sdk-install-modal-web@0.30.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.0(@babel/core@7.26.0)(@babel/preset-env@7.25.9(@babel/core@7.26.0))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: i18next: 23.11.5 qr-code-styling: 1.8.4 optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-native: 0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@6.0.4) - optional: true + react-native: 0.76.0(@babel/core@7.26.0)(@babel/preset-env@7.25.9(@babel/core@7.26.0))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) - '@metamask/sdk@0.30.1(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)': + '@metamask/sdk@0.30.1(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(utf-8-validate@6.0.4)': dependencies: '@metamask/onboarding': 1.0.1 '@metamask/providers': 16.1.0 - '@metamask/sdk-communication-layer': 0.30.0(cross-fetch@4.0.0)(eciesjs@0.4.10)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@metamask/sdk-install-modal-web': 0.30.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) + '@metamask/sdk-communication-layer': 0.30.0(cross-fetch@4.0.0)(eciesjs@0.4.10)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.0(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@metamask/sdk-install-modal-web': 0.30.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1) bowser: 2.11.0 cross-fetch: 4.0.0 debug: 4.3.7(supports-color@8.1.1) @@ -15625,9 +16192,9 @@ snapshots: obj-multiplex: 1.0.0 pump: 3.0.2 qrcode-terminal-nooctal: 0.12.1 - react-native-webview: 11.26.1(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) + react-native-webview: 11.26.1(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1) readable-stream: 3.6.2 - socket.io-client: 4.8.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + socket.io-client: 4.8.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) util: 0.12.5 uuid: 8.3.2 optionalDependencies: @@ -15639,13 +16206,14 @@ snapshots: - react-native - supports-color - utf-8-validate + optional: true - '@metamask/sdk@0.30.1(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(utf-8-validate@6.0.4)': + '@metamask/sdk@0.30.1(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.0(@babel/core@7.26.0)(@babel/preset-env@7.25.9(@babel/core@7.26.0))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)': dependencies: '@metamask/onboarding': 1.0.1 '@metamask/providers': 16.1.0 - '@metamask/sdk-communication-layer': 0.30.0(cross-fetch@4.0.0)(eciesjs@0.4.10)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.0(bufferutil@4.0.8)(utf-8-validate@6.0.4)) - '@metamask/sdk-install-modal-web': 0.30.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1) + '@metamask/sdk-communication-layer': 0.30.0(cross-fetch@4.0.0)(eciesjs@0.4.10)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + '@metamask/sdk-install-modal-web': 0.30.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.0(@babel/core@7.26.0)(@babel/preset-env@7.25.9(@babel/core@7.26.0))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) bowser: 2.11.0 cross-fetch: 4.0.0 debug: 4.3.7(supports-color@8.1.1) @@ -15657,9 +16225,9 @@ snapshots: obj-multiplex: 1.0.0 pump: 3.0.2 qrcode-terminal-nooctal: 0.12.1 - react-native-webview: 11.26.1(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1) + react-native-webview: 11.26.1(react-native@0.76.0(@babel/core@7.26.0)(@babel/preset-env@7.25.9(@babel/core@7.26.0))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) readable-stream: 3.6.2 - socket.io-client: 4.8.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) + socket.io-client: 4.8.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) util: 0.12.5 uuid: 8.3.2 optionalDependencies: @@ -15671,7 +16239,6 @@ snapshots: - react-native - supports-color - utf-8-validate - optional: true '@metamask/superstruct@3.1.0': {} @@ -15966,11 +16533,11 @@ snapshots: dependencies: asn1js: 3.0.5 pvtsutils: 1.3.5 - tslib: 2.8.0 + tslib: 2.8.1 '@peculiar/json-schema@1.1.12': dependencies: - tslib: 2.8.0 + tslib: 2.8.1 '@peculiar/webcrypto@1.5.0': dependencies: @@ -16779,6 +17346,14 @@ snapshots: transitivePeerDependencies: - '@babel/preset-env' - supports-color + optional: true + + '@react-native/babel-plugin-codegen@0.76.0(@babel/preset-env@7.25.9(@babel/core@7.26.0))': + dependencies: + '@react-native/codegen': 0.76.0(@babel/preset-env@7.25.9(@babel/core@7.26.0)) + transitivePeerDependencies: + - '@babel/preset-env' + - supports-color '@react-native/babel-preset@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))': dependencies: @@ -16830,6 +17405,58 @@ snapshots: transitivePeerDependencies: - '@babel/preset-env' - supports-color + optional: true + + '@react-native/babel-preset@0.76.0(@babel/core@7.26.0)(@babel/preset-env@7.25.9(@babel/core@7.26.0))': + dependencies: + '@babel/core': 7.26.0 + '@babel/plugin-proposal-export-default-from': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-export-default-from': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-flow-strip-types': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-runtime': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-typescript': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.0) + '@babel/template': 7.25.9 + '@react-native/babel-plugin-codegen': 0.76.0(@babel/preset-env@7.25.9(@babel/core@7.26.0)) + babel-plugin-syntax-hermes-parser: 0.23.1 + babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.26.0) + react-refresh: 0.14.2 + transitivePeerDependencies: + - '@babel/preset-env' + - supports-color '@react-native/codegen@0.76.0(@babel/preset-env@7.25.9(@babel/core@7.25.9))': dependencies: @@ -16844,21 +17471,36 @@ snapshots: yargs: 17.7.2 transitivePeerDependencies: - supports-color + optional: true - '@react-native/community-cli-plugin@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + '@react-native/codegen@0.76.0(@babel/preset-env@7.25.9(@babel/core@7.26.0))': dependencies: - '@react-native/dev-middleware': 0.76.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@babel/parser': 7.26.2 + '@babel/preset-env': 7.25.9(@babel/core@7.26.0) + glob: 7.2.3 + hermes-parser: 0.23.1 + invariant: 2.2.4 + jscodeshift: 0.14.0(@babel/preset-env@7.25.9(@babel/core@7.26.0)) + mkdirp: 0.5.6 + nullthrows: 1.1.1 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + + '@react-native/community-cli-plugin@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(bufferutil@4.0.8)(utf-8-validate@6.0.4)': + dependencies: + '@react-native/dev-middleware': 0.76.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) '@react-native/metro-babel-transformer': 0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9)) chalk: 4.1.2 execa: 5.1.1 invariant: 2.2.4 - metro: 0.81.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + metro: 0.81.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) metro-config: 0.81.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) metro-core: 0.81.0 node-fetch: 2.7.0 readline: 1.3.0 optionalDependencies: - '@react-native-community/cli-server-api': 15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@react-native-community/cli-server-api': 15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) transitivePeerDependencies: - '@babel/core' - '@babel/preset-env' @@ -16866,21 +17508,22 @@ snapshots: - encoding - supports-color - utf-8-validate + optional: true - '@react-native/community-cli-plugin@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(bufferutil@4.0.8)(utf-8-validate@6.0.4)': + '@react-native/community-cli-plugin@0.76.0(@babel/core@7.26.0)(@babel/preset-env@7.25.9(@babel/core@7.26.0))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: - '@react-native/dev-middleware': 0.76.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) - '@react-native/metro-babel-transformer': 0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9)) + '@react-native/dev-middleware': 0.76.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@react-native/metro-babel-transformer': 0.76.0(@babel/core@7.26.0)(@babel/preset-env@7.25.9(@babel/core@7.26.0)) chalk: 4.1.2 execa: 5.1.1 invariant: 2.2.4 - metro: 0.81.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) + metro: 0.81.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) metro-config: 0.81.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) metro-core: 0.81.0 node-fetch: 2.7.0 readline: 1.3.0 optionalDependencies: - '@react-native-community/cli-server-api': 15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) + '@react-native-community/cli-server-api': 15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - '@babel/core' - '@babel/preset-env' @@ -16888,7 +17531,6 @@ snapshots: - encoding - supports-color - utf-8-validate - optional: true '@react-native/debugger-frontend@0.76.0': {} @@ -16942,27 +17584,38 @@ snapshots: transitivePeerDependencies: - '@babel/preset-env' - supports-color + optional: true + + '@react-native/metro-babel-transformer@0.76.0(@babel/core@7.26.0)(@babel/preset-env@7.25.9(@babel/core@7.26.0))': + dependencies: + '@babel/core': 7.26.0 + '@react-native/babel-preset': 0.76.0(@babel/core@7.26.0)(@babel/preset-env@7.25.9(@babel/core@7.26.0)) + hermes-parser: 0.23.1 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@babel/preset-env' + - supports-color '@react-native/normalize-colors@0.76.0': {} - '@react-native/virtualized-lists@0.76.0(@types/react@18.3.12)(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)': + '@react-native/virtualized-lists@0.76.0(@types/react@18.3.12)(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 react: 18.3.1 - react-native: 0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) + react-native: 0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@6.0.4) optionalDependencies: '@types/react': 18.3.12 + optional: true - '@react-native/virtualized-lists@0.76.0(@types/react@18.3.12)(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)': + '@react-native/virtualized-lists@0.76.0(@types/react@18.3.12)(react-native@0.76.0(@babel/core@7.26.0)(@babel/preset-env@7.25.9(@babel/core@7.26.0))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 react: 18.3.1 - react-native: 0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@6.0.4) + react-native: 0.76.0(@babel/core@7.26.0)(@babel/preset-env@7.25.9(@babel/core@7.26.0))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) optionalDependencies: '@types/react': 18.3.12 - optional: true '@react-rxjs/core@0.10.7(react@18.3.1)(rxjs@7.8.1)': dependencies: @@ -17430,7 +18083,7 @@ snapshots: '@sentry/bundler-plugin-core': 2.10.2 unplugin: 1.0.1 uuid: 9.0.1 - webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4) transitivePeerDependencies: - encoding - supports-color @@ -18028,7 +18681,7 @@ snapshots: '@types/bn.js@5.1.6': dependencies: - '@types/node': 22.9.1 + '@types/node': 22.10.0 '@types/change-case@2.3.1': dependencies: @@ -18209,11 +18862,11 @@ snapshots: '@types/source-list-map': 0.1.2 source-map: 0.7.4 - '@types/webpack@5.28.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4)': + '@types/webpack@5.28.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4)': dependencies: '@types/node': 22.9.1 tapable: 2.2.1 - webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4) transitivePeerDependencies: - '@swc/core' - esbuild @@ -18440,10 +19093,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@wagmi/connectors@5.3.3(@types/react@18.3.12)(@wagmi/core@2.14.1(@tanstack/query-core@5.59.16)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.34(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.34(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10))': + '@wagmi/connectors@5.3.3(@types/react@18.3.12)(@wagmi/core@2.14.1(@tanstack/query-core@5.59.16)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.34(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.0(@babel/core@7.26.0)(@babel/preset-env@7.25.9(@babel/core@7.26.0))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.34(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10))': dependencies: '@coinbase/wallet-sdk': 4.1.0 - '@metamask/sdk': 0.30.1(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) + '@metamask/sdk': 0.30.1(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.0(@babel/core@7.26.0)(@babel/preset-env@7.25.9(@babel/core@7.26.0))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) '@safe-global/safe-apps-provider': 0.18.3(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) '@wagmi/core': 2.14.1(@tanstack/query-core@5.59.16)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.34(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) @@ -19071,17 +19724,17 @@ snapshots: '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.95.0)': dependencies: - webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2(bufferutil@4.0.8)(utf-8-validate@6.0.4))(webpack@5.95.0) '@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.95.0)': dependencies: - webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2(bufferutil@4.0.8)(utf-8-validate@6.0.4))(webpack@5.95.0) '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack@5.95.0)': dependencies: - webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2(bufferutil@4.0.8)(utf-8-validate@6.0.4))(webpack@5.95.0) '@xobotyi/scrollbar-width@1.9.5': {} @@ -19499,7 +20152,6 @@ snapshots: slash: 3.0.0 transitivePeerDependencies: - supports-color - optional: true babel-plugin-istanbul@6.1.1: dependencies: @@ -19536,6 +20188,15 @@ snapshots: transitivePeerDependencies: - supports-color + babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.26.0): + dependencies: + '@babel/compat-data': 7.25.9 + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.26.0) + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.25.9): dependencies: '@babel/compat-data': 7.26.2 @@ -19544,6 +20205,16 @@ snapshots: semver: 7.6.3 transitivePeerDependencies: - supports-color + optional: true + + babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.26.0): + dependencies: + '@babel/compat-data': 7.26.2 + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) + semver: 7.6.3 + transitivePeerDependencies: + - supports-color babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.9): dependencies: @@ -19553,6 +20224,14 @@ snapshots: transitivePeerDependencies: - supports-color + babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.26.0) + core-js-compat: 3.38.1 + transitivePeerDependencies: + - supports-color + babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.25.9): dependencies: '@babel/core': 7.25.9 @@ -19560,12 +20239,27 @@ snapshots: transitivePeerDependencies: - supports-color + babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.25.9): dependencies: '@babel/core': 7.25.9 '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.25.9) transitivePeerDependencies: - supports-color + optional: true + + babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color babel-plugin-syntax-hermes-parser@0.23.1: dependencies: @@ -19576,6 +20270,13 @@ snapshots: '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.25.9) transitivePeerDependencies: - '@babel/core' + optional: true + + babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.26.0): + dependencies: + '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.26.0) + transitivePeerDependencies: + - '@babel/core' babel-preset-current-node-syntax@1.1.0(@babel/core@7.25.9): dependencies: @@ -19614,7 +20315,6 @@ snapshots: '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0) '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.0) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.0) - optional: true babel-preset-jest@29.6.3(@babel/core@7.25.9): dependencies: @@ -19627,7 +20327,6 @@ snapshots: '@babel/core': 7.26.0 babel-plugin-jest-hoist: 29.6.3 babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.0) - optional: true balanced-match@1.0.2: {} @@ -20011,7 +20710,7 @@ snapshots: circular-dependency-plugin@5.2.2(webpack@5.95.0): dependencies: - webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4) citty@0.1.6: dependencies: @@ -20028,7 +20727,7 @@ snapshots: clean-webpack-plugin@4.0.0(webpack@5.95.0): dependencies: del: 4.1.1 - webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4) cli-boxes@2.2.1: {} @@ -20238,7 +20937,7 @@ snapshots: normalize-path: 3.0.0 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4) core-js-compat@3.38.1: dependencies: @@ -20425,7 +21124,7 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.6.3 optionalDependencies: - webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4) css-select@4.3.0: dependencies: @@ -20767,7 +21466,7 @@ snapshots: dotenv-webpack@8.1.0(webpack@5.95.0): dependencies: dotenv-defaults: 2.0.2 - webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4) dotenv@16.4.5: {} @@ -21044,7 +21743,7 @@ snapshots: esbuild: 0.21.5 get-tsconfig: 4.7.6 loader-utils: 2.0.4 - webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4) webpack-sources: 1.4.3 esbuild@0.21.5: @@ -21292,7 +21991,7 @@ snapshots: micromatch: 4.0.8 normalize-path: 3.0.0 schema-utils: 4.2.0 - webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4) eslint@8.57.1: dependencies: @@ -21825,7 +22524,7 @@ snapshots: semver: 7.6.3 tapable: 2.2.1 typescript: 5.6.3 - webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4) form-data@2.3.3: dependencies: @@ -22333,7 +23032,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: - webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4) htmlparser2@6.1.0: dependencies: @@ -23384,6 +24083,32 @@ snapshots: write-file-atomic: 2.4.3 transitivePeerDependencies: - supports-color + optional: true + + jscodeshift@0.14.0(@babel/preset-env@7.25.9(@babel/core@7.26.0)): + dependencies: + '@babel/core': 7.26.0 + '@babel/parser': 7.26.2 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.26.0) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.26.0) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.26.0) + '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.26.0) + '@babel/preset-env': 7.25.9(@babel/core@7.26.0) + '@babel/preset-flow': 7.25.9(@babel/core@7.26.0) + '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) + '@babel/register': 7.25.9(@babel/core@7.26.0) + babel-core: 7.0.0-bridge.0(@babel/core@7.26.0) + chalk: 4.1.2 + flow-parser: 0.255.0 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + neo-async: 2.6.2 + node-dir: 0.1.17 + recast: 0.21.5 + temp: 0.8.4 + write-file-atomic: 2.4.3 + transitivePeerDependencies: + - supports-color jsdom@20.0.3(bufferutil@4.0.8)(utf-8-validate@6.0.4): dependencies: @@ -24855,7 +25580,7 @@ snapshots: postcss: 8.4.47 semver: 7.6.3 optionalDependencies: - webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4) transitivePeerDependencies: - typescript @@ -25022,7 +25747,7 @@ snapshots: pvtsutils@1.3.5: dependencies: - tslib: 2.8.0 + tslib: 2.8.1 pvutils@1.1.3: {} @@ -25106,7 +25831,7 @@ snapshots: dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4) react-app-polyfill@3.0.0: dependencies: @@ -25187,31 +25912,31 @@ snapshots: react-is@18.3.1: {} - react-native-webview@11.26.1(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1): + react-native-webview@11.26.1(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1): dependencies: escape-string-regexp: 2.0.0 invariant: 2.2.4 react: 18.3.1 - react-native: 0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) + react-native: 0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@6.0.4) + optional: true - react-native-webview@11.26.1(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1): + react-native-webview@11.26.1(react-native@0.76.0(@babel/core@7.26.0)(@babel/preset-env@7.25.9(@babel/core@7.26.0))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: escape-string-regexp: 2.0.0 invariant: 2.2.4 react: 18.3.1 - react-native: 0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@6.0.4) - optional: true + react-native: 0.76.0(@babel/core@7.26.0)(@babel/preset-env@7.25.9(@babel/core@7.26.0))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) - react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10): + react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@6.0.4): dependencies: '@jest/create-cache-key-function': 29.7.0 '@react-native/assets-registry': 0.76.0 '@react-native/codegen': 0.76.0(@babel/preset-env@7.25.9(@babel/core@7.25.9)) - '@react-native/community-cli-plugin': 0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@react-native/community-cli-plugin': 0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(bufferutil@4.0.8)(utf-8-validate@6.0.4) '@react-native/gradle-plugin': 0.76.0 '@react-native/js-polyfills': 0.76.0 '@react-native/normalize-colors': 0.76.0 - '@react-native/virtualized-lists': 0.76.0(@types/react@18.3.12)(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) + '@react-native/virtualized-lists': 0.76.0(@types/react@18.3.12)(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 @@ -25234,14 +25959,14 @@ snapshots: pretty-format: 29.7.0 promise: 8.3.0 react: 18.3.1 - react-devtools-core: 5.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + react-devtools-core: 5.3.2(bufferutil@4.0.8)(utf-8-validate@6.0.4) react-refresh: 0.14.2 regenerator-runtime: 0.13.11 scheduler: 0.24.0-canary-efb381bbf-20230505 semver: 7.6.3 stacktrace-parser: 0.1.10 whatwg-fetch: 3.6.20 - ws: 6.2.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ws: 6.2.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) yargs: 17.7.2 optionalDependencies: '@types/react': 18.3.12 @@ -25253,21 +25978,22 @@ snapshots: - encoding - supports-color - utf-8-validate + optional: true - react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@6.0.4): + react-native@0.76.0(@babel/core@7.26.0)(@babel/preset-env@7.25.9(@babel/core@7.26.0))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10): dependencies: '@jest/create-cache-key-function': 29.7.0 '@react-native/assets-registry': 0.76.0 - '@react-native/codegen': 0.76.0(@babel/preset-env@7.25.9(@babel/core@7.25.9)) - '@react-native/community-cli-plugin': 0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(bufferutil@4.0.8)(utf-8-validate@6.0.4) + '@react-native/codegen': 0.76.0(@babel/preset-env@7.25.9(@babel/core@7.26.0)) + '@react-native/community-cli-plugin': 0.76.0(@babel/core@7.26.0)(@babel/preset-env@7.25.9(@babel/core@7.26.0))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10) '@react-native/gradle-plugin': 0.76.0 '@react-native/js-polyfills': 0.76.0 '@react-native/normalize-colors': 0.76.0 - '@react-native/virtualized-lists': 0.76.0(@types/react@18.3.12)(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1) + '@react-native/virtualized-lists': 0.76.0(@types/react@18.3.12)(react-native@0.76.0(@babel/core@7.26.0)(@babel/preset-env@7.25.9(@babel/core@7.26.0))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 - babel-jest: 29.7.0(@babel/core@7.25.9) + babel-jest: 29.7.0(@babel/core@7.26.0) babel-plugin-syntax-hermes-parser: 0.23.1 base64-js: 1.5.1 chalk: 4.1.2 @@ -25286,14 +26012,14 @@ snapshots: pretty-format: 29.7.0 promise: 8.3.0 react: 18.3.1 - react-devtools-core: 5.3.2(bufferutil@4.0.8)(utf-8-validate@6.0.4) + react-devtools-core: 5.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) react-refresh: 0.14.2 regenerator-runtime: 0.13.11 scheduler: 0.24.0-canary-efb381bbf-20230505 semver: 7.6.3 stacktrace-parser: 0.1.10 whatwg-fetch: 3.6.20 - ws: 6.2.3(bufferutil@4.0.8)(utf-8-validate@6.0.4) + ws: 6.2.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) yargs: 17.7.2 optionalDependencies: '@types/react': 18.3.12 @@ -25305,7 +26031,6 @@ snapshots: - encoding - supports-color - utf-8-validate - optional: true react-property@2.0.2: {} @@ -25491,11 +26216,11 @@ snapshots: relateurl@0.2.7: {} - remove-files-webpack-plugin@1.5.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4)(webpack@5.95.0): + remove-files-webpack-plugin@1.5.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4)(webpack@5.95.0): dependencies: - '@types/webpack': 5.28.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4) + '@types/webpack': 5.28.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4) trash: 7.2.0 - webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4) transitivePeerDependencies: - '@swc/core' - esbuild @@ -26011,7 +26736,7 @@ snapshots: speed-measure-webpack-plugin@1.5.0(webpack@5.95.0): dependencies: chalk: 4.1.2 - webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4) split-on-first@1.1.0: {} @@ -26205,7 +26930,7 @@ snapshots: style-loader@4.0.0(webpack@5.95.0): dependencies: - webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4) style-to-js@1.1.16: dependencies: @@ -26366,26 +27091,25 @@ snapshots: term-size@2.2.1: {} - terser-webpack-plugin@5.3.10(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack@5.95.0): + terser-webpack-plugin@5.3.10(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack@5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.36.0 - webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13)) optionalDependencies: '@swc/core': 1.7.39(@swc/helpers@0.5.13) - esbuild: 0.24.0 - terser-webpack-plugin@5.3.10(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack@5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))): + terser-webpack-plugin@5.3.10(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack@5.95.0): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.36.0 - webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13)) + webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4) optionalDependencies: '@swc/core': 1.7.39(@swc/helpers@0.5.13) @@ -26511,7 +27235,7 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-jest@29.2.5(@babel/core@7.25.9)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.9))(esbuild@0.24.0)(jest@29.7.0(@types/node@22.9.1)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.7.39(@swc/helpers@0.5.13))(@types/node@22.9.1)(typescript@5.6.3)))(typescript@5.6.3): + ts-jest@29.2.5(@babel/core@7.25.9)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.9))(jest@29.7.0(@types/node@22.9.1)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.7.39(@swc/helpers@0.5.13))(@types/node@22.9.1)(typescript@5.6.3)))(typescript@5.6.3): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 @@ -26529,7 +27253,6 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.25.9) - esbuild: 0.24.0 ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@22.10.0)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.7.39(@swc/helpers@0.5.13))(@types/node@22.10.0)(typescript@5.6.3)))(typescript@5.6.3): dependencies: @@ -26568,7 +27291,7 @@ snapshots: semver: 7.6.3 source-map: 0.7.4 typescript: 5.6.3 - webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4) ts-node@10.9.2(@swc/core@1.7.39(@swc/helpers@0.5.13))(@types/node@22.10.0)(typescript@5.6.3): dependencies: @@ -27088,14 +27811,14 @@ snapshots: dependencies: xml-name-validator: 4.0.0 - wagmi@2.12.25(@tanstack/query-core@5.59.16)(@tanstack/react-query@5.59.16(react@18.3.1))(@types/react@18.3.12)(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.34(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)): + wagmi@2.12.25(@tanstack/query-core@5.59.16)(@tanstack/react-query@5.59.16(react@18.3.1))(@types/react@18.3.12)(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(typescript@5.6.3)(utf-8-validate@6.0.4)(viem@2.21.34(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@6.0.4)): dependencies: '@tanstack/react-query': 5.59.16(react@18.3.1) - '@wagmi/connectors': 5.3.3(@types/react@18.3.12)(@wagmi/core@2.14.1(@tanstack/query-core@5.59.16)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.34(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.34(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) - '@wagmi/core': 2.14.1(@tanstack/query-core@5.59.16)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.34(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + '@wagmi/connectors': 5.3.3(@types/react@18.3.12)(@wagmi/core@2.14.1(@tanstack/query-core@5.59.16)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.34(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@6.0.4)))(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(typescript@5.6.3)(utf-8-validate@6.0.4)(viem@2.21.34(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@6.0.4)) + '@wagmi/core': 2.14.1(@tanstack/query-core@5.59.16)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.34(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@6.0.4)) react: 18.3.1 use-sync-external-store: 1.2.0(react@18.3.1) - viem: 2.21.34(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + viem: 2.21.34(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@6.0.4) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: @@ -27122,15 +27845,16 @@ snapshots: - supports-color - utf-8-validate - zod + optional: true - wagmi@2.12.25(@tanstack/query-core@5.59.16)(@tanstack/react-query@5.59.16(react@18.3.1))(@types/react@18.3.12)(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(typescript@5.6.3)(utf-8-validate@6.0.4)(viem@2.21.34(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@6.0.4)): + wagmi@2.12.25(@tanstack/query-core@5.59.16)(@tanstack/react-query@5.59.16(react@18.3.1))(@types/react@18.3.12)(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.0(@babel/core@7.26.0)(@babel/preset-env@7.25.9(@babel/core@7.26.0))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.34(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)): dependencies: '@tanstack/react-query': 5.59.16(react@18.3.1) - '@wagmi/connectors': 5.3.3(@types/react@18.3.12)(@wagmi/core@2.14.1(@tanstack/query-core@5.59.16)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.34(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@6.0.4)))(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.0(@babel/core@7.25.9)(@babel/preset-env@7.25.9(@babel/core@7.25.9))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(typescript@5.6.3)(utf-8-validate@6.0.4)(viem@2.21.34(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@6.0.4)) - '@wagmi/core': 2.14.1(@tanstack/query-core@5.59.16)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.34(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@6.0.4)) + '@wagmi/connectors': 5.3.3(@types/react@18.3.12)(@wagmi/core@2.14.1(@tanstack/query-core@5.59.16)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.34(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.0(@babel/core@7.26.0)(@babel/preset-env@7.25.9(@babel/core@7.26.0))(@react-native-community/cli-server-api@15.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.34(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + '@wagmi/core': 2.14.1(@tanstack/query-core@5.59.16)(@types/react@18.3.12)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.34(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) react: 18.3.1 use-sync-external-store: 1.2.0(react@18.3.1) - viem: 2.21.34(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@6.0.4) + viem: 2.21.34(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: @@ -27157,7 +27881,6 @@ snapshots: - supports-color - utf-8-validate - zod - optional: true walk-sync@2.2.0: dependencies: @@ -27193,7 +27916,7 @@ snapshots: '@peculiar/json-schema': 1.1.12 asn1js: 3.0.5 pvtsutils: 1.3.5 - tslib: 2.8.0 + tslib: 2.8.1 webextension-polyfill@0.10.0: {} @@ -27239,7 +27962,7 @@ snapshots: import-local: 3.1.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4) webpack-merge: 5.10.0 optionalDependencies: webpack-bundle-analyzer: 4.10.2(bufferutil@4.0.8)(utf-8-validate@6.0.4) @@ -27247,7 +27970,7 @@ snapshots: webpack-manifest-plugin@5.0.0(webpack@5.95.0): dependencies: tapable: 2.2.1 - webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4) webpack-sources: 2.3.1 webpack-merge@5.10.0: @@ -27306,7 +28029,7 @@ snapshots: - esbuild - uglify-js - webpack@5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack-cli@5.1.4): + webpack@5.95.0(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack-cli@5.1.4): dependencies: '@types/estree': 1.0.6 '@webassemblyjs/ast': 1.12.1 @@ -27328,7 +28051,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.7.39(@swc/helpers@0.5.13))(esbuild@0.24.0)(webpack@5.95.0) + terser-webpack-plugin: 5.3.10(@swc/core@1.7.39(@swc/helpers@0.5.13))(webpack@5.95.0) watchpack: 2.4.2 webpack-sources: 3.2.3 optionalDependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index f03e25dd19..97b4fdf0e8 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,3 +3,4 @@ packages: - "apps/*" - "config/*" - "packages/*" + - "lib/*"