From 2d5e25523db35a83be0bf0075ea3533b69e8a48a Mon Sep 17 00:00:00 2001 From: Tomas Martykan Date: Mon, 20 Jan 2025 12:34:41 +0100 Subject: [PATCH] feat(suite): walletconnect implementation for evm --- .../src/connectPopupThunks.ts | 47 +- packages/suite-desktop-core/src/config.ts | 1 + packages/suite-walletconnect/package.json | 24 + .../src/adapters/ethereum.ts | 164 ++ .../suite-walletconnect/src/adapters/index.ts | 43 + packages/suite-walletconnect/src/index.ts | 4 + .../src/walletConnectActions.ts | 38 + .../src/walletConnectConstants.ts | 10 + .../src/walletConnectMiddleware.ts | 40 + .../src/walletConnectReducer.ts | 55 + .../src/walletConnectThunks.ts | 301 ++++ .../src/walletConnectTypes.ts | 50 + packages/suite-walletconnect/tsconfig.json | 21 + packages/suite/jest.config.js | 4 +- packages/suite/package.json | 1 + .../suite/__tests__/initAction.test.ts | 4 + .../suite/src/actions/suite/initAction.ts | 2 + .../src/actions/suite/protocolActions.ts | 10 +- .../UserContextModal/ConnectPopupModal.tsx | 7 +- .../UserContextModal/UserContextModal.tsx | 3 + .../WalletConnectProposalModal.tsx | 95 ++ .../suite/src/middlewares/wallet/index.ts | 2 + packages/suite/src/reducers/wallet/index.ts | 3 + packages/suite/src/support/messages.ts | 42 + .../settings/SettingsDebug/SettingsDebug.tsx | 4 + .../settings/SettingsDebug/WalletConnect.tsx | 74 + packages/suite/tsconfig.json | 1 + packages/urls/src/deeplinks.ts | 1 + .../connect-dependencies.txt | 3 + suite-common/suite-types/src/modal.ts | 4 + yarn.lock | 1481 ++++++++++++++++- 31 files changed, 2452 insertions(+), 87 deletions(-) create mode 100644 packages/suite-walletconnect/package.json create mode 100644 packages/suite-walletconnect/src/adapters/ethereum.ts create mode 100644 packages/suite-walletconnect/src/adapters/index.ts create mode 100644 packages/suite-walletconnect/src/index.ts create mode 100644 packages/suite-walletconnect/src/walletConnectActions.ts create mode 100644 packages/suite-walletconnect/src/walletConnectConstants.ts create mode 100644 packages/suite-walletconnect/src/walletConnectMiddleware.ts create mode 100644 packages/suite-walletconnect/src/walletConnectReducer.ts create mode 100644 packages/suite-walletconnect/src/walletConnectThunks.ts create mode 100644 packages/suite-walletconnect/src/walletConnectTypes.ts create mode 100644 packages/suite-walletconnect/tsconfig.json create mode 100644 packages/suite/src/components/suite/modals/ReduxModal/UserContextModal/WalletConnectProposalModal.tsx create mode 100644 packages/suite/src/views/settings/SettingsDebug/WalletConnect.tsx diff --git a/packages/suite-desktop-connect-popup/src/connectPopupThunks.ts b/packages/suite-desktop-connect-popup/src/connectPopupThunks.ts index d4db77bfa995..c0d88fd9c8c4 100644 --- a/packages/suite-desktop-connect-popup/src/connectPopupThunks.ts +++ b/packages/suite-desktop-connect-popup/src/connectPopupThunks.ts @@ -7,24 +7,22 @@ import { createDeferred } from '@trezor/utils'; const CONNECT_POPUP_MODULE = '@common/connect-popup'; -export const connectPopupCallThunk = createThunk( +export const connectPopupCallThunk = createThunk< + Promise<{ + id: number; + success: boolean; + payload: any; + }>, + { + id: number; + method: string; + payload: any; + processName?: string; + origin?: string; + } +>( `${CONNECT_POPUP_MODULE}/callThunk`, - async ( - { - id, - method, - payload, - processName, - origin, - }: { - id: number; - method: string; - payload: any; - processName?: string; - origin?: string; - }, - { dispatch, getState, extra }, - ) => { + async ({ id, method, payload, processName, origin }, { dispatch, getState, extra }) => { try { const device = selectSelectedDevice(getState()); @@ -71,17 +69,19 @@ export const connectPopupCallThunk = createThunk( dispatch(extra.actions.onModalCancel()); - desktopApi.connectPopupResponse({ + return { ...response, id, - }); + }; } catch (error) { console.error('connectPopupCallThunk', error); - desktopApi.connectPopupResponse({ + dispatch(extra.actions.onModalCancel()); + + return { success: false, payload: serializeError(error), id, - }); + }; } }, ); @@ -90,8 +90,9 @@ export const connectPopupInitThunk = createThunk( `${CONNECT_POPUP_MODULE}/initPopupThunk`, async (_, { dispatch }) => { if (desktopApi.available && (await desktopApi.connectPopupEnabled())) { - desktopApi.on('connect-popup/call', params => { - dispatch(connectPopupCallThunk(params)); + desktopApi.on('connect-popup/call', async params => { + const response = await dispatch(connectPopupCallThunk(params)).unwrap(); + desktopApi.connectPopupResponse(response); }); desktopApi.connectPopupReady(); } diff --git a/packages/suite-desktop-core/src/config.ts b/packages/suite-desktop-core/src/config.ts index e8b2f2937dbd..a8e7685e7ebe 100644 --- a/packages/suite-desktop-core/src/config.ts +++ b/packages/suite-desktop-core/src/config.ts @@ -28,6 +28,7 @@ export const allowedDomains = [ 'eth-api-b2c-stage.everstake.one', // staking endpoint for Holesky testnet, works only with VPN 'eth-api-b2c.everstake.one', // staking endpoint for Ethereum mainnet 'dashboard-api.everstake.one', // staking enpoint for Solana + 'verify.walletconnect.org', // WalletConnect ]; export const cspRules = [ diff --git a/packages/suite-walletconnect/package.json b/packages/suite-walletconnect/package.json new file mode 100644 index 000000000000..3e072e885d46 --- /dev/null +++ b/packages/suite-walletconnect/package.json @@ -0,0 +1,24 @@ +{ + "name": "@trezor/suite-walletconnect", + "version": "1.0.0", + "private": true, + "license": "See LICENSE.md in repo root", + "sideEffects": false, + "main": "src/index", + "scripts": { + "depcheck": "yarn g:depcheck", + "type-check": "yarn g:tsc --build" + }, + "dependencies": { + "@reduxjs/toolkit": "1.9.5", + "@reown/walletkit": "^1.1.1", + "@suite-common/redux-utils": "workspace:*", + "@suite-common/wallet-config": "workspace:*", + "@suite-common/wallet-core": "workspace:*", + "@suite-common/wallet-types": "workspace:*", + "@trezor/connect": "workspace:*", + "@trezor/suite-desktop-api": "workspace:*", + "@walletconnect/core": "^2.17.2", + "@walletconnect/utils": "^2.17.2" + } +} diff --git a/packages/suite-walletconnect/src/adapters/ethereum.ts b/packages/suite-walletconnect/src/adapters/ethereum.ts new file mode 100644 index 000000000000..646cf1248875 --- /dev/null +++ b/packages/suite-walletconnect/src/adapters/ethereum.ts @@ -0,0 +1,164 @@ +import { WalletKitTypes } from '@reown/walletkit'; + +import { createThunk } from '@suite-common/redux-utils'; +import { getNetwork } from '@suite-common/wallet-config'; +import { selectAccounts, selectSelectedDevice } from '@suite-common/wallet-core'; +import { getAccountIdentity } from '@suite-common/wallet-utils'; +import TrezorConnect from '@trezor/connect'; +import * as trezorConnectPopupActions from '@trezor/suite-desktop-connect-popup'; + +import { WALLETCONNECT_MODULE } from '../walletConnectConstants'; +import { WalletConnectAdapter } from '../walletConnectTypes'; + +const ethereumRequestThunk = createThunk< + void, + { + event: WalletKitTypes.SessionRequest; + } +>(`${WALLETCONNECT_MODULE}/ethereumRequest`, async ({ event }, { dispatch, getState }) => { + const device = selectSelectedDevice(getState()); + const getAccount = (address: string, chainId?: number) => { + const account = selectAccounts(getState()).find( + a => + a.descriptor.toLowerCase() === address.toLowerCase() && + a.networkType === 'ethereum' && + (!chainId || getNetwork(a.symbol).chainId === chainId), + ); + if (!account) { + throw new Error('Account not found'); + } + + return account; + }; + + switch (event.params.request.method) { + case 'personal_sign': { + const [message, address] = event.params.request.params; + const account = getAccount(address); + const response = await dispatch( + trezorConnectPopupActions.connectPopupCallThunk({ + id: 0, + method: 'ethereumSignMessage', + payload: { + path: account.path, + message, + hex: true, + device, + useEmptyPassphrase: device?.useEmptyPassphrase, + }, + processName: 'WalletConnect', + origin: event.verifyContext.verified.origin, + }), + ).unwrap(); + if (!response.success) { + console.error('personal_sign error', response); + throw new Error('personal_sign error'); + } + + return response.payload.signature; + } + case 'eth_signTypedData_v4': { + const [address, data] = event.params.request.params; + const account = getAccount(address); + const response = await dispatch( + trezorConnectPopupActions.connectPopupCallThunk({ + id: 0, + method: 'ethereumSignTypedData', + payload: { + path: account.path, + data: JSON.parse(data), + metamask_v4_compat: true, + device, + useEmptyPassphrase: device?.useEmptyPassphrase, + }, + processName: 'WalletConnect', + origin: event.verifyContext.verified.origin, + }), + ).unwrap(); + if (!response.success) { + console.error('eth_signTypedData_v4 error', response); + throw new Error('eth_signTypedData_v4 error'); + } + + return response.payload.signature; + } + case 'eth_sendTransaction': { + const chainId = Number(event.params.chainId.replace('eip155:', '')); + const transaction = event.params.request.params[0]; + const account = getAccount(transaction.from, chainId); + if (account.networkType !== 'ethereum') { + throw new Error('Account is not Ethereum'); + } + if (!transaction.gasPrice) { + // Fee not provided, estimate it + const feeLevels = await TrezorConnect.blockchainEstimateFee({ + coin: account.symbol, + identity: getAccountIdentity(account), + request: { + blocks: [2], + specific: { + from: account.descriptor, + }, + }, + }); + if (!feeLevels.success) { + throw new Error('eth_sendTransaction cannot estimate fee'); + } + transaction.gasPrice = feeLevels.payload.levels[0]?.feePerUnit; + } + const payload = { + path: account.path, + transaction: { + ...transaction, + gasLimit: transaction.gas ?? '21000', + nonce: account.misc.nonce, + chainId, + push: true, + }, + device, + useEmptyPassphrase: device?.useEmptyPassphrase, + }; + const signResponse = await dispatch( + trezorConnectPopupActions.connectPopupCallThunk({ + id: 0, + method: 'ethereumSignTransaction', + payload, + processName: 'WalletConnect', + origin: event.verifyContext.verified.origin, + }), + ).unwrap(); + if (!signResponse.success) { + console.error('eth_sendTransaction error', signResponse); + throw new Error('eth_sendTransaction error'); + } + + const pushResponse = await TrezorConnect.pushTransaction({ + coin: account.symbol, + identity: getAccountIdentity(account), + tx: signResponse.payload.serializedTx, + }); + if (!pushResponse.success) { + console.error('eth_sendTransaction push error', pushResponse); + throw new Error('eth_sendTransaction push error'); + } + + return pushResponse.payload.txid; + } + case 'wallet_switchEthereumChain': { + const [chainId] = event.params.request.params; + + return chainId; + } + } +}); + +export const ethereumAdapter = { + methods: [ + 'eth_sendTransaction', + 'eth_signTypedData_v4', + 'personal_sign', + 'wallet_switchEthereumChain', + ], + networkType: 'ethereum', + requestThunk: ethereumRequestThunk, +} satisfies WalletConnectAdapter; diff --git a/packages/suite-walletconnect/src/adapters/index.ts b/packages/suite-walletconnect/src/adapters/index.ts new file mode 100644 index 000000000000..85c0f50a3510 --- /dev/null +++ b/packages/suite-walletconnect/src/adapters/index.ts @@ -0,0 +1,43 @@ +import { getNetwork } from '@suite-common/wallet-config'; +import { Account } from '@suite-common/wallet-types'; + +import { ethereumAdapter } from './ethereum'; +import { WalletConnectAdapter, WalletConnectNamespace } from '../walletConnectTypes'; + +export const adapters: WalletConnectAdapter[] = [ + ethereumAdapter, + // TODO: solanaAdapter + // TODO: bitcoinAdapter +]; + +export const getAdapterByMethod = (method: string) => + adapters.find(adapter => adapter.methods.includes(method)); + +export const getAdapterByNetwork = (networkType: string) => + adapters.find(adapter => adapter.networkType === networkType); + +export const getAllMethods = () => adapters.flatMap(adapter => adapter.methods); + +export const getNamespaces = (accounts: Account[]) => { + const eip155 = { + chains: [], + accounts: [], + methods: getAllMethods(), + events: ['accountsChanged', 'chainChanged'], + } as WalletConnectNamespace; + + accounts.forEach(account => { + const network = getNetwork(account.symbol); + const { chainId, networkType } = network; + + if (!account.visible || !getAdapterByNetwork(networkType)) return; + + const walletConnectChainId = `eip155:${chainId}`; + if (!eip155.chains.includes(walletConnectChainId)) { + eip155.chains.push(walletConnectChainId); + } + eip155.accounts.push(`${walletConnectChainId}:${account.descriptor}`); + }); + + return { eip155 }; +}; diff --git a/packages/suite-walletconnect/src/index.ts b/packages/suite-walletconnect/src/index.ts new file mode 100644 index 000000000000..50d24f64e2fe --- /dev/null +++ b/packages/suite-walletconnect/src/index.ts @@ -0,0 +1,4 @@ +export * from './walletConnectActions'; +export * from './walletConnectThunks'; +export * from './walletConnectMiddleware'; +export * from './walletConnectReducer'; diff --git a/packages/suite-walletconnect/src/walletConnectActions.ts b/packages/suite-walletconnect/src/walletConnectActions.ts new file mode 100644 index 000000000000..579f6fc557e1 --- /dev/null +++ b/packages/suite-walletconnect/src/walletConnectActions.ts @@ -0,0 +1,38 @@ +import { createAction } from '@reduxjs/toolkit'; + +import { PendingConnectionProposal, WalletConnectSession } from './walletConnectTypes'; + +export const ACTION_PREFIX = '@trezor/suite-walletconnect'; + +const saveSession = createAction( + `${ACTION_PREFIX}/saveSession`, + (payload: WalletConnectSession) => ({ + payload, + }), +); + +const removeSession = createAction( + `${ACTION_PREFIX}/removeSession`, + (payload: { topic: string }) => ({ + payload, + }), +); + +const createSessionProposal = createAction( + `${ACTION_PREFIX}/createSessionProposal`, + (payload: PendingConnectionProposal) => ({ + payload, + }), +); + +const clearSessionProposal = createAction(`${ACTION_PREFIX}/clearSessionProposal`); + +const expireSessionProposal = createAction(`${ACTION_PREFIX}/expireSessionProposal`); + +export const walletConnectActions = { + saveSession, + removeSession, + createSessionProposal, + clearSessionProposal, + expireSessionProposal, +} as const; diff --git a/packages/suite-walletconnect/src/walletConnectConstants.ts b/packages/suite-walletconnect/src/walletConnectConstants.ts new file mode 100644 index 000000000000..0a6c744be9c6 --- /dev/null +++ b/packages/suite-walletconnect/src/walletConnectConstants.ts @@ -0,0 +1,10 @@ +export const WALLETCONNECT_MODULE = '@suite/walletconnect'; + +export const PROJECT_ID = '203549d0480d0f24d994780f34889b03'; + +export const WALLETCONNECT_METADATA = { + name: 'Trezor Suite', + description: 'Manage your Trezor device', + url: 'https://suite.trezor.io', + icons: ['https://trezor.io/favicon/apple-touch-icon.png'], +}; diff --git a/packages/suite-walletconnect/src/walletConnectMiddleware.ts b/packages/suite-walletconnect/src/walletConnectMiddleware.ts new file mode 100644 index 000000000000..1b2bfcf72370 --- /dev/null +++ b/packages/suite-walletconnect/src/walletConnectMiddleware.ts @@ -0,0 +1,40 @@ +import { createMiddlewareWithExtraDeps } from '@suite-common/redux-utils'; +import { accountsActions } from '@suite-common/wallet-core'; + +import { walletConnectActions } from './walletConnectActions'; +import * as walletConnectThunks from './walletConnectThunks'; + +export const prepareWalletConnectMiddleware = createMiddlewareWithExtraDeps( + async (action, { dispatch, next, extra }) => { + await next(action); + + if (accountsActions.updateSelectedAccount.match(action) && action.payload.account) { + dispatch( + walletConnectThunks.switchSelectedAccountThunk({ + account: action.payload.account, + }), + ); + } + + if ( + accountsActions.createAccount.match(action) || + accountsActions.removeAccount.match(action) + ) { + dispatch(walletConnectThunks.updateAccountsThunk()); + } + + if (walletConnectActions.createSessionProposal.match(action)) { + dispatch( + extra.actions.openModal({ + type: 'walletconnect-proposal', + eventId: action.payload.eventId, + }), + ); + } + if (walletConnectActions.clearSessionProposal.match(action)) { + dispatch(extra.actions.onModalCancel()); + } + + return action; + }, +); diff --git a/packages/suite-walletconnect/src/walletConnectReducer.ts b/packages/suite-walletconnect/src/walletConnectReducer.ts new file mode 100644 index 000000000000..f01b30086c28 --- /dev/null +++ b/packages/suite-walletconnect/src/walletConnectReducer.ts @@ -0,0 +1,55 @@ +import { createReducerWithExtraDeps } from '@suite-common/redux-utils'; + +import { walletConnectActions } from './walletConnectActions'; +import { PendingConnectionProposal, WalletConnectSession } from './walletConnectTypes'; + +export type WalletConnectState = { + sessions: WalletConnectSession[]; + pendingProposal: PendingConnectionProposal | undefined; +}; + +type WalletConnectStateRootState = { + wallet: { walletConnect: WalletConnectState }; +}; + +const walletConnectInitialState: WalletConnectState = { + sessions: [], + pendingProposal: undefined, +}; + +export const prepareWalletConnectReducer = createReducerWithExtraDeps( + walletConnectInitialState, + (builder, _extra) => { + builder + .addCase(walletConnectActions.saveSession, (state, { payload }) => { + const { topic, ...rest } = payload; + const exists = state.sessions.find(session => session.topic === topic); + if (exists) { + state.sessions = state.sessions.map(session => + session.topic === topic ? { ...session, ...rest } : session, + ); + } else { + state.sessions.push(payload); + } + }) + .addCase(walletConnectActions.removeSession, (state, { payload }) => { + const { topic } = payload; + state.sessions = state.sessions.filter(session => session.topic !== topic); + }) + .addCase(walletConnectActions.createSessionProposal, (state, { payload }) => { + state.pendingProposal = payload; + }) + .addCase(walletConnectActions.clearSessionProposal, state => { + state.pendingProposal = undefined; + }) + .addCase(walletConnectActions.expireSessionProposal, state => { + if (state.pendingProposal) state.pendingProposal.expired = true; + }); + }, +); + +export const selectSessions = (state: WalletConnectStateRootState) => + state.wallet.walletConnect.sessions; + +export const selectPendingProposal = (state: WalletConnectStateRootState) => + state.wallet.walletConnect.pendingProposal; diff --git a/packages/suite-walletconnect/src/walletConnectThunks.ts b/packages/suite-walletconnect/src/walletConnectThunks.ts new file mode 100644 index 000000000000..47db70f1cad0 --- /dev/null +++ b/packages/suite-walletconnect/src/walletConnectThunks.ts @@ -0,0 +1,301 @@ +import { WalletKit, WalletKitTypes } from '@reown/walletkit'; +import { WalletKit as WalletKitClient } from '@reown/walletkit/dist/types/client'; +import { Core } from '@walletconnect/core'; +import { + buildApprovedNamespaces, + buildAuthObject, + getSdkError, + populateAuthPayload, +} from '@walletconnect/utils'; + +import { createThunk } from '@suite-common/redux-utils'; +import { getNetwork } from '@suite-common/wallet-config'; +import { selectAccounts, selectSelectedDevice } from '@suite-common/wallet-core'; +import { Account } from '@suite-common/wallet-types'; +import TrezorConnect from '@trezor/connect'; +import { desktopApi } from '@trezor/suite-desktop-api'; + +import { getAdapterByMethod, getNamespaces } from './adapters'; +import { walletConnectActions } from './walletConnectActions'; +import { PROJECT_ID, WALLETCONNECT_METADATA, WALLETCONNECT_MODULE } from './walletConnectConstants'; +import { selectPendingProposal } from './walletConnectReducer'; + +let walletKit: WalletKitClient; + +export const sessionAuthenticateThunk = createThunk< + void, + { + event: WalletKitTypes.SessionAuthenticate; + } +>(`${WALLETCONNECT_MODULE}/sessionAuthenticateThunk`, async ({ event }, { getState }) => { + // Support for Sign-In with Ethereum (SIWE) message, enhanced by ReCaps (ReCap Capabilities) + try { + const device = selectSelectedDevice(getState()); + const accounts = selectAccounts(getState()); + const supportedNamespaces = getNamespaces(accounts); + const authPayload = populateAuthPayload({ + authPayload: event.params.authPayload, + chains: supportedNamespaces.eip155.chains, + methods: supportedNamespaces.eip155.methods, + }); + const ethAccount = accounts.find(a => a.symbol === 'eth'); + if (!ethAccount) { + throw new Error('No ETH account'); + } + const iss = `eip155:1:${ethAccount.descriptor}`; + const message = walletKit.formatAuthMessage({ + request: authPayload, + iss, + }); + + const signature = await TrezorConnect.ethereumSignMessage({ + path: ethAccount.path, + message, + device, + useEmptyPassphrase: device?.useEmptyPassphrase, + }); + + if (signature.success === false) { + throw new Error('Failed to sign message'); + } + + const auth = buildAuthObject( + authPayload, + { + t: 'eip191', + s: `0x${signature.payload.signature}`, + }, + iss, + ); + + await walletKit.approveSessionAuthenticate({ + id: event.id, + auths: [auth], + }); + } catch (error) { + console.error(error); + + await walletKit.rejectSessionAuthenticate({ + id: event.id, + reason: getSdkError('USER_REJECTED'), + }); + } +}); + +export const sessionRequestThunk = createThunk< + void, + { + event: WalletKitTypes.SessionRequest; + } +>(`${WALLETCONNECT_MODULE}/sessionProposalThunk`, async ({ event }, { dispatch }) => { + try { + const adapter = getAdapterByMethod(event.params.request.method); + if (!adapter) { + throw new Error('Unsupported method'); + } + + const result = await dispatch(adapter.requestThunk({ event })); + if (!result || result.error) { + throw new Error('Device request failed'); + } + + await walletKit.respondSessionRequest({ + topic: event.topic, + response: { + id: event.id, + jsonrpc: '2.0', + result: result.payload, + }, + }); + } catch (error) { + await walletKit.respondSessionRequest({ + topic: event.topic, + response: { + id: event.id, + jsonrpc: '2.0', + error: { + code: 1, + message: error.message, + }, + }, + }); + } +}); + +export const sessionProposalApproveThunk = createThunk< + void, + { + eventId: number; + } +>( + `${WALLETCONNECT_MODULE}/sessionProposalApproveThunk`, + async ({ eventId }, { dispatch, getState }) => { + try { + const pendingProposal = selectPendingProposal(getState()); + if (!pendingProposal || pendingProposal.eventId !== eventId) { + throw new Error('Proposal not found'); + } + + const accounts = selectAccounts(getState()); + const supportedNamespaces = getNamespaces(accounts); + const approvedNamespaces = buildApprovedNamespaces({ + proposal: pendingProposal.params, + supportedNamespaces, + }); + const session = await walletKit.approveSession({ + id: eventId, + namespaces: approvedNamespaces, + }); + + dispatch( + walletConnectActions.saveSession({ + ...session, + }), + ); + } catch (error) { + console.error(error); + + await walletKit.rejectSession({ + id: eventId, + reason: getSdkError('USER_REJECTED'), + }); + } + }, +); + +export const sessionProposalRejectThunk = createThunk< + void, + { + eventId: number; + } +>(`${WALLETCONNECT_MODULE}/sessionProposalRejectThunk`, async ({ eventId }) => { + await walletKit.rejectSession({ + id: eventId, + reason: getSdkError('USER_REJECTED'), + }); +}); + +// Selected Account was switched in Suite +export const switchSelectedAccountThunk = createThunk( + `${WALLETCONNECT_MODULE}/switchSelectedAccountThunk`, + async ({ account }) => { + const network = getNetwork(account.symbol); + const sessions = await walletKit.getActiveSessions(); + for (const topic in sessions) { + walletKit.emitSessionEvent({ + topic, + event: { + name: 'chainChanged', + data: network.chainId, + }, + chainId: `eip155:${network.chainId}`, + }); + walletKit.emitSessionEvent({ + topic, + event: { + name: 'accountsChanged', + data: [account.descriptor], + }, + chainId: `eip155:${network.chainId}`, + }); + } + }, +); + +// Account was created or removed in Suite +export const updateAccountsThunk = createThunk( + `${WALLETCONNECT_MODULE}/updateAccountsThunk`, + async (_, { getState }) => { + const accounts = selectAccounts(getState()); + const sessions = await walletKit.getActiveSessions(); + for (const topic in sessions) { + const { namespaces: oldNamespaces } = sessions[topic]; + const updatedNamespaces = getNamespaces(accounts); + const namespaces = { + ...oldNamespaces, + eip155: { + ...oldNamespaces.eip155, + accounts: updatedNamespaces.eip155.accounts, + chains: updatedNamespaces.eip155.chains, + }, + }; + await walletKit.updateSession({ + topic, + namespaces, + }); + } + }, +); + +export const walletConnectInitThunk = createThunk( + `${WALLETCONNECT_MODULE}/walletConnectInitThunk`, + async (_, { dispatch }) => { + const core = new Core({ + projectId: PROJECT_ID, + }); + + walletKit = await WalletKit.init({ + core, + metadata: WALLETCONNECT_METADATA, + }); + + walletKit.on('session_proposal', event => { + dispatch( + walletConnectActions.createSessionProposal({ + eventId: event.id, + params: event.params, + expired: false, + ...event.verifyContext.verified, + }), + ); + }); + + walletKit.on('proposal_expire', () => { + dispatch(walletConnectActions.expireSessionProposal()); + }); + + walletKit.on('session_request', event => { + dispatch(sessionRequestThunk({ event })); + }); + + walletKit.on('session_authenticate', event => { + dispatch(sessionAuthenticateThunk({ event })); + }); + + walletKit.on('session_delete', event => { + dispatch(walletConnectActions.removeSession({ topic: event.topic })); + }); + + const sessions = walletKit.getActiveSessions(); + for (const topic in sessions) { + dispatch( + walletConnectActions.saveSession({ + ...sessions[topic], + }), + ); + } + }, +); + +export const walletConnectPairThunk = createThunk( + `${WALLETCONNECT_MODULE}/walletConnectPairThunk`, + async ({ uri }) => { + if (desktopApi.available) { + desktopApi.appFocus(); + } + + try { + await walletKit.pair({ uri }); + } catch (error) { + console.error(error); + } + }, +); + +export const walletConnectDisconnectThunk = createThunk( + `${WALLETCONNECT_MODULE}/walletConnectDisconnectThunk`, + async ({ topic }, { dispatch }) => { + await walletKit.disconnectSession({ topic, reason: getSdkError('USER_DISCONNECTED') }); + await dispatch(walletConnectActions.removeSession({ topic })); + }, +); diff --git a/packages/suite-walletconnect/src/walletConnectTypes.ts b/packages/suite-walletconnect/src/walletConnectTypes.ts new file mode 100644 index 000000000000..203adc3043a7 --- /dev/null +++ b/packages/suite-walletconnect/src/walletConnectTypes.ts @@ -0,0 +1,50 @@ +import { WalletKitTypes } from '@reown/walletkit'; +import type { ProposalTypes } from '@walletconnect/types'; + +import { SuiteCompatibleThunk } from '@suite-common/redux-utils'; + +export interface WalletConnectAdapter { + networkType: string; + methods: string[]; + requestThunk: SuiteCompatibleThunk<{ + event: WalletKitTypes.SessionRequest; + }>; +} + +export interface WalletConnectNamespace { + chains: string[]; + methods: string[]; + events: string[]; + accounts: string[]; +} + +export interface WalletConnectSession { + topic: string; + pairingTopic: string; + expiry: number; + acknowledged: boolean; + namespaces: Record>; + requiredNamespaces: ProposalTypes.RequiredNamespaces; + optionalNamespaces: ProposalTypes.OptionalNamespaces; + sessionProperties?: ProposalTypes.SessionProperties; + peer: { + publicKey: string; + metadata: { + name: string; + description: string; + url: string; + icons: string[]; + verifyUrl?: string; + }; + }; +} + +export interface PendingConnectionProposal { + eventId: number; + params: ProposalTypes.Struct; + origin: string; + validation: 'UNKNOWN' | 'VALID' | 'INVALID'; + verifyUrl: string; + isScam?: boolean; + expired: boolean; +} diff --git a/packages/suite-walletconnect/tsconfig.json b/packages/suite-walletconnect/tsconfig.json new file mode 100644 index 000000000000..4672c552c93c --- /dev/null +++ b/packages/suite-walletconnect/tsconfig.json @@ -0,0 +1,21 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { "outDir": "libDev" }, + "include": [".", "**/*.json"], + "references": [ + { + "path": "../../suite-common/redux-utils" + }, + { + "path": "../../suite-common/wallet-config" + }, + { + "path": "../../suite-common/wallet-core" + }, + { + "path": "../../suite-common/wallet-types" + }, + { "path": "../connect" }, + { "path": "../suite-desktop-api" } + ] +} diff --git a/packages/suite/jest.config.js b/packages/suite/jest.config.js index 04fd9ba4e11d..c07d88d0c05e 100644 --- a/packages/suite/jest.config.js +++ b/packages/suite/jest.config.js @@ -71,10 +71,10 @@ module.exports = { '/public/', ], - transformIgnorePatterns: ['/node_modules/(?!d3-(.*)|internmap)/'], + transformIgnorePatterns: ['/node_modules/(?!d3-(.*)|internmap|@walletconnect|uint8arrays)/'], testMatch: ['**/*.test.(ts|tsx|js)'], transform: { - '(d3-|internmap).*\\.js$': ['babel-jest', babelConfig], + '(d3-|internmap|esm).*\\.js$': ['babel-jest', babelConfig], '\\.(ts|tsx)$': ['babel-jest', babelConfig], }, verbose: false, diff --git a/packages/suite/package.json b/packages/suite/package.json index c4e0ea921204..643ce2a9c82e 100644 --- a/packages/suite/package.json +++ b/packages/suite/package.json @@ -78,6 +78,7 @@ "@trezor/suite-desktop-api": "workspace:*", "@trezor/suite-desktop-connect-popup": "workspace:*", "@trezor/suite-storage": "workspace:*", + "@trezor/suite-walletconnect": "workspace:*", "@trezor/theme": "workspace:*", "@trezor/type-utils": "workspace:*", "@trezor/urls": "workspace:*", diff --git a/packages/suite/src/actions/suite/__tests__/initAction.test.ts b/packages/suite/src/actions/suite/__tests__/initAction.test.ts index eaeea3a1a20a..02cd4e45cc84 100644 --- a/packages/suite/src/actions/suite/__tests__/initAction.test.ts +++ b/packages/suite/src/actions/suite/__tests__/initAction.test.ts @@ -24,6 +24,7 @@ import { updateMissingTxFiatRatesThunk, } from '@suite-common/wallet-core'; import TrezorConnect from '@trezor/connect'; +import { walletConnectInitThunk } from '@trezor/suite-walletconnect'; import { ROUTER, SUITE } from 'src/actions/suite/constants'; import { init } from 'src/actions/suite/initAction'; @@ -121,6 +122,7 @@ const fixtures: Fixture[] = [ updateMissingTxFiatRatesThunk.fulfilled.type, periodicCheckStakeDataThunk.pending.type, initStakeDataThunk.pending.type, + walletConnectInitThunk.pending.type, SUITE.READY, ], }, @@ -167,6 +169,7 @@ const fixtures: Fixture[] = [ ROUTER.LOCATION_CHANGE, periodicCheckStakeDataThunk.pending.type, initStakeDataThunk.pending.type, + walletConnectInitThunk.pending.type, SUITE.READY, ], }, @@ -211,6 +214,7 @@ const fixtures: Fixture[] = [ ROUTER.LOCATION_CHANGE, periodicCheckStakeDataThunk.pending.type, initStakeDataThunk.pending.type, + walletConnectInitThunk.pending.type, SUITE.READY, ], }, diff --git a/packages/suite/src/actions/suite/initAction.ts b/packages/suite/src/actions/suite/initAction.ts index 7b301afe6820..229b48b056d6 100644 --- a/packages/suite/src/actions/suite/initAction.ts +++ b/packages/suite/src/actions/suite/initAction.ts @@ -11,6 +11,7 @@ import { import { isDesktop } from '@trezor/env-utils'; import { desktopApi } from '@trezor/suite-desktop-api'; import * as trezorConnectPopupActions from '@trezor/suite-desktop-connect-popup'; +import * as walletConnectActions from '@trezor/suite-walletconnect'; import * as languageActions from 'src/actions/settings/languageActions'; import * as analyticsActions from 'src/actions/suite/analyticsActions'; @@ -118,6 +119,7 @@ export const init = () => async (dispatch: Dispatch, getState: GetState) => { if (isDesktop()) { dispatch(trezorConnectPopupActions.connectPopupInitThunk()); } + dispatch(walletConnectActions.walletConnectInitThunk()); // 15. backend connected, suite is ready to use dispatch(onSuiteReady()); diff --git a/packages/suite/src/actions/suite/protocolActions.ts b/packages/suite/src/actions/suite/protocolActions.ts index 84e378d7e096..d42086f2112b 100644 --- a/packages/suite/src/actions/suite/protocolActions.ts +++ b/packages/suite/src/actions/suite/protocolActions.ts @@ -1,11 +1,13 @@ import { Protocol } from '@suite-common/suite-constants'; import { getNetworkSymbolForProtocol } from '@suite-common/suite-utils'; import { notificationsActions } from '@suite-common/toast-notifications'; -import { SUITE_BRIDGE_DEEPLINK } from '@trezor/urls'; +import * as walletConnectActions from '@trezor/suite-walletconnect'; +import { SUITE_BRIDGE_DEEPLINK, SUITE_WALLETCONNECT_DEEPLINK } from '@trezor/urls'; import * as routerActions from 'src/actions/suite/routerActions'; import type { SendFormState } from 'src/reducers/suite/protocolReducer'; import type { Dispatch } from 'src/types/suite'; +import { parseUri } from 'src/utils/suite/parseUri'; import { CoinProtocolInfo, getProtocolInfo } from 'src/utils/suite/protocol'; import { PROTOCOL } from './constants'; @@ -49,6 +51,12 @@ export const handleProtocolRequest = (uri: string) => (dispatch: Dispatch) => { ); } else if (uri?.startsWith(SUITE_BRIDGE_DEEPLINK)) { dispatch(routerActions.goto('suite-bridge-requested', { params: { cancelable: true } })); + } else if (uri?.startsWith(SUITE_WALLETCONNECT_DEEPLINK)) { + const parsedUri = parseUri(uri); + const wcUri = parsedUri?.searchParams?.get('uri'); + if (wcUri) { + dispatch(walletConnectActions.walletConnectPairThunk({ uri: wcUri })); + } } }; diff --git a/packages/suite/src/components/suite/modals/ReduxModal/UserContextModal/ConnectPopupModal.tsx b/packages/suite/src/components/suite/modals/ReduxModal/UserContextModal/ConnectPopupModal.tsx index 0edeb6829b13..59adda91e2fb 100644 --- a/packages/suite/src/components/suite/modals/ReduxModal/UserContextModal/ConnectPopupModal.tsx +++ b/packages/suite/src/components/suite/modals/ReduxModal/UserContextModal/ConnectPopupModal.tsx @@ -38,18 +38,17 @@ export const ConnectPopupModal = ({ {processName && ( - Process: {processName} + {processName} )} {origin && ( - Web Origin: {origin} + {origin} )} - A 3rd party application is trying to connect to your device. Do you want to allow this - action? + ); diff --git a/packages/suite/src/components/suite/modals/ReduxModal/UserContextModal/UserContextModal.tsx b/packages/suite/src/components/suite/modals/ReduxModal/UserContextModal/UserContextModal.tsx index 402d721f64e4..8b8dbf3795b7 100644 --- a/packages/suite/src/components/suite/modals/ReduxModal/UserContextModal/UserContextModal.tsx +++ b/packages/suite/src/components/suite/modals/ReduxModal/UserContextModal/UserContextModal.tsx @@ -51,6 +51,7 @@ import { FirmwareRevisionOptOutModal } from './FirmwareRevisionOptOutModal'; import { PassphraseMismatchModal } from './PassphraseMismatchModal'; import { CardanoWithdrawModal } from '../CardanoWithdrawModal'; import { EverstakeModal } from './UnstakeModal/EverstakeModal'; +import { WalletConnectProposalModal } from './WalletConnectProposalModal'; /** Modals opened as a result of user action */ export const UserContextModal = ({ @@ -220,6 +221,8 @@ export const UserContextModal = ({ processName={payload.processName} /> ); + case 'walletconnect-proposal': + return ; default: return null; } diff --git a/packages/suite/src/components/suite/modals/ReduxModal/UserContextModal/WalletConnectProposalModal.tsx b/packages/suite/src/components/suite/modals/ReduxModal/UserContextModal/WalletConnectProposalModal.tsx new file mode 100644 index 000000000000..75906aa1f90a --- /dev/null +++ b/packages/suite/src/components/suite/modals/ReduxModal/UserContextModal/WalletConnectProposalModal.tsx @@ -0,0 +1,95 @@ +import { Banner, H2, NewModal, Note, Paragraph } from '@trezor/components'; +import { + selectPendingProposal, + sessionProposalApproveThunk, + sessionProposalRejectThunk, +} from '@trezor/suite-walletconnect'; +import { spacings } from '@trezor/theme'; + +import { onCancel } from 'src/actions/suite/modalActions'; +import { Translation } from 'src/components/suite'; +import { useDispatch, useSelector } from 'src/hooks/suite'; + +interface WalletConnectProposalModalProps { + eventId: number; +} + +export const WalletConnectProposalModal = ({ eventId }: WalletConnectProposalModalProps) => { + const dispatch = useDispatch(); + const pendingProposal = useSelector(selectPendingProposal); + + const handleAccept = () => { + dispatch(sessionProposalApproveThunk({ eventId })); + dispatch(onCancel()); + }; + const handleReject = () => { + dispatch(sessionProposalRejectThunk({ eventId })); + dispatch(onCancel()); + }; + + return ( + + + + + + + + + } + heading={} + > +

{pendingProposal?.params.proposer.metadata.name}

+ + {pendingProposal?.params.proposer.metadata.url} + + {!pendingProposal?.isScam && pendingProposal?.validation === 'VALID' && ( + + + + )} + {!pendingProposal?.isScam && pendingProposal?.validation === 'UNKNOWN' && ( + + + + )} + {(pendingProposal?.isScam || pendingProposal?.validation === 'INVALID') && ( + + + + )} + + + + + + {pendingProposal?.isScam && ( + + + + )} + {pendingProposal?.validation === 'INVALID' && ( + + + + )} + + {pendingProposal?.expired && ( + + + + )} +
+ ); +}; diff --git a/packages/suite/src/middlewares/wallet/index.ts b/packages/suite/src/middlewares/wallet/index.ts index 6ae75b516897..c8a78238a22c 100644 --- a/packages/suite/src/middlewares/wallet/index.ts +++ b/packages/suite/src/middlewares/wallet/index.ts @@ -6,6 +6,7 @@ import { prepareStakeMiddleware, } from '@suite-common/wallet-core'; import { prepareTokenDefinitionsMiddleware } from '@suite-common/token-definitions'; +import { prepareWalletConnectMiddleware } from '@trezor/suite-walletconnect'; import { extraDependencies } from 'src/support/extraDependencies'; @@ -28,4 +29,5 @@ export default [ graphMiddleware, tradingMiddleware, coinjoinMiddleware, + prepareWalletConnectMiddleware(extraDependencies), ]; diff --git a/packages/suite/src/reducers/wallet/index.ts b/packages/suite/src/reducers/wallet/index.ts index 310a90976be2..3f982415e0f3 100644 --- a/packages/suite/src/reducers/wallet/index.ts +++ b/packages/suite/src/reducers/wallet/index.ts @@ -10,6 +10,7 @@ import { prepareStakeReducer, prepareTransactionsReducer, } from '@suite-common/wallet-core'; +import { prepareWalletConnectReducer } from '@trezor/suite-walletconnect'; import { extraDependencies } from 'src/support/extraDependencies'; @@ -30,6 +31,7 @@ export const fiatRatesReducer = prepareFiatRatesReducer(extraDependencies); export const discoveryReducer = prepareDiscoveryReducer(extraDependencies); export const stakeReducer = prepareStakeReducer(extraDependencies); export const sendFormReducer = prepareSendFormReducer(extraDependencies); +export const walletConnectReducer = prepareWalletConnectReducer(extraDependencies); const WalletReducers = combineReducers({ fiat: fiatRatesReducer, @@ -49,6 +51,7 @@ const WalletReducers = combineReducers({ cardanoStaking: cardanoStakingReducer, coinjoin: coinjoinReducer, stake: stakeReducer, + walletConnect: walletConnectReducer, }); export default WalletReducers; diff --git a/packages/suite/src/support/messages.ts b/packages/suite/src/support/messages.ts index dfd9e2eb0374..b13a6359eb12 100644 --- a/packages/suite/src/support/messages.ts +++ b/packages/suite/src/support/messages.ts @@ -9385,4 +9385,46 @@ export default defineMessages({ id: 'TR_TREZOR_CONNECT', defaultMessage: 'Trezor Connect', }, + TR_CONNECT_MODAL_REQUEST_DESCRIPTION: { + id: 'TR_CONNECT_MODAL_REQUEST_DESCRIPTION', + defaultMessage: + 'A 3rd party application is trying to connect to your device. Do you want to allow this action?', + }, + TR_CONNECT_MODAL_PROCESS: { + id: 'TR_CONNECT_MODAL_PROCESS', + defaultMessage: 'Process:', + }, + TR_CONNECT_MODAL_WEB_ORIGIN: { + id: 'TR_CONNECT_MODAL_WEB_ORIGIN', + defaultMessage: 'Web Origin:', + }, + TR_WALLETCONNECT_SERVICE_VERIFIED: { + id: 'TR_WALLETCONNECT_SERVICE_VERIFIED', + defaultMessage: 'Verified service', + }, + TR_WALLETCONNECT_SERVICE_UNKNOWN: { + id: 'TR_WALLETCONNECT_SERVICE_UNKNOWN', + defaultMessage: 'Unknown service', + }, + TR_WALLETCONNECT_SERVICE_DANGEROUS: { + id: 'TR_WALLETCONNECT_SERVICE_DANGEROUS', + defaultMessage: 'Dangerous service', + }, + TR_WALLETCONNECT_REQUEST: { + id: 'TR_WALLETCONNECT_REQUEST', + defaultMessage: 'A WalletConnect application is requesting to connect.', + }, + TR_WALLETCONNECT_REQUEST_EXPIRED: { + id: 'TR_WALLETCONNECT_REQUEST_EXPIRED', + defaultMessage: 'Request has expired. Please go back to the application and try again.', + }, + TR_WALLETCONNECT_IS_SCAM: { + id: 'TR_WALLETCONNECT_IS_SCAM', + defaultMessage: 'The request was detected as a scam and was blocked automatically.', + }, + TR_WALLETCONNECT_UNABLE_TO_VERIFY: { + id: 'TR_WALLETCONNECT_UNABLE_TO_VERIFY', + defaultMessage: + 'We were unable to verify the request authenticity. Please make sure you trust the source.', + }, }); diff --git a/packages/suite/src/views/settings/SettingsDebug/SettingsDebug.tsx b/packages/suite/src/views/settings/SettingsDebug/SettingsDebug.tsx index 741f48bf693a..81f94c6450dc 100644 --- a/packages/suite/src/views/settings/SettingsDebug/SettingsDebug.tsx +++ b/packages/suite/src/views/settings/SettingsDebug/SettingsDebug.tsx @@ -22,6 +22,7 @@ import { Transport } from './Transport'; import { TransportBackends } from './TransportBackends'; import { TriggerHighlight } from './TriggerHighlight'; import { ViewOnlySettings } from './ViewOnlySettings'; +import { WalletConnect } from './WalletConnect'; import { WipeData } from './WipeData'; export const SettingsDebug = () => { @@ -84,6 +85,9 @@ export const SettingsDebug = () => { + + + ); }; diff --git a/packages/suite/src/views/settings/SettingsDebug/WalletConnect.tsx b/packages/suite/src/views/settings/SettingsDebug/WalletConnect.tsx new file mode 100644 index 000000000000..2b763694177f --- /dev/null +++ b/packages/suite/src/views/settings/SettingsDebug/WalletConnect.tsx @@ -0,0 +1,74 @@ +import { useState } from 'react'; + +import { Button, Column, Input, Row, Text } from '@trezor/components'; +import { + selectSessions, + walletConnectDisconnectThunk, + walletConnectPairThunk, +} from '@trezor/suite-walletconnect'; +import { spacings } from '@trezor/theme'; + +import { + ActionButton, + ActionColumn, + SectionItem, + StatusLight, + TextColumn, +} from 'src/components/suite'; +import { useDispatch, useSelector } from 'src/hooks/suite'; + +export const WalletConnect = () => { + const dispatch = useDispatch(); + const [connectionUrl, setConnectionUrl] = useState(''); + const sessions = useSelector(selectSessions); + + return ( + <> + + + setConnectionUrl(e.target.value)} + size="small" + placeholder="New Connection URL" + /> + { + dispatch(walletConnectPairThunk({ uri: connectionUrl })); + }} + > + Connect + + + + + + + + {sessions.map(session => ( + + + + {session.peer.metadata.name} + {session.peer.metadata.url} + {session.topic} + + + + ))} + + + + + ); +}; diff --git a/packages/suite/tsconfig.json b/packages/suite/tsconfig.json index 22418443b0a2..0b8103f1b779 100644 --- a/packages/suite/tsconfig.json +++ b/packages/suite/tsconfig.json @@ -108,6 +108,7 @@ "path": "../suite-desktop-connect-popup" }, { "path": "../suite-storage" }, + { "path": "../suite-walletconnect" }, { "path": "../theme" }, { "path": "../type-utils" }, { "path": "../urls" }, diff --git a/packages/urls/src/deeplinks.ts b/packages/urls/src/deeplinks.ts index af731f30edb7..7b400bc771f1 100644 --- a/packages/urls/src/deeplinks.ts +++ b/packages/urls/src/deeplinks.ts @@ -1 +1,2 @@ export const SUITE_BRIDGE_DEEPLINK = 'trezorsuite://bridge-requested-by-a-3rd-party'; +export const SUITE_WALLETCONNECT_DEEPLINK = 'trezorsuite://walletconnect'; diff --git a/scripts/list-outdated-dependencies/connect-dependencies.txt b/scripts/list-outdated-dependencies/connect-dependencies.txt index aed9027c51da..407d7632e354 100644 --- a/scripts/list-outdated-dependencies/connect-dependencies.txt +++ b/scripts/list-outdated-dependencies/connect-dependencies.txt @@ -91,3 +91,6 @@ scroll-into-view-if-needed @types/events @noble/hashes @scure/bip39 +@reown/walletkit +@walletconnect/core +@walletconnect/utils diff --git a/suite-common/suite-types/src/modal.ts b/suite-common/suite-types/src/modal.ts index a54824dc3245..d415a96dce8f 100644 --- a/suite-common/suite-types/src/modal.ts +++ b/suite-common/suite-types/src/modal.ts @@ -195,4 +195,8 @@ export type UserContextPayload = method: string; processName?: string; origin?: string; + } + | { + type: 'walletconnect-proposal'; + eventId: number; }; diff --git a/yarn.lock b/yarn.lock index a776e12c9025..e62581277c70 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3182,6 +3182,202 @@ __metadata: languageName: node linkType: hard +"@ethersproject/abstract-provider@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/abstract-provider@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/networks": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + "@ethersproject/transactions": "npm:^5.7.0" + "@ethersproject/web": "npm:^5.7.0" + checksum: 10/c03e413a812486002525f4036bf2cb90e77a19b98fa3d16279e28e0a05520a1085690fac2ee9f94b7931b9a803249ff8a8bbb26ff8dee52196a6ef7a3fc5edc5 + languageName: node + linkType: hard + +"@ethersproject/abstract-signer@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/abstract-signer@npm:5.7.0" + dependencies: + "@ethersproject/abstract-provider": "npm:^5.7.0" + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + checksum: 10/0a6ffade0a947c9ba617048334e1346838f394d1d0a5307ac435a0c63ed1033b247e25ffb0cd6880d7dcf5459581f52f67e3804ebba42ff462050f1e4321ba0c + languageName: node + linkType: hard + +"@ethersproject/address@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/address@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/keccak256": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/rlp": "npm:^5.7.0" + checksum: 10/1ac4f3693622ed9fbbd7e966a941ec1eba0d9445e6e8154b1daf8e93b8f62ad91853d1de5facf4c27b41e6f1e47b94a317a2492ba595bee1841fd3030c3e9a27 + languageName: node + linkType: hard + +"@ethersproject/base64@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/base64@npm:5.7.0" + dependencies: + "@ethersproject/bytes": "npm:^5.7.0" + checksum: 10/7105105f401e1c681e61db1e9da1b5960d8c5fbd262bbcacc99d61dbb9674a9db1181bb31903d98609f10e8a0eb64c850475f3b040d67dea953e2b0ac6380e96 + languageName: node + linkType: hard + +"@ethersproject/bignumber@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/bignumber@npm:5.7.0" + dependencies: + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + bn.js: "npm:^5.2.1" + checksum: 10/09cffa18a9f0730856b57c14c345bd68ba451159417e5aff684a8808011cd03b27b7c465d423370333a7d1c9a621392fc74f064a3b02c9edc49ebe497da6d45d + languageName: node + linkType: hard + +"@ethersproject/bytes@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/bytes@npm:5.7.0" + dependencies: + "@ethersproject/logger": "npm:^5.7.0" + checksum: 10/8b3ffedb68c1a82cfb875e9738361409cc33e2dcb1286b6ccfdc4dd8dd0317f7eacc8937b736c467d213dffc44b469690fe1a951e901953d5a90c5af2b675ae4 + languageName: node + linkType: hard + +"@ethersproject/constants@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/constants@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": "npm:^5.7.0" + checksum: 10/6d4b1355747cce837b3e76ec3bde70e4732736f23b04f196f706ebfa5d4d9c2be50904a390d4d40ce77803b98d03d16a9b6898418e04ba63491933ce08c4ba8a + languageName: node + linkType: hard + +"@ethersproject/hash@npm:5.7.0": + version: 5.7.0 + resolution: "@ethersproject/hash@npm:5.7.0" + dependencies: + "@ethersproject/abstract-signer": "npm:^5.7.0" + "@ethersproject/address": "npm:^5.7.0" + "@ethersproject/base64": "npm:^5.7.0" + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/keccak256": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + "@ethersproject/strings": "npm:^5.7.0" + checksum: 10/d83de3f3a1b99b404a2e7bb503f5cdd90c66a97a32cce1d36b09bb8e3fb7205b96e30ad28e2b9f30083beea6269b157d0c6e3425052bb17c0a35fddfdd1c72a3 + languageName: node + linkType: hard + +"@ethersproject/keccak256@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/keccak256@npm:5.7.0" + dependencies: + "@ethersproject/bytes": "npm:^5.7.0" + js-sha3: "npm:0.8.0" + checksum: 10/ff70950d82203aab29ccda2553422cbac2e7a0c15c986bd20a69b13606ed8bb6e4fdd7b67b8d3b27d4f841e8222cbaccd33ed34be29f866fec7308f96ed244c6 + languageName: node + linkType: hard + +"@ethersproject/logger@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/logger@npm:5.7.0" + checksum: 10/683a939f467ae7510deedc23d7611d0932c3046137f5ffb92ba1e3c8cd9cf2fbbaa676b660c248441a0fa9143783137c46d6e6d17d676188dd5a6ef0b72dd091 + languageName: node + linkType: hard + +"@ethersproject/networks@npm:^5.7.0": + version: 5.7.1 + resolution: "@ethersproject/networks@npm:5.7.1" + dependencies: + "@ethersproject/logger": "npm:^5.7.0" + checksum: 10/5265d0b4b72ef91af57be804b44507f4943038d609699764d8a69157ed381e30fe22ebf63630ed8e530ceb220f15d69dae8cda2e5023ccd793285c9d5882e599 + languageName: node + linkType: hard + +"@ethersproject/properties@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/properties@npm:5.7.0" + dependencies: + "@ethersproject/logger": "npm:^5.7.0" + checksum: 10/f8401a161940aa1c32695115a20c65357877002a6f7dc13ab1600064bf54d7b825b4db49de8dc8da69efcbb0c9f34f8813e1540427e63e262ab841c1bf6c1c1e + languageName: node + linkType: hard + +"@ethersproject/rlp@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/rlp@npm:5.7.0" + dependencies: + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + checksum: 10/3b8c5279f7654794d5874569f5598ae6a880e19e6616013a31e26c35c5f586851593a6e85c05ed7b391fbc74a1ea8612dd4d867daefe701bf4e8fcf2ab2f29b9 + languageName: node + linkType: hard + +"@ethersproject/signing-key@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/signing-key@npm:5.7.0" + dependencies: + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + bn.js: "npm:^5.2.1" + elliptic: "npm:6.5.4" + hash.js: "npm:1.1.7" + checksum: 10/ff2f79ded86232b139e7538e4aaa294c6022a7aaa8c95a6379dd7b7c10a6d363685c6967c816f98f609581cf01f0a5943c667af89a154a00bcfe093a8c7f3ce7 + languageName: node + linkType: hard + +"@ethersproject/strings@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/strings@npm:5.7.0" + dependencies: + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/constants": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + checksum: 10/24191bf30e98d434a9fba2f522784f65162d6712bc3e1ccc98ed85c5da5884cfdb5a1376b7695374655a7b95ec1f5fdbeef5afc7d0ea77ffeb78047e9b791fa5 + languageName: node + linkType: hard + +"@ethersproject/transactions@npm:5.7.0, @ethersproject/transactions@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/transactions@npm:5.7.0" + dependencies: + "@ethersproject/address": "npm:^5.7.0" + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/constants": "npm:^5.7.0" + "@ethersproject/keccak256": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + "@ethersproject/rlp": "npm:^5.7.0" + "@ethersproject/signing-key": "npm:^5.7.0" + checksum: 10/d809e9d40020004b7de9e34bf39c50377dce8ed417cdf001bfabc81ecb1b7d1e0c808fdca0a339ea05e1b380648eaf336fe70f137904df2d3c3135a38190a5af + languageName: node + linkType: hard + +"@ethersproject/web@npm:^5.7.0": + version: 5.7.1 + resolution: "@ethersproject/web@npm:5.7.1" + dependencies: + "@ethersproject/base64": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + "@ethersproject/strings": "npm:^5.7.0" + checksum: 10/c83b6b3ac40573ddb67b1750bb4cf21ded7d8555be5e53a97c0f34964622fd88de9220a90a118434bae164a2bff3acbdc5ecb990517b5f6dc32bdad7adf604c2 + languageName: node + linkType: hard + "@everstake/wallet-sdk@npm:^1.0.7": version: 1.0.7 resolution: "@everstake/wallet-sdk@npm:1.0.7" @@ -5777,6 +5973,161 @@ __metadata: languageName: node linkType: hard +"@parcel/watcher-android-arm64@npm:2.5.0": + version: 2.5.0 + resolution: "@parcel/watcher-android-arm64@npm:2.5.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-darwin-arm64@npm:2.5.0": + version: 2.5.0 + resolution: "@parcel/watcher-darwin-arm64@npm:2.5.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-darwin-x64@npm:2.5.0": + version: 2.5.0 + resolution: "@parcel/watcher-darwin-x64@npm:2.5.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher-freebsd-x64@npm:2.5.0": + version: 2.5.0 + resolution: "@parcel/watcher-freebsd-x64@npm:2.5.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm-glibc@npm:2.5.0": + version: 2.5.0 + resolution: "@parcel/watcher-linux-arm-glibc@npm:2.5.0" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm-musl@npm:2.5.0": + version: 2.5.0 + resolution: "@parcel/watcher-linux-arm-musl@npm:2.5.0" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm64-glibc@npm:2.5.0": + version: 2.5.0 + resolution: "@parcel/watcher-linux-arm64-glibc@npm:2.5.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm64-musl@npm:2.5.0": + version: 2.5.0 + resolution: "@parcel/watcher-linux-arm64-musl@npm:2.5.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@parcel/watcher-linux-x64-glibc@npm:2.5.0": + version: 2.5.0 + resolution: "@parcel/watcher-linux-x64-glibc@npm:2.5.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-x64-musl@npm:2.5.0": + version: 2.5.0 + resolution: "@parcel/watcher-linux-x64-musl@npm:2.5.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@parcel/watcher-wasm@npm:^2.4.1": + version: 2.5.0 + resolution: "@parcel/watcher-wasm@npm:2.5.0" + dependencies: + is-glob: "npm:^4.0.3" + micromatch: "npm:^4.0.5" + napi-wasm: "npm:^1.1.0" + checksum: 10/2e17915320267b6d6305406a4b59cb0b0e88eb93ba6acc61c5382c517421a9132992fb8d1468a0030ee9945a1d6216ee6112452e78b30089590cd206c49d98a0 + languageName: node + linkType: hard + +"@parcel/watcher-win32-arm64@npm:2.5.0": + version: 2.5.0 + resolution: "@parcel/watcher-win32-arm64@npm:2.5.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-win32-ia32@npm:2.5.0": + version: 2.5.0 + resolution: "@parcel/watcher-win32-ia32@npm:2.5.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@parcel/watcher-win32-x64@npm:2.5.0": + version: 2.5.0 + resolution: "@parcel/watcher-win32-x64@npm:2.5.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher@npm:^2.4.1": + version: 2.5.0 + resolution: "@parcel/watcher@npm:2.5.0" + dependencies: + "@parcel/watcher-android-arm64": "npm:2.5.0" + "@parcel/watcher-darwin-arm64": "npm:2.5.0" + "@parcel/watcher-darwin-x64": "npm:2.5.0" + "@parcel/watcher-freebsd-x64": "npm:2.5.0" + "@parcel/watcher-linux-arm-glibc": "npm:2.5.0" + "@parcel/watcher-linux-arm-musl": "npm:2.5.0" + "@parcel/watcher-linux-arm64-glibc": "npm:2.5.0" + "@parcel/watcher-linux-arm64-musl": "npm:2.5.0" + "@parcel/watcher-linux-x64-glibc": "npm:2.5.0" + "@parcel/watcher-linux-x64-musl": "npm:2.5.0" + "@parcel/watcher-win32-arm64": "npm:2.5.0" + "@parcel/watcher-win32-ia32": "npm:2.5.0" + "@parcel/watcher-win32-x64": "npm:2.5.0" + detect-libc: "npm:^1.0.3" + is-glob: "npm:^4.0.3" + micromatch: "npm:^4.0.5" + node-addon-api: "npm:^7.0.0" + node-gyp: "npm:latest" + dependenciesMeta: + "@parcel/watcher-android-arm64": + optional: true + "@parcel/watcher-darwin-arm64": + optional: true + "@parcel/watcher-darwin-x64": + optional: true + "@parcel/watcher-freebsd-x64": + optional: true + "@parcel/watcher-linux-arm-glibc": + optional: true + "@parcel/watcher-linux-arm-musl": + optional: true + "@parcel/watcher-linux-arm64-glibc": + optional: true + "@parcel/watcher-linux-arm64-musl": + optional: true + "@parcel/watcher-linux-x64-glibc": + optional: true + "@parcel/watcher-linux-x64-musl": + optional: true + "@parcel/watcher-win32-arm64": + optional: true + "@parcel/watcher-win32-ia32": + optional: true + "@parcel/watcher-win32-x64": + optional: true + checksum: 10/1e28b1aa9a63456ebfa7af3e41297d088bd31d9e32548604f4f26ed96c5808f4330cd515062e879c24a9eaab7894066c8a3951ee30b59e7cbe6786ab2c790dae + languageName: node + linkType: hard + "@pkgjs/parseargs@npm:^0.11.0": version: 0.11.0 resolution: "@pkgjs/parseargs@npm:0.11.0" @@ -7424,6 +7775,21 @@ __metadata: languageName: node linkType: hard +"@reown/walletkit@npm:^1.1.1": + version: 1.1.1 + resolution: "@reown/walletkit@npm:1.1.1" + dependencies: + "@walletconnect/core": "npm:2.17.1" + "@walletconnect/jsonrpc-provider": "npm:1.0.14" + "@walletconnect/jsonrpc-utils": "npm:1.0.8" + "@walletconnect/logger": "npm:2.1.2" + "@walletconnect/sign-client": "npm:2.17.1" + "@walletconnect/types": "npm:2.17.1" + "@walletconnect/utils": "npm:2.17.1" + checksum: 10/57622f91421d6de22d37a400c47788e64747b874c72553d2a85526d09f081b6c7f5a1c38accbc5a5b99389d7682c34a904e78baed546b3700ead77c404394f7f + languageName: node + linkType: hard + "@rollup/rollup-android-arm-eabi@npm:4.14.3": version: 4.14.3 resolution: "@rollup/rollup-android-arm-eabi@npm:4.14.3" @@ -8676,6 +9042,176 @@ __metadata: languageName: node linkType: hard +"@stablelib/aead@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/aead@npm:1.0.1" + checksum: 10/1a6f68d138f105d17dd65349751515bd252ab0498c77255b8555478d28415600dde493f909eb718245047a993f838dfae546071e1687566ffb7b8c3e10c918d9 + languageName: node + linkType: hard + +"@stablelib/binary@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/binary@npm:1.0.1" + dependencies: + "@stablelib/int": "npm:^1.0.1" + checksum: 10/c5ed769e2b5d607a5cdb72d325fcf98db437627862fade839daad934bd9ccf02a6f6e34f9de8cb3b18d72fce2ba6cc019a5d22398187d7d69d2607165f27f8bf + languageName: node + linkType: hard + +"@stablelib/bytes@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/bytes@npm:1.0.1" + checksum: 10/23d4d632a8a15ca91be1dc56da92eefed695d9b66068d1ab27a5655d0233dc2ac0b8668f875af542ca4ed526893c65dd53e777c72c8056f3648115aac98823ee + languageName: node + linkType: hard + +"@stablelib/chacha20poly1305@npm:1.0.1": + version: 1.0.1 + resolution: "@stablelib/chacha20poly1305@npm:1.0.1" + dependencies: + "@stablelib/aead": "npm:^1.0.1" + "@stablelib/binary": "npm:^1.0.1" + "@stablelib/chacha": "npm:^1.0.1" + "@stablelib/constant-time": "npm:^1.0.1" + "@stablelib/poly1305": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/2a4df136b078b7c09acb3c6fe029613d4c9f70a0ce8bec65551a4a5016930a4f9091d3b83ed1cfc9c2e7bd6ec7f5ee93a7dc729b784b3900dcb97f3c7f5da84a + languageName: node + linkType: hard + +"@stablelib/chacha@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/chacha@npm:1.0.1" + dependencies: + "@stablelib/binary": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/38cd8095d94eda29a9bb8a742b1c945dba7f9ec91fc07ab351c826680d03976641ac6366c3d004a00a72d746fcd838215fe1263ef4b0660c453c5de18a0a4295 + languageName: node + linkType: hard + +"@stablelib/constant-time@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/constant-time@npm:1.0.1" + checksum: 10/dba4f4bf508de2ff15f7f0cbd875e70391aa3ba3698290fe1ed2feb151c243ba08a90fc6fb390ec2230e30fcc622318c591a7c0e35dcb8150afb50c797eac3d7 + languageName: node + linkType: hard + +"@stablelib/ed25519@npm:^1.0.2": + version: 1.0.3 + resolution: "@stablelib/ed25519@npm:1.0.3" + dependencies: + "@stablelib/random": "npm:^1.0.2" + "@stablelib/sha512": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/52e861e4fbd9d3d0a1a370d9ad96de8e2e15f133249bbbc32da66b8993e843db598054a3af17a746beb3fd5043b7529613a5dda7f2e79de6613eb3ebe5ffe3dd + languageName: node + linkType: hard + +"@stablelib/hash@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/hash@npm:1.0.1" + checksum: 10/3ff1f12d1a4082aaf4b6cdf40c2010aabe5c4209d3b40b97b5bbb0d9abc0ee94abdc545e57de0614afaea807ca0212ac870e247ec8f66cdce91ec39ce82948cf + languageName: node + linkType: hard + +"@stablelib/hkdf@npm:1.0.1": + version: 1.0.1 + resolution: "@stablelib/hkdf@npm:1.0.1" + dependencies: + "@stablelib/hash": "npm:^1.0.1" + "@stablelib/hmac": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/9d45e303715a1835c8612b78e6c1b9d2b7463699b484241d8681fb5c17e0f2bbde5ce211c882134b64616a402e09177baeba80426995ff227b3654a155ab225d + languageName: node + linkType: hard + +"@stablelib/hmac@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/hmac@npm:1.0.1" + dependencies: + "@stablelib/constant-time": "npm:^1.0.1" + "@stablelib/hash": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/d3ac9e2fea2b4972a5d874ee9d96c94f8c8207452e2d243a2668b1325a7b20bd9a1541df32387789a0e9bfef82c3fe021a785f46eb3442c782443863faf75205 + languageName: node + linkType: hard + +"@stablelib/int@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/int@npm:1.0.1" + checksum: 10/65bfbf50a382eea70c68e05366bf379cfceff8fbc076f1c267ef2f2411d7aed64fd140c415cb6c29f19a3910d3b8b7805d4b32ad5721a5007a8e744a808c7ae3 + languageName: node + linkType: hard + +"@stablelib/keyagreement@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/keyagreement@npm:1.0.1" + dependencies: + "@stablelib/bytes": "npm:^1.0.1" + checksum: 10/3c8ec904dd50f72f3162f5447a0fa8f1d9ca6e24cd272d3dbe84971267f3b47f9bd5dc4e4eeedf3fbac2fe01f2d9277053e57c8e60db8c5544bfb35c62d290dd + languageName: node + linkType: hard + +"@stablelib/poly1305@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/poly1305@npm:1.0.1" + dependencies: + "@stablelib/constant-time": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/b01d4b532a42e5260f7f263e3a670924849c7ba51569abd8ece8279a448e625cbe4049bff1d50ad0d3a9d5f268c1b52fc611808640a6e684550edd7589a0a581 + languageName: node + linkType: hard + +"@stablelib/random@npm:1.0.2, @stablelib/random@npm:^1.0.1, @stablelib/random@npm:^1.0.2": + version: 1.0.2 + resolution: "@stablelib/random@npm:1.0.2" + dependencies: + "@stablelib/binary": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/f5ace0a588dc4c21f01cb85837892d4c872e994ae77a58a8eb7dd61aa0b26fb1e9b46b0445e71af57d963ef7d9f5965c64258fc0d04df7b2947bc48f2d3560c5 + languageName: node + linkType: hard + +"@stablelib/sha256@npm:1.0.1": + version: 1.0.1 + resolution: "@stablelib/sha256@npm:1.0.1" + dependencies: + "@stablelib/binary": "npm:^1.0.1" + "@stablelib/hash": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/4d55f6c676e2cc0dd2a32be0cfa96837f3e15ae48dc50a340e56db2b201f1341a9ecabb429a3a44a5bf31adee0a8151467a8e7cc15346c561c914faad415d4d4 + languageName: node + linkType: hard + +"@stablelib/sha512@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/sha512@npm:1.0.1" + dependencies: + "@stablelib/binary": "npm:^1.0.1" + "@stablelib/hash": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/35d188cd62f20d27e1d61ea07984022e9a78815a023c8f7c747d92456a60823f0683138591e87158a47cd72e73cf24ecf97f8936aa6fba8b3bef6fcb138e723d + languageName: node + linkType: hard + +"@stablelib/wipe@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/wipe@npm:1.0.1" + checksum: 10/287802eb146810a46ba72af70b82022caf83a8aeebde23605f5ee0decf64fe2b97a60c856e43b6617b5801287c30cfa863cfb0469e7fcde6f02d143cf0c6cbf4 + languageName: node + linkType: hard + +"@stablelib/x25519@npm:1.0.3": + version: 1.0.3 + resolution: "@stablelib/x25519@npm:1.0.3" + dependencies: + "@stablelib/keyagreement": "npm:^1.0.1" + "@stablelib/random": "npm:^1.0.2" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/fb5469e390ee2515d926633e3e179038894ac4f5e8c8cd2c2fc912022e34a051112eab0fe80c4dbc6e59129679844182562a036abff89444e5c4a05dd42ed329 + languageName: node + linkType: hard + "@stellar/js-xdr@npm:^3.1.2": version: 3.1.2 resolution: "@stellar/js-xdr@npm:3.1.2" @@ -12593,6 +13129,23 @@ __metadata: languageName: unknown linkType: soft +"@trezor/suite-walletconnect@workspace:*, @trezor/suite-walletconnect@workspace:packages/suite-walletconnect": + version: 0.0.0-use.local + resolution: "@trezor/suite-walletconnect@workspace:packages/suite-walletconnect" + dependencies: + "@reduxjs/toolkit": "npm:1.9.5" + "@reown/walletkit": "npm:^1.1.1" + "@suite-common/redux-utils": "workspace:*" + "@suite-common/wallet-config": "workspace:*" + "@suite-common/wallet-core": "workspace:*" + "@suite-common/wallet-types": "workspace:*" + "@trezor/connect": "workspace:*" + "@trezor/suite-desktop-api": "workspace:*" + "@walletconnect/core": "npm:^2.17.2" + "@walletconnect/utils": "npm:^2.17.2" + languageName: unknown + linkType: soft + "@trezor/suite-web@workspace:packages/suite-web": version: 0.0.0-use.local resolution: "@trezor/suite-web@workspace:packages/suite-web" @@ -12711,6 +13264,7 @@ __metadata: "@trezor/suite-desktop-api": "workspace:*" "@trezor/suite-desktop-connect-popup": "workspace:*" "@trezor/suite-storage": "workspace:*" + "@trezor/suite-walletconnect": "workspace:*" "@trezor/theme": "workspace:*" "@trezor/type-utils": "workspace:*" "@trezor/urls": "workspace:*" @@ -14903,6 +15457,317 @@ __metadata: languageName: node linkType: hard +"@walletconnect/core@npm:2.17.1": + version: 2.17.1 + resolution: "@walletconnect/core@npm:2.17.1" + dependencies: + "@walletconnect/heartbeat": "npm:1.2.2" + "@walletconnect/jsonrpc-provider": "npm:1.0.14" + "@walletconnect/jsonrpc-types": "npm:1.0.4" + "@walletconnect/jsonrpc-utils": "npm:1.0.8" + "@walletconnect/jsonrpc-ws-connection": "npm:1.0.14" + "@walletconnect/keyvaluestorage": "npm:1.1.1" + "@walletconnect/logger": "npm:2.1.2" + "@walletconnect/relay-api": "npm:1.0.11" + "@walletconnect/relay-auth": "npm:1.0.4" + "@walletconnect/safe-json": "npm:1.0.2" + "@walletconnect/time": "npm:1.0.2" + "@walletconnect/types": "npm:2.17.1" + "@walletconnect/utils": "npm:2.17.1" + "@walletconnect/window-getters": "npm:1.0.1" + events: "npm:3.3.0" + lodash.isequal: "npm:4.5.0" + uint8arrays: "npm:3.1.0" + checksum: 10/06095034d736e91c21c3d78027f7ad21546310879e595fca81fb58790fcf8ab3170812fabc4937ee7ab2126a97cf226e3f3e46982f76bac96db2d3c040b7a4f0 + languageName: node + linkType: hard + +"@walletconnect/core@npm:^2.17.2": + version: 2.17.2 + resolution: "@walletconnect/core@npm:2.17.2" + dependencies: + "@walletconnect/heartbeat": "npm:1.2.2" + "@walletconnect/jsonrpc-provider": "npm:1.0.14" + "@walletconnect/jsonrpc-types": "npm:1.0.4" + "@walletconnect/jsonrpc-utils": "npm:1.0.8" + "@walletconnect/jsonrpc-ws-connection": "npm:1.0.14" + "@walletconnect/keyvaluestorage": "npm:1.1.1" + "@walletconnect/logger": "npm:2.1.2" + "@walletconnect/relay-api": "npm:1.0.11" + "@walletconnect/relay-auth": "npm:1.0.4" + "@walletconnect/safe-json": "npm:1.0.2" + "@walletconnect/time": "npm:1.0.2" + "@walletconnect/types": "npm:2.17.2" + "@walletconnect/utils": "npm:2.17.2" + "@walletconnect/window-getters": "npm:1.0.1" + events: "npm:3.3.0" + lodash.isequal: "npm:4.5.0" + uint8arrays: "npm:3.1.0" + checksum: 10/331417457e17e0b0dc4bd805ecd450407ecd50b8c79609b43c7f664a7f9024d490e9d75ed52fb717a44ebc1a12721cc6cfa11d6cfe698af1439755224e225b11 + languageName: node + linkType: hard + +"@walletconnect/environment@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/environment@npm:1.0.1" + dependencies: + tslib: "npm:1.14.1" + checksum: 10/f6a1e3456e50cc7cfa58d99fd513ecac75573d0b8bcbbedcb1d7ec04ca9108df16b471afd40761b2a5cb4f66d8e33b7ba25f02c62c8365d68b1bd1ef52c1813e + languageName: node + linkType: hard + +"@walletconnect/events@npm:1.0.1, @walletconnect/events@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/events@npm:1.0.1" + dependencies: + keyvaluestorage-interface: "npm:^1.0.0" + tslib: "npm:1.14.1" + checksum: 10/b5a105e9ac4d7d0a500085afd77b71e71a8ab78fd38b033e4ce91f8626fd8c254b1ba49a59c8c0ed8a00a7e8b93995163f414eda73c58694f8f830e453a902b6 + languageName: node + linkType: hard + +"@walletconnect/heartbeat@npm:1.2.2": + version: 1.2.2 + resolution: "@walletconnect/heartbeat@npm:1.2.2" + dependencies: + "@walletconnect/events": "npm:^1.0.1" + "@walletconnect/time": "npm:^1.0.2" + events: "npm:^3.3.0" + checksum: 10/f3a1c3c255ac9bd374b25e1ef65a61b1f623b9118d48471acaac1f9ee4ee1438d8d8cbc77733cdd980809b468443c046328fe5ac4084e01e0892f8c699cf44e7 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-provider@npm:1.0.14": + version: 1.0.14 + resolution: "@walletconnect/jsonrpc-provider@npm:1.0.14" + dependencies: + "@walletconnect/jsonrpc-utils": "npm:^1.0.8" + "@walletconnect/safe-json": "npm:^1.0.2" + events: "npm:^3.3.0" + checksum: 10/c3c78f00148043b70213f5174d537b210f1fb231d96103cbf7d0101626578d3c13fe99ac080df7a0056c7128ce488b0523eda0e3d1deed75754672848b4909a5 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-types@npm:1.0.4, @walletconnect/jsonrpc-types@npm:^1.0.2, @walletconnect/jsonrpc-types@npm:^1.0.3": + version: 1.0.4 + resolution: "@walletconnect/jsonrpc-types@npm:1.0.4" + dependencies: + events: "npm:^3.3.0" + keyvaluestorage-interface: "npm:^1.0.0" + checksum: 10/8cdc9f7b5e3ae0d702a44a6fc4c388a2b627188df758ffd103ba9aac6596a787d2f319aa8f6928a03d990c71c17d9b876028f36b8e0c37bd5c9026231ed9ba45 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-utils@npm:1.0.8, @walletconnect/jsonrpc-utils@npm:^1.0.6, @walletconnect/jsonrpc-utils@npm:^1.0.8": + version: 1.0.8 + resolution: "@walletconnect/jsonrpc-utils@npm:1.0.8" + dependencies: + "@walletconnect/environment": "npm:^1.0.1" + "@walletconnect/jsonrpc-types": "npm:^1.0.3" + tslib: "npm:1.14.1" + checksum: 10/4687b4582a5c33883d94e87ca8bb22d129a2a47b6e1d9e2c3210b74f02d9677723b3bf2283d2f0fa69866b0a66a80cdfada9a2f1c204d485fbd10d2baed1f0a6 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-ws-connection@npm:1.0.14": + version: 1.0.14 + resolution: "@walletconnect/jsonrpc-ws-connection@npm:1.0.14" + dependencies: + "@walletconnect/jsonrpc-utils": "npm:^1.0.6" + "@walletconnect/safe-json": "npm:^1.0.2" + events: "npm:^3.3.0" + ws: "npm:^7.5.1" + checksum: 10/2ad66217b62fb57a43c8edd33c27da0c9ba09cfec79f4d43e5d30bcb8224a48c1d1f0d6273be0371f2c7e33d8138a6fe03afa499b429ab7829d719677cd48f4d + languageName: node + linkType: hard + +"@walletconnect/keyvaluestorage@npm:1.1.1": + version: 1.1.1 + resolution: "@walletconnect/keyvaluestorage@npm:1.1.1" + dependencies: + "@walletconnect/safe-json": "npm:^1.0.1" + idb-keyval: "npm:^6.2.1" + unstorage: "npm:^1.9.0" + peerDependencies: + "@react-native-async-storage/async-storage": 1.x + peerDependenciesMeta: + "@react-native-async-storage/async-storage": + optional: true + checksum: 10/fd9c275b3249d8e9f722866703b5c040eb35d0670c92a297428ffb700ac36c6b9978242beac5d2cfe97eb522ae01307cacd9c79ecf95640878804fce0f13c5e7 + languageName: node + linkType: hard + +"@walletconnect/logger@npm:2.1.2": + version: 2.1.2 + resolution: "@walletconnect/logger@npm:2.1.2" + dependencies: + "@walletconnect/safe-json": "npm:^1.0.2" + pino: "npm:7.11.0" + checksum: 10/2e6d438bd352595fff6691712c83953e3ad6b2b9ab298c5a8b670a024f53a3f744b165e5aa081a79261ee4801b93b6c60698a39947d613d49a8f6e6215ecd4c2 + languageName: node + linkType: hard + +"@walletconnect/relay-api@npm:1.0.11": + version: 1.0.11 + resolution: "@walletconnect/relay-api@npm:1.0.11" + dependencies: + "@walletconnect/jsonrpc-types": "npm:^1.0.2" + checksum: 10/d85f88b9744917ee5b36d2df23bf4012819b14b73229f9bdca942bee11dd3b3428808c7528c2b1f6b3d91fa1d34a22b1e20b46533e402301318cbd4ab59b9c17 + languageName: node + linkType: hard + +"@walletconnect/relay-auth@npm:1.0.4": + version: 1.0.4 + resolution: "@walletconnect/relay-auth@npm:1.0.4" + dependencies: + "@stablelib/ed25519": "npm:^1.0.2" + "@stablelib/random": "npm:^1.0.1" + "@walletconnect/safe-json": "npm:^1.0.1" + "@walletconnect/time": "npm:^1.0.2" + tslib: "npm:1.14.1" + uint8arrays: "npm:^3.0.0" + checksum: 10/d9128b2a25f38ebf2f49f8c184dad5c997ad6343513bddd7941459c2f2757e6acfbcdd36dc9c12d0491f55723d5e2c5c0ee2e9cf381b3247274b920e95d4db0e + languageName: node + linkType: hard + +"@walletconnect/safe-json@npm:1.0.2, @walletconnect/safe-json@npm:^1.0.1, @walletconnect/safe-json@npm:^1.0.2": + version: 1.0.2 + resolution: "@walletconnect/safe-json@npm:1.0.2" + dependencies: + tslib: "npm:1.14.1" + checksum: 10/b9d031dab3916d20fa5241d7ad2be425368ae489995ba3ba18d6ad88e81ad3ed093b8e867b8a4fc44759099896aeb5afee5635858cb80c4819ebc7ebb71ed5a6 + languageName: node + linkType: hard + +"@walletconnect/sign-client@npm:2.17.1": + version: 2.17.1 + resolution: "@walletconnect/sign-client@npm:2.17.1" + dependencies: + "@walletconnect/core": "npm:2.17.1" + "@walletconnect/events": "npm:1.0.1" + "@walletconnect/heartbeat": "npm:1.2.2" + "@walletconnect/jsonrpc-utils": "npm:1.0.8" + "@walletconnect/logger": "npm:2.1.2" + "@walletconnect/time": "npm:1.0.2" + "@walletconnect/types": "npm:2.17.1" + "@walletconnect/utils": "npm:2.17.1" + events: "npm:3.3.0" + checksum: 10/90fb9af3c9faccf96ef5987b94e65b9169a349754ef00bf6555628af670bee7a3fa5ac9e65a5b885443e86b9144d6321666d13e9d54ee3655635c828d3adad76 + languageName: node + linkType: hard + +"@walletconnect/time@npm:1.0.2, @walletconnect/time@npm:^1.0.2": + version: 1.0.2 + resolution: "@walletconnect/time@npm:1.0.2" + dependencies: + tslib: "npm:1.14.1" + checksum: 10/ea84d0850e63306837f98a228e08a59f6945da38ba5553b1f158abeaa8ec4dc8a0025a0f0cfc843ddf05ce2947da95c02ac1e8cedce7092bbe1c2d46ca816dd9 + languageName: node + linkType: hard + +"@walletconnect/types@npm:2.17.1": + version: 2.17.1 + resolution: "@walletconnect/types@npm:2.17.1" + dependencies: + "@walletconnect/events": "npm:1.0.1" + "@walletconnect/heartbeat": "npm:1.2.2" + "@walletconnect/jsonrpc-types": "npm:1.0.4" + "@walletconnect/keyvaluestorage": "npm:1.1.1" + "@walletconnect/logger": "npm:2.1.2" + events: "npm:3.3.0" + checksum: 10/981a92f650de364166bd6a7865958846bc80e24e07cfb96dea9f6f0fc13d6b421424cc684b2b9373498be091bc367005e3aa899338018ecd18ddcd8c7d04fc9b + languageName: node + linkType: hard + +"@walletconnect/types@npm:2.17.2": + version: 2.17.2 + resolution: "@walletconnect/types@npm:2.17.2" + dependencies: + "@walletconnect/events": "npm:1.0.1" + "@walletconnect/heartbeat": "npm:1.2.2" + "@walletconnect/jsonrpc-types": "npm:1.0.4" + "@walletconnect/keyvaluestorage": "npm:1.1.1" + "@walletconnect/logger": "npm:2.1.2" + events: "npm:3.3.0" + checksum: 10/a668ab7a88b9f5904833f9e0b1bc5ac7501a5bdfdd1c84774464e399f337e31e61da90982bb9bf022ef91398b5e15d74ef368625cce38902c6a7cffb255d46fd + languageName: node + linkType: hard + +"@walletconnect/utils@npm:2.17.1": + version: 2.17.1 + resolution: "@walletconnect/utils@npm:2.17.1" + dependencies: + "@ethersproject/hash": "npm:5.7.0" + "@ethersproject/transactions": "npm:5.7.0" + "@stablelib/chacha20poly1305": "npm:1.0.1" + "@stablelib/hkdf": "npm:1.0.1" + "@stablelib/random": "npm:1.0.2" + "@stablelib/sha256": "npm:1.0.1" + "@stablelib/x25519": "npm:1.0.3" + "@walletconnect/jsonrpc-utils": "npm:1.0.8" + "@walletconnect/keyvaluestorage": "npm:1.1.1" + "@walletconnect/relay-api": "npm:1.0.11" + "@walletconnect/relay-auth": "npm:1.0.4" + "@walletconnect/safe-json": "npm:1.0.2" + "@walletconnect/time": "npm:1.0.2" + "@walletconnect/types": "npm:2.17.1" + "@walletconnect/window-getters": "npm:1.0.1" + "@walletconnect/window-metadata": "npm:1.0.1" + detect-browser: "npm:5.3.0" + elliptic: "npm:6.5.7" + query-string: "npm:7.1.3" + uint8arrays: "npm:3.1.0" + checksum: 10/a3a54de356232cc80aba84312624a5981deaae3e2d8fb37544bc396bf7e1ec9ade9e3fdc2158b771583dfea91b7f6d07ecb550d03362bced7b4c7559e19682f9 + languageName: node + linkType: hard + +"@walletconnect/utils@npm:2.17.2, @walletconnect/utils@npm:^2.17.2": + version: 2.17.2 + resolution: "@walletconnect/utils@npm:2.17.2" + dependencies: + "@ethersproject/hash": "npm:5.7.0" + "@ethersproject/transactions": "npm:5.7.0" + "@stablelib/chacha20poly1305": "npm:1.0.1" + "@stablelib/hkdf": "npm:1.0.1" + "@stablelib/random": "npm:1.0.2" + "@stablelib/sha256": "npm:1.0.1" + "@stablelib/x25519": "npm:1.0.3" + "@walletconnect/jsonrpc-utils": "npm:1.0.8" + "@walletconnect/keyvaluestorage": "npm:1.1.1" + "@walletconnect/relay-api": "npm:1.0.11" + "@walletconnect/relay-auth": "npm:1.0.4" + "@walletconnect/safe-json": "npm:1.0.2" + "@walletconnect/time": "npm:1.0.2" + "@walletconnect/types": "npm:2.17.2" + "@walletconnect/window-getters": "npm:1.0.1" + "@walletconnect/window-metadata": "npm:1.0.1" + detect-browser: "npm:5.3.0" + elliptic: "npm:6.6.0" + query-string: "npm:7.1.3" + uint8arrays: "npm:3.1.0" + checksum: 10/4d43adf7c5d21cc3916a797ff704fa348c7ef9d54184e16f6a9ee8b7d3aa3e58861b1c3a8c6c7bdc5137de67da822689f0035838a4d57d50a03834920cada4b4 + languageName: node + linkType: hard + +"@walletconnect/window-getters@npm:1.0.1, @walletconnect/window-getters@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/window-getters@npm:1.0.1" + dependencies: + tslib: "npm:1.14.1" + checksum: 10/8d3fcb134fbbe903ba4a63f1fa5a7849fd443874bf45488260afc2fe3b1cbe211f86da1d76ee844be7c0e8618ae67402f94c213432fd80b04715eaf72e2e00e3 + languageName: node + linkType: hard + +"@walletconnect/window-metadata@npm:1.0.1": + version: 1.0.1 + resolution: "@walletconnect/window-metadata@npm:1.0.1" + dependencies: + "@walletconnect/window-getters": "npm:^1.0.1" + tslib: "npm:1.14.1" + checksum: 10/cf322e0860c4448cefcd81f34bc6d49d1a235a81e74a6146baefb74e47cf6c3c8050b65e534a3dc13f8d2aed3fc59732ccf48d5a01b5b23e08e1847fcffa950c + languageName: node + linkType: hard + "@web3-storage/multipart-parser@npm:^1.0.0": version: 1.0.0 resolution: "@web3-storage/multipart-parser@npm:1.0.0" @@ -15622,13 +16487,13 @@ __metadata: languageName: node linkType: hard -"anymatch@npm:^3.0.3, anymatch@npm:~3.1.2": - version: 3.1.2 - resolution: "anymatch@npm:3.1.2" +"anymatch@npm:^3.0.3, anymatch@npm:^3.1.3, anymatch@npm:~3.1.2": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" dependencies: normalize-path: "npm:^3.0.0" picomatch: "npm:^2.0.4" - checksum: 10/985163db2292fac9e5a1e072bf99f1b5baccf196e4de25a0b0b81865ebddeb3b3eb4480734ef0a2ac8c002845396b91aa89121f5b84f93981a4658164a9ec6e9 + checksum: 10/3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 languageName: node linkType: hard @@ -18068,6 +18933,15 @@ __metadata: languageName: node linkType: hard +"citty@npm:^0.1.5, citty@npm:^0.1.6": + version: 0.1.6 + resolution: "citty@npm:0.1.6" + dependencies: + consola: "npm:^3.2.3" + checksum: 10/3208947e73abb699a12578ee2bfee254bf8dd1ce0d5698e8a298411cabf16bd3620d63433aef5bd88cdb2b9da71aef18adefa3b4ffd18273bb62dd1d28c344f5 + languageName: node + linkType: hard + "cjs-module-lexer@npm:^1.0.0, cjs-module-lexer@npm:^1.2.2, cjs-module-lexer@npm:^1.2.3": version: 1.4.1 resolution: "cjs-module-lexer@npm:1.4.1" @@ -18190,6 +19064,17 @@ __metadata: languageName: node linkType: hard +"clipboardy@npm:^4.0.0": + version: 4.0.0 + resolution: "clipboardy@npm:4.0.0" + dependencies: + execa: "npm:^8.0.1" + is-wsl: "npm:^3.1.0" + is64bit: "npm:^2.0.0" + checksum: 10/ec4ebe7e5c81d9c9cb994637e7b0e068c1c8fc272167ecd5519f967427271ec66e0e64da7268a2630b860eff42933aeabe25ba5e42bb80dbf1fae6362df059ed + languageName: node + linkType: hard + "cliui@npm:^6.0.0": version: 6.0.0 resolution: "cliui@npm:6.0.0" @@ -18674,6 +19559,13 @@ __metadata: languageName: node linkType: hard +"confbox@npm:^0.1.8": + version: 0.1.8 + resolution: "confbox@npm:0.1.8" + checksum: 10/4ebcfb1c6a3b25276734ec5722e88768eb61fc02f98e11960b845c5c62bc27fd05f493d2a8244d9675b24ef95afe4c0d511cdcad02c72f5eeea463cc26687999 + languageName: node + linkType: hard + "config-file-ts@npm:0.2.8-rc1": version: 0.2.8-rc1 resolution: "config-file-ts@npm:0.2.8-rc1" @@ -18779,6 +19671,13 @@ __metadata: languageName: node linkType: hard +"consola@npm:^3.2.3": + version: 3.2.3 + resolution: "consola@npm:3.2.3" + checksum: 10/02972dcb048c337357a3628438e5976b8e45bcec22fdcfbe9cd17622992953c4d695d5152f141464a02deac769b1d23028e8ac87f56483838df7a6bbf8e0f5a2 + languageName: node + linkType: hard + "console-browserify@npm:^1.1.0": version: 1.2.0 resolution: "console-browserify@npm:1.2.0" @@ -18823,6 +19722,13 @@ __metadata: languageName: node linkType: hard +"cookie-es@npm:^1.2.2": + version: 1.2.2 + resolution: "cookie-es@npm:1.2.2" + checksum: 10/0fd742c11caa185928e450543f84df62d4b2c1fc7b5041196b57b7db04e1c6ac6585fb40e4f579a2819efefd2d6a9cbb4d17f71240d05f4dcd8f74ae81341a20 + languageName: node + linkType: hard + "cookie-signature@npm:1.0.6": version: 1.0.6 resolution: "cookie-signature@npm:1.0.6" @@ -19150,6 +20056,15 @@ __metadata: languageName: node linkType: hard +"crossws@npm:>=0.2.0 <0.4.0": + version: 0.3.1 + resolution: "crossws@npm:0.3.1" + dependencies: + uncrypto: "npm:^0.1.3" + checksum: 10/d358a58b364b3314a0e42ee66b1432c01d416128e53eda983eb121abdad5ff39831a1f1ea3e90e80157ceaa0fc925f5193c151b156aa62af9e0c9bcb2fb2a15a + languageName: node + linkType: hard + "crypt@npm:0.0.2": version: 0.0.2 resolution: "crypt@npm:0.0.2" @@ -20374,10 +21289,10 @@ __metadata: languageName: node linkType: hard -"defu@npm:^6.1.2": - version: 6.1.2 - resolution: "defu@npm:6.1.2" - checksum: 10/5704aa6ea0b503004ee25b2ce909af8e6dc7c472d2d41e293f5a879534a0a7827a37e6692e0ca0c6e8d3ef6b00651d50089be681c814832cbed98f0f206ef25b +"defu@npm:^6.1.2, defu@npm:^6.1.4": + version: 6.1.4 + resolution: "defu@npm:6.1.4" + checksum: 10/aeffdb47300f45b4fdef1c5bd3880ac18ea7a1fd5b8a8faf8df29350ff03bf16dd34f9800205cab513d476e4c0a3783aa0cff0a433aff0ac84a67ddc4c8a2d64 languageName: node linkType: hard @@ -20519,6 +21434,13 @@ __metadata: languageName: node linkType: hard +"destr@npm:^2.0.3": + version: 2.0.3 + resolution: "destr@npm:2.0.3" + checksum: 10/dbb756baa876810ec0ca4bcb702d86cc3b480ed14f36bf5747718ed211f96bca5520b63a4109eb181ad940ee2a645677d9a63d4a0ed11a7510619dae97317201 + languageName: node + linkType: hard + "destroy@npm:1.2.0, destroy@npm:^1.0.4": version: 1.2.0 resolution: "destroy@npm:1.2.0" @@ -20526,6 +21448,13 @@ __metadata: languageName: node linkType: hard +"detect-browser@npm:5.3.0": + version: 5.3.0 + resolution: "detect-browser@npm:5.3.0" + checksum: 10/4a8551e1f5170633c9aa976f16c57f81f1044d071b2eb853c572bd817bf9cd0cc90c9c520d950edb5accd31b1b0c8ddb7a96e82040b0b5579f9f09c77446a117 + languageName: node + linkType: hard + "detect-file@npm:^1.0.0": version: 1.0.0 resolution: "detect-file@npm:1.0.0" @@ -21077,6 +22006,18 @@ __metadata: languageName: node linkType: hard +"duplexify@npm:^4.1.2": + version: 4.1.3 + resolution: "duplexify@npm:4.1.3" + dependencies: + end-of-stream: "npm:^1.4.1" + inherits: "npm:^2.0.3" + readable-stream: "npm:^3.1.1" + stream-shift: "npm:^1.0.2" + checksum: 10/b44b98ba0ffac3a658b4b1bf877219e996db288c5ae6f3dc55ca9b2cbef7df60c10eabfdd947f3d73a623eb9975a74a66d6d61e6f26bff90155315adb362aa77 + languageName: node + linkType: hard + "eastasianwidth@npm:^0.2.0": version: 0.2.0 resolution: "eastasianwidth@npm:0.2.0" @@ -21245,7 +22186,22 @@ __metadata: languageName: node linkType: hard -"elliptic@npm:^6.4.0, elliptic@npm:^6.5.3, elliptic@npm:^6.5.4": +"elliptic@npm:6.5.4": + version: 6.5.4 + resolution: "elliptic@npm:6.5.4" + dependencies: + bn.js: "npm:^4.11.9" + brorand: "npm:^1.1.0" + hash.js: "npm:^1.0.0" + hmac-drbg: "npm:^1.0.1" + inherits: "npm:^2.0.4" + minimalistic-assert: "npm:^1.0.1" + minimalistic-crypto-utils: "npm:^1.0.1" + checksum: 10/2cd7ff4b69720dbb2ca1ca650b2cf889d1df60c96d4a99d331931e4fe21e45a7f3b8074e86618ca7e56366c4b6258007f234f9d61d9b0c87bbbc8ea990b99e94 + languageName: node + linkType: hard + +"elliptic@npm:6.5.7": version: 6.5.7 resolution: "elliptic@npm:6.5.7" dependencies: @@ -21260,6 +22216,21 @@ __metadata: languageName: node linkType: hard +"elliptic@npm:6.6.0, elliptic@npm:^6.4.0, elliptic@npm:^6.5.3, elliptic@npm:^6.5.4": + version: 6.6.0 + resolution: "elliptic@npm:6.6.0" + dependencies: + bn.js: "npm:^4.11.9" + brorand: "npm:^1.1.0" + hash.js: "npm:^1.0.0" + hmac-drbg: "npm:^1.0.1" + inherits: "npm:^2.0.4" + minimalistic-assert: "npm:^1.0.1" + minimalistic-crypto-utils: "npm:^1.0.1" + checksum: 10/27575b0403e010e5d7e7a131fcadce6a7dd1ae82ccb24cc7c20b275d32ab1cb7ecb6a070225795df08407441dc8c7a32efd986596d48d1d6846f64ff8f094af7 + languageName: node + linkType: hard + "emittery@npm:^0.13.1": version: 0.13.1 resolution: "emittery@npm:0.13.1" @@ -22667,7 +23638,7 @@ __metadata: languageName: node linkType: hard -"events@npm:^3.0.0, events@npm:^3.2.0, events@npm:^3.3.0": +"events@npm:3.3.0, events@npm:^3.0.0, events@npm:^3.2.0, events@npm:^3.3.0": version: 3.3.0 resolution: "events@npm:3.3.0" checksum: 10/a3d47e285e28d324d7180f1e493961a2bbb4cad6412090e4dec114f4db1f5b560c7696ee8e758f55e23913ede856e3689cd3aa9ae13c56b5d8314cd3b3ddd1be @@ -22780,6 +23751,23 @@ __metadata: languageName: node linkType: hard +"execa@npm:^8.0.1": + version: 8.0.1 + resolution: "execa@npm:8.0.1" + dependencies: + cross-spawn: "npm:^7.0.3" + get-stream: "npm:^8.0.1" + human-signals: "npm:^5.0.0" + is-stream: "npm:^3.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^5.1.0" + onetime: "npm:^6.0.0" + signal-exit: "npm:^4.1.0" + strip-final-newline: "npm:^3.0.0" + checksum: 10/d2ab5fe1e2bb92b9788864d0713f1fce9a07c4594e272c0c97bc18c90569897ab262e4ea58d27a694d288227a2e24f16f5e2575b44224ad9983b799dc7f1098d + languageName: node + linkType: hard + "execa@npm:^9.5.1": version: 9.5.2 resolution: "execa@npm:9.5.2" @@ -23595,7 +24583,7 @@ __metadata: languageName: node linkType: hard -"fast-redact@npm:^3.1.1": +"fast-redact@npm:^3.0.0, fast-redact@npm:^3.1.1": version: 3.5.0 resolution: "fast-redact@npm:3.5.0" checksum: 10/24b27e2023bd5a62f908d97a753b1adb8d89206b260f97727728e00b693197dea2fc2aa3711147a385d0ec6e713569fd533df37a4ef947e08cb65af3019c7ad5 @@ -24627,6 +25615,13 @@ __metadata: languageName: node linkType: hard +"get-port-please@npm:^3.1.2": + version: 3.1.2 + resolution: "get-port-please@npm:3.1.2" + checksum: 10/ec8b8da9f816edde114b76742ec29695730094904bb0e94309081e4adf3f797b483b9d648abcf5e0511c4e21a7bf68334672b9575f8b23bccf93bf97eb517f0e + languageName: node + linkType: hard + "get-port@npm:^3.2.0": version: 3.2.0 resolution: "get-port@npm:3.2.0" @@ -24704,6 +25699,13 @@ __metadata: languageName: node linkType: hard +"get-stream@npm:^8.0.1": + version: 8.0.1 + resolution: "get-stream@npm:8.0.1" + checksum: 10/dde5511e2e65a48e9af80fea64aff11b4921b14b6e874c6f8294c50975095af08f41bfb0b680c887f28b566dd6ec2cb2f960f9d36a323359be324ce98b766e9e + languageName: node + linkType: hard + "get-stream@npm:^9.0.0": version: 9.0.1 resolution: "get-stream@npm:9.0.1" @@ -25217,6 +26219,24 @@ __metadata: languageName: node linkType: hard +"h3@npm:^1.12.0, h3@npm:^1.13.0": + version: 1.13.0 + resolution: "h3@npm:1.13.0" + dependencies: + cookie-es: "npm:^1.2.2" + crossws: "npm:>=0.2.0 <0.4.0" + defu: "npm:^6.1.4" + destr: "npm:^2.0.3" + iron-webcrypto: "npm:^1.2.1" + ohash: "npm:^1.1.4" + radix3: "npm:^1.1.2" + ufo: "npm:^1.5.4" + uncrypto: "npm:^0.1.3" + unenv: "npm:^1.10.0" + checksum: 10/ecdbe3cdddc767ea6f9be9939b14192dd296eb434641bbecc5b665f7210de8c03910ae40931668788395b5de6cd517afaa628d7b5ce0fb60786fce1ad6e81bcb + languageName: node + linkType: hard + "handle-thing@npm:^2.0.0": version: 2.0.1 resolution: "handle-thing@npm:2.0.1" @@ -25344,7 +26364,7 @@ __metadata: languageName: node linkType: hard -"hash.js@npm:^1.0.0, hash.js@npm:^1.0.3": +"hash.js@npm:1.1.7, hash.js@npm:^1.0.0, hash.js@npm:^1.0.3": version: 1.1.7 resolution: "hash.js@npm:1.1.7" dependencies: @@ -26080,6 +27100,13 @@ __metadata: languageName: node linkType: hard +"http-shutdown@npm:^1.2.2": + version: 1.2.2 + resolution: "http-shutdown@npm:1.2.2" + checksum: 10/1c99b575b1a7ebd749950e7f59410348723638808336063321d89588b7f7b548d61c8e3566af0f1f4f961d941c758677d062d2289bc63356ead143da4d8f3daf + languageName: node + linkType: hard + "http-signature@npm:~1.3.6": version: 1.3.6 resolution: "http-signature@npm:1.3.6" @@ -26159,6 +27186,13 @@ __metadata: languageName: node linkType: hard +"human-signals@npm:^5.0.0": + version: 5.0.0 + resolution: "human-signals@npm:5.0.0" + checksum: 10/30f8870d831cdcd2d6ec0486a7d35d49384996742052cee792854273fa9dd9e7d5db06bb7985d4953e337e10714e994e0302e90dc6848069171b05ec836d65b0 + languageName: node + linkType: hard + "human-signals@npm:^8.0.0": version: 8.0.0 resolution: "human-signals@npm:8.0.0" @@ -26235,6 +27269,13 @@ __metadata: languageName: node linkType: hard +"idb-keyval@npm:^6.2.1": + version: 6.2.1 + resolution: "idb-keyval@npm:6.2.1" + checksum: 10/9a1416ff5e2ceff3832f5645518f438833a5ff6ee316fe3ec111d580db120425991d64d8098a847be7541bbbb7cc941984b4d0d62d541c39f7a0f415594837c2 + languageName: node + linkType: hard + "idb@npm:^8.0.1": version: 8.0.1 resolution: "idb@npm:8.0.1" @@ -26594,6 +27635,13 @@ __metadata: languageName: node linkType: hard +"iron-webcrypto@npm:^1.2.1": + version: 1.2.1 + resolution: "iron-webcrypto@npm:1.2.1" + checksum: 10/c1f52ccfe2780efa5438c134538ee4b26c96a87d22f351d896781219efbce25b4fe716d1cb7f248e02da96881760541135acbcc7c0622ffedf71cb0e227bebf9 + languageName: node + linkType: hard + "is-alphabetical@npm:^1.0.0": version: 1.0.4 resolution: "is-alphabetical@npm:1.0.4" @@ -27259,6 +28307,15 @@ __metadata: languageName: node linkType: hard +"is64bit@npm:^2.0.0": + version: 2.0.0 + resolution: "is64bit@npm:2.0.0" + dependencies: + system-architecture: "npm:^0.1.0" + checksum: 10/94dafd5f29bfb96c542e89ef8c33e811159ca7d07a2890ab83026fa87706612af4101308d9392e9ee68e046e8604a6b59a8f41091f8556f6235efbcfd9c5574c + languageName: node + linkType: hard + "isarray@npm:0.0.1": version: 0.0.1 resolution: "isarray@npm:0.0.1" @@ -28156,6 +29213,15 @@ __metadata: languageName: node linkType: hard +"jiti@npm:^2.1.2": + version: 2.4.1 + resolution: "jiti@npm:2.4.1" + bin: + jiti: lib/jiti-cli.mjs + checksum: 10/c05d3645ff4a88f5c52e33757dbae18737f6b51aa46631ed18cbf7741f2d997eb91ffd4249f61b47779d8ac1931d6539ec48dfdab8e1ca761cc160aa240d09f2 + languageName: node + linkType: hard + "joi@npm:^17.11.0, joi@npm:^17.2.1": version: 17.13.3 resolution: "joi@npm:17.13.3" @@ -28233,6 +29299,13 @@ __metadata: languageName: node linkType: hard +"js-sha3@npm:0.8.0": + version: 0.8.0 + resolution: "js-sha3@npm:0.8.0" + checksum: 10/a49ac6d3a6bfd7091472a28ab82a94c7fb8544cc584ee1906486536ba1cb4073a166f8c7bb2b0565eade23c5b3a7b8f7816231e0309ab5c549b737632377a20c + languageName: node + linkType: hard + "js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -28940,6 +30013,13 @@ __metadata: languageName: node linkType: hard +"keyvaluestorage-interface@npm:^1.0.0": + version: 1.0.0 + resolution: "keyvaluestorage-interface@npm:1.0.0" + checksum: 10/e652448bc915f9c21b9916678ed58f5314c831f0a284d190a340c0370296c71918e0cdc1156a17b12d1993941b302f0881e23fb9c395079e2065a7d2f33d0199 + languageName: node + linkType: hard + "khroma@npm:^2.0.0": version: 2.1.0 resolution: "khroma@npm:2.1.0" @@ -29367,6 +30447,35 @@ __metadata: languageName: node linkType: hard +"listhen@npm:^1.9.0": + version: 1.9.0 + resolution: "listhen@npm:1.9.0" + dependencies: + "@parcel/watcher": "npm:^2.4.1" + "@parcel/watcher-wasm": "npm:^2.4.1" + citty: "npm:^0.1.6" + clipboardy: "npm:^4.0.0" + consola: "npm:^3.2.3" + crossws: "npm:>=0.2.0 <0.4.0" + defu: "npm:^6.1.4" + get-port-please: "npm:^3.1.2" + h3: "npm:^1.12.0" + http-shutdown: "npm:^1.2.2" + jiti: "npm:^2.1.2" + mlly: "npm:^1.7.1" + node-forge: "npm:^1.3.1" + pathe: "npm:^1.1.2" + std-env: "npm:^3.7.0" + ufo: "npm:^1.5.4" + untun: "npm:^0.1.3" + uqr: "npm:^0.1.2" + bin: + listen: bin/listhen.mjs + listhen: bin/listhen.mjs + checksum: 10/72b869c8604301352c5d5825a7737705f0df2ce1795af8e779b6f956ba71302e13b12b2d35142687fb4e1e8ccc2747e2be3c9cbf20f7f96b73f897881aa3c384 + languageName: node + linkType: hard + "listr2@npm:^3.8.3": version: 3.14.0 resolution: "listr2@npm:3.14.0" @@ -29516,7 +30625,7 @@ __metadata: languageName: node linkType: hard -"lodash.isequal@npm:^4.5.0": +"lodash.isequal@npm:4.5.0, lodash.isequal@npm:^4.5.0": version: 4.5.0 resolution: "lodash.isequal@npm:4.5.0" checksum: 10/82fc58a83a1555f8df34ca9a2cd300995ff94018ac12cc47c349655f0ae1d4d92ba346db4c19bbfc90510764e0c00ddcc985a358bdcd4b3b965abf8f2a48a214 @@ -29757,7 +30866,7 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^10.0.0, lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": +"lru-cache@npm:^10.0.0, lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0, lru-cache@npm:^10.4.3": version: 10.4.3 resolution: "lru-cache@npm:10.4.3" checksum: 10/e6e90267360476720fa8e83cc168aa2bf0311f3f2eea20a6ba78b90a885ae72071d9db132f40fda4129c803e7dcec3a6b6a6fbb44ca90b081630b810b5d6a41a @@ -31940,6 +33049,15 @@ __metadata: languageName: node linkType: hard +"mime@npm:^3.0.0": + version: 3.0.0 + resolution: "mime@npm:3.0.0" + bin: + mime: cli.js + checksum: 10/b2d31580deb58be89adaa1877cbbf152b7604b980fd7ef8f08b9e96bfedf7d605d9c23a8ba62aa12c8580b910cd7c1d27b7331d0f40f7a14e17d5a0bbec3b49f + languageName: node + linkType: hard + "mimic-fn@npm:^1.0.0": version: 1.2.0 resolution: "mimic-fn@npm:1.2.0" @@ -32220,15 +33338,15 @@ __metadata: languageName: node linkType: hard -"mlly@npm:^1.2.0, mlly@npm:^1.4.0": - version: 1.6.1 - resolution: "mlly@npm:1.6.1" +"mlly@npm:^1.4.0, mlly@npm:^1.7.1, mlly@npm:^1.7.2": + version: 1.7.3 + resolution: "mlly@npm:1.7.3" dependencies: - acorn: "npm:^8.11.3" + acorn: "npm:^8.14.0" pathe: "npm:^1.1.2" - pkg-types: "npm:^1.0.3" - ufo: "npm:^1.3.2" - checksum: 10/00b4c355236eb3d0294106f208718db486f6e34e28bbb7f6965bd9d6237db338e566f2e13489fbf8bfa9b1337c0f2568d4aeac1840f9963054c91881acc974a9 + pkg-types: "npm:^1.2.1" + ufo: "npm:^1.5.4" + checksum: 10/77921e4b37f48e939b9879dbf3d3734086a69a97ddfe9adc5ae7b026ee2f73a0bcac4511c6c645cee79ccc2852c24b83f93bfd29ada7a7a3259cb943569fc7f6 languageName: node linkType: hard @@ -32329,6 +33447,13 @@ __metadata: languageName: node linkType: hard +"multiformats@npm:^9.4.2": + version: 9.9.0 + resolution: "multiformats@npm:9.9.0" + checksum: 10/ad55c7d480d22f4258a68fd88aa2aab744fe0cb1e68d732fc886f67d858b37e3aa6c2cec12b2960ead7730d43be690931485238569952d8a3d7f90fdc726c652 + languageName: node + linkType: hard + "multimatch@npm:^5.0.0": version: 5.0.0 resolution: "multimatch@npm:5.0.0" @@ -32451,6 +33576,13 @@ __metadata: languageName: node linkType: hard +"napi-wasm@npm:^1.1.0": + version: 1.1.3 + resolution: "napi-wasm@npm:1.1.3" + checksum: 10/5cad19c3ba4c8b176453149542ea72f156be5db6d249611a76537833381f5cec802ed4d7ae5c3f7c0ef69d439c037f7247bbae7db711ed84f915be2a9fc43bb4 + languageName: node + linkType: hard + "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" @@ -32755,6 +33887,15 @@ __metadata: languageName: node linkType: hard +"node-addon-api@npm:^7.0.0": + version: 7.1.1 + resolution: "node-addon-api@npm:7.1.1" + dependencies: + node-gyp: "npm:latest" + checksum: 10/ee1e1ed6284a2f8cd1d59ac6175ecbabf8978dcf570345e9a8095a9d0a2b9ced591074ae77f9009287b00c402352b38aa9322a34f2199cdc9f567b842a636b94 + languageName: node + linkType: hard + "node-addon-api@npm:^8.0.0": version: 8.1.0 resolution: "node-addon-api@npm:8.1.0" @@ -32792,10 +33933,10 @@ __metadata: languageName: node linkType: hard -"node-fetch-native@npm:^1.0.2": - version: 1.2.0 - resolution: "node-fetch-native@npm:1.2.0" - checksum: 10/d5f10c475c8ec8f03d19754ec5d6d2eee5fa82c50cc8f805e0a551f525c58809bd8291fc4b5a7275a5d6ff8bbe446417dbd1733d065544e2e6ac9a606aa83a20 +"node-fetch-native@npm:^1.0.2, node-fetch-native@npm:^1.6.4": + version: 1.6.4 + resolution: "node-fetch-native@npm:1.6.4" + checksum: 10/39c4c6d0c2a4bed1444943e1647ad0d79eb6638cf159bc37dffeafd22cffcf6a998e006aa1f3dd1d9d2258db7d78dee96b44bee4ba0bbaf0440ed348794f2543 languageName: node linkType: hard @@ -33319,6 +34460,31 @@ __metadata: languageName: node linkType: hard +"ofetch@npm:^1.4.1": + version: 1.4.1 + resolution: "ofetch@npm:1.4.1" + dependencies: + destr: "npm:^2.0.3" + node-fetch-native: "npm:^1.6.4" + ufo: "npm:^1.5.4" + checksum: 10/329ecd5595eff6da090c728e66f4223ad7ba5c2c309446f3707245c1b213da47dfd1eb1740f26b3da9e31ed7b7a903733bdaae85187b714514da865a0c5a4a9c + languageName: node + linkType: hard + +"ohash@npm:^1.1.4": + version: 1.1.4 + resolution: "ohash@npm:1.1.4" + checksum: 10/b11445234e59c9c2b00f357f8f00b6ba00e14c84fc0a232cdc14eb1d80066479b09d27af0201631e84b7a15ba7c4a1939f4cc47f2030e9bf83c9e8afc3ff7dfd + languageName: node + linkType: hard + +"on-exit-leak-free@npm:^0.2.0": + version: 0.2.0 + resolution: "on-exit-leak-free@npm:0.2.0" + checksum: 10/36a3a1baea964dc01088884e9d87824cc1a3304ae702e7c688bdb5deec61fbb79325977dd6cba5988f60ad40fedc6ef31ec705adf65b4b042bc0d2686186c0dd + languageName: node + linkType: hard + "on-exit-leak-free@npm:^2.1.0": version: 2.1.2 resolution: "on-exit-leak-free@npm:2.1.2" @@ -34264,6 +35430,23 @@ __metadata: languageName: node linkType: hard +"pino-abstract-transport@npm:v0.5.0": + version: 0.5.0 + resolution: "pino-abstract-transport@npm:0.5.0" + dependencies: + duplexify: "npm:^4.1.2" + split2: "npm:^4.0.0" + checksum: 10/d304a104e5cb0c3fef62ea544a4a39bf2472a602cdd7ddb136b0671b9c324ad93fa7888825c4cf33e624802436e897081ba92440f40518b9f2dbdbc0c889e409 + languageName: node + linkType: hard + +"pino-std-serializers@npm:^4.0.0": + version: 4.0.0 + resolution: "pino-std-serializers@npm:4.0.0" + checksum: 10/cec586f9634ef0e6582f62bc8fc5ca5b6e5e11ab88fe3950c66fb0fd5d6690f66bc39cd3f27216b925d2963ad5c3bba415718819ac20ebe0390c7d056cbfea1b + languageName: node + linkType: hard + "pino-std-serializers@npm:^6.0.0": version: 6.2.2 resolution: "pino-std-serializers@npm:6.2.2" @@ -34271,6 +35454,27 @@ __metadata: languageName: node linkType: hard +"pino@npm:7.11.0": + version: 7.11.0 + resolution: "pino@npm:7.11.0" + dependencies: + atomic-sleep: "npm:^1.0.0" + fast-redact: "npm:^3.0.0" + on-exit-leak-free: "npm:^0.2.0" + pino-abstract-transport: "npm:v0.5.0" + pino-std-serializers: "npm:^4.0.0" + process-warning: "npm:^1.0.0" + quick-format-unescaped: "npm:^4.0.3" + real-require: "npm:^0.1.0" + safe-stable-stringify: "npm:^2.1.0" + sonic-boom: "npm:^2.2.1" + thread-stream: "npm:^0.15.1" + bin: + pino: bin.js + checksum: 10/1c7b4b52fea76e0bc5d8b1190a0fee24279cb16d76fdb5833b32b64256fd8a94d641574b850faba5be72514f04045206b6d902a9a3f5ceae2a4296687088e073 + languageName: node + linkType: hard + "pino@npm:^8.11.0": version: 8.21.0 resolution: "pino@npm:8.21.0" @@ -34364,14 +35568,14 @@ __metadata: languageName: node linkType: hard -"pkg-types@npm:^1.0.3": - version: 1.0.3 - resolution: "pkg-types@npm:1.0.3" +"pkg-types@npm:^1.2.1": + version: 1.2.1 + resolution: "pkg-types@npm:1.2.1" dependencies: - jsonc-parser: "npm:^3.2.0" - mlly: "npm:^1.2.0" - pathe: "npm:^1.1.0" - checksum: 10/e17e1819ce579c9ea390e4c41a9ed9701d8cff14b463f9577cc4f94688da8917c66dabc40feacd47a21eb3de9b532756a78becd882b76add97053af307c1240a + confbox: "npm:^0.1.8" + mlly: "npm:^1.7.2" + pathe: "npm:^1.1.2" + checksum: 10/d61f4b7a2351b55b22f1d08f5f9b4236928d5660886131cc0e11576362e2b3bfcb54084bb4a0ba79147b707a27dcae87444a86e731113e152ffd3b6155ce5a5a languageName: node linkType: hard @@ -35285,6 +36489,13 @@ __metadata: languageName: node linkType: hard +"process-warning@npm:^1.0.0": + version: 1.0.0 + resolution: "process-warning@npm:1.0.0" + checksum: 10/8736d11d8d71c349d176e210305e84d74b13af06efb3c779377b056bfd608257d1e4e32b8fbbf90637c900f0313e40f7c9f583140884f667a21fc10a869b840c + languageName: node + linkType: hard + "process-warning@npm:^3.0.0": version: 3.0.0 resolution: "process-warning@npm:3.0.0" @@ -35623,7 +36834,7 @@ __metadata: languageName: node linkType: hard -"query-string@npm:^7.1.3": +"query-string@npm:7.1.3, query-string@npm:^7.1.3": version: 7.1.3 resolution: "query-string@npm:7.1.3" dependencies: @@ -35706,6 +36917,13 @@ __metadata: languageName: node linkType: hard +"radix3@npm:^1.1.2": + version: 1.1.2 + resolution: "radix3@npm:1.1.2" + checksum: 10/5ed01a8e4b753e325c6ecb01d993de77f690e548ef9e149e7dc403ee7b109c2cb41e3d09bc3ce004d872c67c8dca1d556dbf7808b1ac7df9f86994e57d757557 + languageName: node + linkType: hard + "railroad-diagrams@npm:^1.0.0": version: 1.0.0 resolution: "railroad-diagrams@npm:1.0.0" @@ -36768,6 +37986,13 @@ __metadata: languageName: node linkType: hard +"real-require@npm:^0.1.0": + version: 0.1.0 + resolution: "real-require@npm:0.1.0" + checksum: 10/0ba1c440dc9b7777d35a97f755312bf236be0847249f76cc9789c5c08d141f5d80b8564888e6a94ed0253fabf597b6892f8502c4e5658fb98f88642633a39723 + languageName: node + linkType: hard + "real-require@npm:^0.2.0": version: 0.2.0 resolution: "real-require@npm:0.2.0" @@ -38047,10 +39272,10 @@ __metadata: languageName: node linkType: hard -"safe-stable-stringify@npm:^2.3.1": - version: 2.4.3 - resolution: "safe-stable-stringify@npm:2.4.3" - checksum: 10/a6c192bbefe47770a11072b51b500ed29be7b1c15095371c1ee1dc13e45ce48ee3c80330214c56764d006c485b88bd0b24940d868948170dddc16eed312582d8 +"safe-stable-stringify@npm:^2.1.0, safe-stable-stringify@npm:^2.3.1": + version: 2.5.0 + resolution: "safe-stable-stringify@npm:2.5.0" + checksum: 10/2697fa186c17c38c3ca5309637b4ac6de2f1c3d282da27cd5e1e3c88eca0fb1f9aea568a6aabdf284111592c8782b94ee07176f17126031be72ab1313ed46c5c languageName: node linkType: hard @@ -38871,6 +40096,15 @@ __metadata: languageName: node linkType: hard +"sonic-boom@npm:^2.2.1": + version: 2.8.0 + resolution: "sonic-boom@npm:2.8.0" + dependencies: + atomic-sleep: "npm:^1.0.0" + checksum: 10/05351d9f44bac59b2a4ab42ee22bf81b8c3bbd22db20183d78d5f2067557eb623e0eaf93b2bc0f8417bee92ca372bc26e0d83e3bdb0ffebcc33738ac1c191876 + languageName: node + linkType: hard + "sonic-boom@npm:^3.7.0": version: 3.8.1 resolution: "sonic-boom@npm:3.8.1" @@ -39253,10 +40487,10 @@ __metadata: languageName: node linkType: hard -"std-env@npm:^3.3.3": - version: 3.7.0 - resolution: "std-env@npm:3.7.0" - checksum: 10/6ee0cca1add3fd84656b0002cfbc5bfa20340389d9ba4720569840f1caa34bce74322aef4c93f046391583e50649d0cf81a5f8fe1d411e50b659571690a45f12 +"std-env@npm:^3.3.3, std-env@npm:^3.7.0": + version: 3.8.0 + resolution: "std-env@npm:3.8.0" + checksum: 10/034176196cfcaaab16dbdd96fc9e925a9544799fb6dc5a3e36fe43270f3a287c7f779d785b89edaf22cef2b5f1dcada2aae67430b8602e785ee74bdb3f671768 languageName: node linkType: hard @@ -39344,10 +40578,10 @@ __metadata: languageName: node linkType: hard -"stream-shift@npm:^1.0.0": - version: 1.0.1 - resolution: "stream-shift@npm:1.0.1" - checksum: 10/59b82b44b29ec3699b5519a49b3cedcc6db58c72fb40c04e005525dfdcab1c75c4e0c180b923c380f204bed78211b9bad8faecc7b93dece4d004c3f6ec75737b +"stream-shift@npm:^1.0.0, stream-shift@npm:^1.0.2": + version: 1.0.3 + resolution: "stream-shift@npm:1.0.3" + checksum: 10/a24c0a3f66a8f9024bd1d579a533a53be283b4475d4e6b4b3211b964031447bdf6532dd1f3c2b0ad66752554391b7c62bd7ca4559193381f766534e723d50242 languageName: node linkType: hard @@ -40127,6 +41361,13 @@ __metadata: languageName: node linkType: hard +"system-architecture@npm:^0.1.0": + version: 0.1.0 + resolution: "system-architecture@npm:0.1.0" + checksum: 10/ca0dd793c45c354ab57dd7fc8ce7dc9923a6e07382bd3b22eb5b08f55ddb0217c390d00767549c5155fd4ce7ef23ffdd8cfb33dd4344cbbd37837d085a50f6f0 + languageName: node + linkType: hard + "systeminformation@npm:^5.25.4": version: 5.25.5 resolution: "systeminformation@npm:5.25.5" @@ -40482,6 +41723,15 @@ __metadata: languageName: node linkType: hard +"thread-stream@npm:^0.15.1": + version: 0.15.2 + resolution: "thread-stream@npm:0.15.2" + dependencies: + real-require: "npm:^0.1.0" + checksum: 10/ca0a4f5bf45db88b48b41af0299455eaa8f01dd3ef8279e7ba6909c295b3ab79ddf576b595cbbceb4dbdf4012b17c6449805092926163fcbf30ac1604cb595b1 + languageName: node + linkType: hard + "thread-stream@npm:^2.6.0": version: 2.7.0 resolution: "thread-stream@npm:2.7.0" @@ -41067,6 +42317,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:1.14.1, tslib@npm:^1.13.0, tslib@npm:^1.9.0": + version: 1.14.1 + resolution: "tslib@npm:1.14.1" + checksum: 10/7dbf34e6f55c6492637adb81b555af5e3b4f9cc6b998fb440dac82d3b42bdc91560a35a5fb75e20e24a076c651438234da6743d139e4feabf0783f3cdfe1dddb + languageName: node + linkType: hard + "tslib@npm:2.5.0": version: 2.5.0 resolution: "tslib@npm:2.5.0" @@ -41081,13 +42338,6 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^1.13.0, tslib@npm:^1.9.0": - version: 1.14.1 - resolution: "tslib@npm:1.14.1" - checksum: 10/7dbf34e6f55c6492637adb81b555af5e3b4f9cc6b998fb440dac82d3b42bdc91560a35a5fb75e20e24a076c651438234da6743d139e4feabf0783f3cdfe1dddb - languageName: node - linkType: hard - "tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.4.0, tslib@npm:^2.5.3, tslib@npm:^2.6.2, tslib@npm:^2.6.3": version: 2.8.1 resolution: "tslib@npm:2.8.1" @@ -41415,10 +42665,10 @@ __metadata: languageName: node linkType: hard -"ufo@npm:^1.3.2": - version: 1.4.0 - resolution: "ufo@npm:1.4.0" - checksum: 10/b7aea8503878dc5ad797d8fc6fe39fec64d9cc7e89fb147ef86ec676e37bb462d99d67c6aad20b15f7d3e6d275d66666b29214422e268f1d98f6eaf707a207a6 +"ufo@npm:^1.5.4": + version: 1.5.4 + resolution: "ufo@npm:1.5.4" + checksum: 10/a885ed421e656aea6ca64e9727b8118a9488715460b6f1a0f0427118adfe2f2830fe7c1d5bd9c5c754a332e6807516551cd663ea67ce9ed6a4e3edc739916335 languageName: node linkType: hard @@ -41438,6 +42688,24 @@ __metadata: languageName: node linkType: hard +"uint8arrays@npm:3.1.0": + version: 3.1.0 + resolution: "uint8arrays@npm:3.1.0" + dependencies: + multiformats: "npm:^9.4.2" + checksum: 10/caf1cd6a1cdbd7c59d6c8698c06a6d603380942b5745b3fddcd1b16f7a84a4f351fb8c6ac41f4cb2c59c226bb6d954733a6e20a42dec6f3fd266a02270a5088d + languageName: node + linkType: hard + +"uint8arrays@npm:^3.0.0": + version: 3.1.1 + resolution: "uint8arrays@npm:3.1.1" + dependencies: + multiformats: "npm:^9.4.2" + checksum: 10/536e70273c040484aa7d522031a9dbca1fe8c06eb58a3ace1064ba68825b4e2764d4a0b604a1c451e7b8be0986dc94f23a419cfe9334bd116716074a2d29b33d + languageName: node + linkType: hard + "unbox-primitive@npm:^1.1.0": version: 1.1.0 resolution: "unbox-primitive@npm:1.1.0" @@ -41450,6 +42718,13 @@ __metadata: languageName: node linkType: hard +"uncrypto@npm:^0.1.3": + version: 0.1.3 + resolution: "uncrypto@npm:0.1.3" + checksum: 10/0020f74b0ce34723196d8982a73bb7f40cff455a41b8f88ae146b86885f4e66e41a1241fe80a887505c3bd2c7f07ed362b6ed041968370073c40a98496e6a737 + languageName: node + linkType: hard + "underscore@npm:~1.13.2": version: 1.13.6 resolution: "underscore@npm:1.13.6" @@ -41478,6 +42753,19 @@ __metadata: languageName: node linkType: hard +"unenv@npm:^1.10.0": + version: 1.10.0 + resolution: "unenv@npm:1.10.0" + dependencies: + consola: "npm:^3.2.3" + defu: "npm:^6.1.4" + mime: "npm:^3.0.0" + node-fetch-native: "npm:^1.6.4" + pathe: "npm:^1.1.2" + checksum: 10/23198e150fd3b4db4d7abe444b75ee05a0d36768bd6d94a6aaf5dca830db82e707ccc0f6cca22671327b62c5cd85ada08d4665bf7652afec9de0bdc7a4546249 + languageName: node + linkType: hard + "unicode-canonical-property-names-ecmascript@npm:^2.0.0": version: 2.0.0 resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" @@ -41901,6 +43189,65 @@ __metadata: languageName: node linkType: hard +"unstorage@npm:^1.9.0": + version: 1.13.1 + resolution: "unstorage@npm:1.13.1" + dependencies: + anymatch: "npm:^3.1.3" + chokidar: "npm:^3.6.0" + citty: "npm:^0.1.6" + destr: "npm:^2.0.3" + h3: "npm:^1.13.0" + listhen: "npm:^1.9.0" + lru-cache: "npm:^10.4.3" + node-fetch-native: "npm:^1.6.4" + ofetch: "npm:^1.4.1" + ufo: "npm:^1.5.4" + peerDependencies: + "@azure/app-configuration": ^1.7.0 + "@azure/cosmos": ^4.1.1 + "@azure/data-tables": ^13.2.2 + "@azure/identity": ^4.5.0 + "@azure/keyvault-secrets": ^4.9.0 + "@azure/storage-blob": ^12.25.0 + "@capacitor/preferences": ^6.0.2 + "@netlify/blobs": ^6.5.0 || ^7.0.0 || ^8.1.0 + "@planetscale/database": ^1.19.0 + "@upstash/redis": ^1.34.3 + "@vercel/kv": ^1.0.1 + idb-keyval: ^6.2.1 + ioredis: ^5.4.1 + peerDependenciesMeta: + "@azure/app-configuration": + optional: true + "@azure/cosmos": + optional: true + "@azure/data-tables": + optional: true + "@azure/identity": + optional: true + "@azure/keyvault-secrets": + optional: true + "@azure/storage-blob": + optional: true + "@capacitor/preferences": + optional: true + "@netlify/blobs": + optional: true + "@planetscale/database": + optional: true + "@upstash/redis": + optional: true + "@vercel/kv": + optional: true + idb-keyval: + optional: true + ioredis: + optional: true + checksum: 10/a5fea4f83189d222dcb95ce36d0de29b1ab2fa64122f4c4435b63e6dab8bacd630f6234b0599a505de620f719965ea3a3ce068ece759a96e19fd187e1fb9561c + languageName: node + linkType: hard + "untildify@npm:^4.0.0": version: 4.0.0 resolution: "untildify@npm:4.0.0" @@ -41908,6 +43255,19 @@ __metadata: languageName: node linkType: hard +"untun@npm:^0.1.3": + version: 0.1.3 + resolution: "untun@npm:0.1.3" + dependencies: + citty: "npm:^0.1.5" + consola: "npm:^3.2.3" + pathe: "npm:^1.1.1" + bin: + untun: bin/untun.mjs + checksum: 10/6a096002ca13b8442ad1d40840088888cfaa28626eefdd132cd0fd3d3b956af121a9733b7bda32647608e278fb13332d2b72e2c319a27dc55dbc8e709a2f61d4 + languageName: node + linkType: hard + "unzipper@npm:^0.12.3": version: 0.12.3 resolution: "unzipper@npm:0.12.3" @@ -41935,6 +43295,13 @@ __metadata: languageName: node linkType: hard +"uqr@npm:^0.1.2": + version: 0.1.2 + resolution: "uqr@npm:0.1.2" + checksum: 10/31f1fe7d7a8121a2670712234524763160985b053e7eb8af7925a131bcde0df11641e15129d988358032da603185456d08dd72b26b507897272eb9640273bfa6 + languageName: node + linkType: hard + "uri-js@npm:^4.2.2": version: 4.4.1 resolution: "uri-js@npm:4.4.1" @@ -43740,7 +45107,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^7, ws@npm:^7.0.0, ws@npm:^7.2.0, ws@npm:^7.3.1, ws@npm:^7.5.10, ws@npm:^7.5.3": +"ws@npm:^7, ws@npm:^7.0.0, ws@npm:^7.2.0, ws@npm:^7.3.1, ws@npm:^7.5.1, ws@npm:^7.5.10, ws@npm:^7.5.3": version: 7.5.10 resolution: "ws@npm:7.5.10" peerDependencies: