diff --git a/packages/game-bridge/build.js b/packages/game-bridge/build.js new file mode 100644 index 0000000000..e94126f0be --- /dev/null +++ b/packages/game-bridge/build.js @@ -0,0 +1,77 @@ +const esbuild = require('esbuild'); +const fs = require('fs'); +const path = require('path'); + +async function build() { + // Clean dist folder + if (fs.existsSync('dist')) { + fs.rmSync('dist', { recursive: true }); + } + fs.mkdirSync('dist/unity', { recursive: true }); + fs.mkdirSync('dist/unreal', { recursive: true }); + + // Build Unity target (IIFE with inline HTML) + console.log('Building Unity target...'); + await esbuild.build({ + entryPoints: ['src/index.ts'], + bundle: true, + platform: 'browser', + target: 'chrome90', + format: 'iife', + globalName: 'ImmutableGameBridge', + outfile: 'dist/unity/bundle.js', + minify: true, + sourcemap: false, + keepNames: true, + define: { + 'process.env.NODE_ENV': '"production"' + }, + logLevel: 'info' + }); + + // Create HTML wrapper for Unity with inlined JS + let htmlTemplate = fs.readFileSync('src/index.html', 'utf-8'); + const bundleJs = fs.readFileSync('dist/unity/bundle.js', 'utf-8'); + + // Find and replace the script section - be explicit about what we're replacing + const scriptStart = htmlTemplate.indexOf('') + ''.length; + + if (scriptStart === -1 || scriptEnd === -1) { + throw new Error('Could not find script tags in HTML template'); + } + + const beforeScript = htmlTemplate.substring(0, scriptStart); + const afterScript = htmlTemplate.substring(scriptEnd); + + const inlineHtml = beforeScript + `` + afterScript; + + fs.writeFileSync('dist/unity/index.html', inlineHtml); + fs.unlinkSync('dist/unity/bundle.js'); + + console.log(`Unity HTML created with ${(bundleJs.length / 1024 / 1024).toFixed(2)}MB of inlined JS`); + + // Build Unreal target (global format JS only) + console.log('Building Unreal target...'); + await esbuild.build({ + entryPoints: ['src/index.ts'], + bundle: true, + platform: 'browser', + target: 'chrome90', + format: 'iife', + globalName: 'ImmutableGameBridge', + outfile: 'dist/unreal/index.js', + minify: true, + sourcemap: false, + define: { + 'process.env.NODE_ENV': '"production"' + } + }); + + console.log('✨ Build complete!'); +} + +build().catch((err) => { + console.error('Build failed:', err); + process.exit(1); +}); diff --git a/packages/game-bridge/package.json b/packages/game-bridge/package.json index e689307734..1b9c5b5275 100644 --- a/packages/game-bridge/package.json +++ b/packages/game-bridge/package.json @@ -10,12 +10,15 @@ "ethers": "^6.13.4" }, "devDependencies": { + "esbuild": "^0.23.1", "eslint": "^8.40.0", + "html-inline": "^1.2.0", "parcel": "^2.8.3" }, "scripts": { - "build": "parcel build --no-cache --no-scope-hoist", - "build:local": "parcel build --no-cache --no-scope-hoist && pnpm updateSdkVersion", + "build": "node build.js", + "build:parcel": "parcel build --no-cache --no-scope-hoist", + "build:local": "node build.js && pnpm updateSdkVersion", "lint": "eslint ./src --ext .ts,.jsx,.tsx --max-warnings=0", "start": "parcel", "updateSdkVersion": "./scripts/updateSdkVersion.sh" diff --git a/packages/game-bridge/src/index.ts b/packages/game-bridge/src/index.ts index 415e27a5ab..353ae68517 100644 --- a/packages/game-bridge/src/index.ts +++ b/packages/game-bridge/src/index.ts @@ -1,4 +1,16 @@ /* eslint-disable no-console */ + +// Catch any errors during module initialization +window.addEventListener('error', (event) => { + console.error('Global error caught:', event.error || event.message); +}); + +window.addEventListener('unhandledrejection', (event) => { + console.error('Unhandled promise rejection:', event.reason); +}); + +console.log('game-bridge loading...'); + import * as passport from '@imtbl/passport'; import * as config from '@imtbl/config'; import * as provider from '@imtbl/x-provider'; @@ -14,12 +26,29 @@ import * as ethers from 'ethers'; // eslint-disable-next-line import/no-duplicates import { BrowserProvider, getAddress } from 'ethers'; +console.log('game-bridge imports loaded'); + // This patches a bundler issue where @0xsequence/core expects -// `ethers.getAddress` to exist on the `ethers` namespace, but Parcel -// fails to attach it in a global build. This ensures the function is +// `ethers.getAddress` to exist on the `ethers` namespace, but some bundlers +// fail to attach it in a global build. This ensures the function is // available before any Passport code executes. -if (typeof ethers === 'object' && !ethers.getAddress) { - (ethers as any).getAddress = getAddress; +try { + if (typeof ethers === 'object' && !ethers.getAddress) { + try { + Object.defineProperty(ethers, 'getAddress', { + value: getAddress, + writable: true, + configurable: true + }); + console.log('ethers.getAddress patched successfully'); + } catch (e) { + // If we can't define the property, create a new object with the patched value + (window as any).ethers = { ...ethers, getAddress }; + console.log('ethers.getAddress patched via window.ethers'); + } + } +} catch (error) { + console.error('Error during ethers patching:', error); } /* eslint-disable no-undef */ @@ -176,7 +205,7 @@ const getProvider = (): provider.IMXProvider => { return providerInstance; }; -const setZkEvmProvider = (zkEvmProvider: passport.Provider | null | undefined): boolean => { +const setEvmProvider = (zkEvmProvider: passport.Provider | null | undefined): boolean => { if (zkEvmProvider !== null && zkEvmProvider !== undefined) { zkEvmProviderInstance = zkEvmProvider; console.log('zkEvm provider set'); @@ -186,7 +215,7 @@ const setZkEvmProvider = (zkEvmProvider: passport.Provider | null | undefined): return false; }; -const getZkEvmProvider = (): passport.Provider => { +const getEvmProvider = (): passport.Provider => { if (zkEvmProviderInstance == null) { throw new Error('No zkEvm provider'); } @@ -263,10 +292,13 @@ window.callFunction = async (jsonData: string) => { }, }), zkEvmRpcUrl: 'https://rpc.dev.immutable.com', - relayerUrl: 'https://api.dev.immutable.com/relayer-mr', + relayerUrl: 'http://localhost:8073/relayer-mr', indexerMrBasePath: 'https://api.dev.immutable.com', orderBookMrBasePath: 'https://api.dev.immutable.com', - passportMrBasePath: 'https://api.dev.immutable.com', + passportMrBasePath: 'http://localhost:8072', + sequenceIdentityInstrumentEndpoint: 'https://next-identity.sequence-dev.app/', + sequenceProjectAccessKey: 'AQAAAAAAAAB5QznGqk9paa4EQjom09ERpJs', + sequenceGuardEndpoint: 'https://guard.sequence.app', }, }; } else { @@ -606,8 +638,11 @@ window.callFunction = async (jsonData: string) => { break; } case PASSPORT_FUNCTIONS.zkEvm.connectEvm: { - const zkEvmProvider = await getPassportClient().connectEvm(); - const providerSet = setZkEvmProvider(zkEvmProvider); + const request = JSON.parse(data); + console.log(`Connecting to EVM chain: ${request.chain}`); + + const zkEvmProvider = await getPassportClient().connectEvm({chain: request.chain}); + const providerSet = setEvmProvider(zkEvmProvider); if (!providerSet) { throw new Error('Failed to connect to EVM'); @@ -626,7 +661,7 @@ window.callFunction = async (jsonData: string) => { } case PASSPORT_FUNCTIONS.zkEvm.sendTransaction: { const transaction = JSON.parse(data); - const transactionHash = await getZkEvmProvider().request({ + const transactionHash = await getEvmProvider().request({ method: 'eth_sendTransaction', params: [transaction], }); @@ -652,7 +687,7 @@ window.callFunction = async (jsonData: string) => { } case PASSPORT_FUNCTIONS.zkEvm.sendTransactionWithConfirmation: { const transaction = JSON.parse(data); - const zkEvmProvider = getZkEvmProvider(); + const zkEvmProvider = getEvmProvider(); const browserProvider = new BrowserProvider(zkEvmProvider); const signer = await browserProvider.getSigner(); @@ -676,10 +711,10 @@ window.callFunction = async (jsonData: string) => { } case PASSPORT_FUNCTIONS.zkEvm.signTypedDataV4: { const payload = JSON.parse(data); - const [address] = await getZkEvmProvider().request({ + const [address] = await getEvmProvider().request({ method: 'eth_requestAccounts', }); - const signature = await getZkEvmProvider().request({ + const signature = await getEvmProvider().request({ method: 'eth_signTypedData_v4', params: [address, payload], }); @@ -703,7 +738,7 @@ window.callFunction = async (jsonData: string) => { break; } case PASSPORT_FUNCTIONS.zkEvm.requestAccounts: { - const result = await getZkEvmProvider().request({ + const result = await getEvmProvider().request({ method: 'eth_requestAccounts', }); const success = result !== null && result !== undefined; @@ -724,7 +759,7 @@ window.callFunction = async (jsonData: string) => { } case PASSPORT_FUNCTIONS.zkEvm.getBalance: { const request = JSON.parse(data); - const result = await getZkEvmProvider().request({ + const result = await getEvmProvider().request({ method: 'eth_getBalance', params: [request.address, request.blockNumberOrTag], }); @@ -746,7 +781,7 @@ window.callFunction = async (jsonData: string) => { } case PASSPORT_FUNCTIONS.zkEvm.getTransactionReceipt: { const request = JSON.parse(data); - const response = await getZkEvmProvider().request({ + const response = await getEvmProvider().request({ method: 'eth_getTransactionReceipt', params: [request.txHash], }); diff --git a/packages/internal/generated-clients/src/config/config.ts b/packages/internal/generated-clients/src/config/config.ts index b05dc269bd..20bab0cf07 100644 --- a/packages/internal/generated-clients/src/config/config.ts +++ b/packages/internal/generated-clients/src/config/config.ts @@ -6,7 +6,7 @@ import { } from '../imx'; // eslint-disable-next-line @typescript-eslint/naming-convention -const defaultHeaders = { 'x-sdk-version': 'ts-immutable-sdk-__SDK_VERSION__' }; +const defaultHeaders = { 'x-sdk-version': 'ts-immutable-sdk-1.0.0' }; /** * Configuration for generated clients @@ -78,7 +78,7 @@ export const multiRollupConfig = { basePath: 'https://api.sandbox.immutable.com', }), passport: createConfig({ - basePath: 'https://api.sandbox.immutable.com', + basePath: 'http://localhost:8072', }), }), }; diff --git a/packages/internal/generated-clients/src/mr-api-clients.ts b/packages/internal/generated-clients/src/mr-api-clients.ts index 36c8f2b181..452c8579ca 100644 --- a/packages/internal/generated-clients/src/mr-api-clients.ts +++ b/packages/internal/generated-clients/src/mr-api-clients.ts @@ -9,7 +9,7 @@ import { PassportProfileApi, GuardianApi, } from './multi-rollup'; -import { MultiRollupAPIConfiguration } from './config'; +import { createConfig, MultiRollupAPIConfiguration } from './config'; export class MultiRollupApiClients { public config: MultiRollupAPIConfiguration; @@ -42,6 +42,8 @@ export class MultiRollupApiClients { this.ordersApi = new OrdersApi(config.orderBook); this.passportApi = new PassportApi(config.passport); this.passportProfileApi = new PassportProfileApi(config.passport); - this.guardianApi = new GuardianApi(config.passport); + this.guardianApi = new GuardianApi(createConfig({ + basePath: 'http://localhost:8074', + })); } } diff --git a/packages/passport/sdk-sample-app/src/components/arbone/ArbOneRequest.tsx b/packages/passport/sdk-sample-app/src/components/arbone/ArbOneRequest.tsx new file mode 100644 index 0000000000..411d98f8cd --- /dev/null +++ b/packages/passport/sdk-sample-app/src/components/arbone/ArbOneRequest.tsx @@ -0,0 +1,181 @@ +import React, { useState } from 'react'; +import { + Form, Offcanvas, Spinner, Stack, +} from 'react-bootstrap'; +import { Heading } from '@biom3/react'; +import { ModalProps } from '@/types'; +import { useStatusProvider } from '@/context/StatusProvider'; +import { usePassportProvider } from '@/context/PassportProvider'; +import { RequestArguments } from '@imtbl/passport'; +import WorkflowButton from '@/components/WorkflowButton'; + +enum EthereumParamType { + string = 'string', + object = 'object', +} + +interface EthereumParam { + name: string; + type?: EthereumParamType; + default?: string; + placeholder?: string; +} + +interface EthereumMethod { + name: string; + params?: Array; +} + +// Simplified Ethereum methods for ArbOne - only the essential ones +const ArbOneEthereumMethods: EthereumMethod[] = [ + { name: 'eth_requestAccounts' }, + { + name: 'eth_getBalance', + params: [ + { name: 'address' }, + { name: 'blockNumber/tag', default: 'latest' }, + ], + }, + { + name: 'eth_sendTransaction', + params: [ + { + name: 'transaction', + type: EthereumParamType.object, + placeholder: '{ "to": "0x...", "value": "0x0", "data": "0x" }', + }, + ], + }, +]; + +function ArbOneRequest({ showModal, setShowModal }: ModalProps) { + const [selectedEthMethod, setSelectedEthMethod] = useState(ArbOneEthereumMethods[0]); + const [params, setParams] = useState([]); + const [loadingRequest, setLoadingRequest] = useState(false); + const [isInvalid, setInvalid] = useState(undefined); + + const { addMessage } = useStatusProvider(); + const { arbOneProvider } = usePassportProvider(); + + const resetForm = () => { + setParams([]); + setInvalid(false); + }; + + const handleClose = () => { + resetForm(); + setShowModal(false); + }; + + const performRequest = async (request: RequestArguments) => { + setInvalid(false); + setLoadingRequest(true); + try { + const result = await arbOneProvider?.request(request); + setLoadingRequest(false); + addMessage(request.method, result); + handleClose(); + } catch (err) { + addMessage('Request', err); + handleClose(); + } + }; + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + e.stopPropagation(); + + const form = e.currentTarget; + if (form.checkValidity()) { + await performRequest({ + method: selectedEthMethod?.name || '', + params: params.map((param, i) => { + switch (selectedEthMethod.params![i].type) { + case EthereumParamType.object: { + return JSON.parse(param); + } + default: { + return param; + } + } + }), + }); + } else { + setInvalid(true); + } + }; + + const handleSetEthMethod = (e: React.ChangeEvent) => { + resetForm(); + const ethMethod = ArbOneEthereumMethods.find((method) => method.name === e.target.value); + if (!ethMethod) { + console.error('Invalid eth method'); + } else { + setSelectedEthMethod(ethMethod); + setParams(ethMethod.params ? ethMethod.params.map((param) => param.default || '') : []); + } + }; + + return ( + + + ArbOne Request + + +
+ + Ethereum Method + + { + ArbOneEthereumMethods.map((method) => ( + + )) + } + + + + { + selectedEthMethod?.params?.map((param, index) => ( +
+ {param.name} + { + const newParams = [...params]; + newParams[index] = e.target.value; + setParams(newParams); + }} + placeholder={param.placeholder} + /> +
+ )) + } +
+ + + Submit + + { loadingRequest && } + +
+
+
+ ); +} + +export default ArbOneRequest; diff --git a/packages/passport/sdk-sample-app/src/components/arbone/ArbOneWorkflow.tsx b/packages/passport/sdk-sample-app/src/components/arbone/ArbOneWorkflow.tsx new file mode 100644 index 0000000000..4f0b5d1eaf --- /dev/null +++ b/packages/passport/sdk-sample-app/src/components/arbone/ArbOneWorkflow.tsx @@ -0,0 +1,78 @@ +import React, { + ChangeEvent, + useCallback, + useState, +} from 'react'; +import { Stack } from 'react-bootstrap'; +import { usePassportProvider } from '@/context/PassportProvider'; +import ArbOneRequest from '@/components/arbone/ArbOneRequest'; +import CardStack from '@/components/CardStack'; +import { useStatusProvider } from '@/context/StatusProvider'; +import WorkflowButton from '@/components/WorkflowButton'; +import { FormControl, Toggle } from '@biom3/react'; +import { ProviderEvent } from '@imtbl/passport'; + +function ArbOneWorkflow() { + const [showRequest, setShowRequest] = useState(false); + + const { isLoading, addMessage } = useStatusProvider(); + const { connectArbOne, arbOneProvider } = usePassportProvider(); + + const handleRequest = () => { + setShowRequest(true); + }; + + const arbOneEventHandler = useCallback((eventName: string) => (args: any[]) => { + addMessage(`Provider Event: ${eventName}`, args); + }, [addMessage]); + + const onHandleEventsChanged = useCallback((event: ChangeEvent) => { + if (event.target.checked) { + Object.values(ProviderEvent).forEach((eventName) => { + arbOneProvider?.on(eventName, arbOneEventHandler(eventName)); + }); + } else { + Object.values(ProviderEvent).forEach((eventName) => { + arbOneProvider?.removeListener(eventName, arbOneEventHandler(eventName)); + }); + } + }, [arbOneEventHandler, arbOneProvider]); + + return ( + + + {arbOneProvider && ( + <> + + request + + {showRequest + && ( + + )} + + + Log out events + + + )} + {!arbOneProvider && ( + + Connect Arbitrum Sepolia + + )} + + + ); +} + +export default ArbOneWorkflow; diff --git a/packages/passport/sdk-sample-app/src/context/ImmutableProvider.tsx b/packages/passport/sdk-sample-app/src/context/ImmutableProvider.tsx index 6e4a3099d4..92d661855f 100644 --- a/packages/passport/sdk-sample-app/src/context/ImmutableProvider.tsx +++ b/packages/passport/sdk-sample-app/src/context/ImmutableProvider.tsx @@ -136,10 +136,13 @@ const getPassportConfig = (environment: EnvironmentNames): PassportModuleConfigu })), immutableXClient: new IMXClient(getSdkConfig(EnvironmentNames.DEV)), zkEvmRpcUrl: 'https://rpc.dev.immutable.com', - relayerUrl: 'https://api.dev.immutable.com/relayer-mr', + relayerUrl: 'http://localhost:8073/relayer-mr', indexerMrBasePath: 'https://api.dev.immutable.com', orderBookMrBasePath: 'https://api.dev.immutable.com', - passportMrBasePath: 'https://api.dev.immutable.com', + passportMrBasePath: 'http://localhost:8072', + sequenceIdentityInstrumentEndpoint: 'https://next-identity.sequence-dev.app/', + sequenceProjectAccessKey: 'AQAAAAAAAAB5QznGqk9paa4EQjom09ERpJs', + sequenceGuardEndpoint: 'https://guard.sequence.app', }, ...sharedConfigurationValues, }; diff --git a/packages/passport/sdk-sample-app/src/context/PassportProvider.tsx b/packages/passport/sdk-sample-app/src/context/PassportProvider.tsx index afdc50cbb5..01f2670670 100644 --- a/packages/passport/sdk-sample-app/src/context/PassportProvider.tsx +++ b/packages/passport/sdk-sample-app/src/context/PassportProvider.tsx @@ -3,7 +3,7 @@ import React, { } from 'react'; import { IMXProvider } from '@imtbl/x-provider'; import { - LinkedWallet, LinkWalletParams, Provider, UserProfile, MarketingConsentStatus, + LinkedWallet, LinkWalletParams, Provider, UserProfile, MarketingConsentStatus, EvmChain, } from '@imtbl/passport'; import { useImmutableProvider } from '@/context/ImmutableProvider'; import { useStatusProvider } from '@/context/StatusProvider'; @@ -11,8 +11,10 @@ import { useStatusProvider } from '@/context/StatusProvider'; const PassportContext = createContext<{ imxProvider: IMXProvider | undefined; zkEvmProvider: Provider | undefined; + arbOneProvider: Provider | undefined; connectImx:() => void; connectZkEvm: () => void; + connectArbOne: () => void; logout: () => void; login: () => void; popupRedirect: () => void; @@ -30,8 +32,10 @@ const PassportContext = createContext<{ }>({ imxProvider: undefined, zkEvmProvider: undefined, + arbOneProvider: undefined, connectImx: () => undefined, connectZkEvm: () => undefined, + connectArbOne: () => undefined, logout: () => undefined, login: () => Promise.resolve(undefined), popupRedirect: () => Promise.resolve(undefined), @@ -53,6 +57,7 @@ export function PassportProvider({ }: { children: JSX.Element | JSX.Element[] }) { const [imxProvider, setImxProvider] = useState(); const [zkEvmProvider, setZkEvmProvider] = useState(); + const [arbOneProvider, setArbOneProvider] = useState(); const { addMessage, setIsLoading } = useStatusProvider(); const { passportClient } = useImmutableProvider(); @@ -86,6 +91,18 @@ export function PassportProvider({ setIsLoading(false); }, [passportClient, setIsLoading, addMessage]); + const connectArbOne = useCallback(async () => { + setIsLoading(true); + const provider = await passportClient.connectEvm({ chain: EvmChain.ARBITRUM_SEPOLIA }); + if (provider) { + setArbOneProvider(provider); + addMessage('ConnectArbOne', 'Connected'); + } else { + addMessage('ConnectArbOne', 'Failed to connect'); + } + setIsLoading(false); + }, [passportClient, setIsLoading, addMessage]); + const getIdToken = useCallback(async () => { setIsLoading(true); const idToken = await passportClient.getIdToken(); @@ -141,6 +158,7 @@ export function PassportProvider({ await passportClient.logout(); setImxProvider(undefined); setZkEvmProvider(undefined); + setArbOneProvider(undefined); } catch (err) { addMessage('Logout', err); console.error(err); @@ -291,8 +309,10 @@ export function PassportProvider({ const providerValues = useMemo(() => ({ imxProvider, zkEvmProvider, + arbOneProvider, connectImx, connectZkEvm, + connectArbOne, logout, popupRedirect, popupRedirectGoogle, @@ -310,8 +330,10 @@ export function PassportProvider({ }), [ imxProvider, zkEvmProvider, + arbOneProvider, connectImx, connectZkEvm, + connectArbOne, logout, popupRedirect, popupRedirectGoogle, @@ -339,8 +361,10 @@ export function usePassportProvider() { const { imxProvider, zkEvmProvider, + arbOneProvider, connectImx, connectZkEvm, + connectArbOne, logout, popupRedirect, popupRedirectGoogle, @@ -359,8 +383,10 @@ export function usePassportProvider() { return { imxProvider, zkEvmProvider, + arbOneProvider, connectImx, connectZkEvm, + connectArbOne, logout, popupRedirect, popupRedirectGoogle, diff --git a/packages/passport/sdk-sample-app/src/pages/index.tsx b/packages/passport/sdk-sample-app/src/pages/index.tsx index 29c089adab..2b171b9dc5 100644 --- a/packages/passport/sdk-sample-app/src/pages/index.tsx +++ b/packages/passport/sdk-sample-app/src/pages/index.tsx @@ -10,10 +10,11 @@ import { useStatusProvider } from '@/context/StatusProvider'; import { BASE_PATH } from '@/config'; import PassportMethods from '@/components/PassportMethods'; import ZkEvmWorkflow from '@/components/zkevm/ZkEvmWorkflow'; +import ArbOneWorkflow from '@/components/arbone/ArbOneWorkflow'; export default function Home() { const { isLoading } = useStatusProvider(); - const { imxProvider, zkEvmProvider } = usePassportProvider(); + const { imxProvider, zkEvmProvider, arbOneProvider } = usePassportProvider(); return ( <> @@ -26,7 +27,7 @@ export default function Home() {
- + @@ -37,6 +38,9 @@ export default function Home() { + + + diff --git a/packages/passport/sdk/package.json b/packages/passport/sdk/package.json index 99ed34572a..fa2e841042 100644 --- a/packages/passport/sdk/package.json +++ b/packages/passport/sdk/package.json @@ -5,8 +5,15 @@ "author": "Immutable", "bugs": "https://github.com/immutable/ts-immutable-sdk/issues", "dependencies": { - "@0xsequence/abi": "^2.0.25", - "@0xsequence/core": "^2.0.25", + "@0xsequence/abi": "2.3.34", + "@0xsequence/core": "2.3.34", + "@0xsequence/identity-instrument": "3.0.0-beta.4", + "@0xsequence/network": "^2.3.35", + "@0xsequence/wallet-wdk": "3.0.0-beta.4", + "@0xsequence/relayer": "3.0.0-beta.4", + "@0xsequence/wallet-core": "3.0.0-beta.4", + "@0xsequence/wallet-primitives": "3.0.0-beta.4", + "@0xsequence/guard": "3.0.0-beta.4", "@imtbl/config": "workspace:*", "@imtbl/generated-clients": "workspace:*", "@imtbl/metrics": "workspace:*", @@ -23,6 +30,7 @@ "localforage": "^1.10.0", "magic-sdk": "^29.0.5", "oidc-client-ts": "3.3.0", + "ox": "^0.9.14", "uuid": "^8.3.2" }, "devDependencies": { diff --git a/packages/passport/sdk/src/Passport.int.test.ts b/packages/passport/sdk/src/Passport.int.test.ts index 4bd44d85ac..c4e6d7b137 100644 --- a/packages/passport/sdk/src/Passport.int.test.ts +++ b/packages/passport/sdk/src/Passport.int.test.ts @@ -195,6 +195,9 @@ describe('Passport', () => { orderBookMrBasePath: 'orderBookMrBasePath123', passportMrBasePath: 'passportMrBasePath123', immutableXClient, + sequenceIdentityInstrumentEndpoint: 'sequenceIdentityInstrumentEndpoint123', + sequenceProjectAccessKey: 'sequenceProjectAccessKey123', + sequenceGuardEndpoint: 'sequenceGuardEndpoint123', }; const { passportImxProviderFactory } = buildPrivateVars({ diff --git a/packages/passport/sdk/src/Passport.test.ts b/packages/passport/sdk/src/Passport.test.ts index f3faeed012..0cc70b2721 100644 --- a/packages/passport/sdk/src/Passport.test.ts +++ b/packages/passport/sdk/src/Passport.test.ts @@ -127,6 +127,9 @@ describe('Passport', () => { orderBookMrBasePath: 'orderBookMrBasePath123', passportMrBasePath: 'passportMrBasePath123', immutableXClient, + sequenceIdentityInstrumentEndpoint: 'sequenceIdentityInstrumentEndpoint123', + sequenceProjectAccessKey: 'sequenceProjectAccessKey123', + sequenceGuardEndpoint: 'sequenceGuardEndpoint123', }, ...oidcConfiguration, }); diff --git a/packages/passport/sdk/src/Passport.ts b/packages/passport/sdk/src/Passport.ts index 2859862830..072196f105 100644 --- a/packages/passport/sdk/src/Passport.ts +++ b/packages/passport/sdk/src/Passport.ts @@ -12,6 +12,7 @@ import { import { isAxiosError } from 'axios'; import AuthManager from './authManager'; import MagicTEESigner from './magic/magicTEESigner'; +// SequenceSigner imported dynamically to avoid SSR issues with wallet-wdk import { PassportImxProviderFactory } from './starkEx'; import { PassportConfiguration } from './config'; import { @@ -38,6 +39,8 @@ import logger from './utils/logger'; import { announceProvider, passportProviderInfo } from './zkEvm/provider/eip6963'; import { isAPIError, PassportError, PassportErrorType } from './errors/passportError'; import { withMetricsAsync } from './utils/metrics'; +import { EvmChain } from './types'; +import { SequenceProvider, SequenceSigner } from './sequence'; const buildImxClientConfig = (passportModuleConfiguration: PassportModuleConfiguration) => { if (passportModuleConfiguration.overrides) { @@ -68,6 +71,8 @@ export const buildPrivateVars = (passportModuleConfiguration: PassportModuleConf magicProviderId: config.magicProviderId, }); const magicTEESigner = new MagicTEESigner(authManager, magicTeeApiClients); + const sequenceSigner = new SequenceSigner(authManager, config); + const multiRollupApiClients = new MultiRollupApiClients(config.multiRollupConfig); const passportEventEmitter = new TypedEventEmitter(); @@ -80,6 +85,7 @@ export const buildPrivateVars = (passportModuleConfiguration: PassportModuleConf config, authManager, guardianApi: multiRollupApiClients.guardianApi, + multiRollupApiClients, }); const imxApiClients = buildImxApiClients(passportModuleConfiguration); @@ -97,6 +103,7 @@ export const buildPrivateVars = (passportModuleConfiguration: PassportModuleConf config, authManager, magicTEESigner, + sequenceSigner, confirmationScreen, embeddedLoginPrompt, immutableXClient, @@ -120,6 +127,8 @@ export class Passport { private readonly magicTEESigner: MagicTEESigner; + private sequenceSigner: SequenceSigner; + private readonly multiRollupApiClients: MultiRollupApiClients; private readonly passportImxProviderFactory: PassportImxProviderFactory; @@ -134,6 +143,7 @@ export class Passport { this.config = privateVars.config; this.authManager = privateVars.authManager; this.magicTEESigner = privateVars.magicTEESigner; + this.sequenceSigner = privateVars.sequenceSigner; this.confirmationScreen = privateVars.confirmationScreen; this.embeddedLoginPrompt = privateVars.embeddedLoginPrompt; this.immutableXClient = privateVars.immutableXClient; @@ -167,26 +177,44 @@ export class Passport { * Connects to EVM and optionally announces the provider. * @param {Object} options - Configuration options * @param {boolean} options.announceProvider - Whether to announce the provider via EIP-6963 for wallet discovery (defaults to true) + * @param {EvmChain} options.chain - The EVM chain to connect to (defaults to ZKEVM) * @returns {Promise} The EVM provider instance */ - public async connectEvm(options: ConnectEvmArguments = { announceProvider: true }): Promise { + public async connectEvm(options: ConnectEvmArguments = { announceProvider: true, chain: EvmChain.ZKEVM }): Promise { return withMetricsAsync(async () => { let user: User | null = null; try { user = await this.authManager.getUser(); } catch (error) { - // Initialise the zkEvmProvider without a user + // Initialise the provider without a user } - const provider = new ZkEvmProvider({ - passportEventEmitter: this.passportEventEmitter, - authManager: this.authManager, - config: this.config, - multiRollupApiClients: this.multiRollupApiClients, - guardianClient: this.guardianClient, - ethSigner: this.magicTEESigner, - user, - }); + const chain = options?.chain || EvmChain.ZKEVM; + + let provider: Provider; + + if (chain !== EvmChain.ZKEVM) { + provider = new SequenceProvider({ + passportEventEmitter: this.passportEventEmitter, + authManager: this.authManager, + config: this.config, + multiRollupApiClients: this.multiRollupApiClients, + guardianClient: this.guardianClient, + ethSigner: this.sequenceSigner, + user, + chain, + }); + } else { + provider = new ZkEvmProvider({ + passportEventEmitter: this.passportEventEmitter, + authManager: this.authManager, + config: this.config, + multiRollupApiClients: this.multiRollupApiClients, + guardianClient: this.guardianClient, + ethSigner: this.magicTEESigner, + user, + }); + } if (options?.announceProvider) { announceProvider({ diff --git a/packages/passport/sdk/src/authManager.ts b/packages/passport/sdk/src/authManager.ts index 640d2ab6a4..6379666b7f 100644 --- a/packages/passport/sdk/src/authManager.ts +++ b/packages/passport/sdk/src/authManager.ts @@ -26,6 +26,7 @@ import { isUserZkEvm, UserImx, isUserImx, + EvmChain, } from './types'; import { PassportConfiguration } from './config'; import ConfirmationOverlay from './overlay/confirmationOverlay'; @@ -159,6 +160,18 @@ export default class AuthManager { userAdminAddress: passport?.zkevm_user_admin_address, }; } + + const chains = Object.values(EvmChain).filter(chain => chain !== EvmChain.ZKEVM); + for (const chain of chains) { + const chainMetadata = passport?.[chain]; + if (chainMetadata?.eth_address && chainMetadata?.user_admin_address) { + user[chain] = { + ethAddress: chainMetadata.eth_address, + userAdminAddress: chainMetadata.user_admin_address, + }; + } + } + return user; }; @@ -642,7 +655,6 @@ export default class AuthManager { if (!user) { throw new Error('Failed to obtain a User with the required ZkEvm attributes'); } - return user; } diff --git a/packages/passport/sdk/src/config/config.test.ts b/packages/passport/sdk/src/config/config.test.ts index 4a9b048b49..d15c4951e5 100644 --- a/packages/passport/sdk/src/config/config.test.ts +++ b/packages/passport/sdk/src/config/config.test.ts @@ -31,6 +31,9 @@ describe('Config', () => { indexerMrBasePath: 'indexerMrBasePath123', orderBookMrBasePath: 'orderBookMrBasePath123', passportMrBasePath: 'passportMrBasePath123', + sequenceIdentityInstrumentEndpoint: 'sequenceIdentityInstrumentEndpoint123', + sequenceProjectAccessKey: 'sequenceProjectAccessKey123', + sequenceGuardEndpoint: 'sequenceGuardEndpoint123' }; const defaultHeaders = { 'x-sdk-version': 'ts-immutable-sdk-__SDK_VERSION__' }; diff --git a/packages/passport/sdk/src/config/config.ts b/packages/passport/sdk/src/config/config.ts index 3d1cdee7b2..e379a81a96 100644 --- a/packages/passport/sdk/src/config/config.ts +++ b/packages/passport/sdk/src/config/config.ts @@ -50,6 +50,12 @@ export class PassportConfiguration { readonly relayerUrl: string; + readonly sequenceProjectAccessKey: string; + + readonly sequenceIdentityInstrumentEndpoint: string; + + readonly sequenceGuardEndpoint: string; + readonly multiRollupConfig: MultiRollupAPIConfiguration; readonly crossSdkBridgeEnabled: boolean; @@ -104,6 +110,9 @@ export class PassportConfiguration { this.magicProviderId = overrides.magicProviderId; this.zkEvmRpcUrl = overrides.zkEvmRpcUrl; this.relayerUrl = overrides.relayerUrl; + this.sequenceIdentityInstrumentEndpoint = overrides.sequenceIdentityInstrumentEndpoint; + this.sequenceProjectAccessKey = overrides.sequenceProjectAccessKey; + this.sequenceGuardEndpoint = overrides.sequenceGuardEndpoint; this.multiRollupConfig = { indexer: createConfig({ basePath: overrides.indexerMrBasePath, @@ -125,6 +134,9 @@ export class PassportConfiguration { this.imxPublicApiDomain = 'https://api.immutable.com'; this.zkEvmRpcUrl = 'https://rpc.immutable.com'; this.relayerUrl = 'https://api.immutable.com/relayer-mr'; + this.sequenceIdentityInstrumentEndpoint = 'https://next-identity.sequence.app/'; + this.sequenceProjectAccessKey = 'AQAAAAAAAAB5QznGqk9paa4EQjom09ERpJs'; + this.sequenceGuardEndpoint = 'https://guard.sequence.app'; this.multiRollupConfig = multiRollupConfig.getProduction(); break; } @@ -136,7 +148,10 @@ export class PassportConfiguration { this.passportDomain = 'https://passport.sandbox.immutable.com'; this.imxPublicApiDomain = 'https://api.sandbox.immutable.com'; this.zkEvmRpcUrl = 'https://rpc.testnet.immutable.com'; - this.relayerUrl = 'https://api.sandbox.immutable.com/relayer-mr'; + this.relayerUrl = 'http://localhost:8073/relayer-mr'; + this.sequenceIdentityInstrumentEndpoint = 'https://next-identity.sequence-dev.app/'; + this.sequenceProjectAccessKey = 'AQAAAAAAAAB5QznGqk9paa4EQjom09ERpJs'; + this.sequenceGuardEndpoint = 'https://guard.sequence.app'; this.multiRollupConfig = multiRollupConfig.getSandbox(); break; } diff --git a/packages/passport/sdk/src/confirmation/confirmation.ts b/packages/passport/sdk/src/confirmation/confirmation.ts index f8069ca7cb..8e092b7a51 100644 --- a/packages/passport/sdk/src/confirmation/confirmation.ts +++ b/packages/passport/sdk/src/confirmation/confirmation.ts @@ -63,6 +63,7 @@ export default class ConfirmationScreen { chainType: GeneratedClients.mr.TransactionApprovalRequestChainTypeEnum, chainId?: string, ): Promise { + console.log(`request confirmation for transactionId: ${transactionId}, etherAddress: ${etherAddress}, chainType: ${chainType}, chainId: ${chainId}`); return new Promise((resolve, reject) => { const messageHandler = ({ data, origin }: MessageEvent) => { if ( @@ -228,6 +229,7 @@ export default class ConfirmationScreen { } showConfirmationScreen(href: string, messageHandler: MessageHandler, resolve: Function) { + console.log(`show confirmation screen for href: ${href}`); // If popup blocked, the confirmation window will not exist if (this.confirmationWindow) { this.confirmationWindow.location.href = href; @@ -235,6 +237,7 @@ export default class ConfirmationScreen { // This indicates the user closed the overlay so the transaction should be rejected if (!this.overlay) { + console.log('overlay is not defined'); this.overlayClosed = false; resolve({ confirmed: false }); return; @@ -243,6 +246,7 @@ export default class ConfirmationScreen { // https://stackoverflow.com/questions/9388380/capture-the-close-event-of-popup-window-in-javascript/48240128#48240128 const timerCallback = () => { if (this.confirmationWindow?.closed || this.overlayClosed) { + console.log('confirmation window closed or overlay closed'); clearInterval(this.timer); window.removeEventListener('message', messageHandler); resolve({ confirmed: false }); diff --git a/packages/passport/sdk/src/guardian/index.test.ts b/packages/passport/sdk/src/guardian/index.test.ts index f0aecd1168..478e3e7645 100644 --- a/packages/passport/sdk/src/guardian/index.test.ts +++ b/packages/passport/sdk/src/guardian/index.test.ts @@ -44,8 +44,21 @@ describe('Guardian', () => { authManager: { getUserImx: getUserImxMock, getUserZkEvm: getUserZkEvmMock, + getUser: jest.fn().mockResolvedValue(mockUserZkEvm), } as unknown as AuthManager, guardianApi: guardianApi as GeneratedClients.mr.GuardianApi, + multiRollupApiClients: { + chainsApi: { + listChains: jest.fn().mockResolvedValue({ + data: { + result: [ + { id: 'eip155:13473', name: 'imtbl-zkevm-testnet' }, + { id: 'eip155:421614', name: 'arbitrum-sepolia' }, + ], + }, + }), + }, + } as any, }); }; diff --git a/packages/passport/sdk/src/guardian/index.ts b/packages/passport/sdk/src/guardian/index.ts index d5fc6cebdf..bf02ff1759 100644 --- a/packages/passport/sdk/src/guardian/index.ts +++ b/packages/passport/sdk/src/guardian/index.ts @@ -9,12 +9,14 @@ import { MetaTransaction, TypedDataPayload } from '../zkEvm/types'; import { PassportConfiguration } from '../config'; import { getEip155ChainId } from '../zkEvm/walletHelpers'; import { PassportError, PassportErrorType } from '../errors/passportError'; +import { RollupType } from '../types'; export type GuardianClientParams = { confirmationScreen: ConfirmationScreen; config: PassportConfiguration; authManager: AuthManager; guardianApi: GeneratedClients.mr.GuardianApi; + multiRollupApiClients: GeneratedClients.MultiRollupApiClients; }; export type GuardianEvaluateImxTransactionParams = { @@ -41,6 +43,8 @@ type GuardianERC191MessageEvaluationParams = { const transactionRejectedCrossSdkBridgeError = 'Transaction requires confirmation but this functionality is not' + ' supported in this environment. Please contact Immutable support if you need to enable this feature.'; +const IMTBL_ZKEVM_CHAIN_PREFIX = 'imtbl-zkevm'; + export const convertBigNumberishToString = ( value: BigNumberish, ): string => BigInt(value).toString(); @@ -75,13 +79,81 @@ export default class GuardianClient { private readonly authManager: AuthManager; + private readonly multiRollupApiClients: GeneratedClients.MultiRollupApiClients; + + private chainIdToKeyCache: Map = new Map(); + constructor({ - confirmationScreen, config, authManager, guardianApi, + confirmationScreen, config, authManager, guardianApi, multiRollupApiClients, }: GuardianClientParams) { this.confirmationScreen = confirmationScreen; this.crossSdkBridgeEnabled = config.crossSdkBridgeEnabled; this.guardianApi = guardianApi; this.authManager = authManager; + this.multiRollupApiClients = multiRollupApiClients; + } + + /** + * Get chain key from EIP-155 chainId by querying listChains API + * Converts API format (dashes) to User object format (underscores) + */ + private async getChainKeyFromId(chainId: string): Promise { + // Check cache first + if (this.chainIdToKeyCache.has(chainId)) { + return this.chainIdToKeyCache.get(chainId)!; + } + + try { + const chainListResponse = await this.multiRollupApiClients.chainsApi.listChains(); + const chain = chainListResponse.data?.result?.find((c) => c.id === chainId); + + if (!chain?.name) { + // Fallback to zkEvm if chain not found + return RollupType.ZKEVM; + } + + // Convert API format (arbitrum-sepolia, imtbl-zkevm-testnet) to User key format (arbitrum_sepolia, zkEvm) + let chainKey: string; + if (chain.name.startsWith(IMTBL_ZKEVM_CHAIN_PREFIX)) { + chainKey = RollupType.ZKEVM; + } else { + // Replace dashes with underscores for other chains + chainKey = chain.name.replace(/-/g, '_'); + } + + this.chainIdToKeyCache.set(chainId, chainKey); + return chainKey; + } catch (error) { + // Fallback to zkEvm on error + return RollupType.ZKEVM; + } + } + + /** + * Get user and extract eth address for the given EIP-155 chainId + */ + private async getUserForChain(chainId: string): Promise<{ user: any; ethAddress: string }> { + const user = await this.authManager.getUser(); + if (!user) { + throw new JsonRpcError( + ProviderErrorCode.UNAUTHORIZED, + 'User not logged in', + ); + } + + const chainKey = await this.getChainKeyFromId(chainId); + // const ethAddress = (user as any)[chainKey]?.ethAddress; + // TODO remove, this is for local testing + const ethAddress = '0x3fadd1f6f02408c0fad35e362e3d5c65e722b67a'; + + if (!ethAddress) { + throw new JsonRpcError( + ProviderErrorCode.UNAUTHORIZED, + `User not registered for chain ${chainId}`, + ); + } + + return { user, ethAddress }; } /** @@ -178,7 +250,7 @@ export default class GuardianClient { nonce, metaTransactions, }: GuardianEVMTxnEvaluationParams): Promise { - const user = await this.authManager.getUserZkEvm(); + const { user, ethAddress } = await this.getUserForChain(chainId); const headers = { Authorization: `Bearer ${user.accessToken}` }; const guardianTransactions = transformGuardianTransactions(metaTransactions); try { @@ -190,7 +262,7 @@ export default class GuardianClient { chainId, transactionData: { nonce, - userAddress: user.zkEvm.ethAddress, + userAddress: ethAddress, metaTransactions: guardianTransactions, }, }, @@ -225,6 +297,11 @@ export default class GuardianClient { }); const { confirmationRequired, transactionId } = transactionEvaluationResponse; + + console.log(`confirmationRequired ${confirmationRequired}`); + console.log(`transactionId ${transactionId}`); + console.log(`crossSdkBridgeEnabled ${this.crossSdkBridgeEnabled}`); + if (confirmationRequired && this.crossSdkBridgeEnabled) { throw new JsonRpcError( RpcErrorCode.TRANSACTION_REJECTED, @@ -233,14 +310,16 @@ export default class GuardianClient { } if (confirmationRequired && !!transactionId) { - const user = await this.authManager.getUserZkEvm(); + const { ethAddress } = await this.getUserForChain(chainId); const confirmationResult = await this.confirmationScreen.requestConfirmation( transactionId, - user.zkEvm.ethAddress, + ethAddress, GeneratedClients.mr.TransactionApprovalRequestChainTypeEnum.Evm, chainId, ); + console.log(`confirmationResult: ${JSON.stringify(confirmationResult)}`); + if (!confirmationResult.confirmed) { throw new JsonRpcError( RpcErrorCode.TRANSACTION_REJECTED, @@ -258,13 +337,7 @@ export default class GuardianClient { { chainID, payload }: GuardianEIP712MessageEvaluationParams, ): Promise { try { - const user = await this.authManager.getUserZkEvm(); - if (user === null) { - throw new JsonRpcError( - ProviderErrorCode.UNAUTHORIZED, - 'User not logged in. Please log in first.', - ); - } + const { user } = await this.getUserForChain(chainID); const messageEvalResponse = await this.guardianApi.evaluateMessage( { messageEvaluationRequest: { chainID, payload } }, { headers: { Authorization: `Bearer ${user.accessToken}` } }, @@ -285,10 +358,10 @@ export default class GuardianClient { throw new JsonRpcError(RpcErrorCode.TRANSACTION_REJECTED, transactionRejectedCrossSdkBridgeError); } if (confirmationRequired && !!messageId) { - const user = await this.authManager.getUserZkEvm(); + const { ethAddress } = await this.getUserForChain(chainID); const confirmationResult = await this.confirmationScreen.requestMessageConfirmation( messageId, - user.zkEvm.ethAddress, + ethAddress, 'eip712', ); @@ -307,17 +380,12 @@ export default class GuardianClient { { chainID, payload }: GuardianERC191MessageEvaluationParams, ): Promise { try { - const user = await this.authManager.getUserZkEvm(); - if (user === null) { - throw new JsonRpcError( - ProviderErrorCode.UNAUTHORIZED, - 'User not logged in. Please log in first.', - ); - } + const eip155ChainId = getEip155ChainId(Number(chainID)); + const { user } = await this.getUserForChain(eip155ChainId); const messageEvalResponse = await this.guardianApi.evaluateErc191Message( { eRC191MessageEvaluationRequest: { - chainID: getEip155ChainId(Number(chainID)), + chainID: eip155ChainId, payload, }, }, @@ -339,10 +407,11 @@ export default class GuardianClient { throw new JsonRpcError(RpcErrorCode.TRANSACTION_REJECTED, transactionRejectedCrossSdkBridgeError); } if (confirmationRequired && !!messageId) { - const user = await this.authManager.getUserZkEvm(); + const eip155ChainId = getEip155ChainId(Number(chainID)); + const { ethAddress } = await this.getUserForChain(eip155ChainId); const confirmationResult = await this.confirmationScreen.requestMessageConfirmation( messageId, - user.zkEvm.ethAddress, + ethAddress, 'erc191', ); diff --git a/packages/passport/sdk/src/index.ts b/packages/passport/sdk/src/index.ts index ac8c9c24dd..55a40402ee 100644 --- a/packages/passport/sdk/src/index.ts +++ b/packages/passport/sdk/src/index.ts @@ -27,7 +27,15 @@ export type { DeviceTokenResponse, DirectLoginOptions, DirectLoginMethod, + User, + UserImx, + UserZkEvm, } from './types'; export { MarketingConsentStatus, + PassportEvents, + RollupType, + EvmChain, + isUserImx, + isUserZkEvm, } from './types'; diff --git a/packages/passport/sdk/src/sequence/chainConfig.ts b/packages/passport/sdk/src/sequence/chainConfig.ts new file mode 100644 index 0000000000..0202d22668 --- /dev/null +++ b/packages/passport/sdk/src/sequence/chainConfig.ts @@ -0,0 +1,36 @@ +import { EvmChain } from "../types"; + +export type ChainConfig = { + chainId: number; + relayerUrl: string; + nodeUrl: string; + rpcUrl: string; +}; + +const CHAIN_CONFIGS: Record, ChainConfig> = { + [EvmChain.ARBITRUM_ONE]: { + chainId: 421614, + relayerUrl: 'https://next-arbitrum-one-relayer.sequence.app', + nodeUrl: 'https://next-nodes.sequence.app/arbitrum-one', + rpcUrl: 'https://arb1.arbitrum.io/rpc', + }, + [EvmChain.ARBITRUM_SEPOLIA]: { + chainId: 421614, + relayerUrl: 'https://next-arbitrum-sepolia-relayer.sequence.app', + nodeUrl: 'https://next-nodes.sequence.app/arbitrum-sepolia', + rpcUrl: 'https://sepolia-rollup.arbitrum.io/rpc', + }, +}; + +export function getChainConfig(chain: EvmChain): ChainConfig { + if (chain === EvmChain.ZKEVM) { + throw new Error('ZKEVM does not use Sequence relayer'); + } + + const config = CHAIN_CONFIGS[chain as Exclude]; + if (!config) { + throw new Error(`Chain ${chain} is not supported`); + } + + return config; +} \ No newline at end of file diff --git a/packages/passport/sdk/src/sequence/index.ts b/packages/passport/sdk/src/sequence/index.ts new file mode 100644 index 0000000000..9155772d09 --- /dev/null +++ b/packages/passport/sdk/src/sequence/index.ts @@ -0,0 +1,8 @@ +export { default as SequenceSigner } from './sequenceSigner'; +export { SequenceProvider } from './sequenceProvider'; +export { SequenceRelayerClient } from './sequenceRelayerClient'; +export { sendTransaction } from './sendTransaction'; +export * from './types'; +export * from './transactionHelpers'; +export * from './walletHelpers'; + diff --git a/packages/passport/sdk/src/sequence/sendTransaction.ts b/packages/passport/sdk/src/sequence/sendTransaction.ts new file mode 100644 index 0000000000..2727c65317 --- /dev/null +++ b/packages/passport/sdk/src/sequence/sendTransaction.ts @@ -0,0 +1,35 @@ +import { prepareAndSignTransaction, TransactionParams } from './transactionHelpers'; +import { EvmChain } from '../types'; + +type EthSendTransactionParams = TransactionParams & { + params: Array; + chain: EvmChain; +}; + +export const sendTransaction = async ({ + params, + sequenceSigner, + oxRpcProvider, + relayerClient, + guardianClient, + walletAddress, + flow, + authManager, + chain, +}: EthSendTransactionParams): Promise => { + const transactionRequest = params[0]; + + const { to, data } = await prepareAndSignTransaction({ + transactionRequest, + sequenceSigner, + oxRpcProvider, + relayerClient, + guardianClient, + walletAddress, + flow, + authManager, + }); + + const txHash = await relayerClient.postToRelayer(chain, to, data, flow); + return txHash; +}; diff --git a/packages/passport/sdk/src/sequence/sequenceProvider.ts b/packages/passport/sdk/src/sequence/sequenceProvider.ts new file mode 100644 index 0000000000..ed856692e9 --- /dev/null +++ b/packages/passport/sdk/src/sequence/sequenceProvider.ts @@ -0,0 +1,317 @@ +import { Provider as OxProvider, RpcTransport } from 'ox'; +import { + Provider, + ProviderEvent, + ProviderEventMap, + RequestArguments, +} from './types'; +import AuthManager from '../authManager'; +import TypedEventEmitter from '../utils/typedEventEmitter'; +import { PassportConfiguration } from '../config'; +import { + PassportEventMap, + PassportEvents, + User, + EvmChain, +} from '../types'; +import { SequenceRelayerClient } from './sequenceRelayerClient'; +import { JsonRpcError, ProviderErrorCode, RpcErrorCode } from '../zkEvm/JsonRpcError'; +import { identify, trackError, trackFlow } from '@imtbl/metrics'; +import { sendTransaction } from './sendTransaction'; +import { registerUser } from './user'; +import { MultiRollupApiClients } from '@imtbl/generated-clients'; +import { SequenceSigner } from './index'; +import { getChainConfig } from './chainConfig'; +import GuardianClient from '../guardian'; +import { JsonRpcProvider } from 'ethers'; + +export type SequenceProviderInput = { + authManager: AuthManager; + config: PassportConfiguration; + multiRollupApiClients: MultiRollupApiClients; + passportEventEmitter: TypedEventEmitter; + guardianClient: GuardianClient; + ethSigner: SequenceSigner; + user: User | null; + chain: Exclude; +}; + +type WithRequired = T & { [P in K]-?: T[P] }; +type UserWithChain> = WithRequired; + +const isUserRegisteredForChain = >( + user: User, + chain: C +): user is UserWithChain => { + return chain in user; +}; + +export class SequenceProvider implements Provider { + readonly #authManager: AuthManager; + + readonly #config: PassportConfiguration; + + readonly #providerEventEmitter: TypedEventEmitter; + + readonly #passportEventEmitter: TypedEventEmitter; + + readonly #guardianClient: GuardianClient; + + readonly #rpcProvider: JsonRpcProvider; + + readonly #oxRpcProvider: OxProvider.Provider; + + readonly #multiRollupApiClients: MultiRollupApiClients; + + readonly #relayerClient: SequenceRelayerClient; + + readonly #ethSigner: SequenceSigner; + + readonly #chain: Exclude; + + public readonly isPassport: boolean = true; + + // TODO: for demo purposes only as we're using local database + userWalletAddress: string | undefined = undefined; + + constructor({ + authManager, + config, + multiRollupApiClients, + passportEventEmitter, + guardianClient, + ethSigner, + user, + chain, + }: SequenceProviderInput) { + this.#authManager = authManager; + this.#config = config; + this.#guardianClient = guardianClient; + this.#passportEventEmitter = passportEventEmitter; + this.#ethSigner = ethSigner; + this.#chain = chain; + + const chainConfig = getChainConfig(chain); + this.#rpcProvider = new JsonRpcProvider(chainConfig.rpcUrl, undefined, { + staticNetwork: true, + }); + this.#oxRpcProvider = OxProvider.from(RpcTransport.fromHttp(chainConfig.nodeUrl)); + + this.#relayerClient = new SequenceRelayerClient({ config: this.#config }); + + this.#multiRollupApiClients = multiRollupApiClients; + this.#providerEventEmitter = new TypedEventEmitter(); + + passportEventEmitter.on(PassportEvents.LOGGED_OUT, this.#handleLogout); + } + + #handleLogout = () => { + this.#providerEventEmitter.emit(ProviderEvent.ACCOUNTS_CHANGED, []); + }; + + async #getWalletAddress() { + try { + const user = await this.#authManager.getUser(); + if (user && isUserRegisteredForChain(user, this.#chain)) { + return user[this.#chain].ethAddress; + } + return undefined; + } catch { + return undefined; + } + } + + async #performRequest(request: RequestArguments): Promise { + switch (request.method) { + case 'eth_requestAccounts': { + console.log(`sequence eth_requestAccounts`); + const signerAddress = await this.#ethSigner.getAddress(); + console.log(`sequence signerAddress = ${signerAddress}`); + + const walletAddress = await this.#getWalletAddress(); + console.log(`eth_requestAccounts 1 walletAddress = ${walletAddress}`); + this.userWalletAddress = walletAddress; + if (walletAddress) return [walletAddress]; + + const flow = trackFlow('passport', `ethRequestAccounts_${this.#chain}`); + + try { + const user = await this.#authManager.getUserOrLogin(); + flow.addEvent('endGetUserOrLogin'); + + let userEthAddress: string | undefined; + + if (!isUserRegisteredForChain(user, this.#chain)) { + flow.addEvent('startUserRegistration'); + + const address = await this.#ethSigner.getAddress(); + userEthAddress = address; + + userEthAddress = await registerUser({ + ethSigner: this.#ethSigner, + authManager: this.#authManager, + multiRollupApiClients: this.#multiRollupApiClients, + accessToken: user.accessToken, + rpcProvider: this.#rpcProvider, + flow, + }); + + this.userWalletAddress = userEthAddress; + console.log(`eth_requestAccounts 2 walletAddress = ${this.userWalletAddress}`); + + flow.addEvent('endUserRegistration'); + } else { + userEthAddress = user[this.#chain].ethAddress; + + this.userWalletAddress = userEthAddress; + console.log(`eth_requestAccounts 3 walletAddress = ${this.userWalletAddress}`); + } + + if (userEthAddress) { + this.#providerEventEmitter.emit(ProviderEvent.ACCOUNTS_CHANGED, [ + userEthAddress, + ]); + } + + identify({ + passportId: user.profile.sub, + }); + + return [userEthAddress]; + } catch (error) { + if (error instanceof Error) { + trackError('passport', `ethRequestAccounts_${this.#chain}`, error, { flowId: flow.details.flowId }); + } else { + flow.addEvent('errored'); + } + throw error; + } finally { + flow.addEvent('End'); + } + } + + case 'eth_sendTransaction': { + console.log(`sequence eth_sendTransaction ${this.userWalletAddress}`); + const walletAddress = '0x3fadd1f6f02408c0fad35e362e3d5c65e722b67a';//this.userWalletAddress; + // const walletAddress = this.userWalletAddress; + // const walletAddress = await this.#getWalletAddress(); + + if (!walletAddress) { + throw new JsonRpcError( + ProviderErrorCode.UNAUTHORIZED, + `Unauthorised - call eth_requestAccounts first`, + ); + } + + const flow = trackFlow('passport', `ethSendTransaction_${this.#chain}`); + + try { + // console.log(`sequence NO GUARDIAN`) + // return await sendTransaction({ + // params: request.params || [], + // sequenceSigner: this.#ethSigner, + // oxRpcProvider: this.#oxRpcProvider, + // relayerClient: this.#relayerClient, + // guardianClient: this.#guardianClient, + // walletAddress, + // flow, + // authManager: this.#authManager, + // chain: this.#chain, + // }); + return await this.#guardianClient.withConfirmationScreen({ + width: 480, + height: 720, + })(async () => await sendTransaction({ + params: request.params || [], + sequenceSigner: this.#ethSigner, + oxRpcProvider: this.#oxRpcProvider, + relayerClient: this.#relayerClient, + guardianClient: this.#guardianClient, + walletAddress, + flow, + authManager: this.#authManager, + chain: this.#chain, + })); + } catch (error) { + if (error instanceof Error) { + trackError('passport', `ethSendTransaction_${this.#chain}`, error, { flowId: flow.details.flowId }); + } else { + flow.addEvent('errored'); + } + throw error; + } finally { + flow.addEvent('End'); + } + } + + // Pass through methods + case 'eth_getBalance': + case 'eth_getCode': + case 'eth_getTransactionCount': { + const [address, blockNumber] = request.params || []; + return this.#rpcProvider.send(request.method, [ + address, + blockNumber || 'latest', + ]); + } + case 'eth_getStorageAt': { + const [address, storageSlot, blockNumber] = request.params || []; + return this.#rpcProvider.send(request.method, [ + address, + storageSlot, + blockNumber || 'latest', + ]); + } + case 'eth_call': + case 'eth_estimateGas': { + const [transaction, blockNumber] = request.params || []; + return this.#rpcProvider.send(request.method, [ + transaction, + blockNumber || 'latest', + ]); + } + case 'eth_gasPrice': + case 'eth_blockNumber': + case 'eth_getBlockByHash': + case 'eth_getBlockByNumber': + case 'eth_getTransactionByHash': + case 'eth_getTransactionReceipt': { + return this.#rpcProvider.send(request.method, request.params || []); + } + + default: { + throw new JsonRpcError( + ProviderErrorCode.UNSUPPORTED_METHOD, + 'Method not supported', + ); + } + } + } + + public async request(request: RequestArguments): Promise { + try { + return await this.#performRequest(request); + } catch (error: unknown) { + if (error instanceof JsonRpcError) { + throw error; + } + if (error instanceof Error) { + throw new JsonRpcError(RpcErrorCode.INTERNAL_ERROR, error.message); + } + + throw new JsonRpcError(RpcErrorCode.INTERNAL_ERROR, 'Internal error'); + } + } + + public on(event: string, listener: (...args: any[]) => void): void { + this.#providerEventEmitter.on(event, listener); + } + + public removeListener( + event: string, + listener: (...args: any[]) => void, + ): void { + this.#providerEventEmitter.removeListener(event, listener); + } +} + diff --git a/packages/passport/sdk/src/sequence/sequenceRelayerClient.ts b/packages/passport/sdk/src/sequence/sequenceRelayerClient.ts new file mode 100644 index 0000000000..f493490485 --- /dev/null +++ b/packages/passport/sdk/src/sequence/sequenceRelayerClient.ts @@ -0,0 +1,75 @@ +import { PassportConfiguration } from '../config'; +import { Relayer } from '@0xsequence/relayer'; +import { Address, Hex } from 'ox'; +import { JsonRpcError, RpcErrorCode } from '../zkEvm/JsonRpcError'; +import { EvmChain } from '../types'; +import { getChainConfig, ChainConfig } from './chainConfig'; +import { Flow } from '@imtbl/metrics'; + +export type RelayerClientInput = { + config: PassportConfiguration, +}; + +export class SequenceRelayerClient { + private readonly config: PassportConfiguration; + private readonly relayers: Map = new Map(); + + constructor({ config }: RelayerClientInput) { + this.config = config; + } + + private getRelayer(chain: EvmChain, chainConfig: ChainConfig): Relayer.RpcRelayer { + let relayer = this.relayers.get(chain); + + if (!relayer) { + relayer = new Relayer.RpcRelayer( + chainConfig.relayerUrl, + chainConfig.chainId, + chainConfig.nodeUrl, + fetch, + this.config.sequenceProjectAccessKey, + ); + + this.relayers.set(chain, relayer); + } + + return relayer; + } + + async postToRelayer( + chain: EvmChain, + to: Address.Address, + data: Hex.Hex, + flow: Flow, + ): Promise { + flow.addEvent('startSubmitToRelayer'); + + const chainConfig = getChainConfig(chain); + + const relayer = this.getRelayer(chain, chainConfig); + console.log(`postToRelayer relayer ${JSON.stringify(relayer)}`); + const { opHash } = await relayer.relay(to, data, chainConfig.chainId); + console.log(`postToRelayer opHash ${opHash}`); + + const wait = (ms: number) => new Promise((res) => setTimeout(res, ms)); + + let transactionHash: string; + while (true) { + const status = await relayer.status(opHash, chainConfig.chainId); + console.log(`postToRelayer status ${JSON.stringify(status)}`); + if (status.status === "confirmed") { + transactionHash = `${status.transactionHash}`; + flow.addEvent('endSubmitToRelayer'); + break; + } else if (status.status === "failed") { + let errorMessage = `Transaction failed to submit with status ${status.reason}.`; + throw new JsonRpcError(RpcErrorCode.RPC_SERVER_ERROR, errorMessage); + } + process.stdout.write("."); + await wait(1500); + } + + return transactionHash; + } +} + diff --git a/packages/passport/sdk/src/sequence/sequenceSigner.ts b/packages/passport/sdk/src/sequence/sequenceSigner.ts new file mode 100644 index 0000000000..3885fd78d7 --- /dev/null +++ b/packages/passport/sdk/src/sequence/sequenceSigner.ts @@ -0,0 +1,42 @@ +import AuthManager from '../authManager'; +import { PassportConfiguration } from '../config'; +import { Wallet } from "@0xsequence/wallet-core"; +import { + Config, + Payload, + Signature as SequenceSignature, +} from "@0xsequence/wallet-primitives"; +import { ISigner } from './signer/ISigner'; +import { IdentityInstrumentSigner } from './signer/identityInstrumentSigner'; +import { PrivateKeySigner } from './signer/privateKeySigner'; +import { Address } from 'ox'; + +export default class SequenceSigner implements ISigner { + private readonly identityInstrumentSigner: IdentityInstrumentSigner; + private readonly privateKeySigner: PrivateKeySigner; + private readonly useIdentityInstrument: boolean; + + constructor(authManager: AuthManager, config: PassportConfiguration) { + this.identityInstrumentSigner = new IdentityInstrumentSigner(authManager, config); + this.privateKeySigner = new PrivateKeySigner(authManager); + this.useIdentityInstrument = config.authenticationDomain !== 'https://auth.dev.immutable.com'; + } + + async getAddress(): Promise { + return this.useIdentityInstrument + ? this.identityInstrumentSigner.getAddress() + : this.privateKeySigner.getAddress(); + } + + async signPayload(walletAddress: Address.Address, chainId: number, payload: Payload.Parented): Promise { + return this.useIdentityInstrument + ? this.identityInstrumentSigner.signPayload(walletAddress, chainId, payload) + : this.privateKeySigner.signPayload(walletAddress, chainId, payload); + } + + async signMessage(message: string | Uint8Array): Promise { + return this.useIdentityInstrument + ? this.identityInstrumentSigner.signMessage(message) + : this.privateKeySigner.signMessage(message); + } +} diff --git a/packages/passport/sdk/src/sequence/signer/ISigner.ts b/packages/passport/sdk/src/sequence/signer/ISigner.ts new file mode 100644 index 0000000000..ddcd4bb9f6 --- /dev/null +++ b/packages/passport/sdk/src/sequence/signer/ISigner.ts @@ -0,0 +1,9 @@ +import { Config, Payload, Signature as SequenceSignature } from '@0xsequence/wallet-primitives'; +import { Address } from 'ox'; + +export interface ISigner { + getAddress(): Promise; + signPayload(walletAddress: Address.Address, chainId: number, payload: Payload.Parented): Promise; + signMessage(message: string | Uint8Array): Promise; +} + diff --git a/packages/passport/sdk/src/sequence/signer/identityInstrumentSigner.ts b/packages/passport/sdk/src/sequence/signer/identityInstrumentSigner.ts new file mode 100644 index 0000000000..fcd99ce83d --- /dev/null +++ b/packages/passport/sdk/src/sequence/signer/identityInstrumentSigner.ts @@ -0,0 +1,174 @@ +import { toUtf8Bytes, hashMessage, toBeHex, concat, getBytes } from 'ethers'; +import { Identity } from '@0xsequence/wallet-wdk'; +import { IdentityInstrument, IdTokenChallenge } from '@0xsequence/identity-instrument'; +import { PassportError, PassportErrorType } from '../../errors/passportError'; +import AuthManager from '../../authManager'; +import { PassportConfiguration } from '../../config'; +import { User } from '../../types'; +import { Hex, Address } from 'ox'; +import jwt_decode from 'jwt-decode'; +import { IdTokenPayload } from '../../types'; +import { + Payload, + Signature as SequenceSignature, +} from '@0xsequence/wallet-primitives'; +import { ISigner } from './ISigner'; + +interface AuthKey { + address: string; + privateKey: CryptoKey; + identitySigner: string; + expiresAt: Date; +} + +interface UserWallet { + userIdentifier: string; + signerAddress: string; + authKey: AuthKey; + identityInstrument: IdentityInstrument; +} + +export class IdentityInstrumentSigner implements ISigner { + private readonly authManager: AuthManager; + private readonly config: PassportConfiguration; + private userWallet: UserWallet | null = null; + private createWalletPromise: Promise | null = null; + + constructor(authManager: AuthManager, config: PassportConfiguration) { + this.authManager = authManager; + this.config = config; + } + + private async getUserOrThrow(): Promise { + const user = await this.authManager.getUser(); + if (!user) { + throw new PassportError( + 'User not authenticated', + PassportErrorType.NOT_LOGGED_IN_ERROR, + ); + } + return user; + } + + private async getUserWallet(): Promise { + let { userWallet } = this; + if (!userWallet) { + userWallet = await this.createWallet(); + } + + const user = await this.getUserOrThrow(); + if (user.profile.sub !== userWallet.userIdentifier) { + userWallet = await this.createWallet(user); + } + + return userWallet; + } + + private async createWallet(user?: User): Promise { + if (this.createWalletPromise) return this.createWalletPromise; + + this.createWalletPromise = new Promise(async (resolve, reject) => { + try { + this.userWallet = null; + await this.authManager.forceUserRefresh(); + + const authenticatedUser = user || await this.getUserOrThrow(); + + if (!authenticatedUser.idToken) { + throw new PassportError( + 'User idToken not available', + PassportErrorType.NOT_LOGGED_IN_ERROR, + ); + } + + const idToken = authenticatedUser.idToken; + const decoded = jwt_decode(idToken); + const issuer = decoded.iss; + const audience = decoded.aud; + + const keyPair = await window.crypto.subtle.generateKey( + { name: 'ECDSA', namedCurve: 'P-256' }, + false, + ['sign', 'verify'] + ); + + const publicKey = await window.crypto.subtle.exportKey('raw', keyPair.publicKey); + const authKey: AuthKey = { + address: Hex.fromBytes(new Uint8Array(publicKey)), + privateKey: keyPair.privateKey, + identitySigner: '', + expiresAt: new Date(Date.now() + 3600000), + }; + + const identityInstrument = new IdentityInstrument(this.config.sequenceIdentityInstrumentEndpoint, "@14:test"); + const challenge = new IdTokenChallenge(issuer, audience, idToken); + + await identityInstrument.commitVerifier( + Identity.toIdentityAuthKey(authKey), + challenge + ); + + const result = await identityInstrument.completeAuth( + Identity.toIdentityAuthKey(authKey), + challenge + ); + + const signerAddress = result.signer.address; + authKey.identitySigner = signerAddress; + + this.userWallet = { + userIdentifier: authenticatedUser.profile.sub, + signerAddress: signerAddress, + authKey, + identityInstrument, + }; + + return resolve(this.userWallet!); + } catch (error) { + const errorMessage = `Identity Instrument: Failed to create signer: ${(error as Error).message}`; + console.error('[IdentityInstrumentSigner] Error:', errorMessage, error); + return reject(new PassportError(errorMessage, PassportErrorType.WALLET_CONNECTION_ERROR)); + } finally { + this.createWalletPromise = null; + } + }); + + return this.createWalletPromise; + } + + async getAddress(): Promise { + const wallet = await this.getUserWallet(); + return wallet.signerAddress; + } + + async signPayload(walletAddress: Address.Address, chainId: number, payload: Payload.Parented): Promise { + const wallet = await this.getUserWallet(); + + const signer = new Identity.IdentitySigner( + wallet.identityInstrument, + wallet.authKey + ); + + return signer.sign(walletAddress, chainId, payload); + } + + async signMessage(message: string | Uint8Array): Promise { + const wallet = await this.getUserWallet(); + + const signer = new Identity.IdentitySigner( + wallet.identityInstrument, + wallet.authKey + ); + + const digest = hashMessage(message); + + const signature = await signer.signDigest(getBytes(digest)); + + const r = toBeHex(signature.r, 32); + const s = toBeHex(signature.s, 32); + const v = toBeHex(signature.yParity + 27, 1); + + return concat([r, s, v]); + } +} + diff --git a/packages/passport/sdk/src/sequence/signer/privateKeySigner.ts b/packages/passport/sdk/src/sequence/signer/privateKeySigner.ts new file mode 100644 index 0000000000..522fc8bb64 --- /dev/null +++ b/packages/passport/sdk/src/sequence/signer/privateKeySigner.ts @@ -0,0 +1,109 @@ +import { toUtf8Bytes, keccak256, hashMessage, SigningKey } from 'ethers'; +import { PassportError, PassportErrorType } from '../../errors/passportError'; +import AuthManager from '../../authManager'; +import { User } from '../../types'; +import { Signers } from '@0xsequence/wallet-core'; +import { + Config, + Payload, + Signature as SequenceSignature, +} from '@0xsequence/wallet-primitives'; +import { ISigner } from './ISigner'; +import { Address } from 'ox'; + +interface PrivateKeyWallet { + userIdentifier: string; + signerAddress: string; + signer: Signers.Pk.Pk; +} + +export class PrivateKeySigner implements ISigner { + private readonly authManager: AuthManager; + private privateKeyWallet: PrivateKeyWallet | null = null; + private createWalletPromise: Promise | null = null; + + constructor(authManager: AuthManager) { + this.authManager = authManager; + } + + private async getUserOrThrow(): Promise { + const user = await this.authManager.getUser(); + if (!user) { + throw new PassportError( + 'User not authenticated', + PassportErrorType.NOT_LOGGED_IN_ERROR, + ); + } + return user; + } + + private async getWalletInstance(): Promise { + let { privateKeyWallet } = this; + if (!privateKeyWallet) { + privateKeyWallet = await this.createWallet(); + } + + const user = await this.getUserOrThrow(); + if (user.profile.sub !== privateKeyWallet.userIdentifier) { + privateKeyWallet = await this.createWallet(user); + } + + return privateKeyWallet; + } + + private async createWallet(user?: User): Promise { + if (this.createWalletPromise) return this.createWalletPromise; + + this.createWalletPromise = new Promise(async (resolve, reject) => { + try { + this.privateKeyWallet = null; + const authenticatedUser = user || await this.getUserOrThrow(); + + const privateKeyHash = keccak256(toUtf8Bytes(`${authenticatedUser.profile.sub}-sequence-arb-one`)) as `0x${string}`; + console.log(`privateKeyHash = ${privateKeyHash}`); + let signer = new Signers.Pk.Pk(privateKeyHash); + + const signerAddress = signer.address; + + this.privateKeyWallet = { + userIdentifier: authenticatedUser.profile.sub, + signerAddress, + signer, + }; + + return resolve(this.privateKeyWallet!); + } catch (error) { + const errorMessage = `Failed to create private key wallet: ${(error as Error).message}`; + return reject(new PassportError(errorMessage, PassportErrorType.WALLET_CONNECTION_ERROR)); + } finally { + this.createWalletPromise = null; + } + }); + + return this.createWalletPromise; + } + + async getAddress(): Promise { + console.log('getAddress'); + const wallet = await this.getWalletInstance(); + const privateKey = keccak256(toUtf8Bytes(`${wallet.userIdentifier}-sequence-arb-one`)); + console.log(`sequence privateKey = ${privateKey}`); + console.log(`sequence wallet.signerAddress = ${wallet.signerAddress}`); + return wallet.signerAddress; + } + + async signPayload(walletAddress: Address.Address, chainId: number, payload: Payload.Parented): Promise { + const pkWallet = await this.getWalletInstance(); + return pkWallet.signer.sign(walletAddress, chainId, payload); + } + + async signMessage(message: string | Uint8Array): Promise { + const pkWallet = await this.getWalletInstance(); + + const privateKeyHash = keccak256(toUtf8Bytes(`${pkWallet.userIdentifier}-sequence-arb-one`)) as `0x${string}`; + const signingKey = new SigningKey(privateKeyHash); + + return signingKey.sign(hashMessage(message)).serialized; + } +} + diff --git a/packages/passport/sdk/src/sequence/signer/signerHelpers.ts b/packages/passport/sdk/src/sequence/signer/signerHelpers.ts new file mode 100644 index 0000000000..f6c42ef6c4 --- /dev/null +++ b/packages/passport/sdk/src/sequence/signer/signerHelpers.ts @@ -0,0 +1,96 @@ +import { Context, Config } from '@0xsequence/wallet-primitives'; +import { State } from '@0xsequence/wallet-core'; +import { Address, Hex } from 'ox'; + +export const SEQUENCE_CONTEXT: Context.Context = { + factory: '0x1cf579D15a3fA90b144bc4E9016606781A7b3bCb', + stage1: '0x2D2B49799985A9EABb3640b384FE082560b6D6B3', + stage2: '0x592D6B6581B2808390CC08894C5249116B4DF162', + creationCode: "0x6054600f3d396034805130553df3fe63906111273d3560e01c14602b57363d3d373d3d3d3d369030545af43d82803e156027573d90f35b3d90fd5b30543d5260203df3", +}; + +const immutableSignerContractAddress = '0x8bea3E180bEab544c9295a0C0b8eC1628614A2b3'; + +const stateProviderUrl = "https://keymachine.sequence.app"; + +export const createWalletConfig = (signerAddress: Address.Address): Config.Config => { + const signers = [Address.from(immutableSignerContractAddress), signerAddress]; + + if (signers[0].toLowerCase() > signers[1].toLowerCase()) { + [signers[0], signers[1]] = [signers[1], signers[0]]; + } + + return { + threshold: 2n, + checkpoint: 0n, + topology: [ + { + type: "signer", + address: signers[0], + weight: 1n, + }, + { + type: "signer", + address: signers[1], + weight: 1n, + }, + ], + }; +}; + +export const createStateProvider = (walletAddress: Address.Address, deploymentSalt: string, realImageHash: Hex.Hex): State.Provider => { + const baseStateProvider = new State.Sequence.Provider(stateProviderUrl); + + return new Proxy(baseStateProvider, { + get(target, prop) { + // Override getDeploy to return custom deployment info + if (prop === 'getDeploy') { + return async (wallet: Address.Address) => { + if (wallet === walletAddress) { + return { + imageHash: deploymentSalt, + context: SEQUENCE_CONTEXT, + }; + } + return target.getDeploy(wallet); + }; + } + + // Override getConfiguration to map custom salt back to real imageHash + if (prop === 'getConfiguration') { + return async (queryImageHash: Hex.Hex) => { + // If querying for custom salt, return config for real imageHash + if (queryImageHash === deploymentSalt) { + return target.getConfiguration(realImageHash); + } + return target.getConfiguration(queryImageHash); + }; + } + + // Override getConfigurationUpdates to return empty array for custom salt wallets + if (prop === 'getConfigurationUpdates') { + return async (wallet: Address.Address, fromImageHash: Hex.Hex, options?: any) => { + if (wallet === walletAddress) { + return []; + } + return target.getConfigurationUpdates(wallet, fromImageHash, options); + }; + } + + // Delegate all other methods to the base provider + const value = (target as any)[prop]; + if (typeof value === 'function') { + return value.bind(target); + } + return value; + }, + }) as State.Provider; +}; + +export const saveWalletConfig = async ( + walletConfig: Config.Config, + stateProvider: State.Provider +): Promise => { + await stateProvider.saveWallet(walletConfig, SEQUENCE_CONTEXT as any); +}; + diff --git a/packages/passport/sdk/src/sequence/transactionHelpers.ts b/packages/passport/sdk/src/sequence/transactionHelpers.ts new file mode 100644 index 0000000000..11167c5483 --- /dev/null +++ b/packages/passport/sdk/src/sequence/transactionHelpers.ts @@ -0,0 +1,245 @@ +import { Flow } from '@imtbl/metrics'; +import { BigNumberish, TransactionRequest } from 'ethers'; +import { Address, Bytes, Hex, Provider } from 'ox'; +import { getEip155ChainId, getNonce, isWalletDeployed } from './walletHelpers'; +import { JsonRpcError, ProviderErrorCode, RpcErrorCode } from '../zkEvm/JsonRpcError'; +import SequenceSigner from './sequenceSigner'; +import { Payload, Config, Context } from '@0xsequence/wallet-primitives'; +import { Wallet } from '@0xsequence/wallet-core'; +import { SequenceRelayerClient } from './sequenceRelayerClient'; +import AuthManager from '../authManager'; +import { createStateProvider, createWalletConfig, saveWalletConfig, SEQUENCE_CONTEXT } from './signer/signerHelpers'; +import GuardianClient, { convertBigNumberishToString } from '../guardian'; +import { MetaTransaction } from '../zkEvm/types'; + +export type TransactionParams = { + sequenceSigner: SequenceSigner; + oxRpcProvider: Provider.Provider; + guardianClient: GuardianClient; + relayerClient: SequenceRelayerClient; + walletAddress: string; + flow: Flow; + authManager: AuthManager; + nonceSpace?: bigint; + isBackgroundTransaction?: boolean; +}; + +const buildMetaTransaction = async ( + transactionRequest: TransactionRequest, + rpcProvider: Provider.Provider, + walletAddress: string, + nonceSpace?: bigint, +): Promise => { + if (!transactionRequest.to) { + throw new JsonRpcError( + RpcErrorCode.INVALID_PARAMS, + 'eth_sendTransaction requires a "to" field', + ); + } + + const metaTransaction: MetaTransaction = { + to: transactionRequest.to.toString(), + data: transactionRequest.data, + nonce: BigInt(0), // NOTE: We don't need a valid nonce to estimate the fee + value: transactionRequest.value, + revertOnError: true, + }; + + // Get the nonce from the smart wallet + const nonce = await getNonce(rpcProvider, walletAddress, nonceSpace); + + // Build the meta transactions array with a valid nonce + return { + ...metaTransaction, + nonce, + }; +}; + +const createWallet = async ( + authManager: AuthManager, + walletAddress: Address.Address, + sequenceSigner: SequenceSigner, +): Promise => { + const user = await authManager.getUser(); + if (!user?.accessToken) { + throw new JsonRpcError( + ProviderErrorCode.UNAUTHORIZED, + 'No access token found', + ); + } + const deploymentSalt = await fetchDeploymentSalt(user.accessToken); + + const signerAddress = await sequenceSigner.getAddress(); + const walletConfig = createWalletConfig(Address.from(signerAddress)); + const realImageHash = Bytes.toHex(Config.hashConfiguration(walletConfig)); + console.log(`realImageHash = ${realImageHash}`); + + const stateProvider = createStateProvider(walletAddress, deploymentSalt, realImageHash); + const wallet = new Wallet(walletAddress, { + stateProvider: stateProvider, + knownContexts: [SEQUENCE_CONTEXT as Context.KnownContext], + }); + await saveWalletConfig(walletConfig, stateProvider); + + return wallet; +}; + +export const prepareAndSignTransaction = async ({ + transactionRequest, + sequenceSigner, + oxRpcProvider, + guardianClient, + relayerClient, + walletAddress, + flow, + authManager, + nonceSpace, + isBackgroundTransaction, +}: TransactionParams & { transactionRequest: TransactionRequest }): Promise<{ to: Address.Address; data: Hex.Hex; }> => { + const user = await authManager.getUser(); + if (!user?.accessToken) { + throw new JsonRpcError( + ProviderErrorCode.UNAUTHORIZED, + 'No access token found', + ); + } + + const chainId = await oxRpcProvider.request({ method: 'eth_chainId' }); + + const metaTransaction = await buildMetaTransaction( + transactionRequest, + oxRpcProvider, + walletAddress, + nonceSpace, + ); + flow.addEvent('endBuildMetaTransactions'); + + const { nonce } = metaTransaction; + if (typeof nonce === 'undefined') { + throw new Error('Failed to retrieve nonce from the smart wallet'); + } + + const validateTransaction = async () => { + await guardianClient.validateEVMTransaction({ + chainId: getEip155ChainId(Number(chainId)), + nonce: convertBigNumberishToString(nonce), + metaTransactions: [metaTransaction], + isBackgroundTransaction, + }); + flow.addEvent('endValidateEVMTransaction'); + }; + + const signTransaction = async () => { + const signed = await signMetaTransaction( + walletAddress, + metaTransaction, + authManager, + oxRpcProvider, + sequenceSigner, + chainId, + flow, + nonce, + ); + flow.addEvent('endSignMetaTransaction'); + return signed; + } + + const [_, signature] = await Promise.all([ + validateTransaction(), + signTransaction(), + ]); + + const response = await fetch('http://localhost:8073/relayer-mr/v1/build-guest-module-calldata', { + method: 'POST', + headers: { + 'Authorization': `Bearer ${user.accessToken}`, + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + chain_id: getEip155ChainId(Number(chainId)), + to: transactionRequest.to, + value: Hex.fromNumber(BigInt(transactionRequest.value ?? 0)), + data: transactionRequest.data ?? '0x', + user_ecdsa_signature: signature, + }), + }); + + if (!response.ok) { + throw new Error(`Failed to build guest module calldata: ${response.statusText}`); + } + + const result = await response.json(); + + flow.addEvent('endBuildGuestModuleMulticall'); + + console.log(`response ${JSON.stringify(result)}`); + + return { to: result.to, data: result.data }; +}; + +const signMetaTransaction = async ( + walletAddress: string, + metaTransaction: MetaTransaction, + authManager: AuthManager, + rpcProvider: Provider.Provider, + sequenceSigner: SequenceSigner, + chainId: string, + flow: Flow, + nonce: BigNumberish, +): Promise => { + flow.addEvent('startSignMetaTransaction'); + + const wallet = await createWallet(authManager, Address.from(walletAddress), sequenceSigner); + + const call: Payload.Call = { + to: metaTransaction.to as `0x${string}`, + value: BigInt(metaTransaction.value || 0), + data: (metaTransaction.data || '0x') as `0x${string}`, + gasLimit: 0n, + delegateCall: false, + onlyFallback: false, + behaviorOnError: "revert", + }; + + const envelope = await wallet.prepareTransaction(rpcProvider as any, [call], { noConfigUpdate: true }); + + const isDeployed = await isWalletDeployed(rpcProvider, walletAddress); + + // Adjust nonce to 1 for user transaction (bootstrap transaction uses nonce 0) + const adjustedEnvelope = { + ...envelope, + payload: { + ...envelope.payload, + nonce: isDeployed ? BigInt(nonce) : 1n, + }, + }; + + // Encode payload to bytes and sign with EIP-191 prefix + const payloadDigest = Payload.hash(Address.from(walletAddress), Number(chainId), adjustedEnvelope.payload); + const signature = await sequenceSigner.signMessage(payloadDigest) as `0x${string}`; + + flow.addEvent('endSignMetaTransaction'); + + return signature; +}; + +async function fetchDeploymentSalt( + accessToken: string +): Promise { + const apiUrl = 'http://localhost:8072/v2/passport/counterfactual-salt'; + + const response = await fetch(apiUrl, { + method: 'GET', + headers: { + 'Authorization': `Bearer ${accessToken}`, + 'Content-Type': 'application/json', + }, + }); + + if (!response.ok) { + throw new Error(`Failed to fetch deployment salt: ${response.statusText}`); + } + + const data = await response.json(); + return data.salt; +} \ No newline at end of file diff --git a/packages/passport/sdk/src/sequence/types.ts b/packages/passport/sdk/src/sequence/types.ts new file mode 100644 index 0000000000..4587de41f3 --- /dev/null +++ b/packages/passport/sdk/src/sequence/types.ts @@ -0,0 +1,24 @@ +export interface RequestArguments { + method: string; + params?: Array; +} + +export type Provider = { + request: (request: RequestArguments) => Promise; + on: (event: string, listener: (...args: any[]) => void) => void; + removeListener: (event: string, listener: (...args: any[]) => void) => void; + isPassport: boolean; +}; + +export enum ProviderEvent { + ACCOUNTS_CHANGED = 'accountsChanged', + CHAIN_CHANGED = 'chainChanged', +} + +export type AccountsChangedEvent = Array; +export type ChainChangedEvent = string; + +export interface ProviderEventMap extends Record { + [ProviderEvent.ACCOUNTS_CHANGED]: [AccountsChangedEvent]; + [ProviderEvent.CHAIN_CHANGED]: [ChainChangedEvent]; +} diff --git a/packages/passport/sdk/src/sequence/user/index.ts b/packages/passport/sdk/src/sequence/user/index.ts new file mode 100644 index 0000000000..6718859763 --- /dev/null +++ b/packages/passport/sdk/src/sequence/user/index.ts @@ -0,0 +1,2 @@ +export { registerUser, type RegisterUserInput } from './registerUser'; + diff --git a/packages/passport/sdk/src/sequence/user/registerUser.ts b/packages/passport/sdk/src/sequence/user/registerUser.ts new file mode 100644 index 0000000000..9fa86d738a --- /dev/null +++ b/packages/passport/sdk/src/sequence/user/registerUser.ts @@ -0,0 +1,86 @@ +import { Flow } from '@imtbl/metrics'; +import AuthManager from '../../authManager'; +import { MultiRollupApiClients } from '@imtbl/generated-clients'; +import { getEip155ChainId } from '../walletHelpers'; +import { JsonRpcError, RpcErrorCode } from '../../zkEvm/JsonRpcError'; +import SequenceSigner from '../sequenceSigner'; +import { JsonRpcProvider } from 'ethers'; + +export type RegisterUserInput = { + authManager: AuthManager; + multiRollupApiClients: MultiRollupApiClients; + accessToken: string; + rpcProvider: JsonRpcProvider; + ethSigner: SequenceSigner; + flow: Flow; +}; + +const MESSAGE_TO_SIGN = 'Only sign this message from Immutable Passport'; + +export async function registerUser({ + authManager, + multiRollupApiClients, + accessToken, + rpcProvider, + ethSigner, + flow, +}: RegisterUserInput): Promise { + const getAddressPromise = ethSigner.getAddress(); + getAddressPromise.then(() => flow.addEvent('endGetAddress')); + + const signMessagePromise = ethSigner.signMessage(MESSAGE_TO_SIGN).then((signature) => { + const sig = signature.startsWith('0x') ? signature.slice(2) : signature; + const r = sig.substring(0, 64); + const s = sig.substring(64, 128); + const v = sig.substring(128, 130); + + const vNum = parseInt(v, 16); + const recoveryParam = vNum >= 27 ? vNum - 27 : vNum; + const vHex = recoveryParam.toString(16).padStart(2, '0'); + + return `0x${r}${s}${vHex}`; + }); + signMessagePromise.then(() => flow.addEvent('endSignRaw')); + + const detectNetworkPromise = rpcProvider.getNetwork(); + detectNetworkPromise.then(() => flow.addEvent('endDetectNetwork')); + + const listChainsPromise = multiRollupApiClients.chainsApi.listChains(); + listChainsPromise.then(() => flow.addEvent('endListChains')); + + const [ethereumAddress, ethereumSignature, network, chainListResponse] = await Promise.all([ + getAddressPromise, + signMessagePromise, + detectNetworkPromise, + listChainsPromise, + ]); + + const eipChainId = getEip155ChainId(Number(network.chainId)); + const chainName = chainListResponse.data?.result?.find((chain) => chain.id === eipChainId)?.name; + if (!chainName) { + throw new JsonRpcError( + RpcErrorCode.INTERNAL_ERROR, + `Chain name does not exist on for chain id ${network.chainId}`, + ); + } + + try { + const registrationResponse = await multiRollupApiClients.passportApi.createCounterfactualAddressV2({ + chainName: chainName, + createCounterfactualAddressRequest: { + ethereum_address: ethereumAddress, + ethereum_signature: ethereumSignature, + }, + }, { + headers: { Authorization: `Bearer ${accessToken}` }, + }); + flow.addEvent('endCreateCounterfactualAddress'); + + authManager.forceUserRefreshInBackground(); + + return registrationResponse.data.counterfactual_address; + } catch (error) { + flow.addEvent('errorRegisteringUser'); + throw error; + } +} diff --git a/packages/passport/sdk/src/sequence/walletHelpers.ts b/packages/passport/sdk/src/sequence/walletHelpers.ts new file mode 100644 index 0000000000..7d9d88ae2d --- /dev/null +++ b/packages/passport/sdk/src/sequence/walletHelpers.ts @@ -0,0 +1,50 @@ +import { Address, Abi, AbiFunction, Provider } from 'ox'; +import { BigNumberish } from 'ethers'; + +const READ_NONCE = Abi.from(['function readNonce(uint256 _space) external view returns (uint256)'])[0] + +export const isWalletDeployed = async ( + rpcProvider: Provider.Provider, + walletAddress: string, +): Promise => { + return (await rpcProvider.request({ method: 'eth_getCode', params: [Address.from(walletAddress), 'pending'] })) !== '0x' +}; + +export const encodeNonce = (nonceSpace: BigNumberish, nonce: BigNumberish): bigint => { + const space = BigInt(nonceSpace.toString()); + const n = BigInt(nonce.toString()); + const shiftedSpace = space * (2n ** 96n); + return n + shiftedSpace; +}; + +export const getNonce = async ( + rpcProvider: Provider.Provider, + walletAddress: string, + nonceSpace?: bigint, +): Promise => { + const rawSpace = nonceSpace ? (nonceSpace >> 96n) : 0n; + + const deployed = await isWalletDeployed(rpcProvider, walletAddress); + if (!deployed) { + return encodeNonce(rawSpace, 0n); + } + + const callData = AbiFunction.encodeData(READ_NONCE, [rawSpace]); + + const result = await rpcProvider.request({ + method: 'eth_call', + params: [ + { + to: Address.from(walletAddress), + data: callData, + }, + 'latest', + ], + }); + + const nonce = AbiFunction.decodeResult(READ_NONCE, result); + + return encodeNonce(rawSpace, nonce); +}; + +export const getEip155ChainId = (chainId: number): string => `eip155:${chainId}`; diff --git a/packages/passport/sdk/src/types.ts b/packages/passport/sdk/src/types.ts index 43c929def8..bbc35a465a 100644 --- a/packages/passport/sdk/src/types.ts +++ b/packages/passport/sdk/src/types.ts @@ -56,6 +56,16 @@ export type User = { ethAddress: string; userAdminAddress: string; }; +} & { + [K in Exclude]?: { + ethAddress: string; + userAdminAddress: string; + }; +}; + +export type PassportChainMetadata = { + eth_address: string; + user_admin_address: string; }; export type PassportMetadata = { @@ -64,8 +74,9 @@ export type PassportMetadata = { imx_user_admin_address: string; zkevm_eth_address: string; zkevm_user_admin_address: string; +} & { + [K in Exclude]: PassportChainMetadata; }; - export interface OidcConfiguration { clientId: string; logoutRedirectUri?: string; @@ -85,6 +96,9 @@ export interface PassportOverrides { immutableXClient: IMXClient; zkEvmRpcUrl: string; relayerUrl: string; + sequenceIdentityInstrumentEndpoint: string; + sequenceProjectAccessKey: string; + sequenceGuardEndpoint: string; indexerMrBasePath: string; orderBookMrBasePath: string; passportMrBasePath: string; @@ -178,8 +192,15 @@ export type LinkedWallet = { clientName: string; }; +export enum EvmChain { + ZKEVM = 'zkevm', + ARBITRUM_ONE = 'arbitrum_one', + ARBITRUM_SEPOLIA = 'arbitrum_sepolia', +} + export type ConnectEvmArguments = { - announceProvider: boolean; + announceProvider?: boolean; + chain?: EvmChain; }; export type LoginArguments = { diff --git a/packages/passport/sdk/src/zkEvm/relayerClient.ts b/packages/passport/sdk/src/zkEvm/relayerClient.ts index 8ce076d259..cc71020ff3 100644 --- a/packages/passport/sdk/src/zkEvm/relayerClient.ts +++ b/packages/passport/sdk/src/zkEvm/relayerClient.ts @@ -3,6 +3,7 @@ import AuthManager from '../authManager'; import { PassportConfiguration } from '../config'; import { FeeOption, RelayerTransaction, TypedDataPayload } from './types'; import { getEip155ChainId } from './walletHelpers'; +import { JsonRpcError, ProviderErrorCode, RpcErrorCode } from './JsonRpcError'; export type RelayerClientInput = { config: PassportConfiguration, @@ -115,7 +116,13 @@ export class RelayerClient { ...request, }; - const user = await this.authManager.getUserZkEvm(); + const user = await this.authManager.getUser(); + if (!user?.accessToken) { + throw new JsonRpcError( + ProviderErrorCode.UNAUTHORIZED, + 'No access token found', + ); + } const response = await fetch(`${this.config.relayerUrl}/v1/transactions`, { method: 'POST', diff --git a/packages/passport/sdk/src/zkEvm/zkEvmProvider.ts b/packages/passport/sdk/src/zkEvm/zkEvmProvider.ts index beba2623c0..4af2d14fec 100644 --- a/packages/passport/sdk/src/zkEvm/zkEvmProvider.ts +++ b/packages/passport/sdk/src/zkEvm/zkEvmProvider.ts @@ -68,6 +68,9 @@ export class ZkEvmProvider implements Provider { public readonly isPassport: boolean = true; + // TODO: for demo purposes only as we're using local database + userWalletAddress: string | undefined = undefined; + constructor({ authManager, config, @@ -96,20 +99,20 @@ export class ZkEvmProvider implements Provider { this.#multiRollupApiClients = multiRollupApiClients; this.#providerEventEmitter = new TypedEventEmitter(); - if (user && isZkEvmUser(user)) { - this.#callSessionActivity(user.zkEvm.ethAddress); - } + // if (user && isZkEvmUser(user)) { + // this.#callSessionActivity(user.zkEvm.ethAddress); + // } passportEventEmitter.on(PassportEvents.LOGGED_IN, (loggedInUser: User) => { - if (isZkEvmUser(loggedInUser)) { - this.#callSessionActivity(loggedInUser.zkEvm.ethAddress); - } + // if (isZkEvmUser(loggedInUser)) { + // this.#callSessionActivity(loggedInUser.zkEvm.ethAddress); + // } }); passportEventEmitter.on(PassportEvents.LOGGED_OUT, this.#handleLogout); - passportEventEmitter.on( - PassportEvents.ACCOUNTS_REQUESTED, - trackSessionActivity, - ); + // passportEventEmitter.on( + // PassportEvents.ACCOUNTS_REQUESTED, + // trackSessionActivity, + // ); } #handleLogout = () => { @@ -159,7 +162,12 @@ export class ZkEvmProvider implements Provider { switch (request.method) { case 'eth_requestAccounts': { + console.log(`zkevm eth_requestAccounts`); + const signerAddress = await this.#ethSigner.getAddress(); + console.log(`zkevm signerAddress = ${signerAddress}`); + const zkEvmAddress = await this.#getZkEvmAddress(); + this.userWalletAddress = zkEvmAddress; if (zkEvmAddress) return [zkEvmAddress]; const flow = trackFlow('passport', 'ethRequestAccounts'); @@ -181,9 +189,14 @@ export class ZkEvmProvider implements Provider { rpcProvider: this.#rpcProvider, flow, }); + + this.userWalletAddress = userZkEvmEthAddress; + flow.addEvent('endUserRegistration'); } else { userZkEvmEthAddress = user.zkEvm.ethAddress; + + this.userWalletAddress = userZkEvmEthAddress; } this.#providerEventEmitter.emit(ProviderEvent.ACCOUNTS_CHANGED, [ @@ -206,7 +219,8 @@ export class ZkEvmProvider implements Provider { } } case 'eth_sendTransaction': { - const zkEvmAddress = await this.#getZkEvmAddress(); + console.log(`zkevm eth_sendTransaction`); + const zkEvmAddress = this.userWalletAddress;//await this.#getZkEvmAddress(); if (!zkEvmAddress) { throw new JsonRpcError( ProviderErrorCode.UNAUTHORIZED, @@ -216,7 +230,17 @@ export class ZkEvmProvider implements Provider { const flow = trackFlow('passport', 'ethSendTransaction'); + console.log(`request.params ${JSON.stringify(request.params)}`); try { + // return await sendTransaction({ + // params: request.params || [], + // ethSigner: this.#ethSigner, + // guardianClient: this.#guardianClient, + // rpcProvider: this.#rpcProvider, + // relayerClient: this.#relayerClient, + // zkEvmAddress, + // flow, + // }); return await this.#guardianClient.withConfirmationScreen({ width: 480, height: 720, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f559ae5bdd..6d55a79e6e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -65,7 +65,7 @@ importers: version: 17.1.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0)(typescript@5.6.2))(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.2))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0))(eslint@8.57.0) eslint-plugin-react-refresh: specifier: latest - version: 0.4.19(eslint@8.57.0) + version: 0.4.24(eslint@8.57.0) events: specifier: ^3.1.0 version: 3.3.0 @@ -132,7 +132,7 @@ importers: version: 0.25.21(@emotion/react@11.11.3(@types/react@18.3.12)(react@18.3.1))(@rive-app/react-canvas-lite@4.9.0(react@18.3.1))(embla-carousel-react@8.1.5(react@18.3.1))(framer-motion@11.18.2(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@imtbl/sdk': specifier: latest - version: 2.1.11(bufferutil@4.0.8)(utf-8-validate@5.0.10) + version: 2.10.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) next: specifier: 14.2.25 version: 14.2.25(@babel/core@7.26.9)(@playwright/test@1.45.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -777,7 +777,7 @@ importers: version: 18.3.1(react@18.3.1) wagmi: specifier: ^2.11.3 - version: 2.12.1(@tanstack/query-core@5.51.15)(@tanstack/react-query@5.51.15(react@18.3.1))(@types/react@18.3.12)(bufferutil@4.0.8)(encoding@0.1.13)(immer@9.0.21)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@types/react@18.3.12)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.28.0)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.18.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)) + version: 2.12.1(@tanstack/query-core@5.51.15)(@tanstack/react-query@5.51.15(react@18.3.1))(@types/react@18.3.12)(bufferutil@4.0.8)(encoding@0.1.13)(immer@9.0.21)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@types/react@18.3.12)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.28.0)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)) devDependencies: '@playwright/test': specifier: ^1.45.2 @@ -835,7 +835,7 @@ importers: version: 18.3.1(react@18.3.1) wagmi: specifier: ^2.11.3 - version: 2.12.1(@tanstack/query-core@5.51.15)(@tanstack/react-query@5.51.15(react@18.3.1))(@types/react@18.3.12)(bufferutil@4.0.8)(encoding@0.1.13)(immer@9.0.21)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@types/react@18.3.12)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.28.0)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.18.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)) + version: 2.12.1(@tanstack/query-core@5.51.15)(@tanstack/react-query@5.51.15(react@18.3.1))(@types/react@18.3.12)(bufferutil@4.0.8)(encoding@0.1.13)(immer@9.0.21)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@types/react@18.3.12)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.28.0)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)) devDependencies: '@playwright/test': specifier: ^1.45.3 @@ -1196,7 +1196,7 @@ importers: version: 29.6.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) react-scripts: specifier: 5.0.1 - version: 5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.26.9))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.9))(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/babel__core@7.20.5)(bufferutil@4.0.8)(esbuild@0.23.1)(eslint@9.16.0(jiti@1.21.0))(node-notifier@8.0.2)(react@18.3.1)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(utf-8-validate@5.0.10) + version: 5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.26.10))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.10))(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/babel__core@7.20.5)(bufferutil@4.0.8)(esbuild@0.23.1)(eslint@9.16.0(jiti@1.21.0))(node-notifier@8.0.2)(react@18.3.1)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(utf-8-validate@5.0.10) typescript: specifier: ^5.6.2 version: 5.6.2 @@ -1311,7 +1311,7 @@ importers: version: 5.0.7(rollup@4.28.0) '@rollup/plugin-typescript': specifier: ^11.1.6 - version: 11.1.6(rollup@4.28.0)(tslib@2.7.0)(typescript@5.6.2) + version: 11.1.6(rollup@4.28.0)(tslib@2.8.1)(typescript@5.6.2) '@segment/analytics-next': specifier: ^1.53.2 version: 1.54.0(encoding@0.1.13) @@ -1362,7 +1362,7 @@ importers: version: 29.6.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) react-scripts: specifier: 5.0.1 - version: 5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.26.10))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.10))(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/babel__core@7.20.5)(bufferutil@4.0.8)(esbuild@0.23.1)(eslint@8.57.0)(node-notifier@8.0.2)(react@18.3.1)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(utf-8-validate@5.0.10) + version: 5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.26.9))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.9))(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/babel__core@7.20.5)(bufferutil@4.0.8)(esbuild@0.23.1)(eslint@8.57.0)(node-notifier@8.0.2)(react@18.3.1)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(utf-8-validate@5.0.10) rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -1374,7 +1374,7 @@ importers: version: 0.13.0(rollup@4.28.0) ts-jest: specifier: ^29.1.0 - version: 29.2.5(@babel/core@7.26.10)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.10))(esbuild@0.23.1)(jest@29.7.0(@types/node@18.15.13)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2)))(typescript@5.6.2) + version: 29.2.5(@babel/core@7.26.9)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.9))(esbuild@0.23.1)(jest@29.7.0(@types/node@18.15.13)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2)))(typescript@5.6.2) typescript: specifier: ^5.6.2 version: 5.6.2 @@ -1537,9 +1537,15 @@ importers: specifier: ^6.13.4 version: 6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10) devDependencies: + esbuild: + specifier: ^0.23.1 + version: 0.23.1 eslint: specifier: ^8.40.0 version: 8.57.0 + html-inline: + specifier: ^1.2.0 + version: 1.2.0 parcel: specifier: ^2.8.3 version: 2.9.3(@swc/helpers@0.5.13)(postcss@8.4.49)(relateurl@0.2.7)(srcset@4.0.0)(terser@5.34.1)(typescript@5.6.2) @@ -2070,11 +2076,32 @@ importers: packages/passport/sdk: dependencies: '@0xsequence/abi': - specifier: ^2.0.25 - version: 2.2.13 + specifier: 2.3.34 + version: 2.3.34 '@0xsequence/core': - specifier: ^2.0.25 - version: 2.2.13(ethers@6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + specifier: 2.3.34 + version: 2.3.34(ethers@6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + '@0xsequence/guard': + specifier: 3.0.0-beta.4 + version: 3.0.0-beta.4(typescript@5.6.2) + '@0xsequence/identity-instrument': + specifier: 3.0.0-beta.4 + version: 3.0.0-beta.4(typescript@5.6.2) + '@0xsequence/network': + specifier: ^2.3.35 + version: 2.3.35(ethers@6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + '@0xsequence/relayer': + specifier: 3.0.0-beta.4 + version: 3.0.0-beta.4(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10) + '@0xsequence/wallet-core': + specifier: 3.0.0-beta.4 + version: 3.0.0-beta.4(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10) + '@0xsequence/wallet-primitives': + specifier: 3.0.0-beta.4 + version: 3.0.0-beta.4(typescript@5.6.2) + '@0xsequence/wallet-wdk': + specifier: 3.0.0-beta.4 + version: 3.0.0-beta.4(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10) '@imtbl/config': specifier: workspace:* version: link:../../config @@ -2123,6 +2150,9 @@ importers: oidc-client-ts: specifier: 3.3.0 version: 3.3.0 + ox: + specifier: ^0.9.14 + version: 0.9.14(typescript@5.6.2) uuid: specifier: ^8.3.2 version: 8.3.2 @@ -2684,19 +2714,66 @@ importers: packages: - '@0xsequence/abi@2.2.13': - resolution: {integrity: sha512-cZDR83SNxpXTD9vZoJAtmn6/YgvttN0gmeB8feQ5cpo8yd+AeJvQpUGMPR6Ud1MQGsvcPTLnTwKkL432Pc6UGQ==} + '@0xsequence/abi@2.3.34': + resolution: {integrity: sha512-mOQHXUgRRFBZwt+j0f0mjI/4gicL5dZ3Nf3iLnrB7AEF97hchD0g+gkkzHkyyvPcswCnlCkCKBuud6gEnsHGLQ==} + + '@0xsequence/abi@2.3.35': + resolution: {integrity: sha512-HsnFWr/SHfqn3Zkx+ohFPVx3tDwpxBAAdHOVU/wbd8iQ7IRW8w3YZc80ceWOoPOJ/GiOky3B1li+/2/CuDoSJw==} + + '@0xsequence/core@2.3.34': + resolution: {integrity: sha512-VpXO4bQsMwP+y64Ba6C/wNKYUFGksmCYUZQMS1s/ncXAPTmZLLk3pZfmY4Djc8aDqZYYy6Yo0Mq90VPaqYI7Hg==} + peerDependencies: + ethers: '>=6' + + '@0xsequence/core@2.3.35': + resolution: {integrity: sha512-+y9Rs3nCOi6CELttMGHU98XsBEaehUOKrdkPDttMCPtMJiAQo0dObz5D4thGxIGNyKyNotJ4y7ILgtv5Tk34gg==} + peerDependencies: + ethers: '>=6' + + '@0xsequence/guard@3.0.0-beta.4': + resolution: {integrity: sha512-iCwnVVP8dALFEqz+3vuf/Bi1Z1oq3UcPZraMiqE+pGTDwruhpOfwmrY0NTk30VSg7oJK1yVWvTIx+YYPD+r6lA==} + + '@0xsequence/identity-instrument@3.0.0-beta.4': + resolution: {integrity: sha512-BXaUgm3C+lxMYBuacYQISKmYQ1s9lUWQHOEWMvX6WwekZTy84902TPgNTDuJFqw0FdNNmPGyALEbDNcM3wu+BQ==} + + '@0xsequence/indexer@2.3.35': + resolution: {integrity: sha512-zqjGRzRzFWC8jf26WsagHz0zPP6V8ieAUBDrEKItPb0rgzNX+KiMl6wMZXW/zQp+DGuCfvFfeL0NSALmFxmjRg==} + + '@0xsequence/network@2.3.35': + resolution: {integrity: sha512-xn3pLk778EPiM+xHkYQWdY00xDlgWZxz1U8RxEqRi8IjMcC8N6rqNWTupIXWUVOxNCMtlF+Qtme95+slhHAQUQ==} + peerDependencies: + ethers: '>=6' + + '@0xsequence/relayer@2.3.35': + resolution: {integrity: sha512-9kld9zQ2kxh2QqKDaaTmCzdzLGx8fykgID/YlxqDV62J9G5/5g8xTpO0LsGamheQ75l1Orhw2lRNkuyiAib9jg==} + peerDependencies: + ethers: '>=6' + + '@0xsequence/relayer@3.0.0-beta.4': + resolution: {integrity: sha512-xNyesEGZ+Hfj9nzP1VyM3f1qVRo/44NM+/r/b1sgWw6SgSmU8gXAY80fo6oyVt25m8SIq4zmjyQhmBHQOj5TVA==} + + '@0xsequence/tee-verifier@0.1.2': + resolution: {integrity: sha512-7sKr8/T4newknx6LAukjlRI3siGiGhBnZohz2Z3jX0zb0EBQdKUq0L//A7CPSckHFPxTg/QvQU2v8e9x9GfkDw==} - '@0xsequence/core@2.2.13': - resolution: {integrity: sha512-tu6OEGbDLg1KfMb+YOn0Z5BsYbK3UFBjuPVHRx7SpmCsZPEApJqqRKHpTYah2T3bmYIJy9tRBtqstfTsniSgng==} + '@0xsequence/utils@2.3.34': + resolution: {integrity: sha512-4vJUNbQ1UNgr0XcipSOsMB4EglJyj3XlndNfuqRxMuXZAAyEmMVESyC6XjtDIdN26OclUJLj7EYOSlsRkS12Hw==} peerDependencies: ethers: '>=6' - '@0xsequence/utils@2.2.13': - resolution: {integrity: sha512-V4uip1fCZAzp5O2S+nkKnwrqmzzC7em1Mc4HJvUX+fqT0jzw20BZt0CNlX34DgW6E6MzBvWnrX+DTfz/+alBWQ==} + '@0xsequence/utils@2.3.35': + resolution: {integrity: sha512-e9DwgLnPcA+gY8pmgQ5GoS0ssY0myi76hyUhk4DGxytSWa2u+NeMEWTjFWwh9nYxTf4zhhWTQhF3cn8F1bkcJQ==} peerDependencies: ethers: '>=6' + '@0xsequence/wallet-core@3.0.0-beta.4': + resolution: {integrity: sha512-7jH3KcfuaEwDD1lcTnczmkuqZa48q2rKsrYSYtJsH+6RwQNXlGRTRIaafwd3A3HEcrUTSL1xDTRBhscTVeOIaQ==} + + '@0xsequence/wallet-primitives@3.0.0-beta.4': + resolution: {integrity: sha512-RfRf6GlxU+QvHeAPEHq+Z961ayEm0TmAdaI9R9pmrj5YsR/ZPqb+XsARC3OlB5dnwiOCwjZQpVyA3wqgI8XCRQ==} + + '@0xsequence/wallet-wdk@3.0.0-beta.4': + resolution: {integrity: sha512-JIZj2GO3eOZRfodfLbYLA3rb+qCRkIOVEvjx0H/y1Yfr3+vkYSyIZmYLH4+FBwfgLNnD4DLFu7goAjYhOsoW4A==} + '@0xsquid/sdk@2.8.25': resolution: {integrity: sha512-fSMKVdKIX8G3qFpoTf3WfcyjhGdc9hE0uSu1bs1gsh4+iG19ILguDdrY8g87dUknt9PCKBb6TIt1QeYEgbXjdA==} @@ -2724,6 +2801,9 @@ packages: '@adraffy/ens-normalize@1.10.1': resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==} + '@adraffy/ens-normalize@1.11.1': + resolution: {integrity: sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==} + '@alloc/quick-lru@5.2.0': resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} @@ -3634,9 +3714,11 @@ packages: '@cosmjs/crypto@0.31.3': resolution: {integrity: sha512-vRbvM9ZKR2017TO73dtJ50KxoGcFzKtKI7C8iO302BQ5p+DuB+AirUg1952UpSoLfv5ki9O416MFANNg8UN/EQ==} + deprecated: This uses elliptic for cryptographic operations, which contains several security-relevant bugs. To what degree this affects your application is something you need to carefully investigate. See https://github.com/cosmos/cosmjs/issues/1708 for further pointers. Starting with version 0.34.0 the cryptographic library has been replaced. However, private keys might still be at risk. '@cosmjs/crypto@0.32.4': resolution: {integrity: sha512-zicjGU051LF1V9v7bp8p7ovq+VyC91xlaHdsFOTo2oVry3KQikp8L/81RkXmUIT8FxMwdx1T7DmFwVQikcSDIw==} + deprecated: This uses elliptic for cryptographic operations, which contains several security-relevant bugs. To what degree this affects your application is something you need to carefully investigate. See https://github.com/cosmos/cosmjs/issues/1708 for further pointers. Starting with version 0.34.0 the cryptographic library has been replaced. However, private keys might still be at risk. '@cosmjs/encoding@0.31.3': resolution: {integrity: sha512-6IRtG0fiVYwyP7n+8e54uTx2pLYijO48V3t9TLiROERm5aUAIzIlz6Wp0NYaI5he9nh1lcEGJ1lkquVKFw3sUg==} @@ -4364,18 +4446,18 @@ packages: resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} engines: {node: '>=18.18'} - '@imtbl/blockchain-data@2.1.11': - resolution: {integrity: sha512-FZtCxgBoDwNONdbLT61MiOzTG1+rMHC/Zt3ed0K79elISf73/v65SzhyHgumngOWkcUs25TiHw+jm2uU52JyBw==} + '@imtbl/blockchain-data@2.10.6': + resolution: {integrity: sha512-bYYsU3UzLn5gfTntKelk6QEcTcWnFLlUW9EmAS7wXJRq7YUOBpQa+bUiL7E0oNf7zFjRP3zhPqMsayg0AS3fcw==} - '@imtbl/bridge-sdk@2.1.11': - resolution: {integrity: sha512-EaXeMG+Ge17CT089wHipwYoJsGz/EeCLcEztTgIYpijA6R+4wb/jOtwnoCnOAWLHJE4Ep7wi366Xf7be5jTJWQ==} + '@imtbl/bridge-sdk@2.10.6': + resolution: {integrity: sha512-Wynb0Ze5IrFn1K9u0D0fm7p1ijmE+c5FwPfyA1rMe/jiHHeUNRkCngPfwAzuf0fwYRx8NeWtYzdfB/5xVgQyMg==} engines: {node: '>=20.11.0'} - '@imtbl/checkout-sdk@2.1.11': - resolution: {integrity: sha512-8PvuLX7T/3fGygug6fGGnAWRXFHpXkzV3wHgBcBekOe4K16Dl1wobgzyHoal6K90N/LId/ox38Hu3gPwe/yR6Q==} + '@imtbl/checkout-sdk@2.10.6': + resolution: {integrity: sha512-sPyeYobNmk3BZ4qNWucIhPKcrJJTRy+Nb25wrh5Pb2XJNYj7czbAkn+idrMKVpahlhx5PYFhbHmdFiJyfGcvcw==} - '@imtbl/config@2.1.11': - resolution: {integrity: sha512-6qJ579F6teAGn8Rsdi+lIHejh4KoyYoG5QPiykMwFV+vbX7rok4pT6cNkNDLHFu/ZGcNMP+w5+W3vzaOnG0pcQ==} + '@imtbl/config@2.10.6': + resolution: {integrity: sha512-ctRqrnT4r+5S62IZWqsMAXs1wCf/Ir48k+DrEf6B/VDF5+VZSEVtROrXT4urLuzR9B2VXE4EnnZtNLFpzu3k6w==} engines: {node: '>=20.11.0'} '@imtbl/contracts@2.2.17': @@ -4384,51 +4466,51 @@ packages: '@imtbl/contracts@2.2.6': resolution: {integrity: sha512-2cfE3Tojfp4GnxwVKSwoZY1CWd+/drCIbCKawyH9Nh2zASXd7VC71lo27aD5RnCweXHkZVhPzjqwQf/xrtnmIQ==} - '@imtbl/dex-sdk@2.1.11': - resolution: {integrity: sha512-Neo2/ZaeT/DW6xm9xJ4GCFAvVOuBDjawKpWu2jRcu2t15Kmjj0qHHv1yKF5DHlSRq20fktytd+uJQyqtnx/+WA==} + '@imtbl/dex-sdk@2.10.6': + resolution: {integrity: sha512-01z7n0nu5KeYB3G45zWwMd4Kx5VYHFDcPTciZ632NO8wThKbV3H7cUxJjxwbV0cSbZjYIxYGf1qzVwi24yJsGQ==} engines: {node: '>=20.11.0'} - '@imtbl/generated-clients@2.1.11': - resolution: {integrity: sha512-r0xEwQiLYE9hOYCB/q37yPIkREpvRF+JeqQ3tXELQcqMwgH7Rb30ISAN2dMuxXMgvLa9pG2P9rSEisQXLemjJQ==} + '@imtbl/generated-clients@2.10.6': + resolution: {integrity: sha512-5CGynaSzjz2q/nthzn7rE9wYAEqUT1putvOE2DXElBnod+nOBgfOO1XcYQOawMADv9bE7Q74RhEctcSOwyRCkw==} engines: {node: '>=20.11.0'} '@imtbl/image-resizer-utils@0.0.3': resolution: {integrity: sha512-/EOJKMJF4gD/Dv0qNhpUTpp2AgWeQ7XgYK9Xjl+xP2WWgaarNv1SHe1aeqSb8aZT5W7wSXdUGzn6TIxNsuCWGw==} - '@imtbl/metrics@2.1.11': - resolution: {integrity: sha512-d+WYjjbV4ufYL1xKr5mmxnbbkgWS5LKsJbZ8dTF0O7pICrsH2WY5J74R2RGjCVgfoWk28E67WTjsTJYwP+M5CA==} + '@imtbl/metrics@2.10.6': + resolution: {integrity: sha512-8uDkrTw4scfHBlztZbiD8HpTuTkkZNG6iyVjv28JpW9KbbktDEm41RboW6excbe1NDynsDFtHHZHsRDO94xjrA==} engines: {node: '>=20.11.0'} - '@imtbl/minting-backend@2.1.11': - resolution: {integrity: sha512-SgfOT+4nDMAxj5dq0pIrPyaXZ5fhUVgbfOGDoYGJd6x8jJ7utADFemLWWxZHII1/gTe5hg3xSkYR7uluzxvv+Q==} + '@imtbl/minting-backend@2.10.6': + resolution: {integrity: sha512-eEqBZVDPZXBK98lHqkDNBmwfYpYNreGE9lyG8m0QjgvNawemE23fvB/ccnSO5b2tJTq55PkUqOi5mzfomM2KYg==} - '@imtbl/orderbook@2.1.11': - resolution: {integrity: sha512-QKt+oc0AU4kQYCzRSBc0BRwkioZ30cfsmqzthtKU4OLg8H2ngjtt7qN9f6fylflJfHCI3T8spMJPvurH9qsK+w==} + '@imtbl/orderbook@2.10.6': + resolution: {integrity: sha512-fBhqH/r6E9HADyfggCnpTXC3lak0eSfYDLBHvA5SlegHnA/s5sbVaKLiGVCbbGrV0SrSmx5I7G39dxAAb2gTjQ==} - '@imtbl/passport@2.1.11': - resolution: {integrity: sha512-62bc8Dn/RwLJBQtGC8rR+UJ9wEPNUr1z9OlOK/YOezHR2RR9EAVyXaDkhquCN4LkZuw+iqYbu2OWWJ0ST3K8Eg==} + '@imtbl/passport@2.10.6': + resolution: {integrity: sha512-sy+67xSO2udtyXrP4tdjPhuWZprD5BxuGRdRFlRR5ofoKXVvwx7dgU4Ig/0eL0fkL9E6Jv7KXIdlTqLIHzr6jw==} engines: {node: '>=20.11.0'} '@imtbl/react-analytics@0.3.4-alpha': resolution: {integrity: sha512-4VWvfm8RZtpLub7+x2D2wNQ507nIVBCSAPA7B5lxdb0cKrHEujM6Y/HScMImHZHvgjUFQT1jiD9b2BL/DS43Pg==} - '@imtbl/sdk@2.1.11': - resolution: {integrity: sha512-w3oYF+THX6kL3kV/gRsAa9ca18QXb66jlGUPt//rEwOqu6M2mcpWb5V4R+SzR/gKp79OuSCzkPFKYF7kNqQOJw==} + '@imtbl/sdk@2.10.6': + resolution: {integrity: sha512-iLbxFlQgB3g298p5k7VxRVwPlddi78ujHKh2aROCtPc4WRfQyTyUgRQu0KJEv4UjiEDdvUami+NY+aHUdHWydQ==} engines: {node: '>=20.0.0'} - '@imtbl/toolkit@2.1.11': - resolution: {integrity: sha512-krQRFKF+UL7qDca2eWBwRwDLWv0p+JlNs/bCO8q9xvv5gOkUvTplbm0hA+SfTsacboDJ13MekN96n83TRvvCPg==} + '@imtbl/toolkit@2.10.6': + resolution: {integrity: sha512-UgPdxnRrdAFKkRqog4yXweqz8StQkz/RPfHu/33dHQvuOOE+dummEqcqdEiw09PDqZD6LY64b9fe9bsCbjfUgg==} engines: {node: '>=20.11.0'} - '@imtbl/webhook@2.1.11': - resolution: {integrity: sha512-0uoXONxwroH1VYuNwKbqxxyLE83EZRZSUz1Gvya7uZk4RG8vAmSFqsPnEfqca64B4SYePoa0qeu0Bq8+P24AJg==} + '@imtbl/webhook@2.10.6': + resolution: {integrity: sha512-g0a53tHSLHrfSu+qzy+qvCiGlBXnprQGe4CROlG7MPM9mEUDhSYYXCf8OmmbuOrDTWOB4SXv8MVK5qY9uCF/2A==} - '@imtbl/x-client@2.1.11': - resolution: {integrity: sha512-HLYbj6dqfFvry5xfI1d+Q2GF+w5w9UTmAD4G29vTW6rsQQGXeBtJE5R8foY+c1OIz4+kDuTZrrfXxiGnkQ4DRQ==} + '@imtbl/x-client@2.10.6': + resolution: {integrity: sha512-oNG1aI9e1q/GnkW3X72HZvrIb29h7T6OC6l/XdvqezI+1K4g4v/tPbHthu28nX2TyxAzBrxrN0xIZ3izuSN5QQ==} engines: {node: '>=20.11.0'} - '@imtbl/x-provider@2.1.11': - resolution: {integrity: sha512-MdAv353DLWJf2S4JeBJpbLsfDbBjRcEc7baLTLxZUesfVTO6Mh0KLvuZ2U0vPtyOv37rG0oeXzcmWaq8a3CGgQ==} + '@imtbl/x-provider@2.10.6': + resolution: {integrity: sha512-CJCmOPICd9vSRXs+7XmDrtS7VXrSVNNI5SpMicUhXx/MIO8eJTaAVnPitwws0qlYmCTP0fcIgNPfUoMSMBZ2nw==} engines: {node: '>=20.11.0'} '@ioredis/commands@1.2.0': @@ -4718,9 +4800,6 @@ packages: resolution: {integrity: sha512-qC72D4+CDdjGqJvkFMMEAtancHUQ7/d/tAiHf64z8MopFDmcrtbcJuerDtFceuAfQJ2pDSfCKCtbqoGBNnwg0w==} engines: {node: '>=8'} - '@magic-ext/oidc@12.0.2': - resolution: {integrity: sha512-k7KdSprnOFQjyjO24qJX4qnrhZJjZBva2f32REpvo5sb37AbWaYcmA4F+FfhWhMXxwdHlzFwSkeWHgFvzInEgw==} - '@magic-ext/oidc@12.0.5': resolution: {integrity: sha512-EAmmRRZn/c5jmxHZ1H3IHtEqUKHYrsRtH9O+WuMFOZMv0llef/9MBa4DiRZkpnB0EPKb2hwsY7us8qk/LaFRNA==} @@ -5024,6 +5103,10 @@ packages: '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} + '@noble/ciphers@1.3.0': + resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==} + engines: {node: ^14.21.3 || >=16} + '@noble/curves@1.2.0': resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} @@ -5033,6 +5116,14 @@ packages: '@noble/curves@1.4.2': resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==} + '@noble/curves@1.9.1': + resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==} + engines: {node: ^14.21.3 || >=16} + + '@noble/curves@1.9.7': + resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==} + engines: {node: ^14.21.3 || >=16} + '@noble/hashes@1.2.0': resolution: {integrity: sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==} @@ -5048,6 +5139,10 @@ packages: resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} engines: {node: ^14.21.3 || >=16} + '@noble/hashes@1.8.0': + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} + engines: {node: ^14.21.3 || >=16} + '@noble/secp256k1@1.7.1': resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} @@ -6100,18 +6195,27 @@ packages: '@scure/base@1.1.7': resolution: {integrity: sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g==} + '@scure/base@1.2.6': + resolution: {integrity: sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==} + '@scure/bip32@1.1.5': resolution: {integrity: sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==} '@scure/bip32@1.4.0': resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==} + '@scure/bip32@1.7.0': + resolution: {integrity: sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==} + '@scure/bip39@1.1.1': resolution: {integrity: sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==} '@scure/bip39@1.3.0': resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==} + '@scure/bip39@1.6.0': + resolution: {integrity: sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==} + '@segment/analytics-core@1.3.0': resolution: {integrity: sha512-ujScWZH49NK1hYlp2/EMw45nOPEh+pmTydAnR6gSkRNucZD4fuinvpPL03rmFCw8ibaMuKLAdgPJfQ0gkLKZ5A==} @@ -7526,6 +7630,7 @@ packages: '@uniswap/swap-router-contracts@1.3.1': resolution: {integrity: sha512-mh/YNbwKb7Mut96VuEtL+Z5bRe0xVIbjjiryn+iMMrK2sFKhR4duk/86mEz0UO5gSx4pQIw9G5276P5heY/7Rg==} engines: {node: '>=10'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. '@uniswap/v2-core@1.0.1': resolution: {integrity: sha512-MtybtkUPSyysqLY2U210NBDeCHX+ltHt3oADGdjqoThZaFRDKwM6k1Nb3F0A3hk5hwuQvytFWhrWHOEq6nVJ8Q==} @@ -7588,6 +7693,7 @@ packages: '@walletconnect/ethereum-provider@2.13.0': resolution: {integrity: sha512-dnpW8mmLpWl1AZUYGYZpaAfGw1HFkL0WSlhk5xekx3IJJKn4pLacX2QeIOo0iNkzNQxZfux1AK4Grl1DvtzZEA==} + deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' '@walletconnect/events@1.0.1': resolution: {integrity: sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ==} @@ -7629,6 +7735,7 @@ packages: '@walletconnect/modal@2.6.2': resolution: {integrity: sha512-eFopgKi8AjKf/0U4SemvcYw9zlLpx9njVN8sf6DAkowC2Md0gPU/UNEbH1Wwj407pEKnEds98pKWib1NN1ACoA==} + deprecated: Please follow the migration guide on https://docs.reown.com/appkit/upgrade/wcm '@walletconnect/relay-api@1.0.10': resolution: {integrity: sha512-tqrdd4zU9VBNqUaXXQASaexklv6A54yEyQQEXYOCr+Jz8Ket0dmPBDyg19LVSNUN2cipAghQc45/KVmfFJ0cYw==} @@ -7641,6 +7748,7 @@ packages: '@walletconnect/sign-client@2.13.0': resolution: {integrity: sha512-En7KSvNUlQFx20IsYGsFgkNJ2lpvDvRsSFOT5PTdGskwCkUfOpB33SQJ6nCrN19gyoKPNvWg80Cy6MJI0TjNYA==} + deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' '@walletconnect/time@1.0.2': resolution: {integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==} @@ -7750,6 +7858,28 @@ packages: zod: optional: true + abitype@1.1.0: + resolution: {integrity: sha512-6Vh4HcRxNMLA0puzPjM5GBgT4aAcFGKZzSgAXvuZ27shJP6NEpielTuqbBmZILR5/xd0PizkBGy5hReKz9jl5A==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3.22.0 || ^4.0.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + + abitype@1.1.2: + resolution: {integrity: sha512-mqpSSIuddHs7t3IgsAweIZgYIQT4RhpIzrdcSN4fvHp9d77O0mglAAQ7fnI3r/hHIvgMwdpJAKr2T9K9leccYw==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3.22.0 || ^4.0.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -8066,6 +8196,10 @@ packages: asn1@0.2.6: resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + asn1js@3.0.6: + resolution: {integrity: sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA==} + engines: {node: '>=12.0.0'} + assert@2.0.0: resolution: {integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==} @@ -8384,6 +8518,9 @@ packages: bn.js@5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + bn.js@5.2.2: + resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==} + body-parser@1.20.1: resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -8539,6 +8676,10 @@ packages: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} + bytestreamjs@2.0.1: + resolution: {integrity: sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==} + engines: {node: '>=6.0.0'} + cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -8559,10 +8700,22 @@ packages: resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} engines: {node: '>=8'} + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + caller-callsite@2.0.0: resolution: {integrity: sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==} engines: {node: '>=4'} @@ -8614,6 +8767,10 @@ packages: caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + cbor2@1.12.0: + resolution: {integrity: sha512-3Cco8XQhi27DogSp9Ri6LYNZLi/TBY/JVnDe+mj06NkBjW/ZYOtekaEU4wZ4xcRMNrFkDv8KNtOAqHyDfz3lYg==} + engines: {node: '>=18.7'} + cbor@8.1.0: resolution: {integrity: sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==} engines: {node: '>=12.19'} @@ -9230,6 +9387,9 @@ packages: css.escape@1.5.1: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + cssauron@1.4.0: + resolution: {integrity: sha512-Ht70DcFBh+/ekjVrYS2PlDMdSQEl3OFNmjK6lcn49HptBgilXf/Zwg4uFh9Xn0pX3Q8YOkSjIFOfK2osvdqpBw==} + cssdb@7.6.0: resolution: {integrity: sha512-Nna7rph8V0jC6+JBY4Vk4ndErUmfJfV6NJCaZdurL0omggabiy+QB2HCQtu5c/ACLZ0I7REv7A4QyPIoYzZx0w==} @@ -9658,6 +9818,13 @@ packages: resolution: {integrity: sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==} engines: {node: '>=4'} + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + duplexer2@0.0.2: + resolution: {integrity: sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==} + duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} @@ -9821,6 +9988,10 @@ packages: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} @@ -9839,6 +10010,10 @@ packages: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} engines: {node: '>= 0.4'} + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + es-set-tostringtag@2.0.3: resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} engines: {node: '>= 0.4'} @@ -10081,8 +10256,8 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - eslint-plugin-react-refresh@0.4.19: - resolution: {integrity: sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ==} + eslint-plugin-react-refresh@0.4.24: + resolution: {integrity: sha512-nLHIW7TEq3aLrEYWpVaJ1dRgFR+wLDPN8e8FpYAql/bMV2oBEfC37K0gLEGgv9fy66juNShSMV8OkTqzltcG/w==} peerDependencies: eslint: '>=8.40' @@ -10598,6 +10773,10 @@ packages: for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + for-in@1.0.2: resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} engines: {node: '>=0.10.0'} @@ -10776,6 +10955,10 @@ packages: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + get-own-enumerable-property-symbols@3.0.2: resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} @@ -10798,6 +10981,10 @@ packages: resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} engines: {node: '>=8'} + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + get-stream@3.0.0: resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==} engines: {node: '>=4'} @@ -10925,6 +11112,10 @@ packages: gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + got@11.8.6: resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} engines: {node: '>=10.19.0'} @@ -11008,6 +11199,10 @@ packages: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} @@ -11110,6 +11305,10 @@ packages: html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + html-inline@1.2.0: + resolution: {integrity: sha512-7W6IV2bQVesdyJkrrZyu2Wk8jPQ1FyCa2y9xDURqHrCrI1HkJK85D1jzCuBTJhal6rQB+t3YBAqcDgSnohTzTw==} + hasBin: true + html-minifier-terser@6.1.0: resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} engines: {node: '>=12'} @@ -11118,6 +11317,14 @@ packages: html-parse-stringify@3.0.1: resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} + html-select@2.3.24: + resolution: {integrity: sha512-kQ+YZoVQ8Aux6bUqMVc0iufcZOv03+xYZ4J5v2beT5wkNrW/e2roZ8pnU4LunVOVBGFkbodFKR0TvuMkTdyrJQ==} + hasBin: true + + html-tokenize@1.2.5: + resolution: {integrity: sha512-7sCme3w9Hiv/kfL6sO6ePTGAV5fY6P7WDZyOs0zfXXU8vsS1ps1CQfGe0J1yuAdcCnOJ9h66RLYX/e9Cife8yw==} + hasBin: true + html-webpack-plugin@5.5.3: resolution: {integrity: sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg==} engines: {node: '>=10.13.0'} @@ -11281,6 +11488,9 @@ packages: idb@7.1.1: resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} + idb@8.0.3: + resolution: {integrity: sha512-LtwtVyVYO5BqRvcsKuB2iUMnHwPVByPCXFXOpuU96IZPPoPN6xjOGxZQ74pgSVVLQWtUOYgyeL4GE98BY5D3wg==} + identity-obj-proxy@3.0.0: resolution: {integrity: sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==} engines: {node: '>=4'} @@ -11327,6 +11537,9 @@ packages: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + indexof@0.0.1: + resolution: {integrity: sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==} + inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. @@ -11619,6 +11832,10 @@ packages: resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} @@ -11663,6 +11880,9 @@ packages: resolution: {integrity: sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw==} engines: {node: '>=18'} + isarray@0.0.1: + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} @@ -11701,6 +11921,11 @@ packages: peerDependencies: ws: '*' + isows@1.0.7: + resolution: {integrity: sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==} + peerDependencies: + ws: '*' + istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} @@ -12253,6 +12478,9 @@ packages: json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + json-canonicalize@2.0.0: + resolution: {integrity: sha512-yyrnK/mEm6Na3ChbJUWueXdapueW0p380RUyTW87XGb1ww8l8hU0pRrGC3vSWHe9CxrbPHX2fGUOZpNiHR0IIg==} + json-parse-better-errors@1.0.2: resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} @@ -12701,6 +12929,10 @@ packages: marky@1.2.5: resolution: {integrity: sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==} + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + md5.js@1.3.5: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} @@ -12899,6 +13131,12 @@ packages: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} + minimist@0.0.10: + resolution: {integrity: sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw==} + + minimist@1.1.3: + resolution: {integrity: sha512-2RbeLaM/Hbo9vJ1+iRrxzfDnX9108qb2m923U+s+Ot2eMey0IYGdSjzHmvtg2XsxoCuMnzOMw7qc573RvnLgwg==} + minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -13300,6 +13538,9 @@ packages: resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} engines: {node: '>= 0.4'} + object-keys@0.4.0: + resolution: {integrity: sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==} + object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} @@ -13348,10 +13589,6 @@ packages: ohash@1.1.3: resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==} - oidc-client-ts@2.4.0: - resolution: {integrity: sha512-WijhkTrlXK2VvgGoakWJiBdfIsVGz6CFzgjNNqZU1hPKV2kyeEaJgLs7RwuiSp2WhLfWBQuLvr2SxVlZnk3N1w==} - engines: {node: '>=12.13.0'} - oidc-client-ts@3.3.0: resolution: {integrity: sha512-t13S540ZwFOEZKLYHJwSfITugupW4uYLwuQSSXyKH/wHwZ+7FvgHE7gnNJh1YQIZ1Yd1hKSRjqeXGSUtS0r9JA==} engines: {node: '>=18'} @@ -13446,6 +13683,30 @@ packages: outvariant@1.4.0: resolution: {integrity: sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==} + ox@0.9.14: + resolution: {integrity: sha512-lxZYCzGH00WtIPPrqXCrbSW/ZiKjigfII6R0Vu1eH2GpobmcwVheiivbCvsBZzmVZcNpwkabSamPP+ZNtdnKIQ==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + ox@0.9.17: + resolution: {integrity: sha512-rKAnhzhRU3Xh3hiko+i1ZxywZ55eWQzeS/Q4HRKLx2PqfHOolisZHErSsJVipGlmQKHW5qwOED/GighEw9dbLg==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + ox@0.9.6: + resolution: {integrity: sha512-8SuCbHPvv2eZLYXrNmC0EC12rdzXQLdhnOMlHDW2wiCPLxBrOOJwX5L5E61by+UjTPOryqQiRSnjIKCI+GykKg==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + oxc-resolver@1.11.0: resolution: {integrity: sha512-N3qMse2AM7uST8PaiUMXZkcACyGAMN073tomyvzHTICSzaOqKHvVS0IZ3vj/OqoE140QP4CyOiWmgC1Hw5Urmg==} @@ -13761,6 +14022,10 @@ packages: resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} engines: {node: '>=8'} + pkijs@3.3.3: + resolution: {integrity: sha512-+KD8hJtqQMYoTuL1bbGOqxb4z+nZkTAwVdNtWwe8Tc2xNbEmdJYIYoc6Qt0uF55e6YW6KuTHw1DjQ18gMhzepw==} + engines: {node: '>=16.0.0'} + playwright-core@1.45.3: resolution: {integrity: sha512-+ym0jNbcjikaOwwSZycFbwkWgfruWvYlJfThKYAlImbxUgdWFO2oW70ojPm4OpE4t6TAo2FY/smM+hpVTtkhDA==} engines: {node: '>=18'} @@ -14428,6 +14693,13 @@ packages: pure-rand@6.1.0: resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + pvtsutils@1.3.6: + resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==} + + pvutils@1.1.5: + resolution: {integrity: sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==} + engines: {node: '>=16.0.0'} + q@1.5.1: resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} engines: {node: '>=0.6.0', teleport: '>=0.2.0'} @@ -14668,6 +14940,12 @@ packages: resolution: {integrity: sha512-UkRNRIwnhG+y7hpqnycCL/xbTk7+ia9VuVTC0S+zVbwd65DI9eUpRMfsWIGrCWxTU/mi+JW8cHQCrv+zfCbEPQ==} engines: {node: '>=10.13'} + readable-stream@1.0.34: + resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} + + readable-stream@1.1.14: + resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} + readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} @@ -14683,6 +14961,9 @@ packages: resolution: {integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==} engines: {node: '>=8'} + readable-wrap@1.0.0: + resolution: {integrity: sha512-/8n0Mr10S+HGKFygQ42Z40JIXwafPH3A72pwmlNClThgsImV5LJJiCue5Je1asxwY082sYxq/+kTxH6nTn0w3g==} + readdir-glob@1.1.3: resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} @@ -15199,6 +15480,11 @@ packages: resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} hasBin: true + sha.js@2.4.12: + resolution: {integrity: sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==} + engines: {node: '>= 0.10'} + hasBin: true + sha1@1.1.1: resolution: {integrity: sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==} @@ -15407,6 +15693,7 @@ packages: source-map@0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} + deprecated: The work that was done in this beta branch won't be included in future versions sourcemap-codec@1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} @@ -15455,6 +15742,9 @@ packages: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} + split@0.3.3: + resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} + split@1.0.1: resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==} @@ -15532,6 +15822,9 @@ packages: stream-shift@1.0.3: resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + stream-splicer@1.3.2: + resolution: {integrity: sha512-nmUMEbdm/sZYqe9dZs7mqJvTYpunsDbIWI5FiBCMc/hMVd6vwzy+ITmo7C3gcLYqrn+uQ1w+EJwooWvJ997JAA==} + streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} @@ -15611,6 +15904,9 @@ packages: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} engines: {node: '>= 0.4'} + string_decoder@0.10.31: + resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} + string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} @@ -15931,6 +16227,15 @@ packages: throat@6.0.2: resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==} + through2@0.4.2: + resolution: {integrity: sha512-45Llu+EwHKtAZYTPPVn3XZHBgakWMN3rokhEv5hu596XP+cNgplMg+Gj+1nmAvj+L0K7+N49zBKx5rah5u0QIQ==} + + through2@0.6.5: + resolution: {integrity: sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==} + + through2@1.1.1: + resolution: {integrity: sha512-zEbpaeSMHxczpTzO1KkMHjBC1enTA68ojeaZGG4toqdASpb9t4xUZaYFBq2/9OHo5nTGFVSYd4c910OR+6wxbQ==} + through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} @@ -15983,6 +16288,10 @@ packages: tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + to-buffer@1.2.2: + resolution: {integrity: sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==} + engines: {node: '>= 0.4'} + to-object-path@0.3.0: resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} engines: {node: '>=0.10.0'} @@ -16044,6 +16353,9 @@ packages: resolution: {integrity: sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==} engines: {node: '>=12'} + trumpet@1.7.2: + resolution: {integrity: sha512-hqVDLz5yp+vhRGjAvbomuo4+pjzQIbXe9JE/HPm9s4iEuf2Ew5jzgwQf+2HLpqFXZpRD8VgKPOYM8wyKmqIklg==} + tryer@1.0.1: resolution: {integrity: sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==} @@ -16164,6 +16476,9 @@ packages: tslib@2.7.0: resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tsort@0.0.1: resolution: {integrity: sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==} @@ -16266,6 +16581,10 @@ packages: resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + typed-array-byte-length@1.0.1: resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} engines: {node: '>= 0.4'} @@ -16563,6 +16882,10 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} + uuid@13.0.0: + resolution: {integrity: sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==} + hasBin: true + uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true @@ -16617,6 +16940,14 @@ packages: typescript: optional: true + viem@2.41.2: + resolution: {integrity: sha512-LYliajglBe1FU6+EH9mSWozp+gRA/QcHfxeD9Odf83AdH5fwUS7DroH4gHvlv6Sshqi1uXrYFA2B/EOczxd15g==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + vite-plugin-node-polyfills@0.16.0: resolution: {integrity: sha512-uj1ymOmk7TliMxiivmXokpMY5gVMBpFPSZPLQSCv/LjkJGGKwyLjpbFL64dbYZEdFSUQ3tM7pbrxNh25yvhqOA==} peerDependencies: @@ -16847,6 +17178,10 @@ packages: resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} + which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + engines: {node: '>= 0.4'} + which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true @@ -17010,6 +17345,18 @@ packages: utf-8-validate: optional: true + ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + ws@8.5.0: resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} engines: {node: '>=10.0.0'} @@ -17043,6 +17390,10 @@ packages: xstream@11.14.0: resolution: {integrity: sha512-1bLb+kKKtKPbgTK6i/BaoAn03g47PpFstlbe1BA+y3pNS/LfvcaghS5BFf9+EE1J+KwSQsEpfJvFN5GqFtiNmw==} + xtend@2.1.2: + resolution: {integrity: sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==} + engines: {node: '>=0.4'} + xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -17138,19 +17489,121 @@ packages: snapshots: - '@0xsequence/abi@2.2.13': {} + '@0xsequence/abi@2.3.34': {} - '@0xsequence/core@2.2.13(ethers@6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))': + '@0xsequence/abi@2.3.35': {} + + '@0xsequence/core@2.3.34(ethers@6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))': dependencies: - '@0xsequence/abi': 2.2.13 - '@0xsequence/utils': 2.2.13(ethers@6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + '@0xsequence/abi': 2.3.34 + '@0xsequence/utils': 2.3.34(ethers@6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10)) ethers: 6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@0xsequence/utils@2.2.13(ethers@6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))': + '@0xsequence/core@2.3.35(ethers@6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))': + dependencies: + '@0xsequence/abi': 2.3.35 + '@0xsequence/utils': 2.3.35(ethers@6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + ethers: 6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10) + + '@0xsequence/guard@3.0.0-beta.4(typescript@5.6.2)': + dependencies: + ox: 0.9.17(typescript@5.6.2) + transitivePeerDependencies: + - typescript + - zod + + '@0xsequence/identity-instrument@3.0.0-beta.4(typescript@5.6.2)': + dependencies: + json-canonicalize: 2.0.0 + jwt-decode: 4.0.0 + ox: 0.9.17(typescript@5.6.2) + transitivePeerDependencies: + - typescript + - zod + + '@0xsequence/indexer@2.3.35': {} + + '@0xsequence/network@2.3.35(ethers@6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))': + dependencies: + '@0xsequence/core': 2.3.35(ethers@6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + '@0xsequence/indexer': 2.3.35 + '@0xsequence/relayer': 2.3.35(ethers@6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + '@0xsequence/utils': 2.3.35(ethers@6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + ethers: 6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10) + + '@0xsequence/relayer@2.3.35(ethers@6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))': + dependencies: + '@0xsequence/abi': 2.3.35 + '@0xsequence/core': 2.3.35(ethers@6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + '@0xsequence/utils': 2.3.35(ethers@6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + ethers: 6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10) + + '@0xsequence/relayer@3.0.0-beta.4(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)': + dependencies: + '@0xsequence/wallet-primitives': 3.0.0-beta.4(typescript@5.6.2) + mipd: 0.0.7(typescript@5.6.2) + ox: 0.9.17(typescript@5.6.2) + viem: 2.41.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + + '@0xsequence/tee-verifier@0.1.2': + dependencies: + cbor2: 1.12.0 + pkijs: 3.3.3 + + '@0xsequence/utils@2.3.34(ethers@6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))': + dependencies: + ethers: 6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10) + js-base64: 3.7.7 + + '@0xsequence/utils@2.3.35(ethers@6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10))': dependencies: ethers: 6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10) js-base64: 3.7.7 + '@0xsequence/wallet-core@3.0.0-beta.4(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)': + dependencies: + '@0xsequence/guard': 3.0.0-beta.4(typescript@5.6.2) + '@0xsequence/relayer': 3.0.0-beta.4(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10) + '@0xsequence/wallet-primitives': 3.0.0-beta.4(typescript@5.6.2) + mipd: 0.0.7(typescript@5.6.2) + ox: 0.9.17(typescript@5.6.2) + viem: 2.41.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + + '@0xsequence/wallet-primitives@3.0.0-beta.4(typescript@5.6.2)': + dependencies: + ox: 0.9.17(typescript@5.6.2) + transitivePeerDependencies: + - typescript + - zod + + '@0xsequence/wallet-wdk@3.0.0-beta.4(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)': + dependencies: + '@0xsequence/guard': 3.0.0-beta.4(typescript@5.6.2) + '@0xsequence/identity-instrument': 3.0.0-beta.4(typescript@5.6.2) + '@0xsequence/relayer': 3.0.0-beta.4(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10) + '@0xsequence/tee-verifier': 0.1.2 + '@0xsequence/wallet-core': 3.0.0-beta.4(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10) + '@0xsequence/wallet-primitives': 3.0.0-beta.4(typescript@5.6.2) + idb: 8.0.3 + jwt-decode: 4.0.0 + ox: 0.9.17(typescript@5.6.2) + uuid: 13.0.0 + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + '@0xsquid/sdk@2.8.25(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: '@cosmjs/cosmwasm-stargate': 0.32.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -17198,6 +17651,8 @@ snapshots: '@adraffy/ens-normalize@1.10.1': {} + '@adraffy/ens-normalize@1.11.1': {} + '@alloc/quick-lru@5.2.0': {} '@ampproject/remapping@2.2.1': @@ -19055,7 +19510,7 @@ snapshots: '@coinbase/wallet-sdk@3.9.3': dependencies: - bn.js: 5.2.1 + bn.js: 5.2.2 buffer: 6.0.3 clsx: 1.2.1 eth-block-tracker: 7.1.0 @@ -19063,7 +19518,7 @@ snapshots: eventemitter3: 5.0.1 keccak: 3.0.4 preact: 10.23.1 - sha.js: 2.4.11 + sha.js: 2.4.12 transitivePeerDependencies: - supports-color @@ -19078,7 +19533,7 @@ snapshots: '@confio/ics23@0.6.8': dependencies: - '@noble/hashes': 1.5.0 + '@noble/hashes': 1.8.0 protobufjs: 6.11.4 '@cosmjs/amino@0.31.3': @@ -19117,8 +19572,8 @@ snapshots: '@cosmjs/encoding': 0.31.3 '@cosmjs/math': 0.31.3 '@cosmjs/utils': 0.31.3 - '@noble/hashes': 1.5.0 - bn.js: 5.2.1 + '@noble/hashes': 1.8.0 + bn.js: 5.2.2 elliptic: 6.6.1 libsodium-wrappers-sumo: 0.7.15 @@ -19127,7 +19582,7 @@ snapshots: '@cosmjs/encoding': 0.32.4 '@cosmjs/math': 0.32.4 '@cosmjs/utils': 0.32.4 - '@noble/hashes': 1.5.0 + '@noble/hashes': 1.8.0 bn.js: 5.2.1 elliptic: 6.6.1 libsodium-wrappers-sumo: 0.7.15 @@ -19161,7 +19616,7 @@ snapshots: '@cosmjs/math@0.31.3': dependencies: - bn.js: 5.2.1 + bn.js: 5.2.2 '@cosmjs/math@0.32.4': dependencies: @@ -20041,17 +20496,17 @@ snapshots: '@humanwhocodes/retry@0.4.1': {} - '@imtbl/blockchain-data@2.1.11': + '@imtbl/blockchain-data@2.10.6': dependencies: - '@imtbl/config': 2.1.11 - '@imtbl/generated-clients': 2.1.11 + '@imtbl/config': 2.10.6 + '@imtbl/generated-clients': 2.10.6 axios: 1.7.7 transitivePeerDependencies: - debug - '@imtbl/bridge-sdk@2.1.11(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + '@imtbl/bridge-sdk@2.10.6(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: - '@imtbl/config': 2.1.11 + '@imtbl/config': 2.10.6 '@jest/globals': 29.7.0 axios: 1.7.7 ethers: 6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -20061,16 +20516,16 @@ snapshots: - supports-color - utf-8-validate - '@imtbl/checkout-sdk@2.1.11(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + '@imtbl/checkout-sdk@2.10.6(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: - '@imtbl/blockchain-data': 2.1.11 - '@imtbl/bridge-sdk': 2.1.11(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@imtbl/config': 2.1.11 - '@imtbl/dex-sdk': 2.1.11(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@imtbl/generated-clients': 2.1.11 - '@imtbl/metrics': 2.1.11 - '@imtbl/orderbook': 2.1.11(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@imtbl/passport': 2.1.11(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@imtbl/blockchain-data': 2.10.6 + '@imtbl/bridge-sdk': 2.10.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@imtbl/config': 2.10.6 + '@imtbl/dex-sdk': 2.10.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@imtbl/generated-clients': 2.10.6 + '@imtbl/metrics': 2.10.6 + '@imtbl/orderbook': 2.10.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@imtbl/passport': 2.10.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) '@metamask/detect-provider': 2.0.0 axios: 1.7.7 ethers: 6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -20083,9 +20538,9 @@ snapshots: - supports-color - utf-8-validate - '@imtbl/config@2.1.11': + '@imtbl/config@2.10.6': dependencies: - '@imtbl/metrics': 2.1.11 + '@imtbl/metrics': 2.10.6 transitivePeerDependencies: - debug @@ -20132,9 +20587,9 @@ snapshots: - typescript - utf-8-validate - '@imtbl/dex-sdk@2.1.11(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + '@imtbl/dex-sdk@2.10.6(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: - '@imtbl/config': 2.1.11 + '@imtbl/config': 2.10.6 '@uniswap/sdk-core': 3.2.3 '@uniswap/swap-router-contracts': 1.3.1(hardhat@2.22.6(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2))(typescript@5.6.2)(utf-8-validate@5.0.10)) '@uniswap/v3-sdk': 3.10.0(hardhat@2.22.6(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2))(typescript@5.6.2)(utf-8-validate@5.0.10)) @@ -20145,7 +20600,7 @@ snapshots: - hardhat - utf-8-validate - '@imtbl/generated-clients@2.1.11': + '@imtbl/generated-clients@2.10.6': dependencies: axios: 1.7.7 transitivePeerDependencies: @@ -20155,7 +20610,7 @@ snapshots: dependencies: buffer: 6.0.3 - '@imtbl/metrics@2.1.11': + '@imtbl/metrics@2.10.6': dependencies: axios: 1.7.7 global-const: 0.1.2 @@ -20163,13 +20618,13 @@ snapshots: transitivePeerDependencies: - debug - '@imtbl/minting-backend@2.1.11': + '@imtbl/minting-backend@2.10.6': dependencies: - '@imtbl/blockchain-data': 2.1.11 - '@imtbl/config': 2.1.11 - '@imtbl/generated-clients': 2.1.11 - '@imtbl/metrics': 2.1.11 - '@imtbl/webhook': 2.1.11 + '@imtbl/blockchain-data': 2.10.6 + '@imtbl/config': 2.10.6 + '@imtbl/generated-clients': 2.10.6 + '@imtbl/metrics': 2.10.6 + '@imtbl/webhook': 2.10.6 uuid: 8.3.2 optionalDependencies: pg: 8.11.5 @@ -20178,10 +20633,10 @@ snapshots: - debug - pg-native - '@imtbl/orderbook@2.1.11(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + '@imtbl/orderbook@2.10.6(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: - '@imtbl/config': 2.1.11 - '@imtbl/metrics': 2.1.11 + '@imtbl/config': 2.10.6 + '@imtbl/metrics': 2.10.6 '@opensea/seaport-js': 4.0.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) axios: 1.7.7 ethers: 6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -20192,17 +20647,17 @@ snapshots: - debug - utf-8-validate - '@imtbl/passport@2.1.11(bufferutil@4.0.8)(utf-8-validate@5.0.10)': - dependencies: - '@0xsequence/abi': 2.2.13 - '@0xsequence/core': 2.2.13(ethers@6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@imtbl/config': 2.1.11 - '@imtbl/generated-clients': 2.1.11 - '@imtbl/metrics': 2.1.11 - '@imtbl/toolkit': 2.1.11(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@imtbl/x-client': 2.1.11(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@imtbl/x-provider': 2.1.11(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@magic-ext/oidc': 12.0.2 + '@imtbl/passport@2.10.6(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@0xsequence/abi': 2.3.34 + '@0xsequence/core': 2.3.34(ethers@6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + '@imtbl/config': 2.10.6 + '@imtbl/generated-clients': 2.10.6 + '@imtbl/metrics': 2.10.6 + '@imtbl/toolkit': 2.10.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@imtbl/x-client': 2.10.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@imtbl/x-provider': 2.10.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@magic-ext/oidc': 12.0.5 '@magic-sdk/provider': 29.0.5(localforage@1.10.0) '@metamask/detect-provider': 2.0.0 axios: 1.7.7 @@ -20211,7 +20666,7 @@ snapshots: jwt-decode: 3.1.2 localforage: 1.10.0 magic-sdk: 29.0.5 - oidc-client-ts: 2.4.0 + oidc-client-ts: 3.3.0 uuid: 8.3.2 transitivePeerDependencies: - bufferutil @@ -20226,17 +20681,17 @@ snapshots: - encoding - supports-color - '@imtbl/sdk@2.1.11(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + '@imtbl/sdk@2.10.6(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: - '@imtbl/blockchain-data': 2.1.11 - '@imtbl/checkout-sdk': 2.1.11(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@imtbl/config': 2.1.11 - '@imtbl/minting-backend': 2.1.11 - '@imtbl/orderbook': 2.1.11(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@imtbl/passport': 2.1.11(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@imtbl/webhook': 2.1.11 - '@imtbl/x-client': 2.1.11(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@imtbl/x-provider': 2.1.11(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@imtbl/blockchain-data': 2.10.6 + '@imtbl/checkout-sdk': 2.10.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@imtbl/config': 2.10.6 + '@imtbl/minting-backend': 2.10.6 + '@imtbl/orderbook': 2.10.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@imtbl/passport': 2.10.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@imtbl/webhook': 2.10.6 + '@imtbl/x-client': 2.10.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@imtbl/x-provider': 2.10.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - debug @@ -20245,37 +20700,37 @@ snapshots: - supports-color - utf-8-validate - '@imtbl/toolkit@2.1.11(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + '@imtbl/toolkit@2.10.6(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: - '@imtbl/x-client': 2.1.11(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@magic-ext/oidc': 12.0.2 + '@imtbl/x-client': 2.10.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@magic-ext/oidc': 12.0.5 '@metamask/detect-provider': 2.0.0 axios: 1.7.7 - bn.js: 5.2.1 + bn.js: 5.2.2 enc-utils: 3.0.0 ethers: 6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10) magic-sdk: 29.0.5 - oidc-client-ts: 2.4.0 + oidc-client-ts: 3.3.0 transitivePeerDependencies: - bufferutil - debug - utf-8-validate - '@imtbl/webhook@2.1.11': + '@imtbl/webhook@2.10.6': dependencies: - '@imtbl/config': 2.1.11 - '@imtbl/generated-clients': 2.1.11 + '@imtbl/config': 2.10.6 + '@imtbl/generated-clients': 2.10.6 sns-validator: 0.3.5 transitivePeerDependencies: - debug - '@imtbl/x-client@2.1.11(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + '@imtbl/x-client@2.10.6(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: '@ethereumjs/wallet': 2.0.4 - '@imtbl/config': 2.1.11 - '@imtbl/generated-clients': 2.1.11 + '@imtbl/config': 2.10.6 + '@imtbl/generated-clients': 2.10.6 axios: 1.7.7 - bn.js: 5.2.1 + bn.js: 5.2.2 elliptic: 6.6.1 enc-utils: 3.0.0 ethers: 6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -20285,19 +20740,19 @@ snapshots: - debug - utf-8-validate - '@imtbl/x-provider@2.1.11(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + '@imtbl/x-provider@2.10.6(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: - '@imtbl/config': 2.1.11 - '@imtbl/generated-clients': 2.1.11 - '@imtbl/toolkit': 2.1.11(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@imtbl/x-client': 2.1.11(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@magic-ext/oidc': 12.0.2 + '@imtbl/config': 2.10.6 + '@imtbl/generated-clients': 2.10.6 + '@imtbl/toolkit': 2.10.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@imtbl/x-client': 2.10.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@magic-ext/oidc': 12.0.5 '@metamask/detect-provider': 2.0.0 axios: 1.7.7 enc-utils: 3.0.0 ethers: 6.13.5(bufferutil@4.0.8)(utf-8-validate@5.0.10) magic-sdk: 29.0.5 - oidc-client-ts: 2.4.0 + oidc-client-ts: 3.3.0 transitivePeerDependencies: - bufferutil - debug @@ -20978,8 +21433,6 @@ snapshots: dependencies: '@lukeed/csprng': 1.1.0 - '@magic-ext/oidc@12.0.2': {} - '@magic-ext/oidc@12.0.5': {} '@magic-sdk/commons@25.0.5(@magic-sdk/provider@29.0.5(localforage@1.10.0))(@magic-sdk/types@24.18.1)': @@ -21150,8 +21603,8 @@ snapshots: dependencies: '@ethereumjs/tx': 4.2.0 '@metamask/superstruct': 3.1.0 - '@noble/hashes': 1.5.0 - '@scure/base': 1.1.7 + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 '@types/debug': 4.1.8 debug: 4.3.7(supports-color@8.1.1) pony-cause: 2.1.11 @@ -21164,8 +21617,8 @@ snapshots: dependencies: '@ethereumjs/tx': 4.2.0 '@metamask/superstruct': 3.1.0 - '@noble/hashes': 1.5.0 - '@scure/base': 1.1.7 + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 '@types/debug': 4.1.8 debug: 4.3.7(supports-color@8.1.1) pony-cause: 2.1.11 @@ -21210,13 +21663,13 @@ snapshots: '@motionone/easing@10.17.0': dependencies: '@motionone/utils': 10.17.0 - tslib: 2.7.0 + tslib: 2.8.1 '@motionone/generators@10.17.0': dependencies: '@motionone/types': 10.17.0 '@motionone/utils': 10.17.0 - tslib: 2.7.0 + tslib: 2.8.1 '@motionone/svelte@10.16.4': dependencies: @@ -21363,6 +21816,8 @@ snapshots: dependencies: eslint-scope: 5.1.1 + '@noble/ciphers@1.3.0': {} + '@noble/curves@1.2.0': dependencies: '@noble/hashes': 1.3.2 @@ -21375,6 +21830,14 @@ snapshots: dependencies: '@noble/hashes': 1.4.0 + '@noble/curves@1.9.1': + dependencies: + '@noble/hashes': 1.8.0 + + '@noble/curves@1.9.7': + dependencies: + '@noble/hashes': 1.8.0 + '@noble/hashes@1.2.0': {} '@noble/hashes@1.3.2': {} @@ -21383,6 +21846,8 @@ snapshots: '@noble/hashes@1.5.0': {} + '@noble/hashes@1.8.0': {} + '@noble/secp256k1@1.7.1': {} '@nodelib/fs.scandir@2.1.5': @@ -22809,14 +23274,14 @@ snapshots: optionalDependencies: rollup: 4.28.0 - '@rollup/plugin-typescript@11.1.6(rollup@4.28.0)(tslib@2.7.0)(typescript@5.6.2)': + '@rollup/plugin-typescript@11.1.6(rollup@4.28.0)(tslib@2.8.1)(typescript@5.6.2)': dependencies: '@rollup/pluginutils': 5.1.0(rollup@4.28.0) resolve: 1.22.8 typescript: 5.6.2 optionalDependencies: rollup: 4.28.0 - tslib: 2.7.0 + tslib: 2.8.1 '@rollup/pluginutils@3.1.0(rollup@2.79.1)': dependencies: @@ -22902,7 +23367,7 @@ snapshots: '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)': dependencies: '@safe-global/safe-gateway-typescript-sdk': 3.22.1 - viem: 2.18.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10) + viem: 2.41.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - typescript @@ -22913,6 +23378,8 @@ snapshots: '@scure/base@1.1.7': {} + '@scure/base@1.2.6': {} + '@scure/bip32@1.1.5': dependencies: '@noble/hashes': 1.2.0 @@ -22925,6 +23392,12 @@ snapshots: '@noble/hashes': 1.4.0 '@scure/base': 1.1.7 + '@scure/bip32@1.7.0': + dependencies: + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 + '@scure/bip39@1.1.1': dependencies: '@noble/hashes': 1.2.0 @@ -22935,6 +23408,11 @@ snapshots: '@noble/hashes': 1.4.0 '@scure/base': 1.1.7 + '@scure/bip39@1.6.0': + dependencies: + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 + '@segment/analytics-core@1.3.0': dependencies: '@lukeed/uuid': 2.0.1 @@ -24558,25 +25036,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.2))(eslint@9.16.0(jiti@1.21.0))(typescript@5.6.2)': - dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.6.2) - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.6.2) - '@typescript-eslint/utils': 5.62.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.6.2) - debug: 4.3.7(supports-color@8.1.1) - eslint: 9.16.0(jiti@1.21.0) - graphemer: 1.4.0 - ignore: 5.3.1 - natural-compare-lite: 1.4.0 - semver: 7.6.3 - tsutils: 3.21.0(typescript@5.6.2) - optionalDependencies: - typescript: 5.6.2 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.6.2))(eslint@9.16.0(jiti@1.21.0))(typescript@5.6.2)': dependencies: '@eslint-community/regexpp': 4.12.1 @@ -24799,17 +25258,17 @@ snapshots: transitivePeerDependencies: - supports-color - '@wagmi/connectors@5.1.1(@types/react@18.3.12)(@wagmi/core@2.13.1(@tanstack/query-core@5.51.15)(@types/react@18.3.12)(immer@9.0.21)(react@18.3.1)(typescript@5.6.2)(viem@2.18.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@types/react@18.3.12)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.28.0)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.18.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10))': + '@wagmi/connectors@5.1.1(@types/react@18.3.12)(@wagmi/core@2.13.1(@tanstack/query-core@5.51.15)(@types/react@18.3.12)(immer@9.0.21)(react@18.3.1)(typescript@5.6.2)(viem@2.41.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@types/react@18.3.12)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.28.0)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10))': dependencies: '@coinbase/wallet-sdk': 4.0.4 '@metamask/sdk': 0.26.5(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@types/react@18.3.12)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.28.0)(utf-8-validate@5.0.10) '@safe-global/safe-apps-provider': 0.18.3(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10) '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10) - '@wagmi/core': 2.13.1(@tanstack/query-core@5.51.15)(@types/react@18.3.12)(immer@9.0.21)(react@18.3.1)(typescript@5.6.2)(viem@2.18.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@wagmi/core': 2.13.1(@tanstack/query-core@5.51.15)(@types/react@18.3.12)(immer@9.0.21)(react@18.3.1)(typescript@5.6.2)(viem@2.41.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)) '@walletconnect/ethereum-provider': 2.13.0(@types/react@18.3.12)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10) '@walletconnect/modal': 2.6.2(@types/react@18.3.12)(react@18.3.1) cbw-sdk: '@coinbase/wallet-sdk@3.9.3' - viem: 2.18.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10) + viem: 2.41.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10) optionalDependencies: typescript: 5.6.2 transitivePeerDependencies: @@ -24836,11 +25295,11 @@ snapshots: - utf-8-validate - zod - '@wagmi/core@2.13.1(@tanstack/query-core@5.51.15)(@types/react@18.3.12)(immer@9.0.21)(react@18.3.1)(typescript@5.6.2)(viem@2.18.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10))': + '@wagmi/core@2.13.1(@tanstack/query-core@5.51.15)(@types/react@18.3.12)(immer@9.0.21)(react@18.3.1)(typescript@5.6.2)(viem@2.41.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10))': dependencies: eventemitter3: 5.0.1 mipd: 0.0.7(typescript@5.6.2) - viem: 2.18.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10) + viem: 2.41.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10) zustand: 4.4.1(@types/react@18.3.12)(immer@9.0.21)(react@18.3.1) optionalDependencies: '@tanstack/query-core': 5.51.15 @@ -25267,6 +25726,14 @@ snapshots: optionalDependencies: typescript: 5.6.2 + abitype@1.1.0(typescript@5.6.2): + optionalDependencies: + typescript: 5.6.2 + + abitype@1.1.2(typescript@5.6.2): + optionalDependencies: + typescript: 5.6.2 + abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 @@ -25609,6 +26076,12 @@ snapshots: dependencies: safer-buffer: 2.1.2 + asn1js@3.0.6: + dependencies: + pvtsutils: 1.3.6 + pvutils: 1.1.5 + tslib: 2.8.1 + assert@2.0.0: dependencies: es6-object-assign: 1.1.0 @@ -25624,7 +26097,7 @@ snapshots: ast-types@0.15.2: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 astral-regex@1.0.0: {} @@ -25636,7 +26109,7 @@ snapshots: async-mutex@0.2.6: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 async@1.5.2: {} @@ -25782,6 +26255,20 @@ snapshots: transitivePeerDependencies: - supports-color + babel-jest@29.7.0(@babel/core@7.26.9): + dependencies: + '@babel/core': 7.26.9 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.26.9) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + optional: true + babel-loader@8.3.0(@babel/core@7.26.9)(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)): dependencies: '@babel/core': 7.26.9 @@ -25982,6 +26469,13 @@ snapshots: babel-plugin-jest-hoist: 29.6.3 babel-preset-current-node-syntax: 1.0.1(@babel/core@7.26.10) + babel-preset-jest@29.6.3(@babel/core@7.26.9): + dependencies: + '@babel/core': 7.26.9 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.26.9) + optional: true + babel-preset-react-app@10.0.1: dependencies: '@babel/core': 7.26.9 @@ -26108,6 +26602,8 @@ snapshots: bn.js@5.2.1: {} + bn.js@5.2.2: {} + body-parser@1.20.1: dependencies: bytes: 3.1.2 @@ -26219,12 +26715,12 @@ snapshots: browserify-rsa@4.1.0: dependencies: - bn.js: 5.2.1 + bn.js: 5.2.2 randombytes: 2.1.0 browserify-sign@4.2.1: dependencies: - bn.js: 5.2.1 + bn.js: 5.2.2 browserify-rsa: 4.1.0 create-hash: 1.2.0 create-hmac: 1.1.7 @@ -26318,6 +26814,8 @@ snapshots: bytes@3.1.2: {} + bytestreamjs@2.0.1: {} + cac@6.7.14: {} cacache@17.1.3: @@ -26359,6 +26857,11 @@ snapshots: normalize-url: 6.1.0 responselike: 2.0.1 + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + call-bind@1.0.7: dependencies: es-define-property: 1.0.0 @@ -26367,6 +26870,18 @@ snapshots: get-intrinsic: 1.2.4 set-function-length: 1.2.2 + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + caller-callsite@2.0.0: dependencies: callsites: 2.0.0 @@ -26409,6 +26924,8 @@ snapshots: caseless@0.12.0: {} + cbor2@1.12.0: {} + cbor@8.1.0: dependencies: nofilter: 3.1.0 @@ -26902,7 +27419,7 @@ snapshots: inherits: 2.0.4 md5.js: 1.3.5 ripemd160: 2.0.2 - sha.js: 2.4.11 + sha.js: 2.4.12 create-hmac@1.1.7: dependencies: @@ -26911,7 +27428,7 @@ snapshots: inherits: 2.0.4 ripemd160: 2.0.2 safe-buffer: 5.2.1 - sha.js: 2.4.11 + sha.js: 2.4.12 create-jest@29.7.0(@types/node@18.15.13)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2)): dependencies: @@ -27109,6 +27626,10 @@ snapshots: css.escape@1.5.1: {} + cssauron@1.4.0: + dependencies: + through: 2.3.8 + cssdb@7.6.0: {} cssesc@3.0.0: {} @@ -27537,6 +28058,16 @@ snapshots: dset@3.1.2: {} + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + duplexer2@0.0.2: + dependencies: + readable-stream: 1.1.14 + duplexer@0.1.2: {} duplexify@4.1.2: @@ -27740,6 +28271,8 @@ snapshots: dependencies: get-intrinsic: 1.2.4 + es-define-property@1.0.1: {} + es-errors@1.3.0: {} es-get-iterator@1.1.3: @@ -27777,6 +28310,10 @@ snapshots: dependencies: es-errors: 1.3.0 + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + es-set-tostringtag@2.0.3: dependencies: get-intrinsic: 1.2.4 @@ -28010,45 +28547,18 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.26.10))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.10))(eslint@8.57.0)(jest@27.5.1(bufferutil@4.0.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2): - dependencies: - '@babel/core': 7.26.9 - '@babel/eslint-parser': 7.22.9(@babel/core@7.26.9)(eslint@8.57.0) - '@rushstack/eslint-patch': 1.10.4 - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0)(typescript@5.6.2) - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.6.2) - babel-preset-react-app: 10.0.1 - confusing-browser-globals: 1.0.11 - eslint: 8.57.0 - eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.26.10))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.10))(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0) - eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0)(jest@27.5.1(bufferutil@4.0.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2) - eslint-plugin-jsx-a11y: 6.9.0(eslint@8.57.0) - eslint-plugin-react: 7.35.0(eslint@8.57.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - eslint-plugin-testing-library: 5.11.0(eslint@8.57.0)(typescript@5.6.2) - optionalDependencies: - typescript: 5.6.2 - transitivePeerDependencies: - - '@babel/plugin-syntax-flow' - - '@babel/plugin-transform-react-jsx' - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - jest - - supports-color - eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.26.10))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.10))(eslint@9.16.0(jiti@1.21.0))(jest@27.5.1(bufferutil@4.0.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2): dependencies: '@babel/core': 7.26.9 '@babel/eslint-parser': 7.22.9(@babel/core@7.26.9)(eslint@9.16.0(jiti@1.21.0)) '@rushstack/eslint-patch': 1.10.4 - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.2))(eslint@9.16.0(jiti@1.21.0))(typescript@5.6.2) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.6.2))(eslint@9.16.0(jiti@1.21.0))(typescript@5.6.2) '@typescript-eslint/parser': 5.62.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.6.2) babel-preset-react-app: 10.0.1 confusing-browser-globals: 1.0.11 eslint: 9.16.0(jiti@1.21.0) eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.26.10))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.10))(eslint@9.16.0(jiti@1.21.0)) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.2))(eslint@9.16.0(jiti@1.21.0)) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.6.2))(eslint@9.16.0(jiti@1.21.0)) eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0)(typescript@5.6.2))(eslint@9.16.0(jiti@1.21.0))(jest@27.5.1(bufferutil@4.0.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2) eslint-plugin-jsx-a11y: 6.9.0(eslint@9.16.0(jiti@1.21.0)) eslint-plugin-react: 7.35.0(eslint@9.16.0(jiti@1.21.0)) @@ -28064,23 +28574,23 @@ snapshots: - jest - supports-color - eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.26.9))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.9))(eslint@9.16.0(jiti@1.21.0))(jest@27.5.1(bufferutil@4.0.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2): + eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.26.9))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.9))(eslint@8.57.0)(jest@27.5.1(bufferutil@4.0.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2): dependencies: '@babel/core': 7.26.9 - '@babel/eslint-parser': 7.22.9(@babel/core@7.26.9)(eslint@9.16.0(jiti@1.21.0)) + '@babel/eslint-parser': 7.22.9(@babel/core@7.26.9)(eslint@8.57.0) '@rushstack/eslint-patch': 1.10.4 - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.6.2))(eslint@9.16.0(jiti@1.21.0))(typescript@5.6.2) - '@typescript-eslint/parser': 5.62.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.6.2) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0)(typescript@5.6.2) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.6.2) babel-preset-react-app: 10.0.1 confusing-browser-globals: 1.0.11 - eslint: 9.16.0(jiti@1.21.0) - eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.26.9))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.9))(eslint@9.16.0(jiti@1.21.0)) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.6.2))(eslint@9.16.0(jiti@1.21.0)) - eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.6.2))(eslint@9.16.0(jiti@1.21.0))(typescript@5.6.2))(eslint@9.16.0(jiti@1.21.0))(jest@27.5.1(bufferutil@4.0.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2) - eslint-plugin-jsx-a11y: 6.9.0(eslint@9.16.0(jiti@1.21.0)) - eslint-plugin-react: 7.35.0(eslint@9.16.0(jiti@1.21.0)) - eslint-plugin-react-hooks: 4.6.0(eslint@9.16.0(jiti@1.21.0)) - eslint-plugin-testing-library: 5.11.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.6.2) + eslint: 8.57.0 + eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.26.9))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.9))(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0) + eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0)(jest@27.5.1(bufferutil@4.0.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2) + eslint-plugin-jsx-a11y: 6.9.0(eslint@8.57.0) + eslint-plugin-react: 7.35.0(eslint@8.57.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) + eslint-plugin-testing-library: 5.11.0(eslint@8.57.0)(typescript@5.6.2) optionalDependencies: typescript: 5.6.2 transitivePeerDependencies: @@ -28157,16 +28667,6 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint@9.16.0(jiti@1.21.0)): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.6.2) - eslint: 9.16.0(jiti@1.21.0) - eslint-import-resolver-node: 0.3.9 - transitivePeerDependencies: - - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@5.62.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint@9.16.0(jiti@1.21.0)): dependencies: debug: 3.2.7 @@ -28177,14 +28677,6 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.26.10))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.10))(eslint@8.57.0): - dependencies: - '@babel/plugin-syntax-flow': 7.24.7(@babel/core@7.26.10) - '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.10) - eslint: 8.57.0 - lodash: 4.17.21 - string-natural-compare: 3.0.1 - eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.26.10))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.10))(eslint@9.16.0(jiti@1.21.0)): dependencies: '@babel/plugin-syntax-flow': 7.24.7(@babel/core@7.26.10) @@ -28193,11 +28685,11 @@ snapshots: lodash: 4.17.21 string-natural-compare: 3.0.1 - eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.26.9))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.9))(eslint@9.16.0(jiti@1.21.0)): + eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.26.9))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.9))(eslint@8.57.0): dependencies: '@babel/plugin-syntax-flow': 7.24.7(@babel/core@7.26.9) '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.9) - eslint: 9.16.0(jiti@1.21.0) + eslint: 8.57.0 lodash: 4.17.21 string-natural-compare: 3.0.1 @@ -28228,33 +28720,6 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.2))(eslint@9.16.0(jiti@1.21.0)): - dependencies: - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 9.16.0(jiti@1.21.0) - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint@9.16.0(jiti@1.21.0)) - hasown: 2.0.2 - is-core-module: 2.15.0 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.0 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.6.2) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.6.2))(eslint@9.16.0(jiti@1.21.0)): dependencies: array-includes: 3.1.8 @@ -28304,17 +28769,6 @@ snapshots: - supports-color - typescript - eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.6.2))(eslint@9.16.0(jiti@1.21.0))(typescript@5.6.2))(eslint@9.16.0(jiti@1.21.0))(jest@27.5.1(bufferutil@4.0.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2): - dependencies: - '@typescript-eslint/experimental-utils': 5.62.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.6.2) - eslint: 9.16.0(jiti@1.21.0) - optionalDependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.16.0(jiti@1.21.0))(typescript@5.6.2))(eslint@9.16.0(jiti@1.21.0))(typescript@5.6.2) - jest: 27.5.1(bufferutil@4.0.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2))(utf-8-validate@5.0.10) - transitivePeerDependencies: - - supports-color - - typescript - eslint-plugin-jsx-a11y@6.9.0(eslint@8.57.0): dependencies: aria-query: 5.1.3 @@ -28378,7 +28832,7 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-plugin-react-refresh@0.4.19(eslint@8.57.0): + eslint-plugin-react-refresh@0.4.24(eslint@8.57.0): dependencies: eslint: 8.57.0 @@ -28711,7 +29165,7 @@ snapshots: ethereumjs-util@7.1.5: dependencies: '@types/bn.js': 5.1.6 - bn.js: 5.2.1 + bn.js: 5.2.2 create-hash: 1.2.0 ethereum-cryptography: 0.1.3 rlp: 2.2.7 @@ -29270,6 +29724,10 @@ snapshots: dependencies: is-callable: 1.2.7 + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + for-in@1.0.2: {} foreground-child@3.1.1: @@ -29473,6 +29931,19 @@ snapshots: has-symbols: 1.0.3 hasown: 2.0.2 + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + get-own-enumerable-property-symbols@3.0.2: {} get-package-type@0.1.0: {} @@ -29485,6 +29956,11 @@ snapshots: get-port@5.1.1: {} + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + get-stream@3.0.0: {} get-stream@4.1.0: @@ -29661,6 +30137,8 @@ snapshots: dependencies: get-intrinsic: 1.2.4 + gopd@1.2.0: {} + got@11.8.6: dependencies: '@sindresorhus/is': 4.6.0 @@ -29908,6 +30386,8 @@ snapshots: has-symbols@1.0.3: {} + has-symbols@1.1.0: {} + has-tostringtag@1.0.2: dependencies: has-symbols: 1.0.3 @@ -30014,6 +30494,12 @@ snapshots: html-escaper@2.0.2: {} + html-inline@1.2.0: + dependencies: + minimist: 1.1.3 + through2: 0.6.5 + trumpet: 1.7.2 + html-minifier-terser@6.1.0: dependencies: camel-case: 4.1.2 @@ -30028,6 +30514,24 @@ snapshots: dependencies: void-elements: 3.1.0 + html-select@2.3.24: + dependencies: + cssauron: 1.4.0 + duplexer2: 0.0.2 + inherits: 2.0.4 + minimist: 0.0.10 + readable-stream: 1.1.14 + split: 0.3.3 + stream-splicer: 1.3.2 + through2: 1.1.1 + + html-tokenize@1.2.5: + dependencies: + inherits: 2.0.4 + minimist: 0.0.10 + readable-stream: 1.0.34 + through2: 0.4.2 + html-webpack-plugin@5.5.3(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)): dependencies: '@types/html-minifier-terser': 6.1.0 @@ -30217,6 +30721,8 @@ snapshots: idb@7.1.1: {} + idb@8.0.3: {} + identity-obj-proxy@3.0.0: dependencies: harmony-reflect: 1.6.2 @@ -30254,6 +30760,8 @@ snapshots: indent-string@4.0.0: {} + indexof@0.0.1: {} + inflight@1.0.6: dependencies: once: 1.4.0 @@ -30512,6 +31020,10 @@ snapshots: dependencies: which-typed-array: 1.1.15 + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.19 + is-typedarray@1.0.0: {} is-unicode-supported@0.1.0: {} @@ -30547,6 +31059,8 @@ snapshots: dependencies: system-architecture: 0.1.0 + isarray@0.0.1: {} + isarray@1.0.0: {} isarray@2.0.5: {} @@ -30578,6 +31092,10 @@ snapshots: dependencies: ws: 8.17.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + isows@1.0.7(ws@8.18.3(bufferutil@4.0.8)(utf-8-validate@5.0.10)): + dependencies: + ws: 8.18.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) + istanbul-lib-coverage@3.2.2: {} istanbul-lib-instrument@4.0.3: @@ -32168,6 +32686,8 @@ snapshots: json-buffer@3.0.1: {} + json-canonicalize@2.0.0: {} + json-parse-better-errors@1.0.2: {} json-parse-even-better-errors@2.3.1: {} @@ -32551,7 +33071,7 @@ snapshots: lower-case@2.0.2: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 lowercase-keys@2.0.0: {} @@ -32649,6 +33169,8 @@ snapshots: marky@1.2.5: {} + math-intrinsics@1.1.0: {} + md5.js@1.3.5: dependencies: hash-base: 3.1.0 @@ -32950,6 +33472,10 @@ snapshots: dependencies: brace-expansion: 2.0.1 + minimist@0.0.10: {} + + minimist@1.1.3: {} + minimist@1.2.8: {} minipass-collect@1.0.2: @@ -33234,7 +33760,7 @@ snapshots: no-case@3.0.4: dependencies: lower-case: 2.0.2 - tslib: 2.7.0 + tslib: 2.8.1 nocache@3.0.4: {} @@ -33501,6 +34027,8 @@ snapshots: call-bind: 1.0.7 define-properties: 1.2.1 + object-keys@0.4.0: {} + object-keys@1.1.1: {} object-visit@1.0.1: @@ -33563,11 +34091,6 @@ snapshots: ohash@1.1.3: {} - oidc-client-ts@2.4.0: - dependencies: - crypto-js: 4.2.0 - jwt-decode: 3.1.2 - oidc-client-ts@3.3.0: dependencies: jwt-decode: 4.0.0 @@ -33689,6 +34212,51 @@ snapshots: outvariant@1.4.0: {} + ox@0.9.14(typescript@5.6.2): + dependencies: + '@adraffy/ens-normalize': 1.11.1 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.1.2(typescript@5.6.2) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - zod + + ox@0.9.17(typescript@5.6.2): + dependencies: + '@adraffy/ens-normalize': 1.11.1 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.1.2(typescript@5.6.2) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - zod + + ox@0.9.6(typescript@5.6.2): + dependencies: + '@adraffy/ens-normalize': 1.11.1 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.1.2(typescript@5.6.2) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - zod + oxc-resolver@1.11.0: optionalDependencies: '@oxc-resolver/binding-darwin-arm64': 1.11.0 @@ -33825,7 +34393,7 @@ snapshots: pascal-case@3.1.2: dependencies: no-case: 3.0.4 - tslib: 2.7.0 + tslib: 2.8.1 pascalcase@0.1.1: {} @@ -33875,7 +34443,7 @@ snapshots: create-hmac: 1.1.7 ripemd160: 2.0.2 safe-buffer: 5.2.1 - sha.js: 2.4.11 + sha.js: 2.4.12 peek-readable@5.1.0: {} @@ -34035,6 +34603,15 @@ snapshots: dependencies: find-up: 3.0.0 + pkijs@3.3.3: + dependencies: + '@noble/hashes': 1.4.0 + asn1js: 3.0.6 + bytestreamjs: 2.0.1 + pvtsutils: 1.3.6 + pvutils: 1.1.5 + tslib: 2.8.1 + playwright-core@1.45.3: {} playwright@1.45.3: @@ -34709,6 +35286,12 @@ snapshots: pure-rand@6.1.0: {} + pvtsutils@1.3.6: + dependencies: + tslib: 2.8.1 + + pvutils@1.1.5: {} + q@1.5.1: {} qr-code-styling@1.6.0-rc.1: @@ -35006,92 +35589,6 @@ snapshots: '@remix-run/router': 1.7.2 react: 18.3.1 - react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.26.10))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.10))(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/babel__core@7.20.5)(bufferutil@4.0.8)(esbuild@0.23.1)(eslint@8.57.0)(node-notifier@8.0.2)(react@18.3.1)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(utf-8-validate@5.0.10): - dependencies: - '@babel/core': 7.26.9 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.10(react-refresh@0.11.0)(type-fest@2.19.0)(webpack-dev-server@4.15.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)))(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)) - '@svgr/webpack': 5.5.0 - babel-jest: 27.5.1(@babel/core@7.26.9) - babel-loader: 8.3.0(@babel/core@7.26.9)(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)) - babel-plugin-named-asset-import: 0.3.8(@babel/core@7.26.9) - babel-preset-react-app: 10.0.1 - bfj: 7.0.2 - browserslist: 4.23.3 - camelcase: 6.3.0 - case-sensitive-paths-webpack-plugin: 2.4.0 - css-loader: 6.8.1(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)) - css-minimizer-webpack-plugin: 3.4.1(esbuild@0.23.1)(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)) - dotenv: 10.0.0 - dotenv-expand: 5.1.0 - eslint: 8.57.0 - eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.26.10))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.10))(eslint@8.57.0)(jest@27.5.1(bufferutil@4.0.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2) - eslint-webpack-plugin: 3.2.0(eslint@8.57.0)(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)) - file-loader: 6.2.0(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)) - fs-extra: 10.1.0 - html-webpack-plugin: 5.5.3(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)) - identity-obj-proxy: 3.0.0 - jest: 27.5.1(bufferutil@4.0.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2))(utf-8-validate@5.0.10) - jest-resolve: 27.5.1 - jest-watch-typeahead: 1.1.0(jest@27.5.1(bufferutil@4.0.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2))(utf-8-validate@5.0.10)) - mini-css-extract-plugin: 2.7.6(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)) - postcss: 8.4.49 - postcss-flexbugs-fixes: 5.0.2(postcss@8.4.49) - postcss-loader: 6.2.1(postcss@8.4.49)(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)) - postcss-normalize: 10.0.1(browserslist@4.23.3)(postcss@8.4.49) - postcss-preset-env: 7.8.3(postcss@8.4.49) - prompts: 2.4.2 - react: 18.3.1 - react-app-polyfill: 3.0.0 - react-dev-utils: 12.0.1(eslint@8.57.0)(typescript@5.6.2)(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)) - react-refresh: 0.11.0 - resolve: 1.22.8 - resolve-url-loader: 4.0.0 - sass-loader: 12.6.0(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)) - semver: 7.6.3 - source-map-loader: 3.0.2(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)) - style-loader: 3.3.3(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)) - tailwindcss: 3.4.7(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2)) - terser-webpack-plugin: 5.3.9(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)) - webpack: 5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1) - webpack-dev-server: 4.15.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)) - webpack-manifest-plugin: 4.1.1(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)) - workbox-webpack-plugin: 6.6.0(@types/babel__core@7.20.5)(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)) - optionalDependencies: - fsevents: 2.3.3 - typescript: 5.6.2 - transitivePeerDependencies: - - '@babel/plugin-syntax-flow' - - '@babel/plugin-transform-react-jsx' - - '@parcel/css' - - '@swc/core' - - '@types/babel__core' - - '@types/webpack' - - bufferutil - - canvas - - clean-css - - csso - - debug - - esbuild - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - fibers - - node-notifier - - node-sass - - rework - - rework-visit - - sass - - sass-embedded - - sockjs-client - - supports-color - - ts-node - - type-fest - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - - webpack-hot-middleware - - webpack-plugin-serve - react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.26.10))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.10))(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/babel__core@7.20.5)(bufferutil@4.0.8)(esbuild@0.23.1)(eslint@9.16.0(jiti@1.21.0))(node-notifier@8.0.2)(react@18.3.1)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(utf-8-validate@5.0.10): dependencies: '@babel/core': 7.26.9 @@ -35178,7 +35675,7 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.26.9))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.9))(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/babel__core@7.20.5)(bufferutil@4.0.8)(esbuild@0.23.1)(eslint@9.16.0(jiti@1.21.0))(node-notifier@8.0.2)(react@18.3.1)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(utf-8-validate@5.0.10): + react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.26.9))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.9))(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/babel__core@7.20.5)(bufferutil@4.0.8)(esbuild@0.23.1)(eslint@8.57.0)(node-notifier@8.0.2)(react@18.3.1)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(utf-8-validate@5.0.10): dependencies: '@babel/core': 7.26.9 '@pmmmwh/react-refresh-webpack-plugin': 0.5.10(react-refresh@0.11.0)(type-fest@2.19.0)(webpack-dev-server@4.15.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)))(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)) @@ -35195,9 +35692,9 @@ snapshots: css-minimizer-webpack-plugin: 3.4.1(esbuild@0.23.1)(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)) dotenv: 10.0.0 dotenv-expand: 5.1.0 - eslint: 9.16.0(jiti@1.21.0) - eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.26.9))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.9))(eslint@9.16.0(jiti@1.21.0))(jest@27.5.1(bufferutil@4.0.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2) - eslint-webpack-plugin: 3.2.0(eslint@9.16.0(jiti@1.21.0))(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)) + eslint: 8.57.0 + eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.26.9))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.9))(eslint@8.57.0)(jest@27.5.1(bufferutil@4.0.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2) + eslint-webpack-plugin: 3.2.0(eslint@8.57.0)(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)) file-loader: 6.2.0(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)) fs-extra: 10.1.0 html-webpack-plugin: 5.5.3(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)) @@ -35214,7 +35711,7 @@ snapshots: prompts: 2.4.2 react: 18.3.1 react-app-polyfill: 3.0.0 - react-dev-utils: 12.0.1(eslint@9.16.0(jiti@1.21.0))(typescript@5.6.2)(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)) + react-dev-utils: 12.0.1(eslint@8.57.0)(typescript@5.6.2)(webpack@5.88.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(esbuild@0.23.1)) react-refresh: 0.11.0 resolve: 1.22.8 resolve-url-loader: 4.0.0 @@ -35301,6 +35798,20 @@ snapshots: js-yaml: 4.1.0 strip-bom: 4.0.0 + readable-stream@1.0.34: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + + readable-stream@1.1.14: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 @@ -35329,6 +35840,10 @@ snapshots: dependencies: readable-stream: 3.6.2 + readable-wrap@1.0.0: + dependencies: + readable-stream: 1.1.14 + readdir-glob@1.1.3: dependencies: minimatch: 5.1.6 @@ -35350,7 +35865,7 @@ snapshots: ast-types: 0.15.2 esprima: 4.0.1 source-map: 0.6.1 - tslib: 2.7.0 + tslib: 2.8.1 rechoir@0.6.2: dependencies: @@ -35552,7 +36067,7 @@ snapshots: rlp@2.2.7: dependencies: - bn.js: 5.2.1 + bn.js: 5.2.2 rollup-plugin-polyfill-node@0.13.0(rollup@4.28.0): dependencies: @@ -35916,6 +36431,12 @@ snapshots: inherits: 2.0.4 safe-buffer: 5.2.1 + sha.js@2.4.12: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + to-buffer: 1.2.2 + sha1@1.1.1: dependencies: charenc: 0.0.2 @@ -36236,6 +36757,10 @@ snapshots: split2@4.2.0: {} + split@0.3.3: + dependencies: + through: 2.3.8 + split@1.0.1: dependencies: through: 2.3.8 @@ -36312,6 +36837,15 @@ snapshots: stream-shift@1.0.3: {} + stream-splicer@1.3.2: + dependencies: + indexof: 0.0.1 + inherits: 2.0.4 + isarray: 0.0.1 + readable-stream: 1.1.14 + readable-wrap: 1.0.0 + through2: 1.1.1 + streamsearch@1.1.0: {} streamx@2.18.0: @@ -36421,6 +36955,8 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.0.0 + string_decoder@0.10.31: {} + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 @@ -36883,6 +37419,21 @@ snapshots: throat@6.0.2: {} + through2@0.4.2: + dependencies: + readable-stream: 1.0.34 + xtend: 2.1.2 + + through2@0.6.5: + dependencies: + readable-stream: 1.0.34 + xtend: 4.0.2 + + through2@1.1.1: + dependencies: + readable-stream: 1.1.14 + xtend: 4.0.2 + through2@2.0.5: dependencies: readable-stream: 2.3.8 @@ -36923,6 +37474,12 @@ snapshots: tmpl@1.0.5: {} + to-buffer@1.2.2: + dependencies: + isarray: 2.0.5 + safe-buffer: 5.2.1 + typed-array-buffer: 1.0.3 + to-object-path@0.3.0: dependencies: kind-of: 3.2.2 @@ -36983,6 +37540,15 @@ snapshots: dependencies: escape-string-regexp: 5.0.0 + trumpet@1.7.2: + dependencies: + duplexer2: 0.0.2 + html-select: 2.3.24 + html-tokenize: 1.2.5 + inherits: 2.0.4 + readable-stream: 1.1.14 + through2: 1.1.1 + tryer@1.0.1: {} ts-command-line-args@2.5.1: @@ -37002,12 +37568,12 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-jest@29.2.5(@babel/core@7.26.10)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.10))(esbuild@0.23.1)(jest@29.7.0(@types/node@18.15.13)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2)))(typescript@5.6.2): + ts-jest@29.2.5(@babel/core@7.26.10)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.10))(esbuild@0.23.1)(jest@29.7.0(@types/node@18.15.13)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2))(typescript@5.6.2): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@18.15.13)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2)) + jest: 29.7.0(@types/node@18.15.13)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -37022,12 +37588,12 @@ snapshots: babel-jest: 29.7.0(@babel/core@7.26.10) esbuild: 0.23.1 - ts-jest@29.2.5(@babel/core@7.26.10)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.10))(esbuild@0.23.1)(jest@29.7.0(@types/node@18.15.13)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2))(typescript@5.6.2): + ts-jest@29.2.5(@babel/core@7.26.10)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.10))(esbuild@0.23.1)(jest@29.7.0(@types/node@20.14.13)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@20.14.13)(typescript@5.6.2)))(typescript@5.6.2): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@18.15.13)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2) + jest: 29.7.0(@types/node@20.14.13)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@20.14.13)(typescript@5.6.2)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -37042,12 +37608,12 @@ snapshots: babel-jest: 29.7.0(@babel/core@7.26.10) esbuild: 0.23.1 - ts-jest@29.2.5(@babel/core@7.26.10)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.10))(esbuild@0.23.1)(jest@29.7.0(@types/node@20.14.13)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@20.14.13)(typescript@5.6.2)))(typescript@5.6.2): + ts-jest@29.2.5(@babel/core@7.26.10)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.10))(esbuild@0.23.1)(jest@29.7.0(@types/node@22.7.5)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@22.7.5)(typescript@5.6.2)))(typescript@5.6.2): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.14.13)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@20.14.13)(typescript@5.6.2)) + jest: 29.7.0(@types/node@22.7.5)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@22.7.5)(typescript@5.6.2)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -37062,12 +37628,12 @@ snapshots: babel-jest: 29.7.0(@babel/core@7.26.10) esbuild: 0.23.1 - ts-jest@29.2.5(@babel/core@7.26.10)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.10))(esbuild@0.23.1)(jest@29.7.0(@types/node@22.7.5)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@22.7.5)(typescript@5.6.2)))(typescript@5.6.2): + ts-jest@29.2.5(@babel/core@7.26.9)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.9))(esbuild@0.23.1)(jest@29.7.0(@types/node@18.15.13)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2)))(typescript@5.6.2): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@22.7.5)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@22.7.5)(typescript@5.6.2)) + jest: 29.7.0(@types/node@18.15.13)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.13))(@types/node@18.15.13)(typescript@5.6.2)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -37076,10 +37642,10 @@ snapshots: typescript: 5.6.2 yargs-parser: 21.1.1 optionalDependencies: - '@babel/core': 7.26.10 + '@babel/core': 7.26.9 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.26.10) + babel-jest: 29.7.0(@babel/core@7.26.9) esbuild: 0.23.1 ts-mockito@2.6.1: @@ -37240,6 +37806,8 @@ snapshots: tslib@2.7.0: {} + tslib@2.8.1: {} + tsort@0.0.1: {} tsup@8.3.0(@swc/core@1.9.3(@swc/helpers@0.5.13))(jiti@1.21.0)(postcss@8.4.49)(typescript@5.6.2)(yaml@2.5.0): @@ -37338,6 +37906,12 @@ snapshots: es-errors: 1.3.0 is-typed-array: 1.1.13 + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + typed-array-byte-length@1.0.1: dependencies: call-bind: 1.0.7 @@ -37611,6 +38185,8 @@ snapshots: utils-merge@1.0.1: {} + uuid@13.0.0: {} + uuid@8.3.2: {} uuid@9.0.1: {} @@ -37670,6 +38246,23 @@ snapshots: - utf-8-validate - zod + viem@2.41.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10): + dependencies: + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.1.0(typescript@5.6.2) + isows: 1.0.7(ws@8.18.3(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + ox: 0.9.6(typescript@5.6.2) + ws: 8.18.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + vite-plugin-node-polyfills@0.16.0(rollup@4.28.0)(vite@5.4.7(@types/node@18.15.13)(lightningcss@1.21.5)(terser@5.34.1)): dependencies: '@rollup/plugin-inject': 5.0.5(rollup@4.28.0) @@ -37709,14 +38302,14 @@ snapshots: dependencies: xml-name-validator: 4.0.0 - wagmi@2.12.1(@tanstack/query-core@5.51.15)(@tanstack/react-query@5.51.15(react@18.3.1))(@types/react@18.3.12)(bufferutil@4.0.8)(encoding@0.1.13)(immer@9.0.21)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@types/react@18.3.12)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.28.0)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.18.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)): + wagmi@2.12.1(@tanstack/query-core@5.51.15)(@tanstack/react-query@5.51.15(react@18.3.1))(@types/react@18.3.12)(bufferutil@4.0.8)(encoding@0.1.13)(immer@9.0.21)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@types/react@18.3.12)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.28.0)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)): dependencies: '@tanstack/react-query': 5.51.15(react@18.3.1) - '@wagmi/connectors': 5.1.1(@types/react@18.3.12)(@wagmi/core@2.13.1(@tanstack/query-core@5.51.15)(@types/react@18.3.12)(immer@9.0.21)(react@18.3.1)(typescript@5.6.2)(viem@2.18.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@types/react@18.3.12)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.28.0)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.18.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)) - '@wagmi/core': 2.13.1(@tanstack/query-core@5.51.15)(@types/react@18.3.12)(immer@9.0.21)(react@18.3.1)(typescript@5.6.2)(viem@2.18.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@wagmi/connectors': 5.1.1(@types/react@18.3.12)(@wagmi/core@2.13.1(@tanstack/query-core@5.51.15)(@types/react@18.3.12)(immer@9.0.21)(react@18.3.1)(typescript@5.6.2)(viem@2.41.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@types/react@18.3.12)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.28.0)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)) + '@wagmi/core': 2.13.1(@tanstack/query-core@5.51.15)(@types/react@18.3.12)(immer@9.0.21)(react@18.3.1)(typescript@5.6.2)(viem@2.41.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10)) react: 18.3.1 use-sync-external-store: 1.2.0(react@18.3.1) - viem: 2.18.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10) + viem: 2.41.2(bufferutil@4.0.8)(typescript@5.6.2)(utf-8-validate@5.0.10) optionalDependencies: typescript: 5.6.2 transitivePeerDependencies: @@ -37989,6 +38582,16 @@ snapshots: gopd: 1.0.1 has-tostringtag: 1.0.2 + which-typed-array@1.1.19: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + which@1.3.1: dependencies: isexe: 2.0.0 @@ -38207,6 +38810,11 @@ snapshots: bufferutil: 4.0.8 utf-8-validate: 5.0.10 + ws@8.18.3(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + ws@8.5.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): optionalDependencies: bufferutil: 4.0.8 @@ -38237,6 +38845,10 @@ snapshots: globalthis: 1.0.4 symbol-observable: 2.0.3 + xtend@2.1.2: + dependencies: + object-keys: 0.4.0 + xtend@4.0.2: {} xxhash-wasm@0.4.2: {} diff --git a/tsup.config.js b/tsup.config.js index 91eb602d97..f39a590fe5 100644 --- a/tsup.config.js +++ b/tsup.config.js @@ -25,7 +25,19 @@ export default defineConfig((options) => { target: 'es2022', minify: true, bundle: true, - noExternal: ['@uniswap/swap-router-contracts'], + noExternal: [ + '@uniswap/swap-router-contracts', + '@0xsequence/abi', + '@0xsequence/core', + '@0xsequence/identity-instrument', + '@0xsequence/relayer', + '@0xsequence/wallet-core', + '@0xsequence/wallet-primitives', + '@0xsequence/wallet-wdk', + '@0xsequence/guard', + 'ox', + 'jwt-decode' + ], treeshake: true, esbuildPlugins: [ nodeModulesPolyfillPlugin({