diff --git a/apps/web/package.json b/apps/web/package.json index 3d9a2554eb..259a4a9aa9 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -33,6 +33,7 @@ "@emotion/react": "^11.13.3", "@emotion/styled": "^11.13.0", "@reduxjs/toolkit": "^2.2.7", + "@reown/walletkit": "^1.0.1", "@tanstack/react-query": "^5.56.2", "@taquito/beacon-wallet": "^20.0.1", "@taquito/ledger-signer": "^20.0.1", @@ -49,6 +50,9 @@ "@umami/state": "workspace:^", "@umami/tezos": "workspace:^", "@umami/tzkt": "workspace:^", + "@walletconnect/jsonrpc-utils": "^1.0.8", + "@walletconnect/types": "^2.16.2", + "@walletconnect/utils": "^2.16.2", "bignumber.js": "^9.1.2", "bip39": "^3.1.0", "cross-env": "^7.0.3", diff --git a/apps/web/src/components/App/App.tsx b/apps/web/src/components/App/App.tsx index bb63400b47..160c292d2a 100644 --- a/apps/web/src/components/App/App.tsx +++ b/apps/web/src/components/App/App.tsx @@ -3,13 +3,16 @@ import { useCurrentAccount } from "@umami/state"; import { Layout } from "../../Layout"; import { Welcome } from "../../views/Welcome"; import { BeaconProvider } from "../beacon"; +import { WalletConnectProvider } from "../WalletConnect/WalletConnectProvider"; export const App = () => { const currentAccount = useCurrentAccount(); return currentAccount ? ( - + + + ) : ( diff --git a/apps/web/src/components/Menu/AppsMenu/AppsMenu.tsx b/apps/web/src/components/Menu/AppsMenu/AppsMenu.tsx index 9cf8113f9d..0cee30c636 100644 --- a/apps/web/src/components/Menu/AppsMenu/AppsMenu.tsx +++ b/apps/web/src/components/Menu/AppsMenu/AppsMenu.tsx @@ -2,6 +2,7 @@ import { Button, Divider, Text } from "@chakra-ui/react"; import { useAddPeer } from "@umami/state"; import { BeaconPeers } from "../../beacon"; +import { onConnect } from "../../WalletConnect"; import { DrawerContentWrapper } from "../DrawerContentWrapper"; export const AppsMenu = () => { @@ -10,13 +11,17 @@ export const AppsMenu = () => { return ( - Connect with Pairing Request + Connect with Pairing Request for Beacon or WalletConnect + + + + ); +}; diff --git a/apps/web/src/components/WalletConnect/ProjectInfoCard.tsx b/apps/web/src/components/WalletConnect/ProjectInfoCard.tsx new file mode 100644 index 0000000000..378336cd7b --- /dev/null +++ b/apps/web/src/components/WalletConnect/ProjectInfoCard.tsx @@ -0,0 +1,48 @@ +import { Avatar, Box, Card, Flex, Heading, Icon, Link, Text } from "@chakra-ui/react"; +import { type SignClientTypes } from "@walletconnect/types"; + +import { PencilIcon } from "../../assets/icons"; + +interface IProps { + metadata: SignClientTypes.Metadata; + intention?: string; +} + +/** + * dApp project info card. Contains verification info to help user decide if the dApp is safe to connect. + */ +export const ProjectInfoCard = ({ metadata, intention }: IProps) => { + const { icons, name, url } = metadata; + + return ( + + + + + + + + {name} + {" "} +
+ wants to {intention ?? "connect"} +
+
+ + + {url} + + + + + Cannot Verify: to be implemented + +
+ ); +}; diff --git a/apps/web/src/components/WalletConnect/RequestModal.tsx b/apps/web/src/components/WalletConnect/RequestModal.tsx new file mode 100644 index 0000000000..2db8c44d1a --- /dev/null +++ b/apps/web/src/components/WalletConnect/RequestModal.tsx @@ -0,0 +1,55 @@ +import { Divider } from "@chakra-ui/react"; +import { type CoreTypes } from "@walletconnect/types"; +import { type ReactNode } from "react"; + +import { type LoaderProps, ModalFooter } from "./ModalFooter"; +import { ProjectInfoCard } from "./ProjectInfoCard"; +import { RequestModalContainer } from "./RequestModalContainer"; +import { VerifyInfobox } from "./VerifyInfobox"; + +interface IProps { + children: ReactNode; + metadata: CoreTypes.Metadata; + onApprove: () => void; + onReject: () => void; + intention?: string; + infoBoxCondition?: boolean; + infoBoxText?: string; + approveLoader?: LoaderProps; + rejectLoader?: LoaderProps; + disableApprove?: boolean; + disableReject?: boolean; +} +export const RequestModal = ({ + children, + metadata, + onApprove, + onReject, + approveLoader, + rejectLoader, + intention, + infoBoxCondition, + infoBoxText, + disableApprove, + disableReject, +}: IProps) => ( + <> + + + + {children} + + + + + +); diff --git a/apps/web/src/components/WalletConnect/RequestModalContainer.tsx b/apps/web/src/components/WalletConnect/RequestModalContainer.tsx new file mode 100644 index 0000000000..6434e51511 --- /dev/null +++ b/apps/web/src/components/WalletConnect/RequestModalContainer.tsx @@ -0,0 +1,20 @@ +import { Card, ModalBody, ModalHeader } from "@chakra-ui/react"; +import { Fragment, type ReactNode } from "react"; + +interface IProps { + title?: string; + children: ReactNode | ReactNode[]; +} + +export const RequestModalContainer = ({ children, title }: IProps) => ( + + {title ? ( + + {title} + + ) : null} + + {children} + + +); diff --git a/apps/web/src/components/WalletConnect/SessionProposalModal.tsx b/apps/web/src/components/WalletConnect/SessionProposalModal.tsx new file mode 100644 index 0000000000..1886ca7c6a --- /dev/null +++ b/apps/web/src/components/WalletConnect/SessionProposalModal.tsx @@ -0,0 +1,193 @@ +import { + Box, + Card, + FormControl, + FormErrorMessage, + HStack, + Icon, + ModalContent, + Text, + VStack, + useToast, +} from "@chakra-ui/react"; +import { type WalletKitTypes } from "@reown/walletkit"; +import { useDynamicModalContext } from "@umami/components"; +import { + useAsyncActionHandler, + useAvailableNetworks, + useGetImplicitAccount, + walletKit, +} from "@umami/state"; +import { type Network } from "@umami/tezos"; +import { type ProposalTypes } from "@walletconnect/types"; +import { buildApprovedNamespaces, getSdkError } from "@walletconnect/utils"; +import { useState } from "react"; +import { FormProvider, useForm } from "react-hook-form"; + +import { RequestModal } from "./RequestModal"; +import { CheckmarkIcon, CloseIcon } from "../../assets/icons"; +import { OwnedImplicitAccountsAutocomplete } from "../AddressAutocomplete"; + +export const SessionProposalModal = ({ + proposal, +}: { + proposal: WalletKitTypes.SessionProposal; +}) => { + const getAccount = useGetImplicitAccount(); + const availableNetworks: Network[] = useAvailableNetworks(); + const toast = useToast(); + + const { onClose } = useDynamicModalContext(); + const { handleAsyncAction } = useAsyncActionHandler(); + + const [isLoadingApprove, setIsLoadingApprove] = useState(false); + const [isLoadingReject, setIsLoadingReject] = useState(false); + const form = useForm<{ address: string }>({ + mode: "onBlur", + }); + const { + getValues, + formState: { errors, isValid }, + } = form; + + const getChain = (requiredNamespaces: ProposalTypes.RequiredNamespaces) => { + const required = Object.entries(requiredNamespaces) + .map(([key, values]) => (key.includes(":") ? key : values.chains)) + .flat(); + + if (required.length !== 1 || required[0] === undefined) { + console.error("Expected only one required chain", required); + } + console.debug("availableNetworks", availableNetworks); + + // We take the first required chain as Umami supports connection for only one chain per request + let chain = required[0]; + if (chain && !availableNetworks.map(network => network.name).includes(chain.split(":")[1])) { + console.error("The required chain not supported", chain); + chain = undefined; + } + return chain; + }; + + const chain = getChain(proposal.params.requiredNamespaces); + + const onApprove = () => + handleAsyncAction(async () => { + const account = getAccount(getValues().address); + + try { + if (!chain) { + throw new Error("No supported chain found"); + } + const namespaces = buildApprovedNamespaces({ + proposal: proposal.params, + supportedNamespaces: { + tezos: { + chains: [chain], + methods: ["tezos_getAccounts", "tezos_sign", "tezos_send"], + events: [], + accounts: [`${chain}:${account.address.pkh}`], + }, + }, + }); + console.debug("approvedNamespaces", namespaces); + + setIsLoadingApprove(true); + await walletKit.approveSession({ + id: proposal.id, + namespaces, + sessionProperties: {}, + }); + setIsLoadingApprove(false); + } catch (e) { + toast({ description: (e as Error).message, status: "error" }); + // keeping the modal open to show that the approval failed + return; + } + }).finally(onClose); + + // Handle reject action + // eslint-disable-next-line react-hooks/rules-of-hooks + const onReject = () => + handleAsyncAction(async () => { + try { + setIsLoadingReject(true); + await new Promise(resolve => setTimeout(resolve, 1000)); + await walletKit.rejectSession({ + id: proposal.id, + reason: getSdkError("USER_REJECTED_METHODS"), + }); + onClose(); + } catch (e) { + toast({ description: (e as Error).message, status: "error" }); + return; + } + }).finally(() => { + setIsLoadingReject(false); + onClose(); + }); + + return ( + + + + + Requested permissions + + + + + + View your balance and activity + + + + Send approval requests + + + + Move funds without permission + + + + + {chain ? ( + <> + + + {errors.address && {errors.address.message}} + + + Chain: + + {chain} + + ) : ( + <> + Accounts + None available + + Chain + + None of the required chains is supported + + )} + + + + + ); +}; diff --git a/apps/web/src/components/WalletConnect/VerifyInfobox.tsx b/apps/web/src/components/WalletConnect/VerifyInfobox.tsx new file mode 100644 index 0000000000..b230065713 --- /dev/null +++ b/apps/web/src/components/WalletConnect/VerifyInfobox.tsx @@ -0,0 +1,17 @@ +import { Box, Card, HStack, Icon, VStack } from "@chakra-ui/react"; + +import { AlertCircleIcon } from "../../assets/icons"; + +export const VerifyInfobox = () => ( + + + + + Unknown domain + + + This domain was not verified. To be implemented. + + + +); diff --git a/apps/web/src/components/WalletConnect/WalletConnectProvider.tsx b/apps/web/src/components/WalletConnect/WalletConnectProvider.tsx new file mode 100644 index 0000000000..d377cc0d66 --- /dev/null +++ b/apps/web/src/components/WalletConnect/WalletConnectProvider.tsx @@ -0,0 +1,68 @@ +import { type WalletKitTypes } from "@reown/walletkit"; +import { useDynamicModalContext } from "@umami/components"; +import { createWalletKit, walletKit } from "@umami/state"; +import { formatJsonRpcError } from "@walletconnect/jsonrpc-utils"; +import { getSdkError, parseUri } from "@walletconnect/utils"; +import { type PropsWithChildren, useEffect } from "react"; + +import { SessionProposalModal } from "./SessionProposalModal"; + +export const context = {}; + +export const WalletConnectProvider = ({ children }: PropsWithChildren) => { + const { openWith } = useDynamicModalContext(); + + useEffect(() => { + const initializeWallet = async () => { + try { + await createWalletKit(); + walletKit.on("session_proposal", event => void onSessionProposal(event)); + walletKit.on("session_request", event => void onSessionRequest(event)); + } catch (error) { + console.error("Error initializing Web3Wallet:", error); + } + }; + + void initializeWallet(); + }); + + const onSessionProposal = async (event: WalletKitTypes.SessionProposal) => { + const modal = ; + + try { + await openWith(modal, {}); + } catch (error) { + console.error("Failed to open SessionProposalModal modal:", error); + } + + return () => {}; + }; + + const onSessionRequest = async (event: WalletKitTypes.SessionRequest) => { + const { topic, id } = event; + console.log("TODO: Session request received. Handling to be implemented", id, event); + + const response = rejectTezosRequest(event); + + await walletKit.respondSessionRequest({ topic, response }); + }; + + const rejectTezosRequest = (event: WalletKitTypes.SessionRequest) => { + const { id } = event; + + return formatJsonRpcError(id, getSdkError("USER_REJECTED_METHODS").message); + }; + + return children; +}; + +export const onConnect = async (uri: string) => { + const { topic: pairingTopic } = parseUri(uri); + + try { + console.debug("Pairing WalletConnect", pairingTopic); + await walletKit.pair({ uri }); + } catch (error) { + console.error("Pairing failed", (error as Error).message); + } +}; diff --git a/apps/web/src/components/WalletConnect/index.tsx b/apps/web/src/components/WalletConnect/index.tsx new file mode 100644 index 0000000000..1a17604707 --- /dev/null +++ b/apps/web/src/components/WalletConnect/index.tsx @@ -0,0 +1 @@ +export * from "./WalletConnectProvider"; diff --git a/packages/state/package.json b/packages/state/package.json index 02f5919211..d78817f3e3 100644 --- a/packages/state/package.json +++ b/packages/state/package.json @@ -70,6 +70,7 @@ "@emotion/react": "^11.13.3", "@emotion/styled": "^11.13.0", "@reduxjs/toolkit": "^2.2.7", + "@reown/walletkit": "^1.0.1", "@tanstack/react-query": "^5.56.2", "@taquito/signer": "^20.0.1", "@taquito/utils": "^20.0.1", @@ -80,6 +81,9 @@ "@umami/social-auth": "workspace:^", "@umami/tezos": "workspace:^", "@umami/tzkt": "workspace:^", + "@walletconnect/core": "^2.16.2", + "@walletconnect/jsonrpc-utils": "^1.0.8", + "@walletconnect/utils": "^2.16.2", "axios": "^1.7.7", "bip39": "^3.1.0", "framer-motion": "^11.5.6", diff --git a/packages/state/src/index.ts b/packages/state/src/index.ts index 6cb4c0ce19..f69b02ae33 100644 --- a/packages/state/src/index.ts +++ b/packages/state/src/index.ts @@ -8,3 +8,4 @@ export * from "./hooks"; export * from "./migrations"; export * from "./slices"; export * from "./thunks"; +export * from "./walletConnect"; diff --git a/packages/state/src/walletConnect/WalletKit.ts b/packages/state/src/walletConnect/WalletKit.ts new file mode 100644 index 0000000000..f4f924d7dd --- /dev/null +++ b/packages/state/src/walletConnect/WalletKit.ts @@ -0,0 +1,27 @@ +import { type IWalletKit, WalletKit } from "@reown/walletkit"; +import { Core } from "@walletconnect/core"; + +export let walletKit: IWalletKit; + +export const createWalletKit = async () => { + const core = new Core({ + projectId: "252533b433e70f85a0e5c8b53b97faea", + }); + + walletKit = await WalletKit.init({ + core, + metadata: { + name: "Umami Wallet", + description: "Umami Wallet with WalletConnect", + url: "https://umamiwallet.com", + icons: ["https://umamiwallet.com/assets/favicon-32-45gq0g6M.png"], + }, + }); + + try { + const clientId = await walletKit.engine.signClient.core.crypto.getClientId(); + console.log("WalletConnect ClientID: ", clientId); + } catch (error) { + console.error("Failed to set WalletConnect clientId in localStorage: ", error); + } +}; diff --git a/packages/state/src/walletConnect/index.ts b/packages/state/src/walletConnect/index.ts new file mode 100644 index 0000000000..dd940fb0f0 --- /dev/null +++ b/packages/state/src/walletConnect/index.ts @@ -0,0 +1 @@ +export * from "./WalletKit"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0732a77837..88be76029c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,7 +14,7 @@ importers: devDependencies: jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.11)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.14.11)(typescript@5.5.4)) + version: 29.7.0(@types/node@22.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)) rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -627,6 +627,9 @@ importers: '@reduxjs/toolkit': specifier: ^2.2.7 version: 2.2.7(react-redux@9.1.2(@types/react@18.3.9)(react@18.3.1)(redux@5.0.1))(react@18.3.1) + '@reown/walletkit': + specifier: ^1.0.1 + version: 1.0.1 '@tanstack/react-query': specifier: ^5.56.2 version: 5.56.2(react@18.3.1) @@ -675,6 +678,15 @@ importers: '@umami/tzkt': specifier: workspace:^ version: link:../../packages/tzkt + '@walletconnect/jsonrpc-utils': + specifier: ^1.0.8 + version: 1.0.8 + '@walletconnect/types': + specifier: ^2.16.2 + version: 2.16.2 + '@walletconnect/utils': + specifier: ^2.16.2 + version: 2.16.2 bignumber.js: specifier: ^9.1.2 version: 9.1.2 @@ -876,7 +888,7 @@ importers: version: 2.5.2 jest-transformer-svg: specifier: ^2.0.2 - version: 2.0.2(jest@29.7.0(@types/node@20.14.11)(babel-plugin-macros@3.1.0))(react@18.3.1) + version: 2.0.2(jest@29.7.0(@types/node@20.14.11)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.14.11)(typescript@5.5.4)))(react@18.3.1) madge: specifier: ^8.0.0 version: 8.0.0(typescript@5.5.4) @@ -1006,7 +1018,7 @@ importers: version: 8.57.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.11)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.14.11)(typescript@5.5.4)) + version: 29.7.0(@types/node@22.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)) lodash: specifier: ^4.17.21 version: 4.17.21 @@ -1109,7 +1121,7 @@ importers: version: 8.57.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.11)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.14.11)(typescript@5.5.4)) + version: 29.7.0(@types/node@22.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)) madge: specifier: ^8.0.0 version: 8.0.0(typescript@5.5.4) @@ -1167,7 +1179,7 @@ importers: version: 8.57.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.11)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.14.11)(typescript@5.5.4)) + version: 29.7.0(@types/node@22.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)) madge: specifier: ^8.0.0 version: 8.0.0(typescript@5.5.4) @@ -1282,7 +1294,7 @@ importers: version: 8.57.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.11)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.14.11)(typescript@5.5.4)) + version: 29.7.0(@types/node@22.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)) madge: specifier: ^8.0.0 version: 8.0.0(typescript@5.5.4) @@ -1333,13 +1345,13 @@ importers: version: 2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0) eslint-plugin-jest: specifier: ^28.8.3 - version: 28.8.3(@typescript-eslint/eslint-plugin@8.7.0(@typescript-eslint/parser@8.7.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(jest@29.7.0(babel-plugin-macros@3.1.0))(typescript@5.5.4) + version: 28.8.3(@typescript-eslint/eslint-plugin@8.7.0(@typescript-eslint/parser@8.7.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(jest@29.7.0(@types/node@22.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)))(typescript@5.5.4) eslint-plugin-jest-dom: specifier: ^5.4.0 version: 5.4.0(@testing-library/dom@10.4.0)(eslint@8.57.0) eslint-plugin-playwright: specifier: ^1.6.2 - version: 1.6.2(eslint-plugin-jest@28.8.3(@typescript-eslint/eslint-plugin@8.7.0(@typescript-eslint/parser@8.7.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(jest@29.7.0(babel-plugin-macros@3.1.0))(typescript@5.5.4))(eslint@8.57.0) + version: 1.6.2(eslint-plugin-jest@28.8.3(@typescript-eslint/eslint-plugin@8.7.0(@typescript-eslint/parser@8.7.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(jest@29.7.0(@types/node@22.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)))(typescript@5.5.4))(eslint@8.57.0) eslint-plugin-react: specifier: ^7.36.1 version: 7.36.1(eslint@8.57.0) @@ -1366,7 +1378,7 @@ importers: devDependencies: jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.11)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.14.11)(typescript@5.5.4)) + version: 29.7.0(@types/node@22.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)) rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -1442,7 +1454,7 @@ importers: version: 8.57.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.11)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.14.11)(typescript@5.5.4)) + version: 29.7.0(@types/node@22.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)) madge: specifier: ^8.0.0 version: 8.0.0(typescript@5.5.4) @@ -1500,7 +1512,7 @@ importers: version: 8.57.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.11)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.14.11)(typescript@5.5.4)) + version: 29.7.0(@types/node@22.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)) madge: specifier: ^8.0.0 version: 8.0.0(typescript@5.5.4) @@ -1534,6 +1546,9 @@ importers: '@reduxjs/toolkit': specifier: ^2.2.7 version: 2.2.7(react-redux@9.1.2(@types/react@18.3.9)(react@18.3.1)(redux@5.0.1))(react@18.3.1) + '@reown/walletkit': + specifier: ^1.0.1 + version: 1.0.1 '@tanstack/react-query': specifier: ^5.56.2 version: 5.56.2(react@18.3.1) @@ -1564,6 +1579,15 @@ importers: '@umami/tzkt': specifier: workspace:^ version: link:../tzkt + '@walletconnect/core': + specifier: ^2.16.2 + version: 2.16.2 + '@walletconnect/jsonrpc-utils': + specifier: ^1.0.8 + version: 1.0.8 + '@walletconnect/utils': + specifier: ^2.16.2 + version: 2.16.2 axios: specifier: ^1.7.7 version: 1.7.7(debug@4.3.7) @@ -1651,7 +1675,7 @@ importers: version: 8.57.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.11)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.14.11)(typescript@5.5.4)) + version: 29.7.0(@types/node@22.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)) madge: specifier: ^8.0.0 version: 8.0.0(typescript@5.5.4) @@ -1712,7 +1736,7 @@ importers: version: 8.57.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.11)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.14.11)(typescript@5.5.4)) + version: 29.7.0(@types/node@22.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)) madge: specifier: ^8.0.0 version: 8.0.0(typescript@5.5.4) @@ -1794,7 +1818,7 @@ importers: version: 8.57.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.11)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.14.11)(typescript@5.5.4)) + version: 29.7.0(@types/node@22.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)) madge: specifier: ^8.0.0 version: 8.0.0(typescript@5.5.4) @@ -1875,7 +1899,7 @@ importers: version: 8.57.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.11)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.14.11)(typescript@5.5.4)) + version: 29.7.0(@types/node@22.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)) madge: specifier: ^8.0.0 version: 8.0.0(typescript@5.5.4) @@ -3813,6 +3837,9 @@ packages: resolution: {integrity: sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==} engines: {node: '>=14.0.0'} + '@reown/walletkit@1.0.1': + resolution: {integrity: sha512-h/KP22V05V5tlFPiP++krxROfz0eGYbr925eN9cnmcw4FZmy3uCLOecDQcJiPPvPZLw7rqMPMOzx1PGUK5uJNQ==} + '@rollup/plugin-inject@5.0.5': resolution: {integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==} engines: {node: '>=14.0.0'} @@ -4882,6 +4909,10 @@ packages: '@walletconnect/core@2.11.2': resolution: {integrity: sha512-bB4SiXX8hX3/hyBfVPC5gwZCXCl+OPj+/EDVM71iAO3TDsh78KPbrVAbDnnsbHzZVHlsMohtXX3j5XVsheN3+g==} + '@walletconnect/core@2.16.2': + resolution: {integrity: sha512-Xf1SqLSB8KffNsgUGDE/CguAcKMD+3EKfqfqNhWpimxe1QDZDUw8xq+nnxfx6MAb8fdx9GYe6Lvknx2SAAeAHw==} + engines: {node: '>=18'} + '@walletconnect/environment@1.0.1': resolution: {integrity: sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==} @@ -4891,9 +4922,15 @@ packages: '@walletconnect/heartbeat@1.2.1': resolution: {integrity: sha512-yVzws616xsDLJxuG/28FqtZ5rzrTA4gUjdEMTbWB5Y8V1XHRmqq4efAxCw5ie7WjbXFSUyBHaWlMR+2/CpQC5Q==} + '@walletconnect/heartbeat@1.2.2': + resolution: {integrity: sha512-uASiRmC5MwhuRuf05vq4AT48Pq8RMi876zV8rr8cV969uTOzWdB/k+Lj5yI2PBtB1bGQisGen7MM1GcZlQTBXw==} + '@walletconnect/jsonrpc-provider@1.0.13': resolution: {integrity: sha512-K73EpThqHnSR26gOyNEL+acEex3P7VWZe6KE12ZwKzAt2H4e5gldZHbjsu2QR9cLeJ8AXuO7kEMOIcRv1QEc7g==} + '@walletconnect/jsonrpc-provider@1.0.14': + resolution: {integrity: sha512-rtsNY1XqHvWj0EtITNeuf8PHMvlCLiS3EjQL+WOkxEOA4KPxsohFnBDeyPYiNm4ZvkQdLnece36opYidmtbmow==} + '@walletconnect/jsonrpc-types@1.0.3': resolution: {integrity: sha512-iIQ8hboBl3o5ufmJ8cuduGad0CQm3ZlsHtujv9Eu16xq89q+BG7Nh5VLxxUgmtpnrePgFkTwXirCTkwJH1v+Yw==} @@ -4920,6 +4957,9 @@ packages: '@walletconnect/relay-api@1.0.10': resolution: {integrity: sha512-tqrdd4zU9VBNqUaXXQASaexklv6A54yEyQQEXYOCr+Jz8Ket0dmPBDyg19LVSNUN2cipAghQc45/KVmfFJ0cYw==} + '@walletconnect/relay-api@1.0.11': + resolution: {integrity: sha512-tLPErkze/HmC9aCmdZOhtVmYZq1wKfWTJtygQHoWtgg722Jd4homo54Cs4ak2RUFUZIGO2RsOpIcWipaua5D5Q==} + '@walletconnect/relay-auth@1.0.4': resolution: {integrity: sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ==} @@ -4929,15 +4969,24 @@ packages: '@walletconnect/sign-client@2.11.2': resolution: {integrity: sha512-MfBcuSz2GmMH+P7MrCP46mVE5qhP0ZyWA0FyIH6/WuxQ6G+MgKsGfaITqakpRPsykWOJq8tXMs3XvUPDU413OQ==} + '@walletconnect/sign-client@2.16.2': + resolution: {integrity: sha512-R/hk2P3UN5u3FV22E7h9S/Oy8IbDwaBGH7St/BzOpJCjFmf6CF5S3GZVjrXPBesvRF94CROkqMF89wz5HkZepA==} + '@walletconnect/time@1.0.2': resolution: {integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==} '@walletconnect/types@2.11.2': resolution: {integrity: sha512-p632MFB+lJbip2cvtXPBQslpUdiw1sDtQ5y855bOlAGquay+6fZ4h1DcDePeKQDQM3P77ax2a9aNPZxV6y/h1Q==} + '@walletconnect/types@2.16.2': + resolution: {integrity: sha512-IIV9kQh6b/WpwhfgPixpziE+8XK/FtdnfvN1oOMs5h+lgwr46OJknPY2p7eS6vvdvEP3xMEc1Kbu1i4tlnroiw==} + '@walletconnect/utils@2.11.2': resolution: {integrity: sha512-LyfdmrnZY6dWqlF4eDrx5jpUwsB2bEPjoqR5Z6rXPiHJKUOdJt7az+mNOn5KTSOlRpd1DmozrBrWr+G9fFLYVw==} + '@walletconnect/utils@2.16.2': + resolution: {integrity: sha512-CEMxMCIqvwXd8YIEXfBoCiWY8DtUevJ/w14Si+cmTHWHBDWKRZll7+QUXgICIBx5kyX3GMAKNABaTlg2A2CPSg==} + '@walletconnect/window-getters@1.0.1': resolution: {integrity: sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==} @@ -9906,6 +9955,9 @@ packages: ufo@1.5.4: resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + uint8arrays@3.1.0: + resolution: {integrity: sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog==} + uint8arrays@3.1.1: resolution: {integrity: sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==} @@ -12793,6 +12845,41 @@ snapshots: - supports-color - ts-node + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4))': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.14.11 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@20.14.11)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.7 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + '@jest/environment@29.7.0': dependencies: '@jest/fake-timers': 29.7.0 @@ -13130,6 +13217,33 @@ snapshots: '@remix-run/router@1.19.1': {} + '@reown/walletkit@1.0.1': + dependencies: + '@walletconnect/core': 2.16.2 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.1.2 + '@walletconnect/sign-client': 2.16.2 + '@walletconnect/types': 2.16.2 + '@walletconnect/utils': 2.16.2 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - ioredis + - uWebSockets.js + - utf-8-validate + '@rollup/plugin-inject@5.0.5(rollup@4.21.0)': dependencies: '@rollup/pluginutils': 5.1.0(rollup@4.21.0) @@ -14562,6 +14676,42 @@ snapshots: - uWebSockets.js - utf-8-validate + '@walletconnect/core@2.16.2': + dependencies: + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/jsonrpc-ws-connection': 1.0.14 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.0.4 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.16.2 + '@walletconnect/utils': 2.16.2 + events: 3.3.0 + lodash.isequal: 4.5.0 + uint8arrays: 3.1.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - ioredis + - uWebSockets.js + - utf-8-validate + '@walletconnect/environment@1.0.1': dependencies: tslib: 1.14.1 @@ -14577,12 +14727,24 @@ snapshots: '@walletconnect/time': 1.0.2 tslib: 1.14.1 + '@walletconnect/heartbeat@1.2.2': + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/time': 1.0.2 + events: 3.3.0 + '@walletconnect/jsonrpc-provider@1.0.13': dependencies: '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/safe-json': 1.0.2 tslib: 1.14.1 + '@walletconnect/jsonrpc-provider@1.0.14': + dependencies: + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/safe-json': 1.0.2 + events: 3.3.0 + '@walletconnect/jsonrpc-types@1.0.3': dependencies: keyvaluestorage-interface: 1.0.0 @@ -14638,6 +14800,10 @@ snapshots: dependencies: '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/relay-api@1.0.11': + dependencies: + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/relay-auth@1.0.4': dependencies: '@stablelib/ed25519': 1.0.3 @@ -14681,6 +14847,35 @@ snapshots: - uWebSockets.js - utf-8-validate + '@walletconnect/sign-client@2.16.2': + dependencies: + '@walletconnect/core': 2.16.2 + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.1.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.16.2 + '@walletconnect/utils': 2.16.2 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - ioredis + - uWebSockets.js + - utf-8-validate + '@walletconnect/time@1.0.2': dependencies: tslib: 1.14.1 @@ -14709,6 +14904,30 @@ snapshots: - ioredis - uWebSockets.js + '@walletconnect/types@2.16.2': + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - ioredis + - uWebSockets.js + '@walletconnect/utils@2.11.2': dependencies: '@stablelib/chacha20poly1305': 1.0.1 @@ -14741,6 +14960,40 @@ snapshots: - ioredis - uWebSockets.js + '@walletconnect/utils@2.16.2': + dependencies: + '@stablelib/chacha20poly1305': 1.0.1 + '@stablelib/hkdf': 1.0.1 + '@stablelib/random': 1.0.2 + '@stablelib/sha256': 1.0.1 + '@stablelib/x25519': 1.0.3 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.0.4 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.16.2 + '@walletconnect/window-getters': 1.0.1 + '@walletconnect/window-metadata': 1.0.1 + detect-browser: 5.3.0 + elliptic: 6.5.7 + query-string: 7.1.3 + uint8arrays: 3.1.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - ioredis + - uWebSockets.js + '@walletconnect/window-getters@1.0.1': dependencies: tslib: 1.14.1 @@ -15846,6 +16099,21 @@ snapshots: - supports-color - ts-node + create-jest@29.7.0(@types/node@22.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@22.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + create-require@1.1.1: {} cross-env@7.0.3: @@ -16644,23 +16912,23 @@ snapshots: optionalDependencies: '@testing-library/dom': 10.4.0 - eslint-plugin-jest@28.8.3(@typescript-eslint/eslint-plugin@8.7.0(@typescript-eslint/parser@8.7.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(jest@29.7.0(babel-plugin-macros@3.1.0))(typescript@5.5.4): + eslint-plugin-jest@28.8.3(@typescript-eslint/eslint-plugin@8.7.0(@typescript-eslint/parser@8.7.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(jest@29.7.0(@types/node@22.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)))(typescript@5.5.4): dependencies: '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 optionalDependencies: '@typescript-eslint/eslint-plugin': 8.7.0(@typescript-eslint/parser@8.7.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4) - jest: 29.7.0(@types/node@20.14.11)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.14.11)(typescript@5.5.4)) + jest: 29.7.0(@types/node@22.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-playwright@1.6.2(eslint-plugin-jest@28.8.3(@typescript-eslint/eslint-plugin@8.7.0(@typescript-eslint/parser@8.7.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(jest@29.7.0(babel-plugin-macros@3.1.0))(typescript@5.5.4))(eslint@8.57.0): + eslint-plugin-playwright@1.6.2(eslint-plugin-jest@28.8.3(@typescript-eslint/eslint-plugin@8.7.0(@typescript-eslint/parser@8.7.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(jest@29.7.0(@types/node@22.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)))(typescript@5.5.4))(eslint@8.57.0): dependencies: eslint: 8.57.0 globals: 13.24.0 optionalDependencies: - eslint-plugin-jest: 28.8.3(@typescript-eslint/eslint-plugin@8.7.0(@typescript-eslint/parser@8.7.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(jest@29.7.0(babel-plugin-macros@3.1.0))(typescript@5.5.4) + eslint-plugin-jest: 28.8.3(@typescript-eslint/eslint-plugin@8.7.0(@typescript-eslint/parser@8.7.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(jest@29.7.0(@types/node@22.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)))(typescript@5.5.4) eslint-plugin-react-hooks@4.6.2(eslint@8.57.0): dependencies: @@ -17858,6 +18126,25 @@ snapshots: - supports-color - ts-node + jest-cli@29.7.0(@types/node@22.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)): + dependencies: + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@22.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)) + exit: 0.1.2 + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@22.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + jest-config@29.7.0(@types/node@20.14.11)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.14.11)(typescript@5.5.4)): dependencies: '@babel/core': 7.25.2 @@ -17889,6 +18176,68 @@ snapshots: - babel-plugin-macros - supports-color + jest-config@29.7.0(@types/node@20.14.11)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)): + dependencies: + '@babel/core': 7.25.2 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.25.2) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0(babel-plugin-macros@3.1.0) + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.7 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 20.14.11 + ts-node: 10.9.2(@types/node@22.1.0)(typescript@5.5.4) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-config@29.7.0(@types/node@22.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)): + dependencies: + '@babel/core': 7.25.2 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.25.2) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0(babel-plugin-macros@3.1.0) + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.7 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 22.1.0 + ts-node: 10.9.2(@types/node@22.1.0)(typescript@5.5.4) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + jest-diff@29.7.0: dependencies: chalk: 4.1.2 @@ -18085,7 +18434,7 @@ snapshots: transitivePeerDependencies: - supports-color - jest-transformer-svg@2.0.2(jest@29.7.0(@types/node@20.14.11)(babel-plugin-macros@3.1.0))(react@18.3.1): + jest-transformer-svg@2.0.2(jest@29.7.0(@types/node@20.14.11)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.14.11)(typescript@5.5.4)))(react@18.3.1): dependencies: jest: 29.7.0(@types/node@20.14.11)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.14.11)(typescript@5.5.4)) react: 18.3.1 @@ -18149,6 +18498,18 @@ snapshots: - supports-color - ts-node + jest@29.7.0(@types/node@22.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)): + dependencies: + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)) + '@jest/types': 29.6.3 + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@22.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4)) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + jiti@1.21.6: {} jju@1.4.0: {} @@ -20459,6 +20820,25 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 22.1.0 + acorn: 8.12.1 + acorn-walk: 8.3.3 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.5.4 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optional: true + tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 @@ -20617,6 +20997,10 @@ snapshots: ufo@1.5.4: {} + uint8arrays@3.1.0: + dependencies: + multiformats: 9.9.0 + uint8arrays@3.1.1: dependencies: multiformats: 9.9.0