diff --git a/packages/ui/.env.example b/packages/ui/.env.example index 4259dbcd7f..9820d7481e 100644 --- a/packages/ui/.env.example +++ b/packages/ui/.env.example @@ -18,6 +18,9 @@ REACT_APP_CAPTCHA_SITE_KEY=10000000-ffff-ffff-ffff-000000000001 # Member avatar upload REACT_APP_AVATAR_UPLOAD_URL=https://atlas-services.joystream.org/avatars +# WalletConnect project id +REACT_APP_WALLET_CONNECT_PROJECT_ID="2ea3f3ghubh32b8ie2f2" + # Image reporting ## Manual blacklist: diff --git a/packages/ui/package.json b/packages/ui/package.json index 3302d89169..9e4608baca 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -50,6 +50,8 @@ "@types/react-router-dom": "^5.3.1", "@types/react-transition-group": "^4.4.3", "@types/styled-components": "^5.1.15", + "@walletconnect/modal": "^2.6.2", + "@walletconnect/universal-provider": "^2.11.0", "@xstate/react": "^1.6.1", "chart.js": "^4.4.1", "copy-webpack-plugin": "^9.0.1", @@ -120,6 +122,7 @@ "@types/yargs": "^17.0.3", "@typescript-eslint/eslint-plugin": "^6.11.0", "@typescript-eslint/parser": "^6.11.0", + "@walletconnect/types": "^2.11.0", "babel-jest": "^27.2.5", "babel-loader": "^8.2.2", "babel-plugin-import-graphql": "^2.8.1", diff --git a/packages/ui/src/accounts/model/walletConnect.ts b/packages/ui/src/accounts/model/walletConnect.ts new file mode 100644 index 0000000000..8b3d874181 --- /dev/null +++ b/packages/ui/src/accounts/model/walletConnect.ts @@ -0,0 +1,188 @@ +import { Signer } from '@polkadot/api/types' +import { WalletConnectModal } from '@walletconnect/modal' +import { SessionTypes } from '@walletconnect/types' +import Provider from '@walletconnect/universal-provider' +import { BaseDotsamaWallet, MetadataDef, SubscriptionFn, WalletAccount } from 'injectweb3-connect' +import { Observable } from 'rxjs' + +import PioneerLogo from '@/app/assets/images/logos/Pioneer.png' +import WalletConnectLogo from '@/app/assets/images/logos/WalletConnect.svg' + +export class WalletConnect extends BaseDotsamaWallet { + public static source = 'WalletConnect' + + protected _projectId: string + protected _genesisHash: Promise + protected _chainCAIP: string | undefined + protected _provider: Provider | undefined + protected _accounts: WalletAccount[] | undefined + + protected _disconnection$: Observable + protected _disconnect: () => void + + constructor( + projectId: string, + genesisHash: Promise, + disconnection$: Observable, + disconnect: () => void + ) { + super({ + extensionName: 'WalletConnect', + title: 'WalletConnect', + logo: { src: WalletConnectLogo, alt: 'WalletConnect Logo' }, + }) + + this._projectId = projectId + this._genesisHash = genesisHash + this._disconnection$ = disconnection$ + this._disconnect = disconnect + } + + public enable = async (): Promise => { + this._provider = + this._provider ?? + (await Provider.init({ + projectId: this._projectId, + relayUrl: 'wss://relay.walletconnect.com', + metadata: { + name: 'Pioneer', + description: 'Joystream Governance App', + icons: [PioneerLogo], + url: window.location.origin + window.location.pathname, + }, + })) + + this._chainCAIP = await this._genesisHash.then((hash) => `polkadot:${hash.slice(2, 34)}`) + + this._provider.session = await this._getSession(this._provider, this._chainCAIP as string) + + if (!this._provider.session) { + throw Error('The connection failed or was cancelled.') + } + + this._handleDisconnection(this._provider) + + const { session } = this._provider + this._accounts = Object.values(session.namespaces) + .flatMap((namespace) => namespace.accounts) + .map((account, index): WalletAccount => { + const peerWalletName = session.peer.metadata.name + return { + name: `${peerWalletName} account ${index + 1}`, + address: account.split(':')[2], + source: this.extensionName, + } + }) + } + + protected async _getSession(provider: Provider, chainCAIP: string): Promise { + if (provider.session) return provider.session + + const lastSession = provider.client.session.getAll().at(-1) + if (lastSession) return lastSession + + const requiredNamespaces = { + polkadot: { + methods: ['polkadot_signTransaction', 'polkadot_signMessage'], + chains: [chainCAIP], + events: ['chainChanged", "accountsChanged'], + }, + } + + const { uri, approval } = await provider.client.connect({ requiredNamespaces }) + + const wcModal = new WalletConnectModal({ projectId: this._projectId }) + + if (!uri) return + + // if there is a URI from the client connect step open the modal + wcModal.openModal({ uri }) + + const modalClosedP = new Promise((resolve) => { + const unsubscribe = wcModal.subscribeModal((state) => { + if (state.open) return + + unsubscribe() + resolve(undefined) + }) + }) + + // await session approval from the wallet app or the modal getting closed + return Promise.race([approval(), modalClosedP]).finally(wcModal.closeModal) + } + + protected _handleDisconnection(provider: Provider): void { + const appDisconnectHandler = async () => { + if (!this._provider?.session) return + + await provider.client.disconnect({ + topic: this._provider.session.topic, + reason: { code: -1, message: 'Disconnected by client!' }, + }) + + reset() + } + const disconnectSubscription = this._disconnection$.subscribe(appDisconnectHandler) + + const walletDisconnectHandler = () => { + reset() + this._disconnect() + } + provider.client.once('session_delete', walletDisconnectHandler) + provider.client.once('session_expire', walletDisconnectHandler) + + const reset = () => { + if (!this._provider?.session) return + + disconnectSubscription.unsubscribe() + this._provider?.client.off('session_delete', walletDisconnectHandler) + this._provider?.client.off('session_expire', walletDisconnectHandler) + this._provider.session = undefined + } + } + + public getAccounts = async (): Promise => { + return this._accounts ?? [] + } + + public subscribeAccounts: (callback: SubscriptionFn) => Promise<() => void> = (callback) => { + callback(this._accounts ?? []) + return Promise.resolve(() => undefined) + } + + public updateMetadata: (chainInfo: MetadataDef) => Promise = () => Promise.resolve(true) + + public get signer(): Signer { + return { + signPayload: (transactionPayload) => { + if (!this._provider?.session || !this._chainCAIP) { + throw Error('The WalletConnect was accessed before it was enabled.') + } + + return this._provider.client.request({ + chainId: this._chainCAIP, + topic: this._provider.session.topic, + request: { + method: 'polkadot_signTransaction', + params: { address: transactionPayload.address, transactionPayload }, + }, + }) + }, + + signRaw: (raw) => { + if (!this._provider?.session || !this._chainCAIP) { + throw Error('The WalletConnect was accessed before it was enabled.') + } + + return this._provider.client.request({ + chainId: this._chainCAIP, + topic: this._provider.session.topic, + request: { + method: 'polkadot_signMessage', + params: { address: raw.address, message: raw.data }, + }, + }) + }, + } + } +} diff --git a/packages/ui/src/accounts/model/wallets.ts b/packages/ui/src/accounts/model/wallets.ts new file mode 100644 index 0000000000..e96952b5c9 --- /dev/null +++ b/packages/ui/src/accounts/model/wallets.ts @@ -0,0 +1,27 @@ +import { BaseDotsamaWallet, PolkadotLogo, SubwalletLogo, TalismanLogo, Wallet } from 'injectweb3-connect' + +export const DefaultWalletIcon = PolkadotLogo + +export const RecommendedWallets: Wallet[] = [ + { + extensionName: 'talisman', + title: 'Talisman', + noExtensionMessage: 'You can use any Polkadot compatible wallet but we recommend using Talisman', + installUrl: 'https://talisman.xyz/download', + logo: { src: TalismanLogo, alt: 'Talisman Logo' }, + }, + { + extensionName: 'subwallet-js', + title: 'SubWallet', + noExtensionMessage: 'You can use any Polkadot compatible wallet but we recommend using Talisman', + installUrl: 'https://www.subwallet.app/download.html', + logo: { src: SubwalletLogo, alt: 'Subwallet Logo' }, + }, +].map((data) => new BaseDotsamaWallet(data)) + +export const RecommendedWalletsNames = RecommendedWallets.map((wallet) => wallet.extensionName) + +export const asWallet = (source: string): Wallet => + new BaseDotsamaWallet({ extensionName: source, logo: walletLogos.get(source) }) + +export const walletLogos = new Map([['polkadot-js', { src: DefaultWalletIcon, alt: 'Polkadotjs Logo' }]]) diff --git a/packages/ui/src/accounts/providers/accounts/context.tsx b/packages/ui/src/accounts/providers/accounts/context.tsx index 1c14aa1508..0988f560d1 100644 --- a/packages/ui/src/accounts/providers/accounts/context.tsx +++ b/packages/ui/src/accounts/providers/accounts/context.tsx @@ -6,4 +6,5 @@ export const AccountsContext = createContext({ isLoading: true, hasAccounts: false, allAccounts: [], + allWallets: [], }) diff --git a/packages/ui/src/accounts/providers/accounts/provider.tsx b/packages/ui/src/accounts/providers/accounts/provider.tsx index fed0426262..9544c0343a 100644 --- a/packages/ui/src/accounts/providers/accounts/provider.tsx +++ b/packages/ui/src/accounts/providers/accounts/provider.tsx @@ -1,28 +1,23 @@ import { InjectedAccountWithMeta } from '@polkadot/extension-inject/types' import { Keyring } from '@polkadot/ui-keyring' import { decodeAddress } from '@polkadot/util-crypto' -import { getWalletBySource, Wallet } from 'injectweb3-connect' -import React, { ReactNode, useEffect, useState } from 'react' -import { debounceTime, filter, skip } from 'rxjs/operators' +import { Wallet } from 'injectweb3-connect' +import React, { ReactNode, useEffect } from 'react' +import { debounceTime, filter, map, of } from 'rxjs' import { encodeAddress } from '@/accounts/model/encodeAddress' import { useKeyring } from '@/common/hooks/useKeyring' -import { useLocalStorage } from '@/common/hooks/useLocalStorage' import { useObservable } from '@/common/hooks/useObservable' import { Account } from '../../types' import { AccountsContext } from './context' +import { UseWallets, useWallets } from './useWallets' -type ExtensionError = 'NO_EXTENSION' | 'APP_REJECTED' - -export interface UseAccounts { +export type UseAccounts = UseWallets & { allAccounts: Account[] hasAccounts: boolean isLoading: boolean - error?: ExtensionError - wallet?: Wallet - setWallet?: (wallet: Wallet | undefined) => void } interface Props { @@ -37,9 +32,7 @@ function isKeyringLoaded(keyring: Keyring) { } } -const loadKeysFromExtension = async (keyring: Keyring, wallet: Wallet) => { - await wallet.enable('Pioneer') - +const loadKeysFromWallet = async (keyring: Keyring, wallet: Wallet) => { const injectedAccounts = await wallet.getAccounts() if (!isKeyringLoaded(keyring)) { @@ -63,119 +56,44 @@ const loadKeysFromExtension = async (keyring: Keyring, wallet: Wallet) => { }) } -// Extensions is not always ready on application load, hence the check -const onExtensionLoaded = - (onSuccess: (foundWallets: string[]) => void, onFail: () => void, recentWallet?: string) => () => { - const interval = 20 - const timeout = 1000 - let timeElapsed = 0 - - const intervalId = setInterval(() => { - const extensionsKeys = Object.keys((window as any)?.injectedWeb3 ?? {}) - if (extensionsKeys.length) { - if (!recentWallet) { - clearInterval(intervalId) - onSuccess(extensionsKeys) - } else if (extensionsKeys.includes(recentWallet)) { - // some wallets load slower which will cause error when trying to preload them hence the check - clearInterval(intervalId) - onSuccess(extensionsKeys) - } else if (timeElapsed >= timeout) { - // if wallet in storage was disabled we don't want to wait for it too long - clearInterval(intervalId) - onSuccess(extensionsKeys) - } - timeElapsed += interval - } else { - timeElapsed += interval - if (timeElapsed >= timeout) { - clearInterval(intervalId) - onFail() - } - } - }, interval) - - return () => clearInterval(intervalId) - } - export const AccountsContextProvider = (props: Props) => { const keyring = useKeyring() - const [isExtensionLoaded, setIsExtensionLoaded] = useState(false) - const [selectedWallet, setSelectedWallet] = useState() - const [extensionError, setExtensionError] = useState() - const [recentWallet, setRecentWallet] = useLocalStorage('recentWallet') - - useEffect( - onExtensionLoaded( - (foundWallets) => { - setIsExtensionLoaded(true) - if (recentWallet && foundWallets.includes(recentWallet)) { - const possibleWallet = getWalletBySource(recentWallet) - setSelectedWallet(possibleWallet) - } - }, - () => setExtensionError('NO_EXTENSION'), - recentWallet - ), - [] - ) + + const { allWallets, wallet, setWallet, walletState } = useWallets() useEffect(() => { - if (!isExtensionLoaded || !selectedWallet) { - return - } - - setExtensionError(undefined) - loadKeysFromExtension(keyring, selectedWallet) - .then(() => { - setRecentWallet(selectedWallet.extensionName) - }) - .catch((error: Error) => { - setSelectedWallet(undefined) - - if (error?.message.includes('not allowed to interact') || error?.message.includes('Rejected')) { - setExtensionError('APP_REJECTED') - } - }) - }, [isExtensionLoaded, selectedWallet]) - - const accounts = useObservable( - () => - keyring.accounts.subject.asObservable().pipe( - debounceTime(20), - filter((accounts) => !!accounts), - skip(1) - ), - [keyring] - ) - const allAccounts: Account[] = [] - - if (accounts && selectedWallet) { - allAccounts.push( - ...Object.values(accounts).map((account) => { - const publicKey = decodeAddress(account.json.address) - return { - address: encodeAddress(publicKey), - name: account.json.meta.name, - source: account.json.meta.source as string, - } - }) + if (wallet) loadKeysFromWallet(keyring, wallet) + }, [keyring, wallet]) + + const allAccounts: Account[] | undefined = useObservable(() => { + if (!wallet) return of(undefined) + + return keyring.accounts.subject.asObservable().pipe( + debounceTime(200), + filter((accounts) => !!accounts), + map((accounts) => + Object.values(accounts).map((account) => { + const publicKey = decodeAddress(account.json.address) + return { + address: encodeAddress(publicKey), + name: account.json.meta.name, + source: account.json.meta.source as string, + } + }) + ) ) - } + }, [keyring, wallet]) - const hasAccounts = allAccounts.length !== 0 + const hasAccounts = !!allAccounts?.length const value: UseAccounts = { - allAccounts, + allAccounts: allAccounts ?? [], hasAccounts, - isLoading: !isExtensionLoaded || !accounts, - setWallet: setSelectedWallet, - wallet: selectedWallet, - error: extensionError, - } - - if (extensionError || !selectedWallet?.extension) { - value.isLoading = false + isLoading: walletState === 'READY' && !allAccounts, + wallet, + setWallet, + allWallets, + walletState, } return {props.children} diff --git a/packages/ui/src/accounts/providers/accounts/useWallets.ts b/packages/ui/src/accounts/providers/accounts/useWallets.ts new file mode 100644 index 0000000000..b03edec394 --- /dev/null +++ b/packages/ui/src/accounts/providers/accounts/useWallets.ts @@ -0,0 +1,122 @@ +import { InjectedWindow, Wallet } from 'injectweb3-connect' +import { groupBy } from 'lodash' +import { useCallback, useEffect, useMemo, useRef, useState } from 'react' +import { Subject, firstValueFrom } from 'rxjs' + +import { WalletConnect } from '@/accounts/model/walletConnect' +import { RecommendedWallets, RecommendedWalletsNames, asWallet } from '@/accounts/model/wallets' +import { useApi } from '@/api/hooks/useApi' +import { useLocalStorage } from '@/common/hooks/useLocalStorage' + +type WalletState = undefined | 'ENABLING' | 'READY' | 'APP_REJECTED' + +export type UseWallets = { + allWallets: Wallet[] + wallet?: Wallet + setWallet?: (wallet: Wallet | undefined) => void + walletState?: WalletState +} + +const genesisHash$ = new Subject() +const WalletDisconnection$ = new Subject() + +export const useWallets = (): UseWallets => { + const [installedWalletsNames, setInstalledWalletsNames] = useState([]) + + useEffect(() => { + const interval = 100 + const timeout = 2000 + const start = Date.now() + + const intervalId = setInterval(() => { + const extensionsKeys = Object.keys((window as Window & InjectedWindow)?.injectedWeb3 ?? {}) + if (extensionsKeys.length !== installedWalletsNames.length) { + setInstalledWalletsNames(extensionsKeys) + } + + const timeElapsed = Date.now() - start + if (timeElapsed > timeout) { + clearTimeout(intervalId) + } + }, interval) + + return () => clearInterval(intervalId) + }, []) + + const walletExtensions = useMemo(() => { + const unknown = installedWalletsNames.filter((name) => !RecommendedWalletsNames.includes(name)).map(asWallet) + const { installed = [], recommended = [] } = groupBy(RecommendedWallets, (wallet) => + installedWalletsNames.includes(wallet.extensionName) ? 'installed' : 'recommended' + ) + return { installed, recommended, unknown } + }, [installedWalletsNames]) + + const { api } = useApi() + useEffect(() => { + if (api) genesisHash$.next(api.genesisHash.toHex()) + }, [api?.isConnected]) + + const walletConnect = useMemo(() => { + const wcProjectId: string | undefined = process.env.REACT_APP_WALLET_CONNECT_PROJECT_ID + if (!wcProjectId) return + + const genesisHash = firstValueFrom(genesisHash$) + return new WalletConnect(wcProjectId, genesisHash, WalletDisconnection$, () => setWallet(undefined)) + }, [api?.isConnected]) + + const allWallets = useMemo( + () => [ + ...walletExtensions.installed, + ...walletExtensions.unknown, + ...(walletConnect ? [walletConnect] : []), + ...walletExtensions.recommended, + ], + [walletExtensions, walletConnect] + ) + + const { wallet, setWallet, walletState } = useSelectedWallet(allWallets) + + return { allWallets, wallet, setWallet, walletState } +} + +const useSelectedWallet = (allWallets: Wallet[]) => { + const [wallet, _setWallet] = useState() + const [recentWallet, setRecentWallet] = useLocalStorage('recentWallet') + const [walletState, setWalletState] = useState() + + const setWallet = useCallback(async (wallet: Wallet | undefined): Promise => { + if (!wallet) { + WalletDisconnection$.next() + _setWallet(undefined) + setWalletState(undefined) + setRecentWallet(undefined) + return + } + + setWalletState('ENABLING') + try { + await wallet.enable('Pioneer') + _setWallet(wallet) + setWalletState('READY') + setRecentWallet(wallet.extensionName) + return + } catch (error) { + const message: string = error?.message?.toLowerCase() + if (message.includes('not allowed to interact') || message.includes('rejected')) { + return setWalletState('APP_REJECTED') + } + setWalletState(undefined) + } + }, []) + + const initialRecentWallet = useRef(recentWallet) + const cachedWallet = initialRecentWallet.current + ? allWallets.find((wallet) => wallet.extensionName === initialRecentWallet.current) + : undefined + + useEffect(() => { + if (cachedWallet) setWallet(cachedWallet) + }, [cachedWallet?.extensionName]) + + return { wallet, setWallet, walletState } +} diff --git a/packages/ui/src/app/App.stories.tsx b/packages/ui/src/app/App.stories.tsx index ce62a5d97a..feb02e4d28 100644 --- a/packages/ui/src/app/App.stories.tsx +++ b/packages/ui/src/app/App.stories.tsx @@ -334,11 +334,11 @@ export const ConnectWallet: Story = { const modal = withinModal(canvasElement) expectActiveStepToBe(modal, 'Connect wallet') - expect(modal.getByText('Select Wallet')) - const pluginButton = getButtonByText(modal, 'Install extension') + expect(modal.getByRole('heading', { name: 'Select Wallet' })) + const pluginButton = getButtonByText(modal, 'Select Wallet') expect(pluginButton).toBeDisabled() - await userEvent.click(modal.getByText('Polkadot.js')) - expect(pluginButton).toBeEnabled() + await userEvent.click(modal.getByText('Talisman')) + expect(await getButtonByText(modal, 'Install extension')).toBeEnabled() }, } diff --git a/packages/ui/src/app/assets/images/logos/Pioneer.png b/packages/ui/src/app/assets/images/logos/Pioneer.png new file mode 100644 index 0000000000..28d0e77f19 Binary files /dev/null and b/packages/ui/src/app/assets/images/logos/Pioneer.png differ diff --git a/packages/ui/src/app/assets/images/logos/WalletConnect.svg b/packages/ui/src/app/assets/images/logos/WalletConnect.svg new file mode 100644 index 0000000000..b90cf6fbe1 --- /dev/null +++ b/packages/ui/src/app/assets/images/logos/WalletConnect.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/packages/ui/src/app/components/ExtensionWarning.tsx b/packages/ui/src/app/components/ExtensionWarning.tsx index 6e508b6736..117ab9ca90 100644 --- a/packages/ui/src/app/components/ExtensionWarning.tsx +++ b/packages/ui/src/app/components/ExtensionWarning.tsx @@ -1,6 +1,5 @@ import React, { useEffect, useState } from 'react' -import { useMyAccounts } from '@/accounts/hooks/useMyAccounts' import { SideNotification } from '@/common/components/page/SideNotification' import { useOnBoarding } from '@/common/hooks/useOnBoarding' import { useMyMemberships } from '@/memberships/hooks/useMyMemberships' @@ -13,17 +12,10 @@ const notificationTimeouts: Record = { } export function ExtensionNotification() { - const { error } = useMyAccounts() const { members } = useMyMemberships() const { status } = useOnBoarding() const [showNotification, setShowNotification] = useState(undefined) - useEffect(() => { - if (error === 'NO_EXTENSION') { - setShowNotification('ERROR') - } - }, [error]) - useEffect(() => { if (status === 'finished') { setShowNotification('OLD_USER') @@ -38,17 +30,6 @@ export function ExtensionNotification() { return () => clearTimeout(timeout) }, [showNotification]) - if (showNotification === 'ERROR') { - return ( - setShowNotification(undefined)} - title="Extension unavailable" - message="You need a Polkadot ecosystem extension to use this site." - isError - /> - ) - } - if (showNotification === 'OLD_USER') { return ( } export const VerticalStaticStepper = ({ steps }: VerticalStaticStepperProps) => { + const { allWallets } = useMyAccounts() + return ( {steps.map((item, index) => ( @@ -29,7 +31,7 @@ export const VerticalStaticStepper = ({ steps }: VerticalStaticStepperProps) => {item.subtitle} {item.walletIcon ?? ( - {getAllWallets().map((wallet) => ( + {allWallets.map((wallet) => ( ))} diff --git a/packages/ui/src/common/modals/OnBoardingModal/OnBoardingModal.stories.tsx b/packages/ui/src/common/modals/OnBoardingModal/OnBoardingModal.stories.tsx index 6dee95c84c..31bcfa156b 100644 --- a/packages/ui/src/common/modals/OnBoardingModal/OnBoardingModal.stories.tsx +++ b/packages/ui/src/common/modals/OnBoardingModal/OnBoardingModal.stories.tsx @@ -34,7 +34,8 @@ const useMyAccounts: UseAccounts = { { name: 'Alice Account', address: 'j4W7rVcUCxi2crhhjRq46fNDRbVHTjJrz6bKxZwehEMQxZeSf' }, { name: 'Bob Account', address: '5DWS57CtERHpNehXCPcNoHGKutQYGrwvaEF5zXb26Fz9rcQp' }, ], - error: undefined, + walletState: 'READY', + allWallets: [], } const useMyBalances: AddressToBalanceMap = { diff --git a/packages/ui/src/common/modals/OnBoardingModal/OnBoardingPlugin.tsx b/packages/ui/src/common/modals/OnBoardingModal/OnBoardingPlugin.tsx index baf573bca0..87af7aaf4d 100644 --- a/packages/ui/src/common/modals/OnBoardingModal/OnBoardingPlugin.tsx +++ b/packages/ui/src/common/modals/OnBoardingModal/OnBoardingPlugin.tsx @@ -1,9 +1,10 @@ -import { getAllWallets, Wallet } from 'injectweb3-connect' -import React, { useCallback, useEffect, useState } from 'react' +import { Wallet } from 'injectweb3-connect' +import React, { useState } from 'react' import styled from 'styled-components' import { useMyAccounts } from '@/accounts/hooks/useMyAccounts' import { ButtonPrimary } from '@/common/components/buttons' +import { LinkPrimary } from '@/common/components/buttons/Links' import { LinkSymbol } from '@/common/components/icons/symbols' import { List, ListItem } from '@/common/components/List' import { ScrolledModalBody } from '@/common/components/Modal' @@ -14,30 +15,19 @@ import { OnBoardingTextFooter } from '@/common/modals/OnBoardingModal/OnBoarding export const OnBoardingPlugin = () => { const [selectedWallet, setSelectedWallet] = useState() - const { setWallet, error } = useMyAccounts() - const handleClick = useCallback(() => { - if (!selectedWallet?.installed && selectedWallet?.installUrl) { - window.open(selectedWallet.installUrl, '_blank') - } else if (selectedWallet?.installed) { - setWallet?.(selectedWallet) - } - }, [selectedWallet]) - - useEffect(() => { - if (error === 'APP_REJECTED') { - setSelectedWallet(undefined) - } - }, [error]) + const { allWallets, setWallet, walletState } = useMyAccounts() return ( <> - Select Wallet + + Select Wallet + Select which wallet you want to use to connect with. - {getAllWallets().map((wallet) => ( + {allWallets.map((wallet) => ( { - {error === 'APP_REJECTED' && ( + {walletState === 'APP_REJECTED' && ( Extension is blocking Pioneer from access @@ -60,24 +50,41 @@ export const OnBoardingPlugin = () => { )} + + + ) +} + +type WalletSelectionFooterProps = { + selectedWallet: Wallet | undefined + setWallet?: (wallet: Wallet | undefined) => void +} + +const WalletSelectionFooter = ({ selectedWallet, setWallet }: WalletSelectionFooterProps) => { + const isInstalledWallet = selectedWallet?.installed + const recommendedWalletUrl = !isInstalledWallet && selectedWallet?.installUrl + + if (recommendedWalletUrl) { + return ( - - {selectedWallet?.installed ? ( - 'Select Wallet' - ) : ( - <> - - Install extension - - )} - - + + Install extension + } /> - + ) + } + + return ( + setWallet?.(selectedWallet)} disabled={!selectedWallet}> + Select Wallet + + } + /> ) } @@ -98,7 +105,14 @@ const Wrapper = styled.div` } ` +const StyledLink = styled(LinkPrimary)` + margin-left: auto; + path { + fill: ${Colors.White} !important; + } +` const StyledButton = styled(ButtonPrimary)` + margin-left: auto; path { fill: ${Colors.White} !important; } diff --git a/packages/ui/src/common/modals/OnBoardingModal/components/ConnectWalletItem.tsx b/packages/ui/src/common/modals/OnBoardingModal/components/ConnectWalletItem.tsx index 38a58edb23..e1386f1db5 100644 --- a/packages/ui/src/common/modals/OnBoardingModal/components/ConnectWalletItem.tsx +++ b/packages/ui/src/common/modals/OnBoardingModal/components/ConnectWalletItem.tsx @@ -1,7 +1,8 @@ -import { getWalletBySource, Wallet } from 'injectweb3-connect' +import { Wallet } from 'injectweb3-connect' import React from 'react' import styled from 'styled-components' +import { DefaultWalletIcon } from '@/accounts/model/wallets' import { CheckboxIcon } from '@/common/components/icons' import { RowGapBlock } from '@/common/components/page/PageContent' import { TextBig, TextMedium } from '@/common/components/typography' @@ -14,13 +15,11 @@ interface ConnectWalletItemProps { onClick: () => void } -const defaultIconSrc = getWalletBySource('polkadot-js')?.logo.src - export const ConnectWalletItem = ({ wallet, selected, onClick }: ConnectWalletItemProps) => { return ( - {wallet.logo.alt + {wallet.logo.alt {wallet.title} diff --git a/packages/ui/src/common/modals/OnBoardingModal/components/NoAccountStep.tsx b/packages/ui/src/common/modals/OnBoardingModal/components/NoAccountStep.tsx index b04442f6ef..7d46fd20a9 100644 --- a/packages/ui/src/common/modals/OnBoardingModal/components/NoAccountStep.tsx +++ b/packages/ui/src/common/modals/OnBoardingModal/components/NoAccountStep.tsx @@ -9,10 +9,7 @@ import { HorizontalStaticStepper } from '@/common/components/Stepper/HorizontalS import { TextExtraHuge } from '@/common/components/typography' import { OnBoardingTextFooter } from '@/common/modals/OnBoardingModal' -const steps = [ - 'Open the extension with the icon in your browser bar', - 'Create an account according to the displayed instructions', -] +const steps = ['Connect Pioneer to the selected wallet', 'Create an account according to the displayed instructions'] export const NoAccountStep = () => { const { setWallet } = useMyAccounts() diff --git a/packages/ui/src/common/modals/OnBoardingModal/components/SelectAccountStep.tsx b/packages/ui/src/common/modals/OnBoardingModal/components/SelectAccountStep.tsx index d147c081aa..7f9225e900 100644 --- a/packages/ui/src/common/modals/OnBoardingModal/components/SelectAccountStep.tsx +++ b/packages/ui/src/common/modals/OnBoardingModal/components/SelectAccountStep.tsx @@ -1,10 +1,10 @@ import { BN_ZERO } from '@polkadot/util' -import { getWalletBySource } from 'injectweb3-connect' import React, { useState } from 'react' import styled from 'styled-components' import { useMyAccounts } from '@/accounts/hooks/useMyAccounts' import { useMyBalances } from '@/accounts/hooks/useMyBalances' +import { DefaultWalletIcon } from '@/accounts/model/wallets' import { ButtonPrimary } from '@/common/components/buttons' import { ConnectIcon } from '@/common/components/icons/ConnectIcon' import { JoystreamLogo } from '@/common/components/icons/JoystreamLogo' @@ -19,8 +19,6 @@ interface Props { onAccountSelect?: (account: string) => void } -const defaultIconSrc = getWalletBySource('polkadot-js')?.logo.src - export const SelectAccountStep = ({ onAccountSelect }: Props) => { const [selectedAccountAddress, setSelectedAccountAddress] = useState() const { allAccounts, setWallet, wallet } = useMyAccounts() @@ -35,7 +33,7 @@ export const SelectAccountStep = ({ onAccountSelect }: Props) => { - + diff --git a/packages/ui/src/common/providers/onboarding/provider.tsx b/packages/ui/src/common/providers/onboarding/provider.tsx index a627932dd7..380f24c7f2 100644 --- a/packages/ui/src/common/providers/onboarding/provider.tsx +++ b/packages/ui/src/common/providers/onboarding/provider.tsx @@ -21,12 +21,12 @@ const hasAccount = (allAccounts: Account[], address: string) => { } const useOnBoarding = (): UseOnBoarding => { - const { isLoading: isLoadingAccounts, error: accountsError, hasAccounts, allAccounts, wallet } = useMyAccounts() + const { isLoading: isLoadingAccounts, walletState, hasAccounts, allAccounts } = useMyAccounts() const { total: totalBalance } = useMyTotalBalances() const { isLoading: isLoadingMembers, hasMembers } = useMyMemberships() const [membershipAccount, setMembershipAccount] = useLocalStorage('onboarding-membership-account') - if (totalBalance.gtn(0) && wallet) { + if (totalBalance.gtn(0) || hasMembers) { return { isLoading: false, status: 'finished' } } @@ -34,17 +34,13 @@ const useOnBoarding = (): UseOnBoarding => { return { isLoading: true } } - if (accountsError === 'NO_EXTENSION' || !wallet) { + if (!walletState || walletState === 'APP_REJECTED') { return { isLoading: false, status: 'installPlugin' } } - if (!hasMembers && (!hasAccounts || !membershipAccount || !hasAccount(allAccounts, membershipAccount))) { + if (!hasAccounts || !membershipAccount || !hasAccount(allAccounts, membershipAccount)) { return { isLoading: false, status: 'addAccount', setMembershipAccount } } - if (!hasMembers && membershipAccount && hasAccount(allAccounts, membershipAccount)) { - return { isLoading: false, status: 'createMembership', membershipAccount, setMembershipAccount } - } - - return { isLoading: false, status: 'finished' } + return { isLoading: false, status: 'createMembership', membershipAccount, setMembershipAccount } } diff --git a/packages/ui/src/council/modals/RevealVote/PickVoteModal.stories.tsx b/packages/ui/src/council/modals/RevealVote/PickVoteModal.stories.tsx index fb9590d4d6..77c9e15d9c 100644 --- a/packages/ui/src/council/modals/RevealVote/PickVoteModal.stories.tsx +++ b/packages/ui/src/council/modals/RevealVote/PickVoteModal.stories.tsx @@ -2,6 +2,7 @@ import { Meta, Story } from '@storybook/react' import React from 'react' import { AccountsContext } from '@/accounts/providers/accounts/context' +import { UseAccounts } from '@/accounts/providers/accounts/provider' import { ModalContext } from '@/common/providers/modal/context' import { VotingAttempt } from '@/council/hooks/useCommitment' @@ -23,13 +24,14 @@ interface Props { showModal: () => void } -const useAccounts = { +const useAccounts: UseAccounts = { isLoading: false, allAccounts: [ { name: 'Alice Account', address: 'j4W7rVcUCxi2crhhjRq46fNDRbVHTjJrz6bKxZwehEMQxZeSf' }, { name: 'Bob Account', address: '5DWS57CtERHpNehXCPcNoHGKutQYGrwvaEF5zXb26Fz9rcQp' }, ], hasAccounts: true, + allWallets: [], } const Template: Story = ({ votes, hideModal, showModal }) => { diff --git a/packages/ui/src/memberships/components/CurrentMember/CurrentMember.tsx b/packages/ui/src/memberships/components/CurrentMember/CurrentMember.tsx index 812895bafc..07b6deea12 100644 --- a/packages/ui/src/memberships/components/CurrentMember/CurrentMember.tsx +++ b/packages/ui/src/memberships/components/CurrentMember/CurrentMember.tsx @@ -1,4 +1,3 @@ -import { getAllWallets } from 'injectweb3-connect' import React, { useEffect } from 'react' import { useHistory } from 'react-router' import styled from 'styled-components' @@ -22,7 +21,7 @@ import { SwitchMemberModalCall } from '../../modals/SwitchMemberModal' import { AddMembershipButton } from '../AddMembershipButton' export const CurrentMember = () => { - const { setWallet } = useMyAccounts() + const { allWallets, setWallet } = useMyAccounts() const { status, isLoading } = useOnBoarding() const { members, hasMembers, active } = useMyMemberships() const { showModal, modal } = useModal() @@ -63,7 +62,7 @@ export const CurrentMember = () => { const handleConnectWallet = () => { if (isMobileWallet) { - const wallets = getAllWallets().filter((wallet) => wallet.installed) + const wallets = allWallets.filter((wallet) => wallet.installed) if (wallets.length > 0) { return setWallet?.(wallets.at(-1)) } diff --git a/packages/ui/src/memberships/modals/DisconnectWalletModal/DisconnectWalletModal.tsx b/packages/ui/src/memberships/modals/DisconnectWalletModal/DisconnectWalletModal.tsx index 1c6572a942..cd9af98849 100644 --- a/packages/ui/src/memberships/modals/DisconnectWalletModal/DisconnectWalletModal.tsx +++ b/packages/ui/src/memberships/modals/DisconnectWalletModal/DisconnectWalletModal.tsx @@ -1,8 +1,9 @@ -import { getWalletBySource, Wallet } from 'injectweb3-connect' +import { Wallet } from 'injectweb3-connect' import React from 'react' import styled from 'styled-components' import { useMyAccounts } from '@/accounts/hooks/useMyAccounts' +import { DefaultWalletIcon } from '@/accounts/model/wallets' import { ButtonGhost, ButtonPrimary, CloseButton } from '@/common/components/buttons' import { Modal } from '@/common/components/Modal' import { TextHuge, TextMedium } from '@/common/components/typography' @@ -12,8 +13,6 @@ import { useModal } from '@/common/hooks/useModal' import { useMyMemberships } from '@/memberships/hooks/useMyMemberships' import { SignOutModalCall } from '@/memberships/modals/SignOutModal/types' -const defaultIconSrc = getWalletBySource('polkadot-js')?.logo.src - export const DisconnectWalletModal = () => { const { wallet, setWallet } = useMyAccounts() const { setActive } = useMyMemberships() @@ -32,7 +31,7 @@ export const DisconnectWalletModal = () => { - {wallet?.logo.alt + {wallet?.logo.alt Disconnect Wallet ? diff --git a/packages/ui/src/memberships/model/backendAuth.ts b/packages/ui/src/memberships/model/backendAuth.ts index aafbcae8b9..ebd2068a3c 100644 --- a/packages/ui/src/memberships/model/backendAuth.ts +++ b/packages/ui/src/memberships/model/backendAuth.ts @@ -4,7 +4,7 @@ import { Member } from '../types' export async function getBackendAuthSignature(member: Member, wallet: Wallet) { const timestamp = Date.now() - const result = await wallet?.signer.signRaw({ + const result = await wallet.signer.signRaw({ address: member.controllerAccount, data: `${member.id}:${timestamp}`, }) diff --git a/packages/ui/src/mocks/providers/accounts.tsx b/packages/ui/src/mocks/providers/accounts.tsx index 760061819b..f8578a4295 100644 --- a/packages/ui/src/mocks/providers/accounts.tsx +++ b/packages/ui/src/mocks/providers/accounts.tsx @@ -6,6 +6,7 @@ import React, { FC, useCallback, useEffect, useState } from 'react' import { AccountsContext } from '@/accounts/providers/accounts/context' import { UseAccounts } from '@/accounts/providers/accounts/provider' +import { useWallets } from '@/accounts/providers/accounts/useWallets' import { BalancesContext } from '@/accounts/providers/balances/context' import { Account, AddressToBalanceMap, LockType } from '@/accounts/types' import { whenDefined } from '@/common/utils' @@ -115,6 +116,8 @@ export const MockAccountsProvider: FC = ({ children, accounts [members] ) + const { allWallets } = useWallets() + if (!accounts) return <>{children} // Set contexts @@ -123,6 +126,8 @@ export const MockAccountsProvider: FC = ({ children, accounts hasAccounts: true, isLoading: false, wallet: accounts.hasWallet === false ? undefined : WALLET, + allWallets: allWallets.map((wallet) => ({ ...wallet, installed: false })), + walletState: accounts.hasWallet ? 'READY' : undefined, } const membershipContextValue: MyMemberships = { diff --git a/packages/ui/src/mocks/providers/api.tsx b/packages/ui/src/mocks/providers/api.tsx index 5474273c2b..b433f3e025 100644 --- a/packages/ui/src/mocks/providers/api.tsx +++ b/packages/ui/src/mocks/providers/api.tsx @@ -69,6 +69,7 @@ export const MockApiProvider: FC = ({ children, chain }) => { query: asApi('query', asApiMethod, defaultQuery), rpc: asApi('rpc', asApiMethod, { chain: rpcChain }), tx: asApi('tx', fromTxMock), + genesisHash: createType('Hash', '0x123456789'), } return watchForMissingProps(api, 'api') as Api diff --git a/packages/ui/src/proxyApi/client/ProxyApi.ts b/packages/ui/src/proxyApi/client/ProxyApi.ts index b528418a2c..b76467fcb4 100644 --- a/packages/ui/src/proxyApi/client/ProxyApi.ts +++ b/packages/ui/src/proxyApi/client/ProxyApi.ts @@ -19,6 +19,8 @@ export class ProxyApi extends Events { rpc: ApiRx['rpc'] tx: ApiRx['tx'] consts: ApiRx['consts'] + genesisHash: ApiRx['genesisHash'] + runtimeVersion: ApiRx['runtimeVersion'] _async: AsyncProps static create(providerEndpoint: string) { @@ -42,7 +44,7 @@ export class ProxyApi extends Events { return messages.pipe( firstWhere(({ data }) => data.messageType === 'init'), deserializeMessage(), - map(({ payload }) => new ProxyApi(messages, postMessage, payload.consts)), + map(({ payload }) => new ProxyApi(messages, postMessage, payload)), share() ) } @@ -50,11 +52,13 @@ export class ProxyApi extends Events { constructor( messages: Observable, postMessage: PostMessage, - consts: ProxyApi['consts'] + initPayload: WorkerInitMessage['payload'] ) { super() { - this.consts = consts + this.consts = initPayload.consts + this.genesisHash = initPayload.genesisHash + this.runtimeVersion = initPayload.runtimeVersion this.derive = query('derive', messages, postMessage) this.query = query('query', messages, postMessage) this.rpc = query('rpc', messages, postMessage) diff --git a/packages/ui/src/proxyApi/types.ts b/packages/ui/src/proxyApi/types.ts index af3de4d1ae..9cd77721cc 100644 --- a/packages/ui/src/proxyApi/types.ts +++ b/packages/ui/src/proxyApi/types.ts @@ -29,7 +29,10 @@ export type RawClientMessageEvent = MessageEvent<{ export type RawMessageEvent = RawWorkerMessageEvent | RawClientMessageEvent -export type WorkerInitMessage = { messageType: 'init'; payload: { consts: ProxyApi['consts'] } } +export type WorkerInitMessage = { + messageType: 'init' + payload: Pick +} export type ClientInitMessage = { messageType: 'init'; payload: string } export type WorkerConnectMessage = { messageType: 'isConnected'; payload: boolean } diff --git a/packages/ui/src/proxyApi/worker/index.ts b/packages/ui/src/proxyApi/worker/index.ts index 1c20063f66..3755c8b229 100644 --- a/packages/ui/src/proxyApi/worker/index.ts +++ b/packages/ui/src/proxyApi/worker/index.ts @@ -34,7 +34,12 @@ messages.subscribe(({ data }) => { ApiRx.create({ provider }) .pipe(first()) .subscribe((api) => { - postMessage({ messageType: 'init', payload: { consts: api.consts } }) + const initPayload = { + consts: api.consts, + genesisHash: api.genesisHash, + runtimeVersion: api.runtimeVersion, + } + postMessage({ messageType: 'init', payload: initPayload }) postMessage({ messageType: 'isConnected', payload: true }) api.on('connected', () => self.postMessage({ messageType: 'isConnected', payload: true })) api.on('disconnected', () => self.postMessage({ messageType: 'isConnected', payload: false })) diff --git a/packages/ui/test/_mocks/transactions.ts b/packages/ui/test/_mocks/transactions.ts index 16057d180a..a7fa39d264 100644 --- a/packages/ui/test/_mocks/transactions.ts +++ b/packages/ui/test/_mocks/transactions.ts @@ -266,6 +266,7 @@ export const stubAccounts = (allAccounts: Account[], myAccounts: Partial { describe('Loaded', () => { beforeEach(() => { - stubAccounts([], { error: undefined, wallet }) + stubAccounts([], { walletState: 'READY', wallet }) useMyMemberships.isLoading = false useApi.isConnected = true }) it('Install plugin', async () => { - stubAccounts([], { error: 'NO_EXTENSION', wallet: undefined }) + stubAccounts([], { wallet: undefined }) const { isLoading, status } = await renderUseOnBoarding() @@ -80,7 +80,7 @@ describe('useOnBoarding', () => { }) it('Create membership', async () => { - stubAccounts([alice], { error: undefined, wallet }) + stubAccounts([alice], { walletState: 'READY', wallet }) stubBalances({ available: 0 }) mockUseLocalStorage = [getAccount('alice'), jest.fn()] diff --git a/packages/ui/test/membership/components/CurrentMember.test.tsx b/packages/ui/test/membership/components/CurrentMember.test.tsx index b57e3b3140..745055ae18 100644 --- a/packages/ui/test/membership/components/CurrentMember.test.tsx +++ b/packages/ui/test/membership/components/CurrentMember.test.tsx @@ -5,6 +5,7 @@ import React from 'react' import { GlobalModals } from '@/app/GlobalModals' import { ModalContextProvider } from '@/common/providers/modal/provider' +import { OnBoardingProvider } from '@/common/providers/onboarding/provider' import { CurrentMember } from '@/memberships/components/CurrentMember' import { seedMember, seedMembers } from '@/mocks/data' @@ -88,12 +89,14 @@ describe('UI: CurrentMember component', () => { return render( - - - - - - + + + + + + + + ) diff --git a/packages/ui/test/setup.ts b/packages/ui/test/setup.ts index 29350fa48f..8a534bf102 100644 --- a/packages/ui/test/setup.ts +++ b/packages/ui/test/setup.ts @@ -106,6 +106,7 @@ export const mockedUseMyAccounts = jest.fn(() => ({ allAccounts: [], hasAccounts: false, isLoading: true, + allWallets: [], })) jest.mock('@/accounts/hooks/useMyAccounts', () => ({ diff --git a/yarn.lock b/yarn.lock index c811ba5f87..ef847a8e18 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4024,6 +4024,13 @@ __metadata: languageName: node linkType: hard +"@ioredis/commands@npm:^1.1.1": + version: 1.2.0 + resolution: "@ioredis/commands@npm:1.2.0" + checksum: 9b20225ba36ef3e5caf69b3c0720597c3016cc9b1e157f519ea388f621dd9037177f84cfe7e25c4c32dad7dd90c70ff9123cd411f747e053cf292193c9c461e2 + languageName: node + linkType: hard + "@isaacs/cliui@npm:^8.0.2": version: 8.0.2 resolution: "@isaacs/cliui@npm:8.0.2" @@ -4944,6 +4951,9 @@ __metadata: "@types/yargs": ^17.0.3 "@typescript-eslint/eslint-plugin": ^6.11.0 "@typescript-eslint/parser": ^6.11.0 + "@walletconnect/modal": ^2.6.2 + "@walletconnect/types": ^2.11.0 + "@walletconnect/universal-provider": ^2.11.0 "@xstate/react": ^1.6.1 babel-jest: ^27.2.5 babel-loader: ^8.2.2 @@ -5148,6 +5158,22 @@ __metadata: languageName: node linkType: hard +"@lit-labs/ssr-dom-shim@npm:^1.0.0, @lit-labs/ssr-dom-shim@npm:^1.1.0": + version: 1.1.2 + resolution: "@lit-labs/ssr-dom-shim@npm:1.1.2" + checksum: 73fd787893851d4ec4aaa5c775405ed2aae4ca0891b2dd3c973b32c2f4bf70ada5481dd0224e52b786d037aa8a00052186ad1623c44551affd66f6409cca8da6 + languageName: node + linkType: hard + +"@lit/reactive-element@npm:^1.3.0, @lit/reactive-element@npm:^1.6.0": + version: 1.6.3 + resolution: "@lit/reactive-element@npm:1.6.3" + dependencies: + "@lit-labs/ssr-dom-shim": ^1.0.0 + checksum: 79b58631c38effeabad090070324431da8a22cf0ff665f5e4de35e4d791f984742b3d340c9c7fce996d1124a8da95febc582471b4c237236c770b1300b56ef6e + languageName: node + linkType: hard + "@manypkg/find-root@npm:2.1.0": version: 2.1.0 resolution: "@manypkg/find-root@npm:2.1.0" @@ -5201,6 +5227,91 @@ __metadata: languageName: node linkType: hard +"@motionone/animation@npm:^10.15.1, @motionone/animation@npm:^10.17.0": + version: 10.17.0 + resolution: "@motionone/animation@npm:10.17.0" + dependencies: + "@motionone/easing": ^10.17.0 + "@motionone/types": ^10.17.0 + "@motionone/utils": ^10.17.0 + tslib: ^2.3.1 + checksum: 8cab13cde7ccbe29bcaff1cb43ba39acdc51d9be4726628f4d0ba27898c59456887fd9ec56aceaa3d5b82993efbdfa9a7b9e99d4b96bc458f486208394027093 + languageName: node + linkType: hard + +"@motionone/dom@npm:^10.16.2, @motionone/dom@npm:^10.16.4": + version: 10.17.0 + resolution: "@motionone/dom@npm:10.17.0" + dependencies: + "@motionone/animation": ^10.17.0 + "@motionone/generators": ^10.17.0 + "@motionone/types": ^10.17.0 + "@motionone/utils": ^10.17.0 + hey-listen: ^1.0.8 + tslib: ^2.3.1 + checksum: 6415f17032136218dfa88b9b00fbab738e514544129edf6f5c01dbdacefe9be48efd2d06f3d0cb7f2f5d2d2d79c94362effc7d034332406fd4dec6a710e603a2 + languageName: node + linkType: hard + +"@motionone/easing@npm:^10.17.0": + version: 10.17.0 + resolution: "@motionone/easing@npm:10.17.0" + dependencies: + "@motionone/utils": ^10.17.0 + tslib: ^2.3.1 + checksum: 2870d9e94645cf4ed3a27309a858dccee26615291ec46b56e993ef3ac9f059a659b02a2115ed61d27250fc8800acc9640f0319aeb402de7fa0e15dffbebeb548 + languageName: node + linkType: hard + +"@motionone/generators@npm:^10.17.0": + version: 10.17.0 + resolution: "@motionone/generators@npm:10.17.0" + dependencies: + "@motionone/types": ^10.17.0 + "@motionone/utils": ^10.17.0 + tslib: ^2.3.1 + checksum: 6d048a0362692db3f450b97c1679a8d0265bff93106412bdcc33b9c48b9362a3e97f672f29a2932d5e393330750fdd55921c1c9b2bf20690922a37a0164e649f + languageName: node + linkType: hard + +"@motionone/svelte@npm:^10.16.2": + version: 10.16.4 + resolution: "@motionone/svelte@npm:10.16.4" + dependencies: + "@motionone/dom": ^10.16.4 + tslib: ^2.3.1 + checksum: 699e20955ea832bcf32d410ae9f88edf61a5c2cf2b56527119ab1df6fecbf2632b62d541743d0f6d278fd700a15a20b9eb7c8aa5266e7aed5e113b8f8f75b863 + languageName: node + linkType: hard + +"@motionone/types@npm:^10.15.1, @motionone/types@npm:^10.17.0": + version: 10.17.0 + resolution: "@motionone/types@npm:10.17.0" + checksum: 3996c84e1578b17146c14bd581ab682b7b2a06ca7fd5a7dc378a0f3b10539256d7b803a7df748f0c60d6df6b33950269a27ba2bb1839de779196bd024bee4b87 + languageName: node + linkType: hard + +"@motionone/utils@npm:^10.15.1, @motionone/utils@npm:^10.17.0": + version: 10.17.0 + resolution: "@motionone/utils@npm:10.17.0" + dependencies: + "@motionone/types": ^10.17.0 + hey-listen: ^1.0.8 + tslib: ^2.3.1 + checksum: 408e278c9051a221e528bb9ca0a773018b9953ecd53bb88715421afc009f4647417b0d9f163c8195467badd934f39ade24f57e007416988e4291242e749ea43d + languageName: node + linkType: hard + +"@motionone/vue@npm:^10.16.2": + version: 10.16.4 + resolution: "@motionone/vue@npm:10.16.4" + dependencies: + "@motionone/dom": ^10.16.4 + tslib: ^2.3.1 + checksum: 746e38d0ee831829bfac2ce471f3d98a9e37bd8cbdf2706fa3becce69c17f51180a1ee47582d97758d68aafdfc9a187ab47ff216c77254ac994287dabcf266c1 + languageName: node + linkType: hard + "@mrmlnc/readdir-enhanced@npm:^2.2.1": version: 2.2.1 resolution: "@mrmlnc/readdir-enhanced@npm:2.2.1" @@ -5937,6 +6048,151 @@ __metadata: languageName: node linkType: hard +"@parcel/watcher-android-arm64@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-android-arm64@npm:2.4.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-darwin-arm64@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-darwin-arm64@npm:2.4.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-darwin-x64@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-darwin-x64@npm:2.4.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher-freebsd-x64@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-freebsd-x64@npm:2.4.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm-glibc@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-linux-arm-glibc@npm:2.4.0" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm64-glibc@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-linux-arm64-glibc@npm:2.4.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm64-musl@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-linux-arm64-musl@npm:2.4.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@parcel/watcher-linux-x64-glibc@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-linux-x64-glibc@npm:2.4.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-x64-musl@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-linux-x64-musl@npm:2.4.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@parcel/watcher-wasm@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-wasm@npm:2.4.0" + dependencies: + is-glob: ^4.0.3 + micromatch: ^4.0.5 + napi-wasm: ^1.1.0 + checksum: f32af594a20a809981b6830e8abdb59e604b670568f2344c7bc69b7447fbc135fb8a6900ba1feb5a197b3a5633a663bdfd9502e4a684aebd10abfb99f36f678b + languageName: node + linkType: hard + +"@parcel/watcher-win32-arm64@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-win32-arm64@npm:2.4.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-win32-ia32@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-win32-ia32@npm:2.4.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@parcel/watcher-win32-x64@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-win32-x64@npm:2.4.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher@npm:^2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher@npm:2.4.0" + dependencies: + "@parcel/watcher-android-arm64": 2.4.0 + "@parcel/watcher-darwin-arm64": 2.4.0 + "@parcel/watcher-darwin-x64": 2.4.0 + "@parcel/watcher-freebsd-x64": 2.4.0 + "@parcel/watcher-linux-arm-glibc": 2.4.0 + "@parcel/watcher-linux-arm64-glibc": 2.4.0 + "@parcel/watcher-linux-arm64-musl": 2.4.0 + "@parcel/watcher-linux-x64-glibc": 2.4.0 + "@parcel/watcher-linux-x64-musl": 2.4.0 + "@parcel/watcher-win32-arm64": 2.4.0 + "@parcel/watcher-win32-ia32": 2.4.0 + "@parcel/watcher-win32-x64": 2.4.0 + detect-libc: ^1.0.3 + is-glob: ^4.0.3 + micromatch: ^4.0.5 + node-addon-api: ^7.0.0 + node-gyp: 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-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: 9ff89d7e8c0beeee998b28a173870c657b65aa76fafb3c98524f4c28f37103b70e84538de3a380a1126b28e4e84c90df87804398c38fdcaef877f87aa06db961 + languageName: node + linkType: hard + "@peculiar/asn1-schema@npm:^2.3.6": version: 2.3.6 resolution: "@peculiar/asn1-schema@npm:2.3.6" @@ -7271,6 +7527,176 @@ __metadata: languageName: node linkType: hard +"@stablelib/aead@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/aead@npm:1.0.1" + checksum: 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": ^1.0.1 + checksum: dca9b98eb1f56a4002b5b9e7351fbc49f3d8616af87007c01e833bd763ac89214eb5f3b7e18673c91ce59d4a0e4856a2eb661ace33d39f17fb1ad267271fccd8 + languageName: node + linkType: hard + +"@stablelib/bytes@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/bytes@npm:1.0.1" + checksum: 456267e08c3384abcb71d3ad3e97a6f99185ad754bac016f501ebea4e4886f37900589143b57e33bdbbf513a92fc89368c15dd4517e0540d0bdc79ecdf9dd087 + languageName: node + linkType: hard + +"@stablelib/chacha20poly1305@npm:1.0.1": + version: 1.0.1 + resolution: "@stablelib/chacha20poly1305@npm:1.0.1" + dependencies: + "@stablelib/aead": ^1.0.1 + "@stablelib/binary": ^1.0.1 + "@stablelib/chacha": ^1.0.1 + "@stablelib/constant-time": ^1.0.1 + "@stablelib/poly1305": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: 81f1a32330838d31e4dc3144d76eba7244b56d9ea38c1f604f2c34d93ed8e67e9a6167d2cfd72254c13cc46dfc1f5ce5157b37939a575295d69d9144abb4e4fb + languageName: node + linkType: hard + +"@stablelib/chacha@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/chacha@npm:1.0.1" + dependencies: + "@stablelib/binary": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: f061f36c4ca4bf177dd7cac11e7c65ced164f141b6065885141ae5a55f32e16ba0209aefcdcc966aef013f1da616ce901a3a80653b4b6f833cf7e3397ae2d6bd + languageName: node + linkType: hard + +"@stablelib/constant-time@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/constant-time@npm:1.0.1" + checksum: 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": ^1.0.2 + "@stablelib/sha512": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: e18279de078edac67396ba07dbb862dce0fe89efa8141c21a5b04108a29914bd51636019522323ca5097ec596a90b3028ed64e88ee009b0ac7de7c1ab6499ccb + languageName: node + linkType: hard + +"@stablelib/hash@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/hash@npm:1.0.1" + checksum: 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": ^1.0.1 + "@stablelib/hmac": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: 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": ^1.0.1 + "@stablelib/hash": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: e3b93f7144a5846a6e30213278f7570de6d3f9d09131b95ce76d5c5c8bf37bf5d1830f2ee8d847555707271dbfd6e2461221719fd4d8b27ff06b9dd689c0ec21 + languageName: node + linkType: hard + +"@stablelib/int@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/int@npm:1.0.1" + checksum: 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": ^1.0.1 + checksum: 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": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: 70b845bb0481c66b7ba3f3865d01e4c67a4dffc9616fc6de1d23efc5e828ec09de25f8e3be4e1f15a23b8e87e3036ee3d949c2fd4785047e6f7028bbec0ead18 + languageName: node + linkType: hard + +"@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": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: 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": ^1.0.1 + "@stablelib/hash": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: 38669871e1bda72eb537629ebceac1c72da8890273a9fbe088f81f6d14c1ec04e78be8c5b455380a06c67f8e62b2508e11e9063fcc257dbaa1b5c27ac756ba77 + languageName: node + linkType: hard + +"@stablelib/sha512@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/sha512@npm:1.0.1" + dependencies: + "@stablelib/binary": ^1.0.1 + "@stablelib/hash": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: b7c82f7608a35948a2147a534c0c9afc80deab3fd5f72a2e27b2454e7c0c6944d39381be3abcb1b7fac5b824ba030ae3e98209d517a579c143d8ed63930b042f + languageName: node + linkType: hard + +"@stablelib/wipe@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/wipe@npm:1.0.1" + checksum: 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": ^1.0.1 + "@stablelib/random": ^1.0.2 + "@stablelib/wipe": ^1.0.1 + checksum: f8537066b542b6770c1b5b2ae5ad0688d1b986e4bf818067c152c123a5471531987bbf024224f75f387f481ccc5b628e391e49e92102b8b1a3e2d449d6105402 + languageName: node + linkType: hard + "@storybook/addon-actions@npm:7.0.18": version: 7.0.18 resolution: "@storybook/addon-actions@npm:7.0.18" @@ -9896,6 +10322,13 @@ __metadata: languageName: node linkType: hard +"@types/trusted-types@npm:^2.0.2": + version: 2.0.7 + resolution: "@types/trusted-types@npm:2.0.7" + checksum: 8e4202766a65877efcf5d5a41b7dd458480b36195e580a3b1085ad21e948bc417d55d6f8af1fd2a7ad008015d4117d5fdfe432731157da3c68678487174e4ba3 + languageName: node + linkType: hard + "@types/unist@npm:*, @types/unist@npm:^2.0.0": version: 2.0.6 resolution: "@types/unist@npm:2.0.6" @@ -10276,6 +10709,305 @@ __metadata: languageName: node linkType: hard +"@walletconnect/core@npm:2.11.0": + version: 2.11.0 + resolution: "@walletconnect/core@npm:2.11.0" + dependencies: + "@walletconnect/heartbeat": 1.2.1 + "@walletconnect/jsonrpc-provider": 1.0.13 + "@walletconnect/jsonrpc-types": 1.0.3 + "@walletconnect/jsonrpc-utils": 1.0.8 + "@walletconnect/jsonrpc-ws-connection": 1.0.14 + "@walletconnect/keyvaluestorage": ^1.1.1 + "@walletconnect/logger": ^2.0.1 + "@walletconnect/relay-api": ^1.0.9 + "@walletconnect/relay-auth": ^1.0.4 + "@walletconnect/safe-json": ^1.0.2 + "@walletconnect/time": ^1.0.2 + "@walletconnect/types": 2.11.0 + "@walletconnect/utils": 2.11.0 + events: ^3.3.0 + isomorphic-unfetch: 3.1.0 + lodash.isequal: 4.5.0 + uint8arrays: ^3.1.0 + checksum: 419eff78df347eb5d5c51c2dbf60e3246b5dda00afdd77279795a89627285839cb769e1115e751026756d37e26e6bd708452170ded08be074d64256afd8a8663 + languageName: node + linkType: hard + +"@walletconnect/environment@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/environment@npm:1.0.1" + dependencies: + tslib: 1.14.1 + checksum: a18731d857bdca73910147e59992cef3c6e292c37ab3d3013307bd706f06cb216aa804f0f48b25a78df6493ad8127e633629f4b50acb4f69d3765d6ac0524f68 + languageName: node + linkType: hard + +"@walletconnect/events@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/events@npm:1.0.1" + dependencies: + keyvaluestorage-interface: ^1.0.0 + tslib: 1.14.1 + checksum: d28aa4dcc981bdaf38f0aeed979731ca793cead7e7a4ee730a9146d99d89db09a86c8e3192ed860638283276961c0723ba00cf3b8776f0692b36ec7df6c01be4 + languageName: node + linkType: hard + +"@walletconnect/heartbeat@npm:1.2.1": + version: 1.2.1 + resolution: "@walletconnect/heartbeat@npm:1.2.1" + dependencies: + "@walletconnect/events": ^1.0.1 + "@walletconnect/time": ^1.0.2 + tslib: 1.14.1 + checksum: df4d492a2d336283f834bc205c09b795f85cd507a61b14745dc2124e510a250fefbd83d51216f93df2e0aa0cf8120134db2679de8019eddd63877e9928997952 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-http-connection@npm:^1.0.7": + version: 1.0.7 + resolution: "@walletconnect/jsonrpc-http-connection@npm:1.0.7" + dependencies: + "@walletconnect/jsonrpc-utils": ^1.0.6 + "@walletconnect/safe-json": ^1.0.1 + cross-fetch: ^3.1.4 + tslib: 1.14.1 + checksum: c4efcd46d4b344727ca6879badca2c2f855499ac76c8dace5d118f4423167adce34e41a99f3dcab0febb945ce51c6ef0ac8556567d5e38d8dad864b131eb5b00 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-provider@npm:1.0.13": + version: 1.0.13 + resolution: "@walletconnect/jsonrpc-provider@npm:1.0.13" + dependencies: + "@walletconnect/jsonrpc-utils": ^1.0.8 + "@walletconnect/safe-json": ^1.0.2 + tslib: 1.14.1 + checksum: 497dfdd9f988432f171bc98336f3583c679059f0a166f95d6e51c8e1937c17abd9a5fd3aadfcebf6964bae14edd1e05fb0453e370d6e3bbc7ff4919fcad7c478 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-types@npm:1.0.3, @walletconnect/jsonrpc-types@npm:^1.0.2, @walletconnect/jsonrpc-types@npm:^1.0.3": + version: 1.0.3 + resolution: "@walletconnect/jsonrpc-types@npm:1.0.3" + dependencies: + keyvaluestorage-interface: ^1.0.0 + tslib: 1.14.1 + checksum: 26e6f1d8f4207328d3df465c36d0d67844772863dc8e9e78e6cfec417cfc359300eab049d99ea558982b3f0948f4ca26b75253bdf635ffd82ffe30a5276b790c + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-utils@npm:1.0.8, @walletconnect/jsonrpc-utils@npm:^1.0.6, @walletconnect/jsonrpc-utils@npm:^1.0.7, @walletconnect/jsonrpc-utils@npm:^1.0.8": + version: 1.0.8 + resolution: "@walletconnect/jsonrpc-utils@npm:1.0.8" + dependencies: + "@walletconnect/environment": ^1.0.1 + "@walletconnect/jsonrpc-types": ^1.0.3 + tslib: 1.14.1 + checksum: f43a85dfce8150c3e3d1f009e8d8241ab8e10b026ea435f0918edf4db6b3a17586ba9d9c54a93cc61e4d3c685611e5bd5954fc377a581af503acd38e6d84c2ef + 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": ^1.0.6 + "@walletconnect/safe-json": ^1.0.2 + events: ^3.3.0 + ws: ^7.5.1 + checksum: a401e60b19390098183ef1b2a7b3e15c4dd3c64f9ac87fd2bbc0ae1f7fb31539ba542374ca021193efc4a2ae59fa3b04e588aed98cdf5c364f50524403d50f9f + 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": ^1.0.1 + idb-keyval: ^6.2.1 + unstorage: ^1.9.0 + peerDependencies: + "@react-native-async-storage/async-storage": 1.x + peerDependenciesMeta: + "@react-native-async-storage/async-storage": + optional: true + checksum: 7f85cb83963153417745367742070ccb78e03bd62adb549de57a7d5fae7bcfbd9a8f42b2f445ca76a3817ffacacc69d85bbf67757c3616ee7b3525f2f8a0faea + languageName: node + linkType: hard + +"@walletconnect/logger@npm:^2.0.1": + version: 2.0.1 + resolution: "@walletconnect/logger@npm:2.0.1" + dependencies: + pino: 7.11.0 + tslib: 1.14.1 + checksum: b686679d176d5d22a3441d93e71be2652e6c447682a6d6f014baf7c2d9dcd23b93e2f434d4410e33cc532d068333f6b3c1d899aeb0d6f60cc296ed17f57b0c2c + languageName: node + linkType: hard + +"@walletconnect/modal-core@npm:2.6.2": + version: 2.6.2 + resolution: "@walletconnect/modal-core@npm:2.6.2" + dependencies: + valtio: 1.11.2 + checksum: 94daceba50c323b06ecbeac2968d9f0972f327359c6118887c6526cd64006249b12f64322d71bc6c4a2b928436ecc89cf3d3af706511fcdc264c1f4b34a2dd5d + languageName: node + linkType: hard + +"@walletconnect/modal-ui@npm:2.6.2": + version: 2.6.2 + resolution: "@walletconnect/modal-ui@npm:2.6.2" + dependencies: + "@walletconnect/modal-core": 2.6.2 + lit: 2.8.0 + motion: 10.16.2 + qrcode: 1.5.3 + checksum: cd1ec0205eb491e529670599d3dd26f6782d7c5a99d5594bf6949a8c760c1c5f4eb6ed72b8662450774fe4e2dd47678f2c05145c8f2494bd7153446ddf4bd7ed + languageName: node + linkType: hard + +"@walletconnect/modal@npm:^2.6.2": + version: 2.6.2 + resolution: "@walletconnect/modal@npm:2.6.2" + dependencies: + "@walletconnect/modal-core": 2.6.2 + "@walletconnect/modal-ui": 2.6.2 + checksum: 68b354d49960b96d22de0e47a3801df27c01a3e96ec5fbde3ca6df1344ca2b20668b0c4d58fe1803f5670ac7b7b4c6f5b7b405e354f5f9eaff5cca147c13de9c + languageName: node + linkType: hard + +"@walletconnect/relay-api@npm:^1.0.9": + version: 1.0.9 + resolution: "@walletconnect/relay-api@npm:1.0.9" + dependencies: + "@walletconnect/jsonrpc-types": ^1.0.2 + tslib: 1.14.1 + checksum: 5870579b6552f1ce7351878f1acb8386b0c11288c64d39133c7cee5040feeb7ccf9114228d97a59749d60366ad107b097d656407d534567c24f5d3878ea6e246 + 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": ^1.0.2 + "@stablelib/random": ^1.0.1 + "@walletconnect/safe-json": ^1.0.1 + "@walletconnect/time": ^1.0.2 + tslib: 1.14.1 + uint8arrays: ^3.0.0 + checksum: 35b3229d7b57e74fdb8fe6827d8dd8291dc60bacda880a57b2acb47a34d38f12be46c971c9eff361eb4073e896648b550de7a7a3852ef3752f9619c08dfba891 + languageName: node + linkType: hard + +"@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: 1.14.1 + checksum: fee03fcc70adb5635ab9419ea6ec6555aa2467bef650ad3b9526451c3a5cf247836db0f3ae3bb435d2e585d99e50c2ebe7dc9c429cfa3df900cf3fe4bd06d37f + languageName: node + linkType: hard + +"@walletconnect/sign-client@npm:2.11.0": + version: 2.11.0 + resolution: "@walletconnect/sign-client@npm:2.11.0" + dependencies: + "@walletconnect/core": 2.11.0 + "@walletconnect/events": ^1.0.1 + "@walletconnect/heartbeat": 1.2.1 + "@walletconnect/jsonrpc-utils": 1.0.8 + "@walletconnect/logger": ^2.0.1 + "@walletconnect/time": ^1.0.2 + "@walletconnect/types": 2.11.0 + "@walletconnect/utils": 2.11.0 + events: ^3.3.0 + checksum: 89230cf4ca95f9feb06104cc8097340e345b2b21257d45acf16729342ddcf5248bbf05097343b21e4dbebfa4fbacb6fe067099ee6127169a6b464563985d4716 + languageName: node + linkType: hard + +"@walletconnect/time@npm:^1.0.2": + version: 1.0.2 + resolution: "@walletconnect/time@npm:1.0.2" + dependencies: + tslib: 1.14.1 + checksum: e3fc0113ca9e7ecedfc65f9e1517196682d5ffcda60750f51073b8d704719a17fea75da8b242c804bfa5b994707723043892a2db3cc86988b190b7b8711fe3c0 + languageName: node + linkType: hard + +"@walletconnect/types@npm:2.11.0, @walletconnect/types@npm:^2.11.0": + version: 2.11.0 + resolution: "@walletconnect/types@npm:2.11.0" + dependencies: + "@walletconnect/events": ^1.0.1 + "@walletconnect/heartbeat": 1.2.1 + "@walletconnect/jsonrpc-types": 1.0.3 + "@walletconnect/keyvaluestorage": ^1.1.1 + "@walletconnect/logger": ^2.0.1 + events: ^3.3.0 + checksum: 32d0d7972b90683467e47eabf92005c7c5d1ae76400eb221576ac0d32501b9f0a414d5921f0c881efe86f07485db807e3e9d370c6b9cc264771822916dc4cca5 + languageName: node + linkType: hard + +"@walletconnect/universal-provider@npm:^2.11.0": + version: 2.11.0 + resolution: "@walletconnect/universal-provider@npm:2.11.0" + dependencies: + "@walletconnect/jsonrpc-http-connection": ^1.0.7 + "@walletconnect/jsonrpc-provider": 1.0.13 + "@walletconnect/jsonrpc-types": ^1.0.2 + "@walletconnect/jsonrpc-utils": ^1.0.7 + "@walletconnect/logger": ^2.0.1 + "@walletconnect/sign-client": 2.11.0 + "@walletconnect/types": 2.11.0 + "@walletconnect/utils": 2.11.0 + events: ^3.3.0 + checksum: 7f4f187cd9148dc2e262e4afecadf0d0e136ae4183a60779562fef142411b927a3305c90793ef98dc3ecc61e4e2d4cfc8ac5491b1b42054021cfc4383f7ab81e + languageName: node + linkType: hard + +"@walletconnect/utils@npm:2.11.0": + version: 2.11.0 + resolution: "@walletconnect/utils@npm:2.11.0" + dependencies: + "@stablelib/chacha20poly1305": 1.0.1 + "@stablelib/hkdf": 1.0.1 + "@stablelib/random": ^1.0.2 + "@stablelib/sha256": 1.0.1 + "@stablelib/x25519": ^1.0.3 + "@walletconnect/relay-api": ^1.0.9 + "@walletconnect/safe-json": ^1.0.2 + "@walletconnect/time": ^1.0.2 + "@walletconnect/types": 2.11.0 + "@walletconnect/window-getters": ^1.0.1 + "@walletconnect/window-metadata": ^1.0.1 + detect-browser: 5.3.0 + query-string: 7.1.3 + uint8arrays: ^3.1.0 + checksum: 9d8259ea6a2850e620eb366b26fc3f17cf7bf75ae9c50fdfa3252b9dd152d1c10444009dfad1aa5a0a7d1ed844e5efd76581540e973315ec289fba7b51ebf7d7 + languageName: node + linkType: hard + +"@walletconnect/window-getters@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/window-getters@npm:1.0.1" + dependencies: + tslib: 1.14.1 + checksum: fae312c4e1be5574d97f071de58e6aa0d0296869761499caf9d4a9a5fd2643458af32233a2120521b00873a599ff88457d405bd82ced5fb5bd6dc3191c07a3e5 + 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": ^1.0.1 + tslib: 1.14.1 + checksum: e82aea7195c6fe95c00e87bb38051c5549838c2e8302da94f1afa48206f79f0b620166c9820f847494505d282d1568e2086a1561b0493d2d0a1fa115f9106aef + languageName: node + linkType: hard + "@webassemblyjs/ast@npm:1.11.6, @webassemblyjs/ast@npm:^1.11.5": version: 1.11.6 resolution: "@webassemblyjs/ast@npm:1.11.6" @@ -10706,6 +11438,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.11.3": + version: 8.11.3 + resolution: "acorn@npm:8.11.3" + bin: + acorn: bin/acorn + checksum: 76d8e7d559512566b43ab4aadc374f11f563f0a9e21626dd59cb2888444e9445923ae9f3699972767f18af61df89cd89f5eaaf772d1327b055b45cb829b4a88c + languageName: node + linkType: hard + "acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.5.0": version: 8.6.0 resolution: "acorn@npm:8.6.0" @@ -11028,6 +11769,16 @@ __metadata: languageName: node linkType: hard +"anymatch@npm:^3.1.3": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: ^3.0.0 + picomatch: ^2.0.4 + checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 + languageName: node + linkType: hard + "apollo-datasource@npm:^3.3.2": version: 3.3.2 resolution: "apollo-datasource@npm:3.3.2" @@ -11567,6 +12318,13 @@ __metadata: languageName: node linkType: hard +"atomic-sleep@npm:^1.0.0": + version: 1.0.0 + resolution: "atomic-sleep@npm:1.0.0" + checksum: b95275afb2f80732f22f43a60178430c468906a415a7ff18bcd0feeebc8eec3930b51250aeda91a476062a90e07132b43a1794e8d8ffcf9b650e8139be75fa36 + languageName: node + linkType: hard + "attr-accept@npm:^2.2.1": version: 2.2.2 resolution: "attr-accept@npm:2.2.2" @@ -13182,6 +13940,15 @@ __metadata: languageName: node linkType: hard +"citty@npm:^0.1.5": + version: 0.1.5 + resolution: "citty@npm:0.1.5" + dependencies: + consola: ^3.2.3 + checksum: 9a2379fd01345500f1eb2bcc33f5e60be8379551091b43a3ba4e3a39c63a92e41453dea542ab9f2528fe9e19177ff1453c01a845a74529292af34fdafd23a5f6 + languageName: node + linkType: hard + "cjs-module-lexer@npm:^1.0.0": version: 1.2.2 resolution: "cjs-module-lexer@npm:1.2.2" @@ -13358,6 +14125,17 @@ __metadata: languageName: node linkType: hard +"clipboardy@npm:^4.0.0": + version: 4.0.0 + resolution: "clipboardy@npm:4.0.0" + dependencies: + execa: ^8.0.1 + is-wsl: ^3.1.0 + is64bit: ^2.0.0 + checksum: ac7fa4438451d4a509fd7163505c08be92087c1a0ab8f54f8063eb04a69191ded1b59333344e2fd60bad9688e2a3dd69e50a813bf05ebf8369fa8bf65a0f47a2 + languageName: node + linkType: hard + "cliui@npm:^5.0.0": version: 5.0.0 resolution: "cliui@npm:5.0.0" @@ -13429,6 +14207,13 @@ __metadata: languageName: node linkType: hard +"cluster-key-slot@npm:^1.1.0": + version: 1.1.2 + resolution: "cluster-key-slot@npm:1.1.2" + checksum: be0ad2d262502adc998597e83f9ded1b80f827f0452127c5a37b22dfca36bab8edf393f7b25bb626006fb9fb2436106939ede6d2d6ecf4229b96a47f27edd681 + languageName: node + linkType: hard + "cmd-shim@npm:^6.0.0": version: 6.0.2 resolution: "cmd-shim@npm:6.0.2" @@ -13751,6 +14536,13 @@ __metadata: languageName: node linkType: hard +"consola@npm:^3.2.3": + version: 3.2.3 + resolution: "consola@npm:3.2.3" + checksum: 32ec70e177dd2385c42e38078958cc7397be91db21af90c6f9faa0b16168b49b1c61d689338604bbb2d64370b9347a35f42a9197663a913d3a405bb0ce728499 + languageName: node + linkType: hard + "console-control-strings@npm:^1.0.0, console-control-strings@npm:^1.1.0": version: 1.1.0 resolution: "console-control-strings@npm:1.1.0" @@ -13874,6 +14666,13 @@ __metadata: languageName: node linkType: hard +"cookie-es@npm:^1.0.0": + version: 1.0.0 + resolution: "cookie-es@npm:1.0.0" + checksum: e8721cf4d38f3e44049c9118874b323f4f674b1c5cef84a2b888f5bf86ad720ad17b51b43150cad7535a375c24e2921da603801ad28aa6125c3d36c031b41468 + languageName: node + linkType: hard + "cookie-signature@npm:1.0.6": version: 1.0.6 resolution: "cookie-signature@npm:1.0.6" @@ -14129,6 +14928,15 @@ __metadata: languageName: node linkType: hard +"cross-fetch@npm:^3.1.4": + version: 3.1.8 + resolution: "cross-fetch@npm:3.1.8" + dependencies: + node-fetch: ^2.6.12 + checksum: 78f993fa099eaaa041122ab037fe9503ecbbcb9daef234d1d2e0b9230a983f64d645d088c464e21a247b825a08dc444a6e7064adfa93536d3a9454b4745b3632 + languageName: node + linkType: hard + "cross-fetch@npm:^3.1.5": version: 3.1.6 resolution: "cross-fetch@npm:3.1.6" @@ -14176,6 +14984,13 @@ __metadata: languageName: node linkType: hard +"crossws@npm:^0.1.0": + version: 0.1.1 + resolution: "crossws@npm:0.1.1" + checksum: 4cd8eadb497d852998b770d54a10779ba9e0c38c823d141c35040c7a7afc7a6fcd274ce82a8614e992e3f71cb5e41c71a01ee0923ab6e1bec215842404555d7d + languageName: node + linkType: hard + "crypto-browserify@npm:^3.12.0": version: 3.12.0 resolution: "crypto-browserify@npm:3.12.0" @@ -14773,6 +15588,13 @@ __metadata: languageName: node linkType: hard +"decode-uri-component@npm:^0.2.2": + version: 0.2.2 + resolution: "decode-uri-component@npm:0.2.2" + checksum: 95476a7d28f267292ce745eac3524a9079058bbb35767b76e3ee87d42e34cd0275d2eb19d9d08c3e167f97556e8a2872747f5e65cbebcac8b0c98d83e285f139 + languageName: node + linkType: hard + "decompress-response@npm:^3.3.0": version: 3.3.0 resolution: "decompress-response@npm:3.3.0" @@ -14973,6 +15795,13 @@ __metadata: languageName: node linkType: hard +"defu@npm:^6.1.3, defu@npm:^6.1.4": + version: 6.1.4 + resolution: "defu@npm:6.1.4" + checksum: 40e3af6338f195ac1564f53d1887fa2d0429ac7e8c081204bc4d29191180059d3952b5f4e08fe5df8d59eb873aa26e9c88b56d4fac699673d4a372c93620b229 + languageName: node + linkType: hard + "del@npm:^4.1.1": version: 4.1.1 resolution: "del@npm:4.1.1" @@ -15034,6 +15863,13 @@ __metadata: languageName: node linkType: hard +"denque@npm:^2.1.0": + version: 2.1.0 + resolution: "denque@npm:2.1.0" + checksum: 1d4ae1d05e59ac3a3481e7b478293f4b4c813819342273f3d5b826c7ffa9753c520919ba264f377e09108d24ec6cf0ec0ac729a5686cbb8f32d797126c5dae74 + languageName: node + linkType: hard + "depd@npm:2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" @@ -15086,6 +15922,13 @@ __metadata: languageName: node linkType: hard +"destr@npm:^2.0.1, destr@npm:^2.0.2": + version: 2.0.2 + resolution: "destr@npm:2.0.2" + checksum: cb63dd477d1c323f95650ce7784f1497466d68150ac0fddd6c99652be45c9dcb997d53fd5eb6c6fda6c0b2a5e5b4fc7fa3c3e18dace3d810ba4cf45d8b55bdd6 + languageName: node + linkType: hard + "destroy@npm:1.2.0": version: 1.2.0 resolution: "destroy@npm:1.2.0" @@ -15100,6 +15943,13 @@ __metadata: languageName: node linkType: hard +"detect-browser@npm:5.3.0": + version: 5.3.0 + resolution: "detect-browser@npm:5.3.0" + checksum: dd6e08d55da1d9e0f22510ac79872078ae03d9dfa13c5e66c96baedc1c86567345a88f96949161f6be8f3e0fafa93bf179bdb1cd311b14f5f163112fcc70ab49 + languageName: node + linkType: hard + "detect-indent@npm:^6.0.0, detect-indent@npm:^6.1.0": version: 6.1.0 resolution: "detect-indent@npm:6.1.0" @@ -15107,6 +15957,15 @@ __metadata: languageName: node linkType: hard +"detect-libc@npm:^1.0.3": + version: 1.0.3 + resolution: "detect-libc@npm:1.0.3" + bin: + detect-libc: ./bin/detect-libc.js + checksum: daaaed925ffa7889bd91d56e9624e6c8033911bb60f3a50a74a87500680652969dbaab9526d1e200a4c94acf80fc862a22131841145a0a8482d60a99c24f4a3e + languageName: node + linkType: hard + "detect-newline@npm:^3.0.0": version: 3.1.0 resolution: "detect-newline@npm:3.1.0" @@ -15239,6 +16098,13 @@ __metadata: languageName: node linkType: hard +"dijkstrajs@npm:^1.0.1": + version: 1.0.3 + resolution: "dijkstrajs@npm:1.0.3" + checksum: 82ff2c6633f235dd5e6bed04ec62cdfb1f327b4d7534557bd52f18991313f864ee50654543072fff4384a92b643ada4d5452f006b7098dbdfad6c8744a8c9e08 + languageName: node + linkType: hard + "dindist@npm:^1.0.2": version: 1.0.2 resolution: "dindist@npm:1.0.2" @@ -15580,6 +16446,18 @@ __metadata: languageName: node linkType: hard +"duplexify@npm:^4.1.2": + version: 4.1.2 + resolution: "duplexify@npm:4.1.2" + dependencies: + end-of-stream: ^1.4.1 + inherits: ^2.0.3 + readable-stream: ^3.1.1 + stream-shift: ^1.0.0 + checksum: 964376c61c0e92f6ed0694b3ba97c84f199413dc40ab8dfdaef80b7a7f4982fcabf796214e28ed614a5bc1ec45488a29b81e7d46fa3f5ddf65bcb118c20145ad + languageName: node + linkType: hard + "eastasianwidth@npm:^0.2.0": version: 0.2.0 resolution: "eastasianwidth@npm:0.2.0" @@ -15722,6 +16600,13 @@ __metadata: languageName: node linkType: hard +"encode-utf8@npm:^1.0.3": + version: 1.0.3 + resolution: "encode-utf8@npm:1.0.3" + checksum: 550224bf2a104b1d355458c8a82e9b4ea07f9fc78387bc3a49c151b940ad26473de8dc9e121eefc4e84561cb0b46de1e4cd2bc766f72ee145e9ea9541482817f + languageName: node + linkType: hard + "encodeurl@npm:~1.0.2": version: 1.0.2 resolution: "encodeurl@npm:1.0.2" @@ -16692,7 +17577,7 @@ __metadata: languageName: node linkType: hard -"execa@npm:^8.0.0": +"execa@npm:^8.0.0, execa@npm:^8.0.1": version: 8.0.1 resolution: "execa@npm:8.0.1" dependencies: @@ -17105,6 +17990,13 @@ __metadata: languageName: node linkType: hard +"fast-redact@npm:^3.0.0": + version: 3.3.0 + resolution: "fast-redact@npm:3.3.0" + checksum: 3f7becc70a5a2662a9cbfdc52a4291594f62ae998806ee00315af307f32d9559dbf512146259a22739ee34401950ef47598c1f4777d33b0ed5027203d67f549c + languageName: node + linkType: hard + "fast-url-parser@npm:^1.1.3": version: 1.1.3 resolution: "fast-url-parser@npm:1.1.3" @@ -17301,6 +18193,13 @@ __metadata: languageName: node linkType: hard +"filter-obj@npm:^1.1.0": + version: 1.1.0 + resolution: "filter-obj@npm:1.1.0" + checksum: cf2104a7c45ff48e7f505b78a3991c8f7f30f28bd8106ef582721f321f1c6277f7751aacd5d83026cb079d9d5091082f588d14a72e7c5d720ece79118fa61e10 + languageName: node + linkType: hard + "finalhandler@npm:1.2.0": version: 1.2.0 resolution: "finalhandler@npm:1.2.0" @@ -17981,6 +18880,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: 8e65b56459ead2f31c446d76bb8eb639c33e04e72b07a4dd5d8acc39738f12962591e90b2befecf10492844d0d11c2122c281f5204ee48692d4a8ba0ec68733a + languageName: node + linkType: hard + "get-port@npm:^5.1.1": version: 5.1.1 resolution: "get-port@npm:5.1.1" @@ -18573,6 +19479,23 @@ __metadata: languageName: node linkType: hard +"h3@npm:^1.10.1, h3@npm:^1.8.2": + version: 1.10.1 + resolution: "h3@npm:1.10.1" + dependencies: + cookie-es: ^1.0.0 + defu: ^6.1.4 + destr: ^2.0.2 + iron-webcrypto: ^1.0.0 + ohash: ^1.1.3 + radix3: ^1.1.0 + ufo: ^1.3.2 + uncrypto: ^0.1.3 + unenv: ^1.9.0 + checksum: f2849e08610adc6d65259142336cfee0ad42d6e1342d87f396a6b53a8bb8e9919dac5263e8403d5a1d0b8774150b96f9bf2b3c6c836017ca80152559c0195b80 + languageName: node + linkType: hard + "handle-thing@npm:^2.0.0": version: 2.0.1 resolution: "handle-thing@npm:2.0.1" @@ -19243,6 +20166,13 @@ __metadata: languageName: node linkType: hard +"http-shutdown@npm:^1.2.2": + version: 1.2.2 + resolution: "http-shutdown@npm:1.2.2" + checksum: 5dccd94f4fe4f51f9cbd7ec4586121160cd6470728e581662ea8032724440d891c4c92b8210b871ac468adadb3c99c40098ad0f752a781a550abae49dfa26206 + languageName: node + linkType: hard + "https-proxy-agent@npm:^4.0.0": version: 4.0.0 resolution: "https-proxy-agent@npm:4.0.0" @@ -19387,6 +20317,13 @@ __metadata: languageName: node linkType: hard +"idb-keyval@npm:^6.2.1": + version: 6.2.1 + resolution: "idb-keyval@npm:6.2.1" + checksum: 7c0836f832096086e99258167740181132a71dd2694c8b8454a4f5ec69114ba6d70983115153306f0b6de1c8d3bad04f67eed3dff8f50c96815b9985d6d78470 + languageName: node + linkType: hard + "ieee754@npm:^1.1.13, ieee754@npm:^1.2.1": version: 1.2.1 resolution: "ieee754@npm:1.2.1" @@ -19734,6 +20671,23 @@ __metadata: languageName: node linkType: hard +"ioredis@npm:^5.3.2": + version: 5.3.2 + resolution: "ioredis@npm:5.3.2" + dependencies: + "@ioredis/commands": ^1.1.1 + cluster-key-slot: ^1.1.0 + debug: ^4.3.4 + denque: ^2.1.0 + lodash.defaults: ^4.2.0 + lodash.isarguments: ^3.1.0 + redis-errors: ^1.2.0 + redis-parser: ^3.0.0 + standard-as-callback: ^2.1.0 + checksum: 9a23559133e862a768778301efb68ae8c2af3c33562174b54a4c2d6574b976e85c75a4c34857991af733e35c48faf4c356e7daa8fb0a3543d85ff1768c8754bc + languageName: node + linkType: hard + "ip-regex@npm:^4.0.0, ip-regex@npm:^4.1.0, ip-regex@npm:^4.3.0": version: 4.3.0 resolution: "ip-regex@npm:4.3.0" @@ -19769,6 +20723,13 @@ __metadata: languageName: node linkType: hard +"iron-webcrypto@npm:^1.0.0": + version: 1.0.0 + resolution: "iron-webcrypto@npm:1.0.0" + checksum: bbd96cbbfec7d072296bc7464763b96555bdadb12aca50f1f1c7e4fcdc6acb102bc3488333e924f94404dd50eda24f84b67ad28323b9138ec7255a023e8dc19e + languageName: node + linkType: hard + "is-absolute-url@npm:^2.0.0": version: 2.1.0 resolution: "is-absolute-url@npm:2.1.0" @@ -20033,6 +20994,15 @@ __metadata: languageName: node linkType: hard +"is-docker@npm:^3.0.0": + version: 3.0.0 + resolution: "is-docker@npm:3.0.0" + bin: + is-docker: cli.js + checksum: b698118f04feb7eaf3338922bd79cba064ea54a1c3db6ec8c0c8d8ee7613e7e5854d802d3ef646812a8a3ace81182a085dfa0a71cc68b06f3fa794b9783b3c90 + languageName: node + linkType: hard + "is-extendable@npm:^0.1.0, is-extendable@npm:^0.1.1": version: 0.1.1 resolution: "is-extendable@npm:0.1.1" @@ -20134,6 +21104,17 @@ __metadata: languageName: node linkType: hard +"is-inside-container@npm:^1.0.0": + version: 1.0.0 + resolution: "is-inside-container@npm:1.0.0" + dependencies: + is-docker: ^3.0.0 + bin: + is-inside-container: cli.js + checksum: c50b75a2ab66ab3e8b92b3bc534e1ea72ca25766832c0623ac22d134116a98bcf012197d1caabe1d1c4bd5f84363d4aa5c36bb4b585fbcaf57be172cd10a1a03 + languageName: node + linkType: hard + "is-interactive@npm:^1.0.0": version: 1.0.0 resolution: "is-interactive@npm:1.0.0" @@ -20544,6 +21525,24 @@ __metadata: languageName: node linkType: hard +"is-wsl@npm:^3.1.0": + version: 3.1.0 + resolution: "is-wsl@npm:3.1.0" + dependencies: + is-inside-container: ^1.0.0 + checksum: f9734c81f2f9cf9877c5db8356bfe1ff61680f1f4c1011e91278a9c0564b395ae796addb4bf33956871041476ec82c3e5260ed57b22ac91794d4ae70a1d2f0a9 + languageName: node + linkType: hard + +"is64bit@npm:^2.0.0": + version: 2.0.0 + resolution: "is64bit@npm:2.0.0" + dependencies: + system-architecture: ^0.1.0 + checksum: 253079e64b6f9bb90295a63b73a046bea67364cdc104bc5abeffcf4cbc52b3e66b0e921cb14f686deb71b5cab628f9f490845c1194c6e94f84068d177c7f15cd + languageName: node + linkType: hard + "isarray@npm:0.0.1": version: 0.0.1 resolution: "isarray@npm:0.0.1" @@ -20612,7 +21611,7 @@ __metadata: languageName: node linkType: hard -"isomorphic-unfetch@npm:^3.1.0": +"isomorphic-unfetch@npm:3.1.0, isomorphic-unfetch@npm:^3.1.0": version: 3.1.0 resolution: "isomorphic-unfetch@npm:3.1.0" dependencies: @@ -22312,6 +23311,15 @@ __metadata: languageName: node linkType: hard +"jiti@npm:^1.21.0": + version: 1.21.0 + resolution: "jiti@npm:1.21.0" + bin: + jiti: bin/jiti.js + checksum: a7bd5d63921c170eaec91eecd686388181c7828e1fa0657ab374b9372bfc1f383cf4b039e6b272383d5cb25607509880af814a39abdff967322459cca41f2961 + languageName: node + linkType: hard + "jju@npm:^1.4.0": version: 1.4.0 resolution: "jju@npm:1.4.0" @@ -22654,6 +23662,13 @@ __metadata: languageName: node linkType: hard +"jsonc-parser@npm:^3.2.0": + version: 3.2.1 + resolution: "jsonc-parser@npm:3.2.1" + checksum: 656d9027b91de98d8ab91b3aa0d0a4cab7dc798a6830845ca664f3e76c82d46b973675bbe9b500fae1de37fd3e81aceacbaa2a57884bf2f8f29192150d2d1ef7 + languageName: node + linkType: hard + "jsonfile@npm:^4.0.0": version: 4.0.0 resolution: "jsonfile@npm:4.0.0" @@ -22790,6 +23805,13 @@ __metadata: languageName: node linkType: hard +"keyvaluestorage-interface@npm:^1.0.0": + version: 1.0.0 + resolution: "keyvaluestorage-interface@npm:1.0.0" + checksum: e20530e71b738dc094ad170a91a98d4b9bdc772dd9044b23cdaaa102aafa8997b1ac867550a1e66ba1d64fcaa949214df31aed18413b4bac31e5fe1f2c76c9de + languageName: node + linkType: hard + "kind-of@npm:^3.0.2, kind-of@npm:^3.0.3, kind-of@npm:^3.2.0": version: 3.2.2 resolution: "kind-of@npm:3.2.2" @@ -23091,6 +24113,35 @@ __metadata: languageName: node linkType: hard +"listhen@npm:^1.5.5": + version: 1.6.0 + resolution: "listhen@npm:1.6.0" + dependencies: + "@parcel/watcher": ^2.4.0 + "@parcel/watcher-wasm": 2.4.0 + citty: ^0.1.5 + clipboardy: ^4.0.0 + consola: ^3.2.3 + crossws: ^0.1.0 + defu: ^6.1.4 + get-port-please: ^3.1.2 + h3: ^1.10.1 + http-shutdown: ^1.2.2 + jiti: ^1.21.0 + mlly: ^1.5.0 + node-forge: ^1.3.1 + pathe: ^1.1.2 + std-env: ^3.7.0 + ufo: ^1.3.2 + untun: ^0.1.3 + uqr: ^0.1.2 + bin: + listen: bin/listhen.mjs + listhen: bin/listhen.mjs + checksum: b5e1725838847ff6c08e65c62ec2977debe4becc35b0d75b7d2a064da9ec14ad098726859e626c7295e2cdc1309084e604679b02aa26df93997326675e56bff6 + languageName: node + linkType: hard + "listr-silent-renderer@npm:^1.1.1": version: 1.1.1 resolution: "listr-silent-renderer@npm:1.1.1" @@ -23166,6 +24217,37 @@ __metadata: languageName: node linkType: hard +"lit-element@npm:^3.3.0": + version: 3.3.3 + resolution: "lit-element@npm:3.3.3" + dependencies: + "@lit-labs/ssr-dom-shim": ^1.1.0 + "@lit/reactive-element": ^1.3.0 + lit-html: ^2.8.0 + checksum: 29a596fa556e231cce7246ca3e5687ad238f299b0cb374a0934d5e6fe9adf1436e031d4fbd21b280aabfc0e21a66e6c4b52da558a908df2566d09d960f3ca93d + languageName: node + linkType: hard + +"lit-html@npm:^2.8.0": + version: 2.8.0 + resolution: "lit-html@npm:2.8.0" + dependencies: + "@types/trusted-types": ^2.0.2 + checksum: 2d70df07248bcb2f502a3afb1e91d260735024fa669669ffb1417575aa39c3092779725ac1b90f5f39e4ce78c63f431f51176bc67f532389f0285a6991573255 + languageName: node + linkType: hard + +"lit@npm:2.8.0": + version: 2.8.0 + resolution: "lit@npm:2.8.0" + dependencies: + "@lit/reactive-element": ^1.6.0 + lit-element: ^3.3.0 + lit-html: ^2.8.0 + checksum: 2480e733f7d022d3ecba91abc58a20968f0ca8f5fa30b3341ecf4bcf4845e674ad27b721a5ae53529cafc6ca603c015b80d0979ceb7a711e268ef20bb6bc7527 + languageName: node + linkType: hard + "load-json-file@npm:^4.0.0": version: 4.0.0 resolution: "load-json-file@npm:4.0.0" @@ -23321,6 +24403,13 @@ __metadata: languageName: node linkType: hard +"lodash.defaults@npm:^4.2.0": + version: 4.2.0 + resolution: "lodash.defaults@npm:4.2.0" + checksum: 84923258235592c8886e29de5491946ff8c2ae5c82a7ac5cddd2e3cb697e6fbdfbbb6efcca015795c86eec2bb953a5a2ee4016e3735a3f02720428a40efbb8f1 + languageName: node + linkType: hard + "lodash.escaperegexp@npm:^4.1.2": version: 4.1.2 resolution: "lodash.escaperegexp@npm:4.1.2" @@ -23384,6 +24473,13 @@ __metadata: languageName: node linkType: hard +"lodash.isarguments@npm:^3.1.0": + version: 3.1.0 + resolution: "lodash.isarguments@npm:3.1.0" + checksum: ae1526f3eb5c61c77944b101b1f655f846ecbedcb9e6b073526eba6890dc0f13f09f72e11ffbf6540b602caee319af9ac363d6cdd6be41f4ee453436f04f13b5 + languageName: node + linkType: hard + "lodash.isboolean@npm:^3.0.3": version: 3.0.3 resolution: "lodash.isboolean@npm:3.0.3" @@ -23398,7 +24494,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: da27515dc5230eb1140ba65ff8de3613649620e8656b19a6270afe4866b7bd461d9ba2ac8a48dcc57f7adac4ee80e1de9f965d89d4d81a0ad52bb3eec2609644 @@ -23667,6 +24763,13 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^10.0.2": + version: 10.2.0 + resolution: "lru-cache@npm:10.2.0" + checksum: eee7ddda4a7475deac51ac81d7dd78709095c6fa46e8350dc2d22462559a1faa3b81ed931d5464b13d48cbd7e08b46100b6f768c76833912bc444b99c37e25db + languageName: node + linkType: hard + "lru-cache@npm:^5.1.1": version: 5.1.1 resolution: "lru-cache@npm:5.1.1" @@ -25046,6 +26149,18 @@ __metadata: languageName: node linkType: hard +"mlly@npm:^1.2.0, mlly@npm:^1.5.0": + version: 1.5.0 + resolution: "mlly@npm:1.5.0" + dependencies: + acorn: ^8.11.3 + pathe: ^1.1.2 + pkg-types: ^1.0.3 + ufo: ^1.3.2 + checksum: 82fda663265628ee83a31e99950553371f42f6995838795d44320c78497bf17ab04d1f26c49998944178e4e2416f6f0a580bbca3e272114ee597ae9f3c128b47 + languageName: node + linkType: hard + "mock-local-storage@npm:^1.1.17": version: 1.1.17 resolution: "mock-local-storage@npm:1.1.17" @@ -25077,6 +26192,20 @@ __metadata: languageName: node linkType: hard +"motion@npm:10.16.2": + version: 10.16.2 + resolution: "motion@npm:10.16.2" + dependencies: + "@motionone/animation": ^10.15.1 + "@motionone/dom": ^10.16.2 + "@motionone/svelte": ^10.16.2 + "@motionone/types": ^10.15.1 + "@motionone/utils": ^10.15.1 + "@motionone/vue": ^10.16.2 + checksum: 0b91256808c2374d8b7f4ac5e7ed513f2ca8df2b7d1be4fbc00ec5baece5162ada648aedaa5bc1d60be9ad2e6c9bc1d3bb160333051c20ab79e241b8e02e3c92 + languageName: node + linkType: hard + "mri@npm:^1.1.0, mri@npm:^1.2.0": version: 1.2.0 resolution: "mri@npm:1.2.0" @@ -25207,6 +26336,13 @@ __metadata: languageName: node linkType: hard +"napi-wasm@npm:^1.1.0": + version: 1.1.0 + resolution: "napi-wasm@npm:1.1.0" + checksum: 649a5d03477b89ee75cd8d7be5404daa5c889915640fd4ab042f2d38d265e961f86933e83982388d72c8b0a3952f36f099b96598ea88210205519ec2adc41d8d + languageName: node + linkType: hard + "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" @@ -25343,6 +26479,15 @@ __metadata: languageName: node linkType: hard +"node-addon-api@npm:^7.0.0": + version: 7.1.0 + resolution: "node-addon-api@npm:7.1.0" + dependencies: + node-gyp: latest + checksum: 26640c8d2ed7e2059e2ed65ee79e2a195306b3f1fc27ad11448943ba91d37767bd717a9a0453cc97e83a1109194dced8336a55f8650000458ef625c0b8b5e3df + languageName: node + linkType: hard + "node-cron@npm:^3.0.2": version: 3.0.2 resolution: "node-cron@npm:3.0.2" @@ -25384,6 +26529,13 @@ __metadata: languageName: node linkType: hard +"node-fetch-native@npm:^1.4.0, node-fetch-native@npm:^1.4.1, node-fetch-native@npm:^1.6.1": + version: 1.6.1 + resolution: "node-fetch-native@npm:1.6.1" + checksum: 1a248ada34561ce1010f09ca81cf5cd9c834b51aec957e82b6811d673e209a44630a835da599f0dd0c3d927f15c5f864d6ed494093c4a42601609f988d5919f2 + languageName: node + linkType: hard + "node-fetch@npm:2.6.1": version: 2.6.1 resolution: "node-fetch@npm:2.6.1" @@ -25414,6 +26566,20 @@ __metadata: languageName: node linkType: hard +"node-fetch@npm:^2.6.12": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: d76d2f5edb451a3f05b15115ec89fc6be39de37c6089f1b6368df03b91e1633fd379a7e01b7ab05089a25034b2023d959b47e59759cb38d88341b2459e89d6e5 + languageName: node + linkType: hard + "node-fetch@npm:^2.6.7": version: 2.6.7 resolution: "node-fetch@npm:2.6.7" @@ -25435,6 +26601,13 @@ __metadata: languageName: node linkType: hard +"node-forge@npm:^1.3.1": + version: 1.3.1 + resolution: "node-forge@npm:1.3.1" + checksum: 08fb072d3d670599c89a1704b3e9c649ff1b998256737f0e06fbd1a5bf41cae4457ccaee32d95052d80bbafd9ffe01284e078c8071f0267dc9744e51c5ed42a9 + languageName: node + linkType: hard + "node-gyp-build@npm:^4.2.0": version: 4.5.0 resolution: "node-gyp-build@npm:4.5.0" @@ -26195,6 +27368,31 @@ __metadata: languageName: node linkType: hard +"ofetch@npm:^1.3.3": + version: 1.3.3 + resolution: "ofetch@npm:1.3.3" + dependencies: + destr: ^2.0.1 + node-fetch-native: ^1.4.0 + ufo: ^1.3.0 + checksum: 945d757b25ba144f9f45d9de3382de743f0950e68e76726a4c0d2ef01456fa6700a6b102cc343a4e06f71d5ac59a8affdd9a673751c448f4265996f7f22ffa3d + languageName: node + linkType: hard + +"ohash@npm:^1.1.3": + version: 1.1.3 + resolution: "ohash@npm:1.1.3" + checksum: 44c7321cb950ce6e87d46584fd5cc8dd3dd15fcd4ade0ac2995d0497dc6b6b1ae9bd844c59af185d63923da5cfe9b37ae37a9dbd9ac455f3ad0cdfb5a73d5ef6 + 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: d22b0f0538069110626b578db6e68b6ee0e85b1ee9cc5ef9b4de1bba431431d6a8da91a61e09d2ad46f22a96f968e5237833cb9d0b69bc4d294f7ec82f609b05 + languageName: node + linkType: hard + "on-finished@npm:2.4.1": version: 2.4.1 resolution: "on-finished@npm:2.4.1" @@ -26929,6 +28127,13 @@ __metadata: languageName: node linkType: hard +"pathe@npm:^1.1.1, pathe@npm:^1.1.2": + version: 1.1.2 + resolution: "pathe@npm:1.1.2" + checksum: ec5f778d9790e7b9ffc3e4c1df39a5bb1ce94657a4e3ad830c1276491ca9d79f189f47609884671db173400256b005f4955f7952f52a2aeb5834ad5fb4faf134 + languageName: node + linkType: hard + "pbkdf2@npm:^3.0.17, pbkdf2@npm:^3.0.3": version: 3.1.2 resolution: "pbkdf2@npm:3.1.2" @@ -27041,6 +28246,44 @@ __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: ^4.1.2 + split2: ^4.0.0 + checksum: c503f867de3189f8217ab9cf794e8a631dddd0029a829f0f985f5511308152ebd53e363764fbc5570b3d1c715b341e3923456ce16ad84cd41be2b9a074ada234 + languageName: node + linkType: hard + +"pino-std-serializers@npm:^4.0.0": + version: 4.0.0 + resolution: "pino-std-serializers@npm:4.0.0" + checksum: 89d487729b58c9d3273a0ee851ead068d6d2e2ccc1af8e1c1d28f1b3442423679bec7ec04d9a2aba36f94f335e82be9f4de19dc4fbc161e71c136aaa15b85ad3 + languageName: node + linkType: hard + +"pino@npm:7.11.0": + version: 7.11.0 + resolution: "pino@npm:7.11.0" + dependencies: + atomic-sleep: ^1.0.0 + fast-redact: ^3.0.0 + on-exit-leak-free: ^0.2.0 + pino-abstract-transport: v0.5.0 + pino-std-serializers: ^4.0.0 + process-warning: ^1.0.0 + quick-format-unescaped: ^4.0.3 + real-require: ^0.1.0 + safe-stable-stringify: ^2.1.0 + sonic-boom: ^2.2.1 + thread-stream: ^0.15.1 + bin: + pino: bin.js + checksum: b919e7dbe41de978bb050dcef94fd687c012eb78d344a18f75f04ce180d5810fc162be1f136722d70cd005ed05832c4023a38b9acbc1076ae63c9f5ec5ca515c + languageName: node + linkType: hard + "pioneer@workspace:.": version: 0.0.0-use.local resolution: "pioneer@workspace:." @@ -27104,6 +28347,17 @@ __metadata: languageName: node linkType: hard +"pkg-types@npm:^1.0.3": + version: 1.0.3 + resolution: "pkg-types@npm:1.0.3" + dependencies: + jsonc-parser: ^3.2.0 + mlly: ^1.2.0 + pathe: ^1.1.0 + checksum: 4b305c834b912ddcc8a0fe77530c0b0321fe340396f84cbb87aecdbc126606f47f2178f23b8639e71a4870f9631c7217aef52ffed0ae17ea2dbbe7e43d116a6e + languageName: node + linkType: hard + "playwright-core@npm:1.35.0, playwright-core@npm:>=1.2.0": version: 1.35.0 resolution: "playwright-core@npm:1.35.0" @@ -27131,6 +28385,13 @@ __metadata: languageName: node linkType: hard +"pngjs@npm:^5.0.0": + version: 5.0.0 + resolution: "pngjs@npm:5.0.0" + checksum: 04e912cc45fb9601564e2284efaf0c5d20d131d9b596244f8a6789fc6cdb6b18d2975a6bbf7a001858d7e159d5c5c5dd7b11592e97629b7137f7f5cef05904c8 + languageName: node + linkType: hard + "pnglib@npm:0.0.1": version: 0.0.1 resolution: "pnglib@npm:0.0.1" @@ -27918,6 +29179,13 @@ __metadata: languageName: node linkType: hard +"process-warning@npm:^1.0.0": + version: 1.0.0 + resolution: "process-warning@npm:1.0.0" + checksum: c708a03241deec3cabaeee39c4f9ee8c4d71f1c5ef9b746c8252cdb952a6059068cfcdaf348399775244cbc441b6ae5e26a9c87ed371f88335d84f26d19180f9 + languageName: node + linkType: hard + "process@npm:^0.11.10": version: 0.11.10 resolution: "process@npm:0.11.10" @@ -28099,6 +29367,13 @@ __metadata: languageName: node linkType: hard +"proxy-compare@npm:2.5.1": + version: 2.5.1 + resolution: "proxy-compare@npm:2.5.1" + checksum: c7cc151ac255150bcb24becde6495b3e399416c31991af377ce082255b51f07eaeb5d861bf8bf482703e92f88b90a5892ad57d3153ea29450d03ef921683d9fa + languageName: node + linkType: hard + "proxy-from-env@npm:^1.0.0, proxy-from-env@npm:^1.1.0": version: 1.1.0 resolution: "proxy-from-env@npm:1.1.0" @@ -28243,6 +29518,20 @@ __metadata: languageName: node linkType: hard +"qrcode@npm:1.5.3": + version: 1.5.3 + resolution: "qrcode@npm:1.5.3" + dependencies: + dijkstrajs: ^1.0.1 + encode-utf8: ^1.0.3 + pngjs: ^5.0.0 + yargs: ^15.3.1 + bin: + qrcode: bin/qrcode + checksum: 9a8a20a0a9cb1d15de8e7b3ffa214e8b6d2a8b07655f25bd1b1d77f4681488f84d7bae569870c0652872d829d5f8ac4922c27a6bd14c13f0e197bf07b28dead7 + languageName: node + linkType: hard + "qs@npm:6.11.0": version: 6.11.0 resolution: "qs@npm:6.11.0" @@ -28268,6 +29557,18 @@ __metadata: languageName: node linkType: hard +"query-string@npm:7.1.3": + version: 7.1.3 + resolution: "query-string@npm:7.1.3" + dependencies: + decode-uri-component: ^0.2.2 + filter-obj: ^1.1.0 + split-on-first: ^1.0.0 + strict-uri-encode: ^2.0.0 + checksum: 91af02dcd9cc9227a052841d5c2eecb80a0d6489d05625df506a097ef1c59037cfb5e907f39b84643cbfd535c955abec3e553d0130a7b510120c37d06e0f4346 + languageName: node + linkType: hard + "querystring@npm:0.2.0": version: 0.2.0 resolution: "querystring@npm:0.2.0" @@ -28282,6 +29583,13 @@ __metadata: languageName: node linkType: hard +"quick-format-unescaped@npm:^4.0.3": + version: 4.0.4 + resolution: "quick-format-unescaped@npm:4.0.4" + checksum: 7bc32b99354a1aa46c089d2a82b63489961002bb1d654cee3e6d2d8778197b68c2d854fd23d8422436ee1fdfd0abaddc4d4da120afe700ade68bd357815b26fd + languageName: node + linkType: hard + "quick-lru@npm:^4.0.1": version: 4.0.1 resolution: "quick-lru@npm:4.0.1" @@ -28296,6 +29604,13 @@ __metadata: languageName: node linkType: hard +"radix3@npm:^1.1.0": + version: 1.1.0 + resolution: "radix3@npm:1.1.0" + checksum: e5e6ed8fcf68be4d124bca4f7da7ba0fc7c5b6f9e98bc3f4424459c45d50f1f92506c5f7f8421b5cfee5823c524a4a2cef416053e88845813ce9fc9c7086729a + languageName: node + linkType: hard + "ramda@npm:0.29.0": version: 0.29.0 resolution: "ramda@npm:0.29.0" @@ -28948,6 +30263,13 @@ __metadata: languageName: node linkType: hard +"real-require@npm:^0.1.0": + version: 0.1.0 + resolution: "real-require@npm:0.1.0" + checksum: 96745583ed4f82cd5c6a6af012fd1d3c6fc2f13ae1bcff1a3c4f8094696013a1a07c82c5aa66a403d7d4f84949fc2203bc927c7ad120caad125941ca2d7e5e8e + languageName: node + linkType: hard + "recast@npm:^0.21.0": version: 0.21.5 resolution: "recast@npm:0.21.5" @@ -29010,6 +30332,22 @@ __metadata: languageName: node linkType: hard +"redis-errors@npm:^1.0.0, redis-errors@npm:^1.2.0": + version: 1.2.0 + resolution: "redis-errors@npm:1.2.0" + checksum: f28ac2692113f6f9c222670735aa58aeae413464fd58ccf3fce3f700cae7262606300840c802c64f2b53f19f65993da24dc918afc277e9e33ac1ff09edb394f4 + languageName: node + linkType: hard + +"redis-parser@npm:^3.0.0": + version: 3.0.0 + resolution: "redis-parser@npm:3.0.0" + dependencies: + redis-errors: ^1.0.0 + checksum: 89290ae530332f2ae37577647fa18208d10308a1a6ba750b9d9a093e7398f5e5253f19855b64c98757f7129cccce958e4af2573fdc33bad41405f87f1943459a + languageName: node + linkType: hard + "regenerate-unicode-properties@npm:^10.1.0": version: 10.1.0 resolution: "regenerate-unicode-properties@npm:10.1.0" @@ -29746,6 +31084,13 @@ __metadata: languageName: node linkType: hard +"safe-stable-stringify@npm:^2.1.0": + version: 2.4.3 + resolution: "safe-stable-stringify@npm:2.4.3" + checksum: 3aeb64449706ee1f5ad2459fc99648b131d48e7a1fbb608d7c628020177512dc9d94108a5cb61bbc953985d313d0afea6566d243237743e02870490afef04b43 + languageName: node + linkType: hard + "safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.1.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" @@ -30656,6 +32001,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: ^1.0.0 + checksum: c7f9c89f931d7f60f8e0741551a729f0d81e6dc407a99420fc847a9a4c25af048a615b1188ab3c4f1fb3708fe4904973ddab6ebcc8ed5b78b50ab81a99045910 + languageName: node + linkType: hard + "source-list-map@npm:^2.0.0, source-list-map@npm:^2.0.1": version: 2.0.1 resolution: "source-list-map@npm:2.0.1" @@ -30849,6 +32203,13 @@ __metadata: languageName: node linkType: hard +"split-on-first@npm:^1.0.0": + version: 1.1.0 + resolution: "split-on-first@npm:1.1.0" + checksum: 16ff85b54ddcf17f9147210a4022529b343edbcbea4ce977c8f30e38408b8d6e0f25f92cd35b86a524d4797f455e29ab89eb8db787f3c10708e0b47ebf528d30 + languageName: node + linkType: hard + "split-string@npm:^3.0.1, split-string@npm:^3.0.2": version: 3.1.0 resolution: "split-string@npm:3.1.0" @@ -30949,6 +32310,13 @@ __metadata: languageName: node linkType: hard +"standard-as-callback@npm:^2.1.0": + version: 2.1.0 + resolution: "standard-as-callback@npm:2.1.0" + checksum: 88bec83ee220687c72d94fd86a98d5272c91d37ec64b66d830dbc0d79b62bfa6e47f53b71646011835fc9ce7fae62739545d13124262b53be4fbb3e2ebad551c + languageName: node + linkType: hard + "static-eval@npm:2.0.2": version: 2.0.2 resolution: "static-eval@npm:2.0.2" @@ -30982,6 +32350,13 @@ __metadata: languageName: node linkType: hard +"std-env@npm:^3.7.0": + version: 3.7.0 + resolution: "std-env@npm:3.7.0" + checksum: 4f489d13ff2ab838c9acd4ed6b786b51aa52ecacdfeaefe9275fcb220ff2ac80c6e95674723508fd29850a694569563a8caaaea738eb82ca16429b3a0b50e510 + languageName: node + linkType: hard + "stop-iteration-iterator@npm:^1.0.0": version: 1.0.0 resolution: "stop-iteration-iterator@npm:1.0.0" @@ -31051,6 +32426,13 @@ __metadata: languageName: node linkType: hard +"strict-uri-encode@npm:^2.0.0": + version: 2.0.0 + resolution: "strict-uri-encode@npm:2.0.0" + checksum: eaac4cf978b6fbd480f1092cab8b233c9b949bcabfc9b598dd79a758f7243c28765ef7639c876fa72940dac687181b35486ea01ff7df3e65ce3848c64822c581 + languageName: node + linkType: hard + "string-argv@npm:^0.3.1": version: 0.3.1 resolution: "string-argv@npm:0.3.1" @@ -31604,6 +32986,13 @@ __metadata: languageName: node linkType: hard +"system-architecture@npm:^0.1.0": + version: 0.1.0 + resolution: "system-architecture@npm:0.1.0" + checksum: ca0dd793c45c354ab57dd7fc8ce7dc9923a6e07382bd3b22eb5b08f55ddb0217c390d00767549c5155fd4ce7ef23ffdd8cfb33dd4344cbbd37837d085a50f6f0 + languageName: node + linkType: hard + "tailwindcss@npm:3.2.7": version: 3.2.7 resolution: "tailwindcss@npm:3.2.7" @@ -31928,6 +33317,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: ^0.1.0 + checksum: 0547795a8f357ba1ac0dba29c71f965182e29e21752951a04a7167515ee37524bfba6c410f31e65a01a8d3e5b93400b812889aa09523e38ce4d744c894ffa6c0 + languageName: node + linkType: hard + "throat@npm:^4.0.0, throat@npm:^4.1.0": version: 4.1.0 resolution: "throat@npm:4.1.0" @@ -32457,7 +33855,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^1.8.1, tslib@npm:^1.9.0": +"tslib@npm:1.14.1, tslib@npm:^1.8.1, tslib@npm:^1.9.0": version: 1.14.1 resolution: "tslib@npm:1.14.1" checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd @@ -32791,6 +34189,13 @@ __metadata: languageName: node linkType: hard +"ufo@npm:^1.3.0, ufo@npm:^1.3.1, ufo@npm:^1.3.2": + version: 1.3.2 + resolution: "ufo@npm:1.3.2" + checksum: f1180bb715ff4dd46152fd4dec41c731e84d7b9eaf1432548a0210b2f7e0cd29de125ac88e582c6a079d8ae5bc9ab04ef2bdbafe125086480b10c1006b81bfce + languageName: node + linkType: hard + "uglify-js@npm:^3.1.4": version: 3.17.4 resolution: "uglify-js@npm:3.17.4" @@ -32800,7 +34205,7 @@ __metadata: languageName: node linkType: hard -"uint8arrays@npm:^3.0.0": +"uint8arrays@npm:^3.0.0, uint8arrays@npm:^3.1.0": version: 3.1.1 resolution: "uint8arrays@npm:3.1.1" dependencies: @@ -32840,6 +34245,13 @@ __metadata: languageName: node linkType: hard +"uncrypto@npm:^0.1.3": + version: 0.1.3 + resolution: "uncrypto@npm:0.1.3" + checksum: 07160e08806dd6cea16bb96c3fd54cd70fc801e02fc3c6f86980144d15c9ebbd1c55587f7280a207b3af6cd34901c0d0b77ada5a02c2f7081a033a05acf409e2 + languageName: node + linkType: hard + "undefsafe@npm:^2.0.5": version: 2.0.5 resolution: "undefsafe@npm:2.0.5" @@ -32861,6 +34273,19 @@ __metadata: languageName: node linkType: hard +"unenv@npm:^1.9.0": + version: 1.9.0 + resolution: "unenv@npm:1.9.0" + dependencies: + consola: ^3.2.3 + defu: ^6.1.3 + mime: ^3.0.0 + node-fetch-native: ^1.6.1 + pathe: ^1.1.1 + checksum: 4cfbeedee1436e7f417d655c521e4c6220228f5b96afff90b5253d4504282c6de5acdd982aa51c977ce38d21d7692a33d10fc857166b3488655ff29c3bb754a2 + languageName: node + linkType: hard + "unfetch@npm:^4.2.0": version: 4.2.0 resolution: "unfetch@npm:4.2.0" @@ -33194,6 +34619,63 @@ __metadata: languageName: node linkType: hard +"unstorage@npm:^1.9.0": + version: 1.10.1 + resolution: "unstorage@npm:1.10.1" + dependencies: + anymatch: ^3.1.3 + chokidar: ^3.5.3 + destr: ^2.0.2 + h3: ^1.8.2 + ioredis: ^5.3.2 + listhen: ^1.5.5 + lru-cache: ^10.0.2 + mri: ^1.2.0 + node-fetch-native: ^1.4.1 + ofetch: ^1.3.3 + ufo: ^1.3.1 + peerDependencies: + "@azure/app-configuration": ^1.4.1 + "@azure/cosmos": ^4.0.0 + "@azure/data-tables": ^13.2.2 + "@azure/identity": ^3.3.2 + "@azure/keyvault-secrets": ^4.7.0 + "@azure/storage-blob": ^12.16.0 + "@capacitor/preferences": ^5.0.6 + "@netlify/blobs": ^6.2.0 + "@planetscale/database": ^1.11.0 + "@upstash/redis": ^1.23.4 + "@vercel/kv": ^0.2.3 + idb-keyval: ^6.2.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 + checksum: 59dc9f21d25df2bc8d14e3965235cbb85e3e2e8cb332da70ca471ba4519269a06936eba4012916251f3b88e23176df44b64abb826202a3a3c9d0a185bfe5e500 + languageName: node + linkType: hard + "untildify@npm:^4.0.0": version: 4.0.0 resolution: "untildify@npm:4.0.0" @@ -33201,6 +34683,19 @@ __metadata: languageName: node linkType: hard +"untun@npm:^0.1.3": + version: 0.1.3 + resolution: "untun@npm:0.1.3" + dependencies: + citty: ^0.1.5 + consola: ^3.2.3 + pathe: ^1.1.1 + bin: + untun: bin/untun.mjs + checksum: ad886c242dbac250f88ef6f18ad780fa084d07e4d030ab5ceacfe4378aa4bf2d3549b8ed8352bad5776facd9aaee05e3f914c661adc11bace867e2a12fd7bee5 + languageName: node + linkType: hard + "unzipper@npm:^0.10.11": version: 0.10.14 resolution: "unzipper@npm:0.10.14" @@ -33251,6 +34746,13 @@ __metadata: languageName: node linkType: hard +"uqr@npm:^0.1.2": + version: 0.1.2 + resolution: "uqr@npm:0.1.2" + checksum: 717766f03814172f5a9934dae2c4c48f6de065a4fd7da82aa513bd8300b621c1e606efdd174478cab79093e5ba244a99f0c0b1b0b9c0175656ab5e637a006d92 + languageName: node + linkType: hard + "uri-js@npm:^4.2.2": version: 4.4.1 resolution: "uri-js@npm:4.4.1" @@ -33354,6 +34856,15 @@ __metadata: languageName: node linkType: hard +"use-sync-external-store@npm:1.2.0": + version: 1.2.0 + resolution: "use-sync-external-store@npm:1.2.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 5c639e0f8da3521d605f59ce5be9e094ca772bd44a4ce7322b055a6f58eeed8dda3c94cabd90c7a41fb6fa852210092008afe48f7038792fd47501f33299116a + languageName: node + linkType: hard + "use@npm:^3.1.0": version: 3.1.1 resolution: "use@npm:3.1.1" @@ -33521,6 +35032,24 @@ __metadata: languageName: node linkType: hard +"valtio@npm:1.11.2": + version: 1.11.2 + resolution: "valtio@npm:1.11.2" + dependencies: + proxy-compare: 2.5.1 + use-sync-external-store: 1.2.0 + peerDependencies: + "@types/react": ">=16.8" + react: ">=16.8" + peerDependenciesMeta: + "@types/react": + optional: true + react: + optional: true + checksum: cce2d9212aac9fc4bdeba2d381188cc831cfe8d2d03039024cfcd58ba1801f2a5b14d01c2bb21a2c9f12046d2ede64f1dd887175185f39bee553677a35592c30 + languageName: node + linkType: hard + "value-equal@npm:^1.0.1": version: 1.0.1 resolution: "value-equal@npm:1.0.1" @@ -34369,6 +35898,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:^7.5.1": + version: 7.5.9 + resolution: "ws@npm:7.5.9" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: c3c100a181b731f40b7f2fddf004aa023f79d64f489706a28bc23ff88e87f6a64b3c6651fbec3a84a53960b75159574d7a7385709847a62ddb7ad6af76f49138 + languageName: node + linkType: hard + "ws@npm:^8.1.0, ws@npm:^8.2.3": version: 8.3.0 resolution: "ws@npm:8.3.0"