diff --git a/examples/react/wagmi/package.json b/examples/react/wagmi/package.json index 2eaddfe98..a1b41a993 100644 --- a/examples/react/wagmi/package.json +++ b/examples/react/wagmi/package.json @@ -9,13 +9,13 @@ "preview": "vite preview" }, "dependencies": { + "@cowprotocol/cow-sdk": "workspace:*", + "@cowprotocol/sdk-viem-adapter": "workspace:*", "@tanstack/react-query": "5.45.1", "react": "^18.3.1", "react-dom": "^18.3.1", - "viem": "^2.28.4", - "wagmi": "latest", - "@cowprotocol/cow-sdk": "workspace:*", - "@cowprotocol/sdk-viem-adapter": "workspace:*" + "viem": "^2.38.6", + "wagmi": "latest" }, "devDependencies": { "@types/react": "^18.3.1", diff --git a/packages/app-data/src/generatedTypes/index.ts b/packages/app-data/src/generatedTypes/index.ts index 9fe75567f..86bf2948e 100644 --- a/packages/app-data/src/generatedTypes/index.ts +++ b/packages/app-data/src/generatedTypes/index.ts @@ -20,10 +20,11 @@ import * as v1_5_0 from './v1.5.0' import * as v1_6_0 from './v1.6.0' import * as v1_7_0 from './v1.7.0' import * as v1_8_0 from './v1.8.0' +import * as v1_9_0 from './v1.9.0' export * from './latest' -export const LATEST_APP_DATA_VERSION = '1.8.0' +export const LATEST_APP_DATA_VERSION = '1.9.0' export const LATEST_QUOTE_METADATA_VERSION = '1.1.0' export const LATEST_REFERRER_METADATA_VERSION = '0.2.0' export const LATEST_ORDER_CLASS_METADATA_VERSION = '0.3.0' @@ -34,8 +35,9 @@ export const LATEST_WIDGET_METADATA_VERSION = '0.1.0' export const LATEST_PARTNER_FEE_METADATA_VERSION = '1.0.0' export const LATEST_REPLACED_ORDER_METADATA_VERSION = '0.1.0' -export type LatestAppDataDocVersion = v1_8_0.AppDataRootSchema +export type LatestAppDataDocVersion = v1_9_0.AppDataRootSchema export type AnyAppDataDocVersion = + | v1_9_0.AppDataRootSchema | v1_8_0.AppDataRootSchema | v1_7_0.AppDataRootSchema | v1_6_0.AppDataRootSchema @@ -58,6 +60,7 @@ export type AnyAppDataDocVersion = | v0_1_0.AppDataRootSchema export { + v1_9_0, v1_8_0, v1_7_0, v1_6_0, diff --git a/packages/app-data/src/generatedTypes/latest.ts b/packages/app-data/src/generatedTypes/latest.ts index 312f61473..7f3ec887b 100644 --- a/packages/app-data/src/generatedTypes/latest.ts +++ b/packages/app-data/src/generatedTypes/latest.ts @@ -1,3 +1,3 @@ // generated file, do not edit manually -export * as cowAppDataLatestScheme from './v1.8.0' +export * as cowAppDataLatestScheme from './v1.9.0' diff --git a/packages/app-data/src/generatedTypes/v1.9.0.ts b/packages/app-data/src/generatedTypes/v1.9.0.ts new file mode 100644 index 000000000..1ac81d8de --- /dev/null +++ b/packages/app-data/src/generatedTypes/v1.9.0.ts @@ -0,0 +1,260 @@ +/* tslint:disable */ +/** + * This file was automatically generated by json-schema-to-typescript. + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, + * and run json-schema-to-typescript to regenerate this file. + */ + +/** + * Semantic versioning of document. + */ +export type Version = string; +/** + * The code identifying the CLI, UI, service generating the order. + */ +export type AppCode = string; +/** + * Environment from which the order came from. + */ +export type Environment = string; +/** + * The address of the trader who signs the CoW Swap order. This field should normally be omitted; it is recommended to use it if the signer is a smart-contract wallet using EIP-1271 signatures. + */ +export type Signer = string; +export type ReferrerAddress = string; +/** + * Tracks in which medium the traffic originated from (twitter, facebook, etc.) + */ +export type UTMSource = string; +/** + * Tracks in which medium the traffic originated from (mail, CPC, social, etc.) + */ +export type UTMMedium = string; +/** + * Track the performance of a specific campaign + */ +export type UTMCampaign = string; +/** + * Track which link was clicked + */ +export type UTMContent = string; +/** + * Track which keyword term a website visitor came from + */ +export type UTMKeywordTerm = string; +/** + * Slippage tolerance that was applied to the order to get the limit price. Expressed in Basis Points (BPS). One basis point is equivalent to 0.01% (1/100th of a percent) + */ +export type SlippageBips = number; +/** + * Whether the given slippageBips used is originated from a Smart slippage suggestion + */ +export type SmartSlippage = boolean; +/** + * Indicator of the order class. + */ +export type OrderClass1 = "market" | "limit" | "liquidity" | "twap"; +/** + * Semantic versioning of document. + */ +export type Version1 = string; +/** + * The contract to call for the hook + */ +export type HookTarget = string; +/** + * The calldata to use when calling the hook + */ +export type HookCallData = string; +/** + * The gas limit (in gas units) for the hook + */ +export type HookGasLimit = string; +/** + * CoW Swap has an interface that allows dApps to build hooks for orders. This field is used to identify the dApp that has built the hook. + */ +export type IdOfTheDAppWhichHasBuiltTheHook = string; +/** + * CoW Hooks to call before an order executes + */ +export type PreHooks = CoWHook[]; +/** + * CoW Hooks to call after an order executes + */ +export type PostHooks = CoWHook[]; +/** + * The code identifying the UI powering the widget + */ +export type AppCode1 = string; +/** + * Environment from which the order came from. + */ +export type Environment1 = string; +export type PartnerFee = + | ( + | { + volumeBps: VolumeBasisPointBPS; + recipient: PartnerAccount; + } + | { + surplusBps: SurplusBasisPointBPS; + maxVolumeBps: MaxVolumeBasisPointBPS; + recipient: PartnerAccount; + } + | { + priceImprovementBps: PriceImprovementBasisPointBPS; + maxVolumeBps: MaxVolumeBasisPointBPS; + recipient: PartnerAccount; + } + )[] + | ( + | { + volumeBps: VolumeBasisPointBPS; + recipient: PartnerAccount; + } + | { + surplusBps: SurplusBasisPointBPS; + maxVolumeBps: MaxVolumeBasisPointBPS; + recipient: PartnerAccount; + } + | { + priceImprovementBps: PriceImprovementBasisPointBPS; + maxVolumeBps: MaxVolumeBasisPointBPS; + recipient: PartnerAccount; + } + ); +/** + * The fee in basis points (BPS) to be paid to the partner based on volume. Capped at protocol level to 100 BPS (1%) + */ +export type VolumeBasisPointBPS = number; +/** + * The Ethereum address of the partner to receive the fee. + */ +export type PartnerAccount = string; +/** + * The fee in basis points (BPS) to be paid to the partner based on surplus + */ +export type SurplusBasisPointBPS = number; +/** + * The maximum volume in basis points (BPS) to be paid to the partner. Capped at protocol level to 100 BPS (1%). You can chose to go lower but not higher + */ +export type MaxVolumeBasisPointBPS = number; +/** + * The fee in basis points (BPS) to be paid to the partner based on price improvement + */ +export type PriceImprovementBasisPointBPS = number; +/** + * The replaced order UID. + */ +export type ReplacedOrderUID = string; +/** + * The id links order with a bridging provider which processes it + */ +export type IdOfBridgingProvider = string; +/** + * Id of a blockchain where funds will be received + */ +export type BridgingDestinationChainId = string; +/** + * Address of a token that will be received at destination chain. The chain might be EVM or non-EVM. Some chains might even not have a token address. E.g.: Bitcoin + */ +export type BridgingDestinationTokenAddress = string; +/** + * The amount of tokens to be flash loaned (in token units, as uint256) + */ +export type LoanAmount = string; +/** + * The Ethereum address of the flashloan liquidity provider + */ +export type LiquidityProviderAddress = string; +/** + * The Ethereum address of the protocol adapter + */ +export type ProtocolAdapterAddress = string; +/** + * The Ethereum address of the flashloan receiver + */ +export type ReceiverAddress = string; +/** + * The Ethereum address of the token being borrowed + */ +export type TokenAddress = string; + +/** + * Metadata JSON document for adding information to orders. + */ +export interface AppDataRootSchema { + version: Version; + appCode?: AppCode; + environment?: Environment; + metadata: Metadata; +} +/** + * Each metadata will specify one aspect of the order. + */ +export interface Metadata { + signer?: Signer; + referrer?: Referrer; + utm?: UTMCodes; + quote?: Quote; + orderClass?: OrderClass; + hooks?: OrderInteractionHooks; + widget?: Widget; + partnerFee?: PartnerFee; + replacedOrder?: ReplacedOrder; + bridging?: Bridging; + flashloan?: Flashloan; +} +export interface Referrer { + address: ReferrerAddress; +} +export interface UTMCodes { + utmSource?: UTMSource; + utmMedium?: UTMMedium; + utmCampaign?: UTMCampaign; + utmContent?: UTMContent; + utmTerm?: UTMKeywordTerm; +} +export interface Quote { + slippageBips: SlippageBips; + smartSlippage?: SmartSlippage; +} +export interface OrderClass { + orderClass: OrderClass1; +} +/** + * Optional Pre and Post order interaction hooks attached to a single order + */ +export interface OrderInteractionHooks { + version?: Version1; + pre?: PreHooks; + post?: PostHooks; +} +export interface CoWHook { + target: HookTarget; + callData: HookCallData; + gasLimit: HookGasLimit; + dappId?: IdOfTheDAppWhichHasBuiltTheHook; +} +export interface Widget { + appCode: AppCode1; + environment?: Environment1; +} +export interface ReplacedOrder { + uid: ReplacedOrderUID; +} +export interface Bridging { + providerId: IdOfBridgingProvider; + destinationChainId: BridgingDestinationChainId; + destinationTokenAddress: BridgingDestinationTokenAddress; +} +/** + * Information about flashloan parameters for the order + */ +export interface Flashloan { + amount: LoanAmount; + liquidityProvider: LiquidityProviderAddress; + protocolAdapter: ProtocolAdapterAddress; + receiver: ReceiverAddress; + token: TokenAddress; +} diff --git a/packages/app-data/src/schemas/bridging/v0.2.0.json b/packages/app-data/src/schemas/bridging/v0.2.0.json new file mode 100644 index 000000000..5ab082c1c --- /dev/null +++ b/packages/app-data/src/schemas/bridging/v0.2.0.json @@ -0,0 +1,36 @@ +{ + "$id": "#bridging/v0.2.0.json", + "$schema": "http://json-schema.org/draft-07/schema", + "required": [ + "providerId", + "destinationChainId", + "destinationTokenAddress" + ], + "title": "Bridging", + "type": "object", + "additionalProperties": false, + "properties": { + "providerId": { + "$ref": "../definitions.json#/definitions/dappId", + "title": "Id of bridging provider", + "description": "The id links order with a bridging provider which processes it" + }, + "destinationChainId": { + "$ref": "../definitions.json#/definitions/chainId", + "title": "Bridging destination chainId", + "description": "Id of a blockchain where funds will be received" + }, + "destinationTokenAddress": { + "title": "Bridging destination token address", + "description": "Address of a token that will be received at destination chain. The chain might be EVM or non-EVM. Some chains might even not have a token address. E.g.: Bitcoin", + "type": "string", + "pattern": "^[a-zA-Z0-9\\-.]{1,64}$", + "examples": [ + "0x00E989b87700514118Fa55326CD1cCE82faebEF6", + "A.b19436aae4d94622.FiatToken", + "0.0.456858", + "1337" + ] + } + } +} diff --git a/packages/app-data/src/schemas/definitions.json b/packages/app-data/src/schemas/definitions.json index 7f92cb15c..d9da58fc2 100644 --- a/packages/app-data/src/schemas/definitions.json +++ b/packages/app-data/src/schemas/definitions.json @@ -50,7 +50,7 @@ }, "dappId": { "$id": "#/definitions/dappId", - "title": "A hex string representing a dApp ID", + "title": "An arbitrary string representing a dApp ID", "examples": ["75716a3cb48fdbb43ebdff58ce6c541f6a2c269be690513131355800367f2da2"], "type": "string", "minLength": 1 diff --git a/packages/app-data/src/schemas/v1.9.0.json b/packages/app-data/src/schemas/v1.9.0.json new file mode 100644 index 000000000..6ddc3b916 --- /dev/null +++ b/packages/app-data/src/schemas/v1.9.0.json @@ -0,0 +1,84 @@ +{ + "$id": "https://cowswap.exchange/schemas/app-data/v1.9.0.json", + "$schema": "http://json-schema.org/draft-07/schema", + "description": "Metadata JSON document for adding information to orders.", + "required": [ + "version", + "metadata" + ], + "title": "AppData Root Schema", + "type": "object", + "additionalProperties": false, + "properties": { + "version": { + "$ref": "definitions.json#/definitions/version", + "readOnly": true, + "default": "1.9.0" + }, + "appCode": { + "$id": "#/properties/appCode", + "description": "The code identifying the CLI, UI, service generating the order.", + "examples": [ + "CoW Swap" + ], + "title": "App Code", + "type": "string" + }, + "environment": { + "$id": "#/properties/environment", + "description": "Environment from which the order came from.", + "title": "Environment", + "type": "string", + "examples": [ + "production", + "development", + "staging", + "ens" + ] + }, + "metadata": { + "$id": "#/properties/metadata", + "default": {}, + "description": "Each metadata will specify one aspect of the order.", + "required": [], + "title": "Metadata", + "type": "object", + "additionalProperties": false, + "properties": { + "signer": { + "$ref": "signer/v0.1.0.json#" + }, + "referrer": { + "$ref": "referrer/v0.2.0.json#" + }, + "utm": { + "$ref": "utm/v0.3.0.json#" + }, + "quote": { + "$ref": "quote/v1.1.0.json#" + }, + "orderClass": { + "$ref": "orderClass/v0.3.0.json#" + }, + "hooks": { + "$ref": "hooks/v0.2.0.json#" + }, + "widget": { + "$ref": "widget/v0.1.0.json#" + }, + "partnerFee": { + "$ref": "partnerFee/v1.0.0.json#" + }, + "replacedOrder": { + "$ref": "replacedOrder/v0.1.0.json#" + }, + "bridging": { + "$ref": "bridging/v0.2.0.json#" + }, + "flashloan": { + "$ref": "flashloan/v0.2.0.json#" + } + } + } + } +} diff --git a/packages/app-data/test/flashloan-v1.7.0.spec.ts b/packages/app-data/test/flashloan-v1.7.0.spec.ts index b1c787782..a65f3dfca 100644 --- a/packages/app-data/test/flashloan-v1.7.0.spec.ts +++ b/packages/app-data/test/flashloan-v1.7.0.spec.ts @@ -20,7 +20,6 @@ describe('Flashloan metadata v1.7.0', () => { // then expect(appDataDoc.metadata.flashloan).toEqual(validFlashloanMetadata) - expect(appDataDoc.version).toBe('1.8.0') }) test('Validates valid flashloan metadata v1.7.0', async () => { @@ -167,6 +166,5 @@ describe('Flashloan metadata v1.7.0', () => { // then expect(appDataDoc.metadata).toEqual(metadata) - expect(appDataDoc.version).toBe('1.8.0') }) }) diff --git a/packages/bridging/README.md b/packages/bridging/README.md index 279e94d18..13ae6f2e4 100644 --- a/packages/bridging/README.md +++ b/packages/bridging/README.md @@ -132,7 +132,7 @@ const parameters: QuoteBridgeRequest = { appCode: 'YOUR_APP_CODE', } -const quoteResult = await sdk.bridging.getQuote(parameters) +const quoteResult = await bridgingSdk.getQuote(parameters) assertIsBridgeQuoteAndPost(quoteResult) const { swap, bridge, postSwapOrderFromQuote } = quoteResult @@ -171,7 +171,7 @@ const multiQuoteRequest: MultiQuoteRequest = { } // Get quotes from all providers -const results = await sdk.bridging.getMultiQuotes(multiQuoteRequest) +const results = await bridgingSdk.getMultiQuotes(multiQuoteRequest) results.forEach((result) => { if (result.quote) { @@ -210,7 +210,7 @@ const multiQuoteRequest: MultiQuoteRequest = { } // This will return all results once completed (or timed out) -const finalResults = await sdk.bridging.getMultiQuotes(multiQuoteRequest) +const finalResults = await bridgingSdk.getMultiQuotes(multiQuoteRequest) console.log(`Received ${finalResults.filter(r => r.quote).length} successful quotes out of ${finalResults.length} providers`) ``` @@ -227,7 +227,7 @@ const fetchQuotes = async () => { setQuotes([]) try { - const results = await sdk.bridging.getMultiQuotes({ + const results = await bridgingSdk.getMultiQuotes({ quoteBridgeRequest: parameters, options: { onQuoteResult: (result) => { @@ -280,7 +280,7 @@ const isBestQuote = (result: MultiQuoteResult): boolean => { The `getMultiQuotes()` method supports two types of timeouts for fine-grained control: ```typescript -const results = await sdk.bridging.getMultiQuotes({ +const results = await bridgingSdk.getMultiQuotes({ quoteBridgeRequest: parameters, options: { // Global timeout: Maximum time to wait for all providers to complete @@ -312,7 +312,7 @@ The `getBestQuote()` method provides an optimized way to get only the best quote import { MultiQuoteRequest } from '@cowprotocol/sdk-bridging' // Get the best quote from all available providers -const bestQuote = await sdk.bridging.getBestQuote({ +const bestQuote = await bridgingSdk.getBestQuote({ quoteBridgeRequest: parameters, // Same parameters as above providerDappIds: ['provider1', 'provider2'], // Optional: specify which providers to query advancedSettings: { @@ -342,7 +342,7 @@ For real-time updates, you can receive notifications each time a better quote is ```typescript let currentBest: MultiQuoteResult | null = null -const bestQuote = await sdk.bridging.getBestQuote({ +const bestQuote = await bridgingSdk.getBestQuote({ quoteBridgeRequest: parameters, options: { // Called whenever a better quote is found @@ -371,7 +371,7 @@ console.log('Final best quote:', bestQuote) When all providers fail, `getBestQuote()` returns the first provider's error: ```typescript -const bestQuote = await sdk.bridging.getBestQuote({ +const bestQuote = await bridgingSdk.getBestQuote({ quoteBridgeRequest: parameters, options: { onQuoteResult: (result) => { @@ -414,6 +414,75 @@ Choose `getMultiQuotes()` when: - You want to analyze all provider responses - You need to show provider-specific errors or statuses +## Provider Management + +The BridgingSdk provides methods to manage which bridge providers are actively used for quotes and operations. + +### Getting Available Providers + +Use `getAvailableProviders()` to retrieve the list of currently active providers: + +```typescript +// Get all active providers +const providers = bridgingSdk.getAvailableProviders() + +providers.forEach((provider) => { + console.log(`Provider: ${provider.info.name}`) + console.log(`Dapp ID: ${provider.info.dappId}`) + console.log(`Networks: ${provider.info.supportedChains.join(', ')}`) +}) +``` + +### Filtering Active Providers + +Use `setAvailableProviders()` to dynamically filter which providers should be used for bridge operations: + +```typescript +// Initially, all configured providers are available +const allProviders = bridgingSdk.getAvailableProviders() +console.log(`Total providers: ${allProviders.length}`) + +// Filter to use only specific providers +bridgingSdk.setAvailableProviders(['across', 'hop-protocol']) + +// Now only the specified providers will be used +const filteredProviders = bridgingSdk.getAvailableProviders() +console.log(`Active providers: ${filteredProviders.length}`) + +// Reset to use all providers again +bridgingSdk.setAvailableProviders([]) +const resetProviders = bridgingSdk.getAvailableProviders() +console.log(`Reset to all providers: ${resetProviders.length}`) +``` + +### Dynamic Provider Selection Example + +```typescript +// Example: Let users select their preferred bridge providers +const [selectedProviders, setSelectedProviders] = useState([]) + +// Function to update active providers based on user selection +const updateActiveProviders = (providerIds: string[]) => { + bridgingSdk.setAvailableProviders(providerIds) + setSelectedProviders(providerIds) + + console.log(`Updated to use ${providerIds.length} provider(s)`) +} + +// Get quotes only from selected providers +const getQuotesFromSelectedProviders = async () => { + // The SDK will automatically use only the providers set via setAvailableProviders + const quote = await bridgingSdk.getQuote(parameters) + // Or for multi-provider quotes + const multiQuotes = await bridgingSdk.getMultiQuotes({ + quoteBridgeRequest: parameters + // No need to specify providerDappIds, setAvailableProviders already filtered them + }) + + return quote +} +``` + ## Supported Bridge Providers - Additional bridge providers are being integrated diff --git a/packages/bridging/jest.config.ts b/packages/bridging/jest.config.ts index b2fe663bf..1e6269ba8 100644 --- a/packages/bridging/jest.config.ts +++ b/packages/bridging/jest.config.ts @@ -9,7 +9,7 @@ const config: Config = { '^.+\\.tsx?$': 'ts-jest', }, collectCoverageFrom: ['src/**/*.{ts,tsx}', '!src/**/*.d.ts'], - moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'] } export default config diff --git a/packages/bridging/package.json b/packages/bridging/package.json index a09b7f494..e7adae03a 100644 --- a/packages/bridging/package.json +++ b/packages/bridging/package.json @@ -1,6 +1,6 @@ { "name": "@cowprotocol/sdk-bridging", - "version": "0.6.1", + "version": "0.6.2", "description": "Bridging for CoW Protocol", "main": "./dist/index.js", "module": "./dist/index.mjs", @@ -32,25 +32,27 @@ "@cowprotocol/sdk-cow-shed": "workspace:*", "@cowprotocol/sdk-order-book": "workspace:*", "@cowprotocol/sdk-trading": "workspace:*", - "@cowprotocol/sdk-weiroll": "workspace:*" + "@cowprotocol/sdk-weiroll": "workspace:*", + "@defuse-protocol/one-click-sdk-typescript": "0.1.1-0.2", + "json-stable-stringify": "^1.3.0" }, "devDependencies": { - "@cowprotocol/sdk-order-signing": "workspace:*", "@cow-sdk/typescript-config": "workspace:*", "@cowprotocol/sdk-ethers-v5-adapter": "workspace:*", "@cowprotocol/sdk-ethers-v6-adapter": "workspace:*", + "@cowprotocol/sdk-order-signing": "workspace:*", "@cowprotocol/sdk-viem-adapter": "workspace:*", - "ethers-v5": "npm:ethers@^5.7.2", - "ethers-v6": "npm:ethers@^6.13.7", "@types/jest": "^29.4.0", "@types/node": "^20.17.31", "coveralls": "^3.1.1", - "tsup": "^7.2.0", - "typescript": "^5.2.2", + "ethers": "^5.7.2", + "ethers-v5": "npm:ethers@^5.7.2", + "ethers-v6": "npm:ethers@^6.13.7", "jest": "^29.7.0", "jest-fetch-mock": "^3.0.3", "ts-jest": "^29.0.0", - "ethers": "^5.7.2", + "tsup": "^7.2.0", + "typescript": "^5.2.2", "viem": "^2.28.4" } } diff --git a/packages/bridging/src/BridgingSdk/BridgingSdk.test.ts b/packages/bridging/src/BridgingSdk/BridgingSdk.test.ts index ef600bb30..245e746c2 100644 --- a/packages/bridging/src/BridgingSdk/BridgingSdk.test.ts +++ b/packages/bridging/src/BridgingSdk/BridgingSdk.test.ts @@ -91,7 +91,7 @@ adapterNames.forEach((adapterName) => { describe('getProviders', () => { it('returns the providers', () => { - const providers = bridgingSdk.getProviders() + const providers = bridgingSdk.getAvailableProviders() expect(providers).toEqual([mockProvider]) }) }) @@ -120,12 +120,6 @@ adapterNames.forEach((adapterName) => { expect(mockProvider.getNetworks).toHaveBeenCalled() expect(networks).toEqual(expectedNetworks) }) - - it('errors buble up', async () => { - mockProvider.getNetworks = jest.fn().mockRejectedValue(new Error("don't ask for networks")) - - await expect(bridgingSdk.getTargetNetworks()).rejects.toThrow("don't ask for networks") - }) }) describe('getQuote', () => { @@ -573,7 +567,7 @@ adapterNames.forEach((adapterName) => { }) it('should return the muxed types for the providers', () => { - const providers = bridgingSdk.getProviders() + const providers = bridgingSdk.getAvailableProviders() expect(providers).toHaveLength(2) expect(providers[0]).toEqual(hookProvider) @@ -633,7 +627,7 @@ adapterNames.forEach((adapterName) => { }) it('should correctly identify provider types', () => { - const providers = bridgingSdk.getProviders() + const providers = bridgingSdk.getAvailableProviders() const hook = providers.find((p) => p.info.dappId === 'dapp-id-MockHookBridgeProvider') const receiver = providers.find((p) => p.info.dappId === 'dapp-id-ReceiverAccountBridgeProvider') diff --git a/packages/bridging/src/BridgingSdk/BridgingSdk.ts b/packages/bridging/src/BridgingSdk/BridgingSdk.ts index 6156c3631..903d2d24d 100644 --- a/packages/bridging/src/BridgingSdk/BridgingSdk.ts +++ b/packages/bridging/src/BridgingSdk/BridgingSdk.ts @@ -1,6 +1,4 @@ import { - BridgeQuoteResult, - BridgeStatusResult, BuyTokensParams, CrossChainOrder, CrossChainQuoteAndPost, @@ -8,27 +6,29 @@ import { MultiQuoteResult, MultiQuoteRequest, QuoteBridgeRequest, - BridgeProvider, + DefaultBridgeProvider, } from '../types' import { getCrossChainOrder } from './getCrossChainOrder' import { findBridgeProviderFromHook } from './findBridgeProviderFromHook' -import { BridgeProviderError } from '../errors' import { SwapAdvancedSettings, TradingSdk } from '@cowprotocol/sdk-trading' import { OrderBookApi } from '@cowprotocol/sdk-order-book' -import { ALL_SUPPORTED_CHAINS, ChainInfo, SupportedChainId, TokenInfo } from '@cowprotocol/sdk-config' +import { ALL_SUPPORTED_CHAINS, ChainInfo, TokenInfo } from '@cowprotocol/sdk-config' import { AbstractProviderAdapter, enableLogging, setGlobalAdapter, TTLCache } from '@cowprotocol/sdk-common' import { BridgingSdkCacheConfig, BridgingSdkConfig, BridgingSdkOptions, GetOrderParams } from './types' import { getCacheKey } from './helpers' import { SingleQuoteStrategy, MultiQuoteStrategy, BestQuoteStrategy } from './strategies' import { createStrategies } from './strategies/createStrategies' +import { createBridgeRequestTimeoutPromise } from './utils' // Default cache configuration const DEFAULT_CACHE_CONFIG: BridgingSdkCacheConfig = { enabled: true, - intermediateTokensTtl: 5 * 60 * 1000, // 5 minutes + intermediateTokensTtl: 5 * 60 * 1000, // 2 minutes buyTokensTtl: 2 * 60 * 1000, // 2 minutes } +const DEFAULT_MULTI_PROVIDER_REQUEST_TIMEOUT = 10 * 1000 // 10 seconds + /** * SDK for bridging for swapping tokens between different chains. */ @@ -41,6 +41,8 @@ export class BridgingSdk { private multiQuoteStrategy: MultiQuoteStrategy private bestQuoteStrategy: BestQuoteStrategy + private availableProvidersIds: string[] = [] + constructor( readonly options: BridgingSdkOptions, adapter?: AbstractProviderAdapter, @@ -94,21 +96,19 @@ export class BridgingSdk { this.bestQuoteStrategy = bestQuoteStrategy } - private get provider(): BridgeProvider { - const { providers } = this.config - - if (!providers[0]) { - throw new BridgeProviderError('No provider found', { config: this.config }) - } - - return providers[0] + setAvailableProviders(ids: string[]) { + this.availableProvidersIds = ids } /** * Get the providers for the bridging. */ - getProviders(): BridgeProvider[] { - return this.config.providers + getAvailableProviders(): DefaultBridgeProvider[] { + if (this.availableProvidersIds.length === 0) { + return this.config.providers + } + + return this.config.providers.filter((provider) => this.availableProvidersIds.includes(provider.info.dappId)) } /** @@ -122,7 +122,25 @@ export class BridgingSdk { * Get the available target networks for the bridging. */ async getTargetNetworks(): Promise { - return this.provider.getNetworks() + const providers = this.getAvailableProviders() + + const results = await Promise.race([ + Promise.allSettled(providers.map((provider) => provider.getNetworks())), + createBridgeRequestTimeoutPromise( + DEFAULT_MULTI_PROVIDER_REQUEST_TIMEOUT, + `Multi-provider getTargetNetworks with ${providers.length}`, + ), + ]) + + return results.reduce((acc, result) => { + if (result.status === 'fulfilled') { + const networksToAdd = (result.value || []).filter((network) => !acc.includes(network)) + + return acc.concat(networksToAdd) + } + + return acc + }, []) } /** @@ -131,26 +149,39 @@ export class BridgingSdk { * @param params */ async getBuyTokens(params: BuyTokensParams): Promise { - const providerId = this.provider.info.dappId - - const cacheKey = getCacheKey({ - id: providerId, - buyChainId: params.buyChainId.toString(), - sellChainId: params.sellChainId?.toString(), - tokenAddress: params.sellTokenAddress, - }) - - const cached = this.cacheConfig.enabled && this.buyTokensCache.get(cacheKey) - - if (cached) { - return cached - } - - const result = await this.provider.getBuyTokens(params) - if (this.cacheConfig.enabled) { - this.buyTokensCache.set(cacheKey, result) - } - return result + const providers = this.getAvailableProviders() + + const results = await Promise.race([ + Promise.allSettled(providers.map((provider) => this.getBuyTokensFromProvider(provider, params))), + createBridgeRequestTimeoutPromise( + DEFAULT_MULTI_PROVIDER_REQUEST_TIMEOUT, + `Multi-provider getBuyTokens with ${providers.length}`, + ), + ]) + + const isRouteAvailable = results.reduce((isRouteAvailable, result) => { + if (result.status === 'fulfilled' && result.value.isRouteAvailable) { + return true + } + + return isRouteAvailable + }, false) + + const tokens = results.reduce((tokens, result) => { + if (result.status === 'fulfilled' && result.value.tokens) { + result.value.tokens.forEach((token) => { + const addressLower = token.address.toLowerCase() + + if (!tokens.get(addressLower)) { + tokens.set(addressLower, token) + } + }) + } + + return tokens + }, new Map()) + + return { isRouteAvailable, tokens: [...tokens.values()] } } /** @@ -177,7 +208,8 @@ export class BridgingSdk { quoteBridgeRequest, advancedSettings, }, - this.config, + this.config.tradingSdk, + this.getAvailableProviders(), ) } @@ -197,7 +229,7 @@ export class BridgingSdk { * ``` */ async getMultiQuotes(request: MultiQuoteRequest): Promise { - return this.multiQuoteStrategy.execute(request, this.config) + return this.multiQuoteStrategy.execute(request, this.config.tradingSdk, this.getAvailableProviders()) } /** @@ -216,7 +248,7 @@ export class BridgingSdk { * @throws Error if the request is for a single-chain swap (sellTokenChainId === buyTokenChainId) */ async getBestQuote(request: MultiQuoteRequest): Promise { - return this.bestQuoteStrategy.execute(request, this.config) + return this.bestQuoteStrategy.execute(request, this.config.tradingSdk, this.getAvailableProviders()) } async getOrder(params: GetOrderParams): Promise { @@ -229,16 +261,12 @@ export class BridgingSdk { orderId, orderBookApi, env, - providers: this.config.providers, + providers: this.getAvailableProviders(), }) } - async getOrderBridgingStatus(bridgingId: string, originChainId: SupportedChainId): Promise { - return this.provider.getStatus(bridgingId, originChainId) - } - - getProviderFromAppData(fullAppData: string): BridgeProvider | undefined { - return findBridgeProviderFromHook(fullAppData, this.getProviders()) + getProviderFromAppData(fullAppData: string): DefaultBridgeProvider | undefined { + return findBridgeProviderFromHook(fullAppData, this.getAvailableProviders()) } /** @@ -267,7 +295,33 @@ export class BridgingSdk { } } - getProviderByDappId(dappId: string): BridgeProvider | undefined { - return this.config.providers.find((provider) => provider.info.dappId === dappId) + getProviderByDappId(dappId: string): DefaultBridgeProvider | undefined { + return this.getAvailableProviders().find((provider) => provider.info.dappId === dappId) + } + + private async getBuyTokensFromProvider( + provider: DefaultBridgeProvider, + params: BuyTokensParams, + ): Promise { + const providerId = provider.info.dappId + + const cacheKey = getCacheKey({ + id: providerId, + buyChainId: params.buyChainId.toString(), + sellChainId: params.sellChainId?.toString(), + tokenAddress: params.sellTokenAddress, + }) + + const cached = this.cacheConfig.enabled && this.buyTokensCache.get(cacheKey) + + if (cached) { + return cached + } + + const result = await provider.getBuyTokens(params) + if (this.cacheConfig.enabled) { + this.buyTokensCache.set(cacheKey, result) + } + return result } } diff --git a/packages/bridging/src/BridgingSdk/findBridgeProviderFromHook.ts b/packages/bridging/src/BridgingSdk/findBridgeProviderFromHook.ts index 2bcd07b74..eb01f6ff5 100644 --- a/packages/bridging/src/BridgingSdk/findBridgeProviderFromHook.ts +++ b/packages/bridging/src/BridgingSdk/findBridgeProviderFromHook.ts @@ -1,23 +1,29 @@ +import type { cowAppDataLatestScheme } from '@cowprotocol/sdk-app-data' import { getPostHooks } from '../utils' import { HOOK_DAPP_BRIDGE_PROVIDER_PREFIX } from '../const' -import { BridgeProvider, BridgeQuoteResult } from '../types' +import type { BridgeProvider, BridgeQuoteResult } from '../types' export function findBridgeProviderFromHook( fullAppData: string, providers: BridgeProvider[], ): BridgeProvider | undefined { - const postHooks = getPostHooks(fullAppData) + const appDataObj = JSON.parse(fullAppData) + let bridgeProviderDappId = (appDataObj as cowAppDataLatestScheme.AppDataRootSchema)?.metadata?.bridging?.providerId - // Assuming we only have one bridging hook - const bridgingHook = postHooks.find((hook) => { - return hook.dappId?.startsWith(HOOK_DAPP_BRIDGE_PROVIDER_PREFIX) - }) + if (!bridgeProviderDappId) { + const postHooks = getPostHooks(appDataObj) - if (!bridgingHook) { - return undefined + // Assuming we only have one bridging hook + const bridgingHook = postHooks.find((hook) => { + return hook.dappId?.startsWith(HOOK_DAPP_BRIDGE_PROVIDER_PREFIX) + }) + + if (!bridgingHook) { + return undefined + } + // Bridge provider would be the last part of the dappId + bridgeProviderDappId = bridgingHook.dappId } - // Bridge provider would be the last part of the dappId - const bridgeProviderDappId = bridgingHook.dappId // Find the provider by name (note that I could just have use this.provider, but just wanted to leave it ready in case we implement multiple providers) return providers.find((provider) => provider.info.dappId === bridgeProviderDappId) diff --git a/packages/bridging/src/BridgingSdk/getCrossChainOrder.ts b/packages/bridging/src/BridgingSdk/getCrossChainOrder.ts index cba21bdb9..530f75404 100644 --- a/packages/bridging/src/BridgingSdk/getCrossChainOrder.ts +++ b/packages/bridging/src/BridgingSdk/getCrossChainOrder.ts @@ -49,7 +49,7 @@ export async function getCrossChainOrder(params: GetCrossChainOrderParams): Prom // Get bridging id for this order const { params: bridgingParams, status: statusResult } = - (await provider.getBridgingParams(chainId, orderId, tradeTxHash)) || {} + (await provider.getBridgingParams(chainId, order, tradeTxHash)) || {} if (!bridgingParams || !statusResult) { throw new BridgeOrderParsingError(`Bridging params cannot be derived from transaction: ${tradeTxHash}`) diff --git a/packages/bridging/src/BridgingSdk/getIntermediateSwapResult.ts b/packages/bridging/src/BridgingSdk/getIntermediateSwapResult.ts index 2690046eb..51c825d5a 100644 --- a/packages/bridging/src/BridgingSdk/getIntermediateSwapResult.ts +++ b/packages/bridging/src/BridgingSdk/getIntermediateSwapResult.ts @@ -90,7 +90,6 @@ export async function getIntermediateSwapResult({ : advancedSettingsHooks // Prepare advanced settings with optional hook - const finalAdvancedSettings: SwapAdvancedSettings = { ...advancedSettings, appData: { @@ -98,6 +97,7 @@ export async function getIntermediateSwapResult({ metadata: { hooks, bridging: { + providerId: provider.info.dappId, destinationChainId: buyTokenChainId.toString(), destinationTokenAddress: buyTokenAddress, }, @@ -149,7 +149,10 @@ async function getIntermediateTokens(params: { intermediateTokens = cached } else { intermediateTokens = await provider.getIntermediateTokens(quoteBridgeRequest) - intermediateTokensCache?.set(cacheKey, intermediateTokens) + + if (intermediateTokens?.length) { + intermediateTokensCache?.set(cacheKey, intermediateTokens) + } } if (intermediateTokens.length === 0) { diff --git a/packages/bridging/src/BridgingSdk/getQuoteWithBridge.test.ts b/packages/bridging/src/BridgingSdk/getQuoteWithBridge.test.ts index e92652f5e..c07f0b310 100644 --- a/packages/bridging/src/BridgingSdk/getQuoteWithBridge.test.ts +++ b/packages/bridging/src/BridgingSdk/getQuoteWithBridge.test.ts @@ -1,5 +1,6 @@ import { getEthFlowContract, TradingSdk } from '@cowprotocol/sdk-trading' import { MockHookBridgeProvider } from '../providers/mock/HookMockBridgeProvider' +import { MockReceiverAccountBridgeProvider } from '../providers/mock/ReceiverAccountMockBridgeProvider' import { QuoteBridgeRequest } from '../types' import { getQuoteWithBridge } from './getQuoteWithBridge' import { @@ -257,3 +258,192 @@ adapterNames.forEach((adapterName) => { }) }) }) + +describe('createPostSwapOrderFromQuote with ReceiverAccountBridgeProvider', () => { + const adapters = createAdapters() + const adapterNames = Object.keys(adapters) as Array + + adapterNames.forEach((adapterName) => { + describe(`with ${adapterName}`, () => { + let tradingSdk: TradingSdk + let orderBookApi: OrderBookApi + let mockProvider: MockReceiverAccountBridgeProvider + let signerMock: AbstractSigner + let getQuoteMock: jest.Mock + let sendOrderMock: jest.Mock + let uploadAppDataMock: jest.Mock + + beforeEach(() => { + const adapter = adapters[adapterName] + + setGlobalAdapter(adapter) + + signerMock = getMockSigner(adapter) + + quoteBridgeRequest.signer = signerMock + + jest.clearAllMocks() + + // Clear localStorage for clean test state + if (typeof localStorage !== 'undefined') { + localStorage.clear() + } + + mockProvider = new MockReceiverAccountBridgeProvider() + mockProvider.getQuote = getQuoteMock = jest.fn().mockResolvedValue(bridgeQuoteResult) + + sendOrderMock = jest.fn().mockResolvedValue('0x01') + uploadAppDataMock = jest.fn().mockResolvedValue('0xappDataHash123') + orderBookApi = { + context: { + chainId: SupportedChainId.GNOSIS_CHAIN, + }, + getQuote: jest.fn().mockResolvedValue(orderQuoteResponse), + uploadAppData: uploadAppDataMock, + sendOrder: sendOrderMock, + } as unknown as OrderBookApi + + tradingSdk = new TradingSdk({}, { orderBookApi }) + }) + + it('should override appDataInfo with advancedSettings.appData when provided', async () => { + const { postSwapOrderFromQuote } = await getQuoteWithBridge(mockProvider, { + swapAndBridgeRequest: quoteBridgeRequest, + tradingSdk, + }) + + const customAppData = { + metadata: { + quote: { + slippageBips: 100, + }, + referrer: { + address: '0x1234567890123456789012345678901234567890', + }, + }, + } + + await postSwapOrderFromQuote({ + appData: customAppData, + }) + + // Verify that sendOrder was called + expect(sendOrderMock).toHaveBeenCalledTimes(1) + + // Verify that the order's appData includes the custom metadata + const sendOrderCall = sendOrderMock.mock.calls[0][0] + const orderAppData = JSON.parse(sendOrderCall.appData) + + // Should have the custom metadata merged + expect(orderAppData.metadata.quote.slippageBips).toBe(100) + expect(orderAppData.metadata.referrer.address).toBe('0x1234567890123456789012345678901234567890') + + // Verify that getQuote was NOT called again (skipQuoteRefetch = true for ReceiverAccountBridgeProvider) + expect(getQuoteMock).toHaveBeenCalledTimes(1) // Only the initial call + }) + + it('should use initial appDataInfo when no advancedSettings.appData is provided', async () => { + const { postSwapOrderFromQuote, swap } = await getQuoteWithBridge(mockProvider, { + swapAndBridgeRequest: quoteBridgeRequest, + tradingSdk, + }) + + const initialAppData = swap.appDataInfo.doc + + await postSwapOrderFromQuote() + + // Verify that sendOrder was called + expect(sendOrderMock).toHaveBeenCalledTimes(1) + + // Verify that the order's appData matches the initial appData + const sendOrderCall = sendOrderMock.mock.calls[0][0] + const orderAppData = JSON.parse(sendOrderCall.appData) + + // Should have the same structure as initial appData + expect(orderAppData.appCode).toBe(initialAppData.appCode) + expect(orderAppData.version).toBe(initialAppData.version) + + // Verify that getQuote was NOT called again + expect(getQuoteMock).toHaveBeenCalledTimes(1) + }) + + it('should merge advancedSettings.appData with initial appDataInfo correctly', async () => { + const { postSwapOrderFromQuote } = await getQuoteWithBridge(mockProvider, { + swapAndBridgeRequest: quoteBridgeRequest, + tradingSdk, + }) + + const customAppData = { + metadata: { + orderClass: { + orderClass: 'limit' as const, + }, + utm: { + utmSource: 'test-source', + utmMedium: 'test-medium', + utmCampaign: 'test-campaign', + }, + }, + } + + await postSwapOrderFromQuote({ + appData: customAppData, + }) + + // Verify that sendOrder was called + expect(sendOrderMock).toHaveBeenCalledTimes(1) + + // Verify that the merged appData contains both initial and custom metadata + const sendOrderCall = sendOrderMock.mock.calls[0][0] + const orderAppData = JSON.parse(sendOrderCall.appData) + + // Should have the custom metadata + expect(orderAppData.metadata.orderClass.orderClass).toBe('limit') + expect(orderAppData.metadata.utm.utmSource).toBe('test-source') + expect(orderAppData.metadata.utm.utmMedium).toBe('test-medium') + expect(orderAppData.metadata.utm.utmCampaign).toBe('test-campaign') + + // Should preserve the initial appCode and version + expect(orderAppData.appCode).toBeDefined() + expect(orderAppData.version).toBeDefined() + }) + + it('should not refetch quote when using ReceiverAccountBridgeProvider', async () => { + const { postSwapOrderFromQuote } = await getQuoteWithBridge(mockProvider, { + swapAndBridgeRequest: quoteBridgeRequest, + tradingSdk, + }) + + const customAppData = { + metadata: { + quote: { + slippageBips: 200, + }, + }, + } + + // Call postSwapOrderFromQuote with custom appData + await postSwapOrderFromQuote({ + appData: customAppData, + }) + + // Verify getQuote was only called once (during initial quote, not during post) + expect(getQuoteMock).toHaveBeenCalledTimes(1) + + // Call again with different appData + await postSwapOrderFromQuote({ + appData: { + metadata: { + quote: { + slippageBips: 300, + }, + }, + }, + }) + + // Still should be called only once + expect(getQuoteMock).toHaveBeenCalledTimes(1) + }) + }) + }) +}) diff --git a/packages/bridging/src/BridgingSdk/getQuoteWithBridge.ts b/packages/bridging/src/BridgingSdk/getQuoteWithBridge.ts index f8cc7f537..65d76ba1e 100644 --- a/packages/bridging/src/BridgingSdk/getQuoteWithBridge.ts +++ b/packages/bridging/src/BridgingSdk/getQuoteWithBridge.ts @@ -21,6 +21,7 @@ import { HookBridgeProvider, ReceiverAccountBridgeProvider as AccountBridgeProvider, BridgeHook, + DefaultBridgeProvider, } from '../types' import { GetQuoteWithBridgeParams } from './types' import { getBridgeSignedHook } from './getBridgeSignedHook' @@ -54,6 +55,7 @@ export async function getQuoteWithBridge( } export interface CreatePostSwapOrderFromQuoteParams { + provider: DefaultBridgeProvider getBridgeProviderQuote: ( signer: SignerLike, advancedSettings?: SwapAdvancedSettings, @@ -61,6 +63,7 @@ export interface CreatePostSwapOrderFromQuoteParams { signer: SignerLike sellTokenAddress: string orderBookApi: OrderBookApi + initialSwapResult: QuoteResults } /** @@ -69,10 +72,10 @@ export interface CreatePostSwapOrderFromQuoteParams { * @param params * @returns */ -function createPostSwapOrderFromQuote( +export function createPostSwapOrderFromQuote( params: CreatePostSwapOrderFromQuoteParams, ): BridgeQuoteAndPost['postSwapOrderFromQuote'] { - const { getBridgeProviderQuote, signer, sellTokenAddress, orderBookApi } = params + const { provider, getBridgeProviderQuote, signer, sellTokenAddress, orderBookApi, initialSwapResult } = params return async function postSwapOrderFromQuote( advancedSettings?: SwapAdvancedSettings, @@ -80,11 +83,26 @@ function createPostSwapOrderFromQuote( ) { await signingStepManager?.beforeBridgingSign?.() - // Sign the hooks with the real signer - const { swapResult } = await getBridgeProviderQuote(signer, advancedSettings).catch((error) => { - signingStepManager?.onBridgingSignError?.() - throw error - }) + const skipQuoteRefetch = isReceiverAccountBridgeProvider(provider) + + const appDataOverride = advancedSettings?.appData + const appDataInfo = + appDataOverride && skipQuoteRefetch + ? await mergeAppDataDoc(initialSwapResult.appDataInfo.doc, appDataOverride) + : initialSwapResult.appDataInfo + + const swapResult: QuoteResults = skipQuoteRefetch + ? { + ...initialSwapResult, + appDataInfo, + } + : // Sign the hooks with the real signer + ( + await getBridgeProviderQuote(signer, advancedSettings).catch((error) => { + signingStepManager?.onBridgingSignError?.() + throw error + }) + ).swapResult await signingStepManager?.afterBridgingSign?.() @@ -170,10 +188,12 @@ export async function getQuoteWithReceiverAccountBridge( signer, sellTokenAddress: swapAndBridgeRequest.sellTokenAddress, orderBookApi, + provider, + initialSwapResult: result.swapResult, }), } } diff --git a/packages/bridging/src/BridgingSdk/strategies/BestQuoteStrategy.test.ts b/packages/bridging/src/BridgingSdk/strategies/BestQuoteStrategy.test.ts index d2a6a6eec..fccea0dc1 100644 --- a/packages/bridging/src/BridgingSdk/strategies/BestQuoteStrategy.test.ts +++ b/packages/bridging/src/BridgingSdk/strategies/BestQuoteStrategy.test.ts @@ -24,7 +24,7 @@ const adapters = createAdapters() const adapterNames = Object.keys(adapters) as Array adapterNames.forEach((adapterName) => { - describe.skip(`BestQuoteStrategy with ${adapterName}`, () => { + describe(`BestQuoteStrategy with ${adapterName}`, () => { let strategy: BestQuoteStrategy let config: BridgingSdkConfig let tradingSdk: TradingSdk @@ -122,7 +122,7 @@ adapterNames.forEach((adapterName) => { } }) - describe.skip('execute', () => { + describe('execute', () => { it('should return the best quote from all providers', async () => { const request = { quoteBridgeRequest, @@ -131,7 +131,7 @@ adapterNames.forEach((adapterName) => { options: undefined, } - const result = await strategy.execute(request, config) + const result = await strategy.execute(request, config.tradingSdk, config.providers) expect(result).toBeTruthy() expect(result?.providerDappId).toBe('cow-sdk://bridging/providers/mock3') @@ -145,15 +145,15 @@ adapterNames.forEach((adapterName) => { it('should return specific provider quote when only that provider is requested', async () => { const request = { quoteBridgeRequest, - providerDappIds: ['mockProvider'], + providerDappIds: ['dapp-id-MockHookBridgeProvider'], advancedSettings: undefined, options: undefined, } - const result = await strategy.execute(request, config) + const result = await strategy.execute(request, config.tradingSdk, config.providers) expect(result).toBeTruthy() - expect(result?.providerDappId).toBe('mockProvider') + expect(result?.providerDappId).toBe('dapp-id-MockHookBridgeProvider') expect(result?.quote).toBeTruthy() // Verify only the requested provider was called @@ -175,7 +175,7 @@ adapterNames.forEach((adapterName) => { options: { onQuoteResult }, } - const result = await strategy.execute(request, config) + const result = await strategy.execute(request, config.tradingSdk, config.providers) // Should have received callbacks for better quotes only expect(onQuoteResult).toHaveBeenCalled() @@ -212,15 +212,17 @@ adapterNames.forEach((adapterName) => { options: undefined, } - const result = await strategy.execute(request, config) + const result = await strategy.execute(request, config.tradingSdk, config.providers) expect(result).toBeTruthy() expect(result?.quote).toBeNull() expect(result?.error).toBeTruthy() // Should return first provider's error (order is not guaranteed due to async) - expect(['mockProvider', 'cow-sdk://bridging/providers/mock2', 'cow-sdk://bridging/providers/mock3']).toContain( - result?.providerDappId, - ) + expect([ + 'dapp-id-MockHookBridgeProvider', + 'cow-sdk://bridging/providers/mock2', + 'cow-sdk://bridging/providers/mock3', + ]).toContain(result?.providerDappId) }) it('should return best available quote even when some providers fail', async () => { @@ -236,7 +238,7 @@ adapterNames.forEach((adapterName) => { options: undefined, } - const result = await strategy.execute(request, config) + const result = await strategy.execute(request, config.tradingSdk, config.providers) expect(result).toBeTruthy() expect(result?.providerDappId).toBe('cow-sdk://bridging/providers/mock3') @@ -256,7 +258,7 @@ adapterNames.forEach((adapterName) => { options: undefined, } - await expect(strategy.execute(request, config)).rejects.toThrow( + await expect(strategy.execute(request, config.tradingSdk, config.providers)).rejects.toThrow( 'getMultiQuotes() and getBestQuote() are only for cross-chain bridging', ) }) @@ -276,7 +278,7 @@ adapterNames.forEach((adapterName) => { options: { onQuoteResult }, } - const result = await strategy.execute(request, config) + const result = await strategy.execute(request, config.tradingSdk, config.providers) // Quote should still succeed despite callback error expect(result).toBeTruthy() @@ -353,7 +355,7 @@ adapterNames.forEach((adapterName) => { }, } - const resultPromise = strategy.execute(request, config) + const resultPromise = strategy.execute(request, config.tradingSdk, config.providers) // Advance timers past the fast provider delay but before slow providers jest.advanceTimersByTime(50) @@ -362,7 +364,7 @@ adapterNames.forEach((adapterName) => { // Should still return the quote from the fast provider expect(result).toBeTruthy() - expect(result?.providerDappId).toBe('mockProvider') + expect(result?.providerDappId).toBe('dapp-id-MockHookBridgeProvider') jest.useRealTimers() }) @@ -375,8 +377,8 @@ adapterNames.forEach((adapterName) => { options: undefined, } - await expect(strategy.execute(request, config)).rejects.toThrow( - "Provider with dappId 'unknown-provider' not found. Available providers: mockProvider, cow-sdk://bridging/providers/mock2, cow-sdk://bridging/providers/mock3", + await expect(strategy.execute(request, config.tradingSdk, config.providers)).rejects.toThrow( + "Provider with dappId 'unknown-provider' not found. Available providers: dapp-id-MockHookBridgeProvider, cow-sdk://bridging/providers/mock2, cow-sdk://bridging/providers/mock3", ) }) @@ -391,13 +393,15 @@ adapterNames.forEach((adapterName) => { }, } - const result = await strategy.execute(request, config) + const result = await strategy.execute(request, config.tradingSdk, config.providers) expect(result).toBeTruthy() expect(result?.quote).toBeTruthy() }) - it('should handle mixed provider speeds correctly', async () => { + it( + 'should handle mixed provider speeds correctly', + async () => { // Fast provider with good quote mockProvider.getQuote = jest.fn().mockImplementation(async () => { await new Promise((resolve) => setTimeout(resolve, 20)) // 20ms delay @@ -459,7 +463,7 @@ adapterNames.forEach((adapterName) => { }, } - const result = await strategy.execute(request, config) + const result = await strategy.execute(request, config.tradingSdk, config.providers) // Should get the best available quote from completed providers (mock2 with 70 ETH) expect(result).toBeTruthy() @@ -470,7 +474,7 @@ adapterNames.forEach((adapterName) => { expect(progressiveResults.length).toBeGreaterThanOrEqual(1) // First callback should be from fast provider (mockProvider with 50 ETH) - expect(progressiveResults[0]?.providerDappId).toBe('mockProvider') + expect(progressiveResults[0]?.providerDappId).toBe('dapp-id-MockHookBridgeProvider') expect(progressiveResults[0]?.quote?.bridge.amountsAndCosts.afterSlippage.buyAmount).toBe( BigInt('50000000000000000000'), ) @@ -482,10 +486,12 @@ adapterNames.forEach((adapterName) => { BigInt('70000000000000000000'), ) } - }) + }, + 10000, + ) // 10 second timeout for this test }) - describe.skip('strategyName', () => { + describe('strategyName', () => { it('should have the correct strategy name', () => { expect(strategy.strategyName).toBe('BestQuoteStrategy') }) diff --git a/packages/bridging/src/BridgingSdk/strategies/BestQuoteStrategy.ts b/packages/bridging/src/BridgingSdk/strategies/BestQuoteStrategy.ts index 285670ebd..35d912121 100644 --- a/packages/bridging/src/BridgingSdk/strategies/BestQuoteStrategy.ts +++ b/packages/bridging/src/BridgingSdk/strategies/BestQuoteStrategy.ts @@ -1,9 +1,9 @@ import { TTLCache } from '@cowprotocol/sdk-common' import { TokenInfo } from '@cowprotocol/sdk-config' -import { MultiQuoteResult, BestQuoteProviderContext } from '../../types' -import { BridgingSdkConfig } from '../types' +import { MultiQuoteResult, BestQuoteProviderContext, DefaultBridgeProvider } from '../../types' +import { TradingSdk } from '@cowprotocol/sdk-trading' import { - createBridgeQuoteTimeoutPromise, + createBridgeRequestTimeoutPromise, executeProviderQuotes, isBetterQuote, resolveProvidersToQuery, @@ -27,7 +27,11 @@ export class BestQuoteStrategy extends BaseBestQuoteStrategy { super(intermediateTokensCache) } - async execute(request: MultiQuoteRequest, config: BridgingSdkConfig): Promise { + async execute( + request: MultiQuoteRequest, + tradingSdk: TradingSdk, + providers: DefaultBridgeProvider[], + ): Promise { const { quoteBridgeRequest, providerDappIds, advancedSettings, options } = request const { sellTokenChainId, buyTokenChainId } = quoteBridgeRequest @@ -35,7 +39,7 @@ export class BestQuoteStrategy extends BaseBestQuoteStrategy { validateCrossChainRequest(sellTokenChainId, buyTokenChainId) // Determine which providers to query - const providersToQuery = resolveProvidersToQuery(providerDappIds, config.providers) + const providersToQuery = resolveProvidersToQuery(providerDappIds, providers) // Extract options with defaults const { @@ -61,18 +65,18 @@ export class BestQuoteStrategy extends BaseBestQuoteStrategy { firstError, } - const promise = this.createBestQuoteProviderPromise(context, config) + const promise = this.createBestQuoteProviderPromise(context, tradingSdk) promises.push(promise) } // Execute all provider quotes with timeout handling - await executeProviderQuotes(promises, totalTimeout, config) + await executeProviderQuotes(promises, totalTimeout, providers) // Return best result if available, otherwise return first error return bestResult.current || firstError.current } - private createBestQuoteProviderPromise(context: BestQuoteProviderContext, config: BridgingSdkConfig): Promise { + private createBestQuoteProviderPromise(context: BestQuoteProviderContext, tradingSdk: TradingSdk): Promise { const { provider, quoteBridgeRequest, advancedSettings, providerTimeout, onQuoteResult, bestResult, firstError } = context @@ -81,7 +85,7 @@ export class BestQuoteStrategy extends BaseBestQuoteStrategy { const baseParams = { swapAndBridgeRequest: quoteBridgeRequest, advancedSettings, - tradingSdk: config.tradingSdk, + tradingSdk, provider, quoteSigner: advancedSettings?.quoteSigner, } as const @@ -96,7 +100,7 @@ export class BestQuoteStrategy extends BaseBestQuoteStrategy { // Race between the actual quote request and the provider timeout const quote = await Promise.race([ getQuoteWithBridge(provider, request), - createBridgeQuoteTimeoutPromise(providerTimeout, `Provider ${provider.info.dappId}`), + createBridgeRequestTimeoutPromise(providerTimeout, `Provider ${provider.info.dappId}`), ]) const result: MultiQuoteResult = { diff --git a/packages/bridging/src/BridgingSdk/strategies/MultiQuoteStrategy.test.ts b/packages/bridging/src/BridgingSdk/strategies/MultiQuoteStrategy.test.ts index d94326ef2..207a8f2dc 100644 --- a/packages/bridging/src/BridgingSdk/strategies/MultiQuoteStrategy.test.ts +++ b/packages/bridging/src/BridgingSdk/strategies/MultiQuoteStrategy.test.ts @@ -106,7 +106,7 @@ adapterNames.forEach((adapterName) => { options: undefined, } - const results = await strategy.execute(request, config) + const results = await strategy.execute(request, config.tradingSdk, config.providers) expect(results).toHaveLength(3) expect(results[0]?.providerDappId).toBe('dapp-id-MockHookBridgeProvider') @@ -133,7 +133,7 @@ adapterNames.forEach((adapterName) => { options: undefined, } - const results = await strategy.execute(request, config) + const results = await strategy.execute(request, config.tradingSdk, config.providers) expect(results).toHaveLength(2) expect(results[0]?.providerDappId).toBe('dapp-id-MockHookBridgeProvider') @@ -162,7 +162,7 @@ adapterNames.forEach((adapterName) => { options: undefined, } - const results = await strategy.execute(request, config) + const results = await strategy.execute(request, config.tradingSdk, config.providers) expect(results).toHaveLength(3) @@ -198,7 +198,7 @@ adapterNames.forEach((adapterName) => { options: undefined, } - await expect(strategy.execute(request, config)).rejects.toThrow( + await expect(strategy.execute(request, config.tradingSdk, config.providers)).rejects.toThrow( 'getMultiQuotes() and getBestQuote() are only for cross-chain bridging. For single-chain swaps, use getQuote() instead.', ) }) @@ -211,7 +211,7 @@ adapterNames.forEach((adapterName) => { options: undefined, } - await expect(strategy.execute(request, config)).rejects.toThrow( + await expect(strategy.execute(request, config.tradingSdk, config.providers)).rejects.toThrow( "Provider with dappId 'unknown-provider' not found. Available providers: dapp-id-MockHookBridgeProvider, cow-sdk://bridging/providers/mock2, cow-sdk://bridging/providers/mock3", ) }) @@ -231,7 +231,7 @@ adapterNames.forEach((adapterName) => { options: undefined, } - await strategy.execute(request, config) + await strategy.execute(request, config.tradingSdk, config.providers) // Verify advanced settings were passed through expect(tradingSdk.getQuoteResults).toHaveBeenCalledWith( @@ -281,7 +281,7 @@ adapterNames.forEach((adapterName) => { options: undefined, } - const executePromise = strategy.execute(request, config) + const executePromise = strategy.execute(request, config.tradingSdk, config.providers) // Verify both providers are called immediately (parallel start) await jest.advanceTimersByTimeAsync(0) // Allow microtasks to run @@ -313,7 +313,7 @@ adapterNames.forEach((adapterName) => { options: undefined, } - const results = await strategy.execute(request, config) + const results = await strategy.execute(request, config.tradingSdk, config.providers) expect(results).toHaveLength(1) const result = results[0] @@ -353,7 +353,7 @@ adapterNames.forEach((adapterName) => { }, } - const results = await strategy.execute(request, config) + const results = await strategy.execute(request, config.tradingSdk, config.providers) // Should have received 2 progressive callbacks expect(onQuoteResult).toHaveBeenCalledTimes(2) @@ -386,7 +386,7 @@ adapterNames.forEach((adapterName) => { }, } - const results = await strategy.execute(request, config) + const results = await strategy.execute(request, config.tradingSdk, config.providers) // Quote should still succeed despite callback error expect(results).toHaveLength(1) @@ -426,7 +426,7 @@ adapterNames.forEach((adapterName) => { }, } - const executePromise = strategy.execute(request, config) + const executePromise = strategy.execute(request, config.tradingSdk, config.providers) // Advance time to complete fast provider (10ms) await jest.advanceTimersByTimeAsync(10) @@ -488,7 +488,7 @@ adapterNames.forEach((adapterName) => { }, } - const executePromise = strategy.execute(request, config) + const executePromise = strategy.execute(request, config.tradingSdk, config.providers) // Advance time to complete second provider first (50ms) await jest.advanceTimersByTimeAsync(50) @@ -527,7 +527,7 @@ adapterNames.forEach((adapterName) => { }, } - await strategy.execute(request, config) + await strategy.execute(request, config.tradingSdk, config.providers) expect(progressiveResults).toHaveLength(2) @@ -551,7 +551,7 @@ adapterNames.forEach((adapterName) => { options: undefined, } - const results = await strategy.execute(request, config) + const results = await strategy.execute(request, config.tradingSdk, config.providers) expect(results).toHaveLength(3) results.forEach((result) => { @@ -571,7 +571,7 @@ adapterNames.forEach((adapterName) => { }, } - const results = await strategy.execute(request, config) + const results = await strategy.execute(request, config.tradingSdk, config.providers) expect(results).toHaveLength(3) }) @@ -616,7 +616,7 @@ adapterNames.forEach((adapterName) => { }, } - const executePromise = strategy.execute(request, testConfig) + const executePromise = strategy.execute(request, testConfig.tradingSdk, testConfig.providers) // Advance time to complete fast provider (10ms) await jest.advanceTimersByTimeAsync(10) @@ -654,7 +654,7 @@ adapterNames.forEach((adapterName) => { }, } - const results = await strategy.execute(request, config) + const results = await strategy.execute(request, config.tradingSdk, config.providers) expect(results).toHaveLength(3) results.forEach((result) => { diff --git a/packages/bridging/src/BridgingSdk/strategies/MultiQuoteStrategy.ts b/packages/bridging/src/BridgingSdk/strategies/MultiQuoteStrategy.ts index bdff9c92d..ebec043ac 100644 --- a/packages/bridging/src/BridgingSdk/strategies/MultiQuoteStrategy.ts +++ b/packages/bridging/src/BridgingSdk/strategies/MultiQuoteStrategy.ts @@ -1,9 +1,9 @@ import { TTLCache } from '@cowprotocol/sdk-common' import { TokenInfo } from '@cowprotocol/sdk-config' -import { MultiQuoteResult, ProviderQuoteContext } from '../../types' -import { BridgingSdkConfig } from '../types' +import { DefaultBridgeProvider, MultiQuoteResult, ProviderQuoteContext } from '../../types' +import { TradingSdk } from '@cowprotocol/sdk-trading' import { - createBridgeQuoteTimeoutPromise, + createBridgeRequestTimeoutPromise, executeProviderQuotes, fillTimeoutResults, isBetterQuote, @@ -28,7 +28,11 @@ export class MultiQuoteStrategy extends BaseMultiQuoteStrategy { super(intermediateTokensCache) } - async execute(request: MultiQuoteRequest, config: BridgingSdkConfig): Promise { + async execute( + request: MultiQuoteRequest, + tradingSdk: TradingSdk, + providers: DefaultBridgeProvider[], + ): Promise { const { quoteBridgeRequest, providerDappIds, advancedSettings, options } = request const { sellTokenChainId, buyTokenChainId } = quoteBridgeRequest @@ -36,7 +40,7 @@ export class MultiQuoteStrategy extends BaseMultiQuoteStrategy { validateCrossChainRequest(sellTokenChainId, buyTokenChainId) // Determine which providers to query - const providersToQuery = resolveProvidersToQuery(providerDappIds, config.providers) + const providersToQuery = resolveProvidersToQuery(providerDappIds, providers) // Extract options with defaults const { @@ -66,12 +70,12 @@ export class MultiQuoteStrategy extends BaseMultiQuoteStrategy { index: i, } - const promise = this.createProviderQuotePromise(context, config) + const promise = this.createProviderQuotePromise(context, tradingSdk) promises.push(promise) } // Execute all provider quotes with timeout handling - await executeProviderQuotes(promises, totalTimeout, config) + await executeProviderQuotes(promises, totalTimeout, providers) // Ensure we have a result for each provider (fill with timeout errors if needed) fillTimeoutResults(results, providersToQuery) @@ -87,7 +91,7 @@ export class MultiQuoteStrategy extends BaseMultiQuoteStrategy { return results } - private createProviderQuotePromise(context: ProviderQuoteContext, config: BridgingSdkConfig): Promise { + private createProviderQuotePromise(context: ProviderQuoteContext, tradingSdk: TradingSdk): Promise { const { provider, quoteBridgeRequest, advancedSettings, providerTimeout, onQuoteResult, results, index } = context return (async (): Promise => { @@ -95,7 +99,7 @@ export class MultiQuoteStrategy extends BaseMultiQuoteStrategy { const baseParams = { swapAndBridgeRequest: quoteBridgeRequest, advancedSettings, - tradingSdk: config.tradingSdk, + tradingSdk, quoteSigner: advancedSettings?.quoteSigner, } as const @@ -109,7 +113,7 @@ export class MultiQuoteStrategy extends BaseMultiQuoteStrategy { // Race between the actual quote request and the provider timeout const quote = await Promise.race([ getQuoteWithBridge(provider, request), - createBridgeQuoteTimeoutPromise(providerTimeout, `Provider ${provider.info.dappId}`), + createBridgeRequestTimeoutPromise(providerTimeout, `Provider ${provider.info.dappId}`), ]) const result: MultiQuoteResult = { diff --git a/packages/bridging/src/BridgingSdk/strategies/QuoteStrategy.ts b/packages/bridging/src/BridgingSdk/strategies/QuoteStrategy.ts index 677cc19c0..bde66ede6 100644 --- a/packages/bridging/src/BridgingSdk/strategies/QuoteStrategy.ts +++ b/packages/bridging/src/BridgingSdk/strategies/QuoteStrategy.ts @@ -1,4 +1,4 @@ -import { SwapAdvancedSettings } from '@cowprotocol/sdk-trading' +import { SwapAdvancedSettings, TradingSdk } from '@cowprotocol/sdk-trading' import { TTLCache } from '@cowprotocol/sdk-common' import { TokenInfo } from '@cowprotocol/sdk-config' import { @@ -7,8 +7,8 @@ import { MultiQuoteResult, QuoteBridgeRequest, BridgeProvider, + DefaultBridgeProvider, } from '../../types' -import { BridgingSdkConfig } from '../types' /** * Abstract base class for all quote strategies @@ -20,7 +20,7 @@ export abstract class QuoteStrategy { /** * Execute the quote strategy */ - abstract execute(request: TRequest, config: BridgingSdkConfig): Promise + abstract execute(request: TRequest, tradingSdk: TradingSdk, providers: DefaultBridgeProvider[]): Promise } /** diff --git a/packages/bridging/src/BridgingSdk/strategies/SingleQuoteStrategy.test.ts b/packages/bridging/src/BridgingSdk/strategies/SingleQuoteStrategy.test.ts index f9f7ca97a..8fe0eef45 100644 --- a/packages/bridging/src/BridgingSdk/strategies/SingleQuoteStrategy.test.ts +++ b/packages/bridging/src/BridgingSdk/strategies/SingleQuoteStrategy.test.ts @@ -97,7 +97,7 @@ adapterNames.forEach((adapterName) => { advancedSettings: undefined, } - const quote = await strategy.execute(request, config) + const quote = await strategy.execute(request, config.tradingSdk, config.providers) assertIsBridgeQuoteAndPost(quote) const { bridge, swap, postSwapOrderFromQuote } = quote @@ -191,7 +191,7 @@ adapterNames.forEach((adapterName) => { advancedSettings: undefined, } - const quote = await strategy.execute(request, config) + const quote = await strategy.execute(request, config.tradingSdk, config.providers) // We get a single-chain quote assertIsQuoteAndPost(quote) @@ -224,7 +224,7 @@ adapterNames.forEach((adapterName) => { advancedSettings, } - await strategy.execute(request, config) + await strategy.execute(request, config.tradingSdk, config.providers) // Verify advanced settings were passed through expect(tradingSdk.getQuoteResults).toHaveBeenCalledWith( @@ -283,7 +283,7 @@ adapterNames.forEach((adapterName) => { advancedSettings, } - await strategy.execute(request, config) + await strategy.execute(request, config.tradingSdk, config.providers) // Verify advanced settings were passed through expect(tradingSdk.getQuote).toHaveBeenCalledWith(tradeParameters, advancedSettings) @@ -300,9 +300,9 @@ adapterNames.forEach((adapterName) => { advancedSettings: undefined, } - await expect(strategy.execute(request, configWithoutProviders)).rejects.toThrow( - 'No provider found for cross-chain swap', - ) + await expect( + strategy.execute(request, configWithoutProviders.tradingSdk, configWithoutProviders.providers), + ).rejects.toThrow('No provider found for cross-chain swap') }) }) diff --git a/packages/bridging/src/BridgingSdk/strategies/SingleQuoteStrategy.ts b/packages/bridging/src/BridgingSdk/strategies/SingleQuoteStrategy.ts index ede198864..29610edf2 100644 --- a/packages/bridging/src/BridgingSdk/strategies/SingleQuoteStrategy.ts +++ b/packages/bridging/src/BridgingSdk/strategies/SingleQuoteStrategy.ts @@ -1,9 +1,9 @@ import { TTLCache } from '@cowprotocol/sdk-common' import { TokenInfo } from '@cowprotocol/sdk-config' -import { CrossChainQuoteAndPost } from '../../types' +import { TradingSdk } from '@cowprotocol/sdk-trading' +import { CrossChainQuoteAndPost, DefaultBridgeProvider } from '../../types' import { getQuoteWithoutBridge } from '../getQuoteWithoutBridge' import { getQuoteWithBridge } from '../getQuoteWithBridge' -import { BridgingSdkConfig } from '../types' import { BaseSingleQuoteStrategy, SingleQuoteRequest } from './QuoteStrategy' /** @@ -16,10 +16,13 @@ export class SingleQuoteStrategy extends BaseSingleQuoteStrategy { super(intermediateTokensCache) } - async execute(request: SingleQuoteRequest, config: BridgingSdkConfig): Promise { + async execute( + request: SingleQuoteRequest, + tradingSdk: TradingSdk, + providers: DefaultBridgeProvider[], + ): Promise { const { quoteBridgeRequest, advancedSettings } = request const { sellTokenChainId, buyTokenChainId } = quoteBridgeRequest - const { tradingSdk, providers } = config if (sellTokenChainId !== buyTokenChainId) { // Cross-chain swap diff --git a/packages/bridging/src/BridgingSdk/utils.ts b/packages/bridging/src/BridgingSdk/utils.ts index 13fa0585c..ed87d368c 100644 --- a/packages/bridging/src/BridgingSdk/utils.ts +++ b/packages/bridging/src/BridgingSdk/utils.ts @@ -6,8 +6,8 @@ import { MultiQuoteResult, BestQuoteProgressCallback, BridgeProvider, + DefaultBridgeProvider, } from '../types' -import { BridgingSdkConfig } from './types' /** * Validates that the request is for cross-chain bridging @@ -22,7 +22,7 @@ export function validateCrossChainRequest(sellTokenChainId: SupportedChainId, bu } // Static helper function for creating provider timeout promises -export function createBridgeQuoteTimeoutPromise(timeoutMs: number, prefix: string): Promise { +export function createBridgeRequestTimeoutPromise(timeoutMs: number, prefix: string): Promise { return new Promise((_, reject) => { setTimeout(() => { reject(new BridgeProviderError(`${prefix} timeout after ${timeoutMs}ms`, {})) @@ -72,13 +72,13 @@ export function fillTimeoutResults( export async function executeProviderQuotes( promises: Promise[], timeout: number, - config: BridgingSdkConfig, + providers: DefaultBridgeProvider[], ): Promise { try { // Wait for either all promises to complete or timeout await Promise.race([ Promise.allSettled(promises), - createBridgeQuoteTimeoutPromise(timeout, `Multi-quote with ${config.providers.length}`), + createBridgeRequestTimeoutPromise(timeout, `Multi-quote with ${providers.length}`), ]) } catch { // If timeout occurs, we still return whatever results we have diff --git a/packages/bridging/src/PROVIDER_README.md b/packages/bridging/src/PROVIDER_README.md index 4835754d1..af90d33dc 100644 --- a/packages/bridging/src/PROVIDER_README.md +++ b/packages/bridging/src/PROVIDER_README.md @@ -131,6 +131,8 @@ export interface YourBridgeQuoteResult extends BridgeQuoteResult { } export class YourBridgeProvider implements BridgeProvider { + type = 'HookBridgeProvider' // 'ReceiverAccountBridgeProvider' | 'HookBridgeProvider' + protected api: YourBridgeApi protected cowShedSdk: CowShedSdk @@ -144,6 +146,7 @@ export class YourBridgeProvider implements BridgeProvider logoUrl: `/your-bridge/logo.png`, dappId: YOUR_BRIDGE_HOOK_DAPP_ID, website: 'https://yourbridge.example', + type: 'HookBridgeProvider' } // Implement all required methods... diff --git a/packages/bridging/src/README.md b/packages/bridging/src/README.md index a83143206..1794541d8 100644 --- a/packages/bridging/src/README.md +++ b/packages/bridging/src/README.md @@ -308,17 +308,6 @@ if (order) { } ``` -### getOrderBridgingStatus() - -Check the bridging status of a cross-chain order. - -```typescript -const status = await bridgingSdk.getOrderBridgingStatus('bridging-id', SupportedChainId.MAINNET) - -console.log('Bridging status:', status.status) -console.log('Fill time:', status.fillTimeInSeconds) -``` - ## Examples ### React App diff --git a/packages/bridging/src/errors.ts b/packages/bridging/src/errors.ts index 54a1a0264..211718bb6 100644 --- a/packages/bridging/src/errors.ts +++ b/packages/bridging/src/errors.ts @@ -7,6 +7,7 @@ export enum BridgeQuoteErrors { QUOTE_ERROR = 'QUOTE_ERROR', NO_ROUTES = 'NO_ROUTES', INVALID_BRIDGE = 'INVALID_BRIDGE', + QUOTE_DOES_NOT_MATCH_DEPOSIT_ADDRESS = 'QUOTE_DOES_NOT_MATCH_DEPOSIT_ADDRESS', } export class BridgeProviderQuoteError extends Error { diff --git a/packages/bridging/src/index.ts b/packages/bridging/src/index.ts index ff08f3df8..ad4958d29 100644 --- a/packages/bridging/src/index.ts +++ b/packages/bridging/src/index.ts @@ -13,3 +13,10 @@ export type { AcrossQuoteResult, AcrossBridgeProviderOptions } from './providers export { BungeeBridgeProvider } from './providers/bungee/BungeeBridgeProvider' export type { BungeeQuoteResult, BungeeBridgeProviderOptions } from './providers/bungee/BungeeBridgeProvider' + +export { NearIntentsBridgeProvider } from './providers/near-intents/NearIntentsBridgeProvider' + +export type { + NearIntentsQuoteResult, + NearIntentsBridgeProviderOptions, +} from './providers/near-intents/NearIntentsBridgeProvider' diff --git a/packages/bridging/src/providers/across/AcrossBridgeProvider.test.ts b/packages/bridging/src/providers/across/AcrossBridgeProvider.test.ts index dcbba674e..12058aecb 100644 --- a/packages/bridging/src/providers/across/AcrossBridgeProvider.test.ts +++ b/packages/bridging/src/providers/across/AcrossBridgeProvider.test.ts @@ -181,6 +181,7 @@ adapterNames.forEach((adapterName) => { expect(provider.info).toEqual({ dappId: ACROSS_HOOK_DAPP_ID, name: 'Across', + type: 'HookBridgeProvider', logoUrl: expect.stringContaining('across-logo.png'), website: 'https://across.to', }) diff --git a/packages/bridging/src/providers/across/AcrossBridgeProvider.ts b/packages/bridging/src/providers/across/AcrossBridgeProvider.ts index b0be34f1e..d87e62b5d 100644 --- a/packages/bridging/src/providers/across/AcrossBridgeProvider.ts +++ b/packages/bridging/src/providers/across/AcrossBridgeProvider.ts @@ -36,7 +36,7 @@ import { TokenInfo, } from '@cowprotocol/sdk-config' import { CowShedSdk, CowShedSdkOptions } from '@cowprotocol/sdk-cow-shed' -import { OrderKind } from '@cowprotocol/sdk-order-book' +import { EnrichedOrder, OrderKind } from '@cowprotocol/sdk-order-book' type SupportedTokensState = Record> @@ -58,8 +58,10 @@ export interface AcrossQuoteResult extends BridgeQuoteResult { suggestedFees: SuggestedFeesResponse } +const providerType = 'HookBridgeProvider' as const + export class AcrossBridgeProvider implements HookBridgeProvider { - type = 'HookBridgeProvider' as const + type = providerType protected api: AcrossApi protected cowShedSdk: CowShedSdk @@ -79,6 +81,7 @@ export class AcrossBridgeProvider implements HookBridgeProvider { @@ -198,9 +201,10 @@ export class AcrossBridgeProvider implements HookBridgeProvider { + const orderUid = order.uid const adapter = getGlobalAdapter() const txReceipt = await adapter.getTransactionReceipt(txHash) diff --git a/packages/bridging/src/providers/across/const/interfaces.ts b/packages/bridging/src/providers/across/const/interfaces.ts index b584949fb..eeade7143 100644 --- a/packages/bridging/src/providers/across/const/interfaces.ts +++ b/packages/bridging/src/providers/across/const/interfaces.ts @@ -8,6 +8,6 @@ export const ACROSS_DEPOSIT_EVENT_INTERFACE = () => { export const COW_TRADE_EVENT_INTERFACE = () => { return getGlobalAdapter().utils.createInterface([ - 'event Trade(address owner, address sellToken, address buyToken, uint256 sellAmount, uint256 buyAmount, uint256 feeAmount, bytes orderUid)', + 'event Trade(address indexed owner, address sellToken, address buyToken, uint256 sellAmount, uint256 buyAmount, uint256 feeAmount, bytes orderUid)', ]) } diff --git a/packages/bridging/src/providers/bungee/BungeeBridgeProvider.test.ts b/packages/bridging/src/providers/bungee/BungeeBridgeProvider.test.ts index 1b7702837..27f1c9053 100644 --- a/packages/bridging/src/providers/bungee/BungeeBridgeProvider.test.ts +++ b/packages/bridging/src/providers/bungee/BungeeBridgeProvider.test.ts @@ -278,7 +278,7 @@ adapterNames.forEach((adapterName) => { bridgingFee: { feeBps: 50, amountInSellCurrency: 5000000000000000n, - amountInBuyCurrency: 0n, + amountInBuyCurrency: 5000n, }, }, slippageBps: 0, @@ -306,6 +306,7 @@ adapterNames.forEach((adapterName) => { expect(provider.info).toEqual({ dappId: BUNGEE_HOOK_DAPP_ID, name: 'Bungee', + type: 'HookBridgeProvider', logoUrl: expect.stringContaining('bungee-logo.png'), website: 'https://www.bungee.exchange', }) diff --git a/packages/bridging/src/providers/bungee/BungeeBridgeProvider.ts b/packages/bridging/src/providers/bungee/BungeeBridgeProvider.ts index d6303afbb..43f1ba97b 100644 --- a/packages/bridging/src/providers/bungee/BungeeBridgeProvider.ts +++ b/packages/bridging/src/providers/bungee/BungeeBridgeProvider.ts @@ -1,5 +1,5 @@ import { cowAppDataLatestScheme as latestAppData } from '@cowprotocol/sdk-app-data' -import { OrderKind } from '@cowprotocol/sdk-order-book' +import { EnrichedOrder, OrderKind } from '@cowprotocol/sdk-order-book' import { BridgeDeposit, @@ -62,8 +62,10 @@ export interface BungeeQuoteResult extends BridgeQuoteResult { buildTx: BungeeBuildTx } +const providerType = 'HookBridgeProvider' as const + export class BungeeBridgeProvider implements HookBridgeProvider { - type = 'HookBridgeProvider' as const + type = providerType protected api: BungeeApi protected cowShedSdk: CowShedSdk @@ -86,6 +88,7 @@ export class BungeeBridgeProvider implements HookBridgeProvider { @@ -212,9 +215,10 @@ export class BungeeBridgeProvider implements HookBridgeProvider { + const orderId = order.uid const events = await this.api.getEvents({ orderId }) const event = events?.[0] diff --git a/packages/bridging/src/providers/bungee/util.test.ts b/packages/bridging/src/providers/bungee/util.test.ts index d259530da..a9b3d5572 100644 --- a/packages/bridging/src/providers/bungee/util.test.ts +++ b/packages/bridging/src/providers/bungee/util.test.ts @@ -238,4 +238,266 @@ describe('Bungee Utils', () => { expect(getDisplayNameFromBungeeBridge('Invalid' as BungeeBridge)).toBeUndefined() }) }) + + describe('feeBuyToken calculation in toBridgeQuoteResult', () => { + it('should correctly calculate feeBuyToken based on price ratio (18 decimals sell -> 6 decimals buy)', () => { + const request: QuoteBridgeRequest = { + kind: OrderKind.SELL, + sellTokenChainId: SupportedChainId.MAINNET, + sellTokenAddress: '0x1234567890123456789012345678901234567890', + sellTokenDecimals: 18, + buyTokenChainId: SupportedChainId.POLYGON, + buyTokenAddress: '0x1234567890123456789012345678901234567890', + buyTokenDecimals: 6, + amount: 1000000000000000000n, // 1 ETH + appCode: 'test', + account: '0x1234567890123456789012345678901234567890', + signer: '0x1234567890123456789012345678901234567890', + } + + const bungeeQuoteWithBuildTx: BungeeQuoteWithBuildTx = { + bungeeQuote: { + originChainId: 1, + destinationChainId: 137, + userAddress: '0x123', + receiverAddress: '0x789', + input: { + token: { + chainId: 1, + address: '0x123', + name: 'ETH', + symbol: 'ETH', + decimals: 18, + logoURI: '', + icon: '', + }, + amount: '1000000000000000000', // 1 ETH + priceInUsd: 2000, + valueInUsd: 2000, + }, + route: { + affiliateFee: null, + quoteId: '123', + quoteExpiry: 1234567890, + output: { + token: { + chainId: 137, + address: '0x456', + name: 'USDC', + symbol: 'USDC', + decimals: 6, + logoURI: '', + icon: '', + }, + amount: '2000000000', // 2000 USDC + priceInUsd: 1, + valueInUsd: 2000, + minAmountOut: '1990000000', + effectiveReceivedInUsd: 1990, + }, + approvalData: { + spenderAddress: '0x123', + amount: '1000000000000000000', + tokenAddress: '0x123', + userAddress: '0x123', + }, + gasFee: { + gasToken: { + chainId: 1, + address: '0x123', + symbol: 'ETH', + name: 'Ethereum', + decimals: 18, + icon: '', + logoURI: '', + chainAgnosticId: null, + }, + gasLimit: '100000', + gasPrice: '1000000000', + estimatedFee: '50000', + feeInUsd: 1, + }, + slippage: 0, + estimatedTime: 300, + routeDetails: { + name: 'across', + logoURI: '', + routeFee: { + token: { + chainId: 1, + address: '0x123', + name: 'ETH', + symbol: 'ETH', + decimals: 18, + logoURI: '', + icon: '', + }, + amount: '10000000000000000', // 0.01 ETH fee + feeInUsd: 20, + priceInUsd: 2000, + }, + dexDetails: null, + }, + refuel: null, + }, + routeBridge: BungeeBridge.Across, + quoteTimestamp: 1234567890, + }, + buildTx: { + approvalData: { + spenderAddress: '0x123', + amount: '1000000000000000000', + tokenAddress: '0x123', + userAddress: '0x123', + }, + txData: { + data: '0x', + to: '0x123', + chainId: 1, + value: '0', + }, + userOp: '', + }, + } + + const result = toBridgeQuoteResult(request, 0, bungeeQuoteWithBuildTx) + + // feeBuyToken = feeSellToken * (buyAmount / sellAmount) + // feeBuyToken = 10000000000000000 * (2000000000 / 1000000000000000000) + // feeBuyToken = 10000000000000000 * 2000000000 / 1000000000000000000 + // feeBuyToken = 20000000 + expect(result.amountsAndCosts.costs.bridgingFee.amountInBuyCurrency).toBe(20000000n) + expect(result.amountsAndCosts.costs.bridgingFee.amountInSellCurrency).toBe(10000000000000000n) + }) + + it('should correctly calculate feeBuyToken for same decimals (18 decimals both)', () => { + const request: QuoteBridgeRequest = { + kind: OrderKind.SELL, + sellTokenChainId: SupportedChainId.MAINNET, + sellTokenAddress: '0x1234567890123456789012345678901234567890', + sellTokenDecimals: 18, + buyTokenChainId: SupportedChainId.POLYGON, + buyTokenAddress: '0x1234567890123456789012345678901234567890', + buyTokenDecimals: 18, + amount: 1000000000000000000n, // 1 token + appCode: 'test', + account: '0x1234567890123456789012345678901234567890', + signer: '0x1234567890123456789012345678901234567890', + } + + const bungeeQuoteWithBuildTx: BungeeQuoteWithBuildTx = { + bungeeQuote: { + originChainId: 1, + destinationChainId: 137, + userAddress: '0x123', + receiverAddress: '0x789', + input: { + token: { + chainId: 1, + address: '0x123', + name: 'Token A', + symbol: 'TKNA', + decimals: 18, + logoURI: '', + icon: '', + }, + amount: '1000000000000000000', + priceInUsd: 100, + valueInUsd: 100, + }, + route: { + affiliateFee: null, + quoteId: '123', + quoteExpiry: 1234567890, + output: { + token: { + chainId: 137, + address: '0x456', + name: 'Token B', + symbol: 'TKNB', + decimals: 18, + logoURI: '', + icon: '', + }, + amount: '950000000000000000', // 0.95 tokens (5% price difference) + priceInUsd: 105.26, + valueInUsd: 100, + minAmountOut: '940000000000000000', + effectiveReceivedInUsd: 99, + }, + approvalData: { + spenderAddress: '0x123', + amount: '1000000000000000000', + tokenAddress: '0x123', + userAddress: '0x123', + }, + gasFee: { + gasToken: { + chainId: 1, + address: '0x123', + symbol: 'ETH', + name: 'Ethereum', + decimals: 18, + icon: '', + logoURI: '', + chainAgnosticId: null, + }, + gasLimit: '100000', + gasPrice: '1000000000', + estimatedFee: '50000', + feeInUsd: 1, + }, + slippage: 0, + estimatedTime: 300, + routeDetails: { + name: 'across', + logoURI: '', + routeFee: { + token: { + chainId: 1, + address: '0x123', + name: 'Token A', + symbol: 'TKNA', + decimals: 18, + logoURI: '', + icon: '', + }, + amount: '50000000000000000', // 0.05 tokens fee + feeInUsd: 5, + priceInUsd: 100, + }, + dexDetails: null, + }, + refuel: null, + }, + routeBridge: BungeeBridge.Across, + quoteTimestamp: 1234567890, + }, + buildTx: { + approvalData: { + spenderAddress: '0x123', + amount: '1000000000000000000', + tokenAddress: '0x123', + userAddress: '0x123', + }, + txData: { + data: '0x', + to: '0x123', + chainId: 1, + value: '0', + }, + userOp: '', + }, + } + + const result = toBridgeQuoteResult(request, 0, bungeeQuoteWithBuildTx) + + // feeBuyToken = feeSellToken * (buyAmount / sellAmount) + // feeBuyToken = 50000000000000000 * (950000000000000000 / 1000000000000000000) + // feeBuyToken = 50000000000000000 * 0.95 + // feeBuyToken = 47500000000000000 + expect(result.amountsAndCosts.costs.bridgingFee.amountInBuyCurrency).toBe(47500000000000000n) + expect(result.amountsAndCosts.costs.bridgingFee.amountInSellCurrency).toBe(50000000000000000n) + }) + }) }) diff --git a/packages/bridging/src/providers/bungee/util.ts b/packages/bridging/src/providers/bungee/util.ts index 9fdc29d86..aa07c8fdb 100644 --- a/packages/bridging/src/providers/bungee/util.ts +++ b/packages/bridging/src/providers/bungee/util.ts @@ -59,8 +59,11 @@ function toAmountsAndCosts( // Calculate the fee const feeSellToken = bungeeQuote.route.routeDetails.routeFee.amount - // @note feeBuyToken is 0, since routeFee is taken in the src chain intermediate token - const feeBuyToken = 0 + // Calculate feeBuyToken based on price ratio between buy and sell amounts + // feeBuyToken = feeSellToken * (buyAmount / sellAmount) + const feeBuyToken = sellAmountBeforeFee > 0n + ? (BigInt(feeSellToken) * buyAmountBeforeFee) / sellAmountBeforeFee + : 0n // Apply slippage const buyAmountAfterSlippage = applyBps(buyAmountAfterFee, slippageBps) @@ -87,7 +90,7 @@ function toAmountsAndCosts( bridgingFee: { feeBps: bridgeFeeBps, amountInSellCurrency: BigInt(feeSellToken), - amountInBuyCurrency: BigInt(feeBuyToken), + amountInBuyCurrency: feeBuyToken, }, }, slippageBps, diff --git a/packages/bridging/src/providers/mock/BaseMockBridgeProvider.ts b/packages/bridging/src/providers/mock/BaseMockBridgeProvider.ts index fdc8c25e9..6725be617 100644 --- a/packages/bridging/src/providers/mock/BaseMockBridgeProvider.ts +++ b/packages/bridging/src/providers/mock/BaseMockBridgeProvider.ts @@ -1,5 +1,4 @@ import { - BridgeProviderInfo, BridgeQuoteResult, BridgeStatusResult, BridgingDepositParams, @@ -8,7 +7,6 @@ import { QuoteBridgeRequest, BridgeProvider, } from '../../types' -import { RAW_PROVIDERS_FILES_PATH } from '../../const' import { ChainId, ChainInfo, @@ -20,17 +18,21 @@ import { TokenInfo, } from '@cowprotocol/sdk-config' import { BRIDGING_PARAMS, BUY_TOKENS, INTERMEDIATE_TOKENS, MOCK_CALL, QUOTE, STATUS } from './mockData' +import { EnrichedOrder } from '@cowprotocol/sdk-order-book' +import { RAW_PROVIDERS_FILES_PATH } from '../../const' -export abstract class BaseMockBridgeProvider implements Omit, 'type'> { - info: BridgeProviderInfo +const name = 'BaseMockBridgeProvider' +const providerType = 'HookBridgeProvider' as const - constructor(name: string) { - this.info = { - name, - logoUrl: `${RAW_PROVIDERS_FILES_PATH}/mock/mock-logo.png`, - dappId: 'dapp-id-' + name, - website: `https://mock.com/${name}`, - } +export abstract class BaseMockBridgeProvider implements BridgeProvider { + type = providerType + + info = { + name, + logoUrl: `${RAW_PROVIDERS_FILES_PATH}/mock/mock-logo.png`, + dappId: 'dapp-id-' + name, + website: `https://mock.com/${name}`, + type: providerType, } async getNetworks(): Promise { @@ -54,7 +56,7 @@ export abstract class BaseMockBridgeProvider implements Omit { return { diff --git a/packages/bridging/src/providers/mock/HookMockBridgeProvider.ts b/packages/bridging/src/providers/mock/HookMockBridgeProvider.ts index 382ccc822..8a61ff146 100644 --- a/packages/bridging/src/providers/mock/HookMockBridgeProvider.ts +++ b/packages/bridging/src/providers/mock/HookMockBridgeProvider.ts @@ -1,16 +1,23 @@ import { cowAppDataLatestScheme as latestAppData } from '@cowprotocol/sdk-app-data' import { BridgeDeposit, BridgeHook, HookBridgeProvider, BridgeQuoteResult, QuoteBridgeRequest } from '../../types' -import { HOOK_DAPP_BRIDGE_PROVIDER_PREFIX } from '../../const' +import { HOOK_DAPP_BRIDGE_PROVIDER_PREFIX, RAW_PROVIDERS_FILES_PATH } from '../../const' import { EvmCall, SupportedChainId } from '@cowprotocol/sdk-config' import { OrderKind } from '@cowprotocol/sdk-order-book' import { MOCK_CALL } from './mockData' import { BaseMockBridgeProvider } from './BaseMockBridgeProvider' +const name = 'MockHookBridgeProvider' +const providerType = 'HookBridgeProvider' as const + export class MockHookBridgeProvider extends BaseMockBridgeProvider implements HookBridgeProvider { - type = 'HookBridgeProvider' as const + type = providerType - constructor() { - super('MockHookBridgeProvider') + info = { + name, + logoUrl: `${RAW_PROVIDERS_FILES_PATH}/mock/mock-logo.png`, + dappId: 'dapp-id-' + name, + website: `https://mock.com/${name}`, + type: providerType, } async getGasLimitEstimationForHook(_request: QuoteBridgeRequest): Promise { diff --git a/packages/bridging/src/providers/mock/ReceiverAccountMockBridgeProvider.ts b/packages/bridging/src/providers/mock/ReceiverAccountMockBridgeProvider.ts index 392face9f..d58c6f42a 100644 --- a/packages/bridging/src/providers/mock/ReceiverAccountMockBridgeProvider.ts +++ b/packages/bridging/src/providers/mock/ReceiverAccountMockBridgeProvider.ts @@ -1,5 +1,9 @@ import { ReceiverAccountBridgeProvider, BridgeQuoteResult, QuoteBridgeRequest } from '../../types' import { BaseMockBridgeProvider } from './BaseMockBridgeProvider' +import { RAW_PROVIDERS_FILES_PATH } from '../../const' + +const name = 'ReceiverAccountBridgeProvider' +const providerType = 'ReceiverAccountBridgeProvider' as const /** * Mock implementation of ReceiverAccountBridgeProvider for testing. @@ -9,15 +13,23 @@ export class MockReceiverAccountBridgeProvider extends BaseMockBridgeProvider implements ReceiverAccountBridgeProvider { - type = 'ReceiverAccountBridgeProvider' as const - - // Mock receiver address that will be used for bridging - private mockReceiverAddress = '0xBdC3EEE0000000000000000000000000DeAdBeeF' + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + type = providerType - constructor() { - super('ReceiverAccountBridgeProvider') + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + info = { + name, + logoUrl: `${RAW_PROVIDERS_FILES_PATH}/mock/mock-logo.png`, + dappId: 'dapp-id-' + name, + website: `https://mock.com/${name}`, + type: providerType, } + // Mock receiver address that will be used for bridging (properly checksummed) + private mockReceiverAddress = '0x9999999999999999999999999999999999999999' + async getBridgeReceiverOverride(_quoteRequest: QuoteBridgeRequest, _quoteResult: BridgeQuoteResult): Promise { return this.mockReceiverAddress } diff --git a/packages/bridging/src/providers/near-intents/NearIntentsApi.ts b/packages/bridging/src/providers/near-intents/NearIntentsApi.ts new file mode 100644 index 000000000..541e0833f --- /dev/null +++ b/packages/bridging/src/providers/near-intents/NearIntentsApi.ts @@ -0,0 +1,56 @@ +import { OneClickService, OpenAPI } from '@defuse-protocol/one-click-sdk-typescript' + +import type { + GetExecutionStatusResponse, + QuoteRequest, + QuoteResponse, + TokenResponse, +} from '@defuse-protocol/one-click-sdk-typescript' + +import type { Address, Hex } from 'viem' + +interface GetAttestationRequest { + depositAddress: Address + quoteHash: Hex +} + +interface GetAttestationResponse { + signature: Hex + version: number +} + +export class NearIntentsApi { + private cachedTokens: TokenResponse[] = [] + + async getTokens(): Promise { + if (this.cachedTokens.length === 0) { + const response = await OneClickService.getTokens() + this.cachedTokens = response + } + return this.cachedTokens + } + + async getQuote(request: QuoteRequest): Promise { + return await OneClickService.getQuote(request) + } + + async getStatus(depositAddress: string): Promise { + return await OneClickService.getExecutionStatus(depositAddress) + } + + async getAttestation(request: GetAttestationRequest): Promise { + const response = await fetch(`${OpenAPI.BASE}/v0/attestation`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(request), + }) + + if (!response.ok) { + throw new Error(`HTTP error! Status: ${response.status}`) + } + + return (await response.json()) as GetAttestationResponse + } +} diff --git a/packages/bridging/src/providers/near-intents/NearIntentsBridgeProvider.test.ts b/packages/bridging/src/providers/near-intents/NearIntentsBridgeProvider.test.ts new file mode 100644 index 000000000..7d08d023f --- /dev/null +++ b/packages/bridging/src/providers/near-intents/NearIntentsBridgeProvider.test.ts @@ -0,0 +1,375 @@ +import { setGlobalAdapter } from '@cowprotocol/sdk-common' +import { ETH_ADDRESS, SupportedChainId } from '@cowprotocol/sdk-config' +import { OrderKind } from '@cowprotocol/sdk-order-book' +import { GetExecutionStatusResponse, QuoteRequest, TokenResponse } from '@defuse-protocol/one-click-sdk-typescript' +import { padHex, zeroAddress } from 'viem' + +import { createAdapters } from '../../../tests/setup' +import { NearIntentsApi } from './NearIntentsApi' +import { NEAR_INTENTS_HOOK_DAPP_ID, NearIntentsBridgeProvider } from './NearIntentsBridgeProvider' +import { NEAR_INTENTS_SUPPORTED_NETWORKS } from './const' +import { BridgeStatus } from '../../types' + +import type { TargetChainId } from '@cowprotocol/sdk-config' +import type { QuoteBridgeRequest } from '../../types' +import type { QuoteResponse } from '@defuse-protocol/one-click-sdk-typescript' + +// Mock NearIntentsApi +jest.mock('./NearIntentsApi') + +class NearIntentsBridgeProviderTest extends NearIntentsBridgeProvider { + constructor() { + super({}) + } + + // Re-expose the API for testing + public getApi() { + return this.api + } + + // Allow to set the API for testing + public setApi(api: NearIntentsApi) { + this.api = api + } +} + +const adapters = createAdapters() +const adapterNames = Object.keys(adapters) as Array + +const mockGetCode = jest.fn() + +adapterNames.forEach((adapterName) => { + describe(`NearIntentsBridgeProvider for ${adapterName}`, () => { + let provider: NearIntentsBridgeProviderTest + + beforeEach(() => { + const adapter = adapters[adapterName] + adapter.getCode = mockGetCode + setGlobalAdapter(adapter) + provider = new NearIntentsBridgeProviderTest() + }) + + afterEach(() => { + jest.clearAllMocks() + }) + + describe('getNetworks', () => { + it('should return supported networks', async () => { + const networks = await provider.getNetworks() + expect(networks.length).toBeGreaterThan(0) + expect(networks).toEqual(NEAR_INTENTS_SUPPORTED_NETWORKS) + }) + }) + + describe('getBuyTokens', () => { + let api: NearIntentsApi + + const mockApi = (tokens: TokenResponse[]) => { + api = new NearIntentsApi() + jest.spyOn(api, 'getTokens').mockResolvedValue(tokens) + provider.setApi(api) + } + + it('should return empty array for unsupported chain', async () => { + mockApi([]) + const result = await provider.getBuyTokens({ buyChainId: 12345 as TargetChainId }) + expect(result.tokens).toEqual([]) + expect(result.isRouteAvailable).toEqual(false) + expect(api.getTokens).toHaveBeenCalledTimes(1) + }) + + it('should return tokens for supported chain', async () => { + mockApi([ + { + assetId: 'nep141:eth.omft.near', + decimals: 18, + blockchain: TokenResponse.blockchain.ETH, + symbol: 'ETH', + price: 4463.25, + priceUpdatedAt: '2025-09-03T14:42:00.329Z', + }, + ]) + const result = await provider.getBuyTokens({ + buyChainId: SupportedChainId.MAINNET, + }) + expect(result.tokens.length).toBeGreaterThan(0) + expect(result.tokens).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + chainId: SupportedChainId.MAINNET, + address: expect.any(String), + decimals: expect.any(Number), + }), + ]), + ) + expect(result.isRouteAvailable).toEqual(true) + expect(api.getTokens).toHaveBeenCalledTimes(1) + }) + }) + + describe('getQuote', () => { + beforeEach(() => { + const api = new NearIntentsApi() + jest.spyOn(api, 'getTokens').mockResolvedValue([ + { + assetId: 'nep141:eth.omft.near', + decimals: 18, + blockchain: TokenResponse.blockchain.ETH, + symbol: 'ETH', + price: 4463.25, + priceUpdatedAt: '2025-09-03T14:42:00.329Z', + }, + { + assetId: 'nep245:v2_1.omni.hot.tg:137_11111111111111111111', + decimals: 18, + blockchain: TokenResponse.blockchain.POL, + symbol: 'POL', + price: 0.287879, + priceUpdatedAt: '2025-09-03T14:42:00.329Z', + }, + ]) + jest.spyOn(api, 'getQuote').mockResolvedValue({ + quote: { + amountIn: '35000000000000', + amountInFormatted: '0.000035', + amountInUsd: '0.1566', + minAmountIn: '35000000000000', + amountOut: '468413404557660287', + amountOutFormatted: '0.468413404557660287', + amountOutUsd: '0.1349', + minAmountOut: '463000005761085287', + timeEstimate: 49, + deadline: '2025-09-04T14:46:59.148Z', + timeWhenInactive: '2025-09-04T14:46:59.148Z', + depositAddress: '0xAd8b7139196c5ae9fb66B71C91d87A1F9071687e', + }, + quoteRequest: { + depositMode: QuoteRequest.depositMode.SIMPLE, + quoteWaitingTimeMs: 3000, + dry: false, + swapType: QuoteRequest.swapType.EXACT_INPUT, + slippageTolerance: 100, + originAsset: 'nep141:eth.omft.near', + depositType: QuoteRequest.depositType.ORIGIN_CHAIN, + destinationAsset: 'nep245:v2_1.omni.hot.tg:137_11111111111111111111', + amount: '35000000000000', + refundTo: '0x0000000000000000000000000000000000000000', + refundType: QuoteRequest.refundType.ORIGIN_CHAIN, + recipient: '0x0000000000000000000000000000000000000000', + recipientType: QuoteRequest.recipientType.DESTINATION_CHAIN, + deadline: '2025-09-03T15:46:55.000Z', + }, + signature: 'ed25519:Y54QM45ockDtJf3uAVhV8xndF79GPeQW5fJaZZLKfnaj8mW9NaBDsGg3uVXY1Fge73fYDAsdn9qokhjm2rsJATz', + timestamp: '2025-09-03T14:46:55.987Z', + }) + provider.setApi(api) + }) + + it('should return quote with deposit address', async () => { + const request: QuoteBridgeRequest = { + kind: OrderKind.SELL, + sellTokenAddress: ETH_ADDRESS, + sellTokenChainId: SupportedChainId.MAINNET, + buyTokenChainId: SupportedChainId.POLYGON, + amount: 35000000000000n, + receiver: zeroAddress, + account: zeroAddress, + sellTokenDecimals: 18, + buyTokenAddress: ETH_ADDRESS, + buyTokenDecimals: 6, + appCode: zeroAddress, + signer: padHex('0x1'), + } + + const quote = await provider.getQuote(request) + + expect(quote).toEqual({ + isSell: true, + depositAddress: '0xAd8b7139196c5ae9fb66B71C91d87A1F9071687e', + quoteTimestamp: 1756910815987, + expectedFillTimeSeconds: 49, + limits: { minDeposit: 35000000000000n, maxDeposit: 35000000000000n }, + fees: { bridgeFee: 4849936143039n, destinationGasFee: 0n }, + amountsAndCosts: { + beforeFee: { buyAmount: 468413404557660287n, sellAmount: 35000000000000n }, + afterFee: { buyAmount: 463000005761085287n, sellAmount: 35000000000000n }, + afterSlippage: { buyAmount: 463000005761085287n, sellAmount: 35000000000000n }, + slippageBps: 1385, + costs: { + bridgingFee: { + feeBps: 1385, + amountInSellCurrency: 64907860018526376n, + amountInBuyCurrency: 4849936143039n, + }, + }, + }, + }) + }) + }) + + describe('info', () => { + it('should return provider info', () => { + expect(provider.info).toEqual({ + dappId: NEAR_INTENTS_HOOK_DAPP_ID, + name: 'Near Intents', + type: 'ReceiverAccountBridgeProvider', + logoUrl: expect.stringContaining('near-intents-logo.png'), + website: 'https://www.near.org/intents', + }) + }) + }) + + describe('getExplorerUrl', () => { + it('should return explorer url', () => { + expect(provider.getExplorerUrl('123')).toEqual('https://explorer.near-intents.org/transactions/123') + }) + }) + + describe('getStatus', () => { + const mockStatus: GetExecutionStatusResponse = { + status: GetExecutionStatusResponse.status.SUCCESS, + updatedAt: '2025-09-05T12:01:33.000Z', + swapDetails: { + intentHashes: ['intentHash1'], + nearTxHashes: ['nearTxHash1', 'nearTxHash2', 'nearTxHash3'], + amountIn: '52000000', + amountInFormatted: '52.0', + amountInUsd: '51.9929', + amountOut: '11765806672337253', + amountOutFormatted: '0.011765806672337253', + amountOutUsd: '51.9757', + slippage: -5, + refundedAmount: '0', + refundedAmountFormatted: '0', + refundedAmountUsd: '0', + originChainTxHashes: [{ hash: 'originChainTxHash1', explorerUrl: '' }], + destinationChainTxHashes: [{ hash: 'destinationChainTxHash2', explorerUrl: '' }], + }, + quoteResponse: { + timestamp: '2025-09-05T12:00:38.695Z', + signature: 'ed25519:signature', + quoteRequest: { + dry: false, + swapType: QuoteRequest.swapType.EXACT_INPUT, + depositMode: QuoteRequest.depositMode.SIMPLE, + slippageTolerance: 50, + originAsset: 'nep141:base-0x833589fcd6edb6e08f4c7c32d4f71b54bda02913.omft.near', + depositType: QuoteRequest.depositType.ORIGIN_CHAIN, + destinationAsset: 'nep141:base.omft.near', + amount: '52000000', + refundTo: 'refundTo', + refundType: QuoteRequest.refundType.ORIGIN_CHAIN, + recipient: 'recipient', + recipientType: QuoteRequest.recipientType.DESTINATION_CHAIN, + deadline: '2025-09-05T12:10:38.605Z', + appFees: [{ recipient: 'recipient', fee: 10 }], + virtualChainRecipient: undefined, + virtualChainRefundRecipient: undefined, + }, + quote: { + amountIn: '52000000', + amountInFormatted: '52.0', + amountInUsd: '51.9897', + minAmountIn: '52000000', + amountOut: '11760237526222378', + amountOutFormatted: '0.011760237526222378', + amountOutUsd: '51.9508', + minAmountOut: '11701433538591266', + timeWhenInactive: '2025-09-06T12:00:41.894Z', + depositAddress: 'depositAddress', + deadline: '2025-09-06T12:00:41.894Z', + timeEstimate: 37, + }, + }, + } + + const mockApi = (mockStatus: GetExecutionStatusResponse) => { + const api = new NearIntentsApi() + jest.spyOn(api, 'getStatus').mockResolvedValue(mockStatus) + provider.setApi(api) + } + + it('should return executed status when the order is filled on near', async () => { + mockApi(mockStatus) + const status = await provider.getStatus('depositAddress', SupportedChainId.BASE) + expect(status).toEqual({ + status: BridgeStatus.EXECUTED, + depositTxHash: 'originChainTxHash1', + fillTxHash: 'destinationChainTxHash2', + }) + }) + + it('should return unknown status when no status is returned', async () => { + const api = new NearIntentsApi() + jest.spyOn(api, 'getStatus').mockResolvedValue({} as any) + provider.setApi(api) + const status = await provider.getStatus('depositAddress2', SupportedChainId.BASE) + expect(status).toEqual({ + status: BridgeStatus.UNKNOWN, + }) + }) + }) + + describe('getCancelBridgingTx', () => { + it('should throw error as not implemented', async () => { + await expect(() => provider.getCancelBridgingTx('123')).toThrow('Not implemented') + }) + }) + + describe('getRefundBridgingTx', () => { + it('should throw error as not implemented', async () => { + await expect(() => provider.getRefundBridgingTx('123')).toThrow('Not implemented') + }) + }) + + describe('recoverDepositAddress', () => { + const mockQuoteResponse: QuoteResponse = { + quote: { + amountIn: '35000000000000', + amountInFormatted: '0.000035', + amountInUsd: '0.1566', + minAmountIn: '35000000000000', + amountOut: '468413404557660287', + amountOutFormatted: '0.468413404557660287', + amountOutUsd: '0.1349', + minAmountOut: '463000005761085287', + timeEstimate: 49, + deadline: '2025-09-04T14:46:59.148Z', + timeWhenInactive: '2025-09-04T14:46:59.148Z', + depositAddress: '0xAd8b7139196c5ae9fb66B71C91d87A1F9071687e', + }, + quoteRequest: { + depositMode: QuoteRequest.depositMode.SIMPLE, + quoteWaitingTimeMs: 3000, + dry: false, + swapType: QuoteRequest.swapType.EXACT_INPUT, + slippageTolerance: 100, + originAsset: 'nep141:eth.omft.near', + depositType: QuoteRequest.depositType.ORIGIN_CHAIN, + destinationAsset: 'nep245:v2_1.omni.hot.tg:137_11111111111111111111', + amount: '35000000000000', + refundTo: '0x0000000000000000000000000000000000000000', + refundType: QuoteRequest.refundType.ORIGIN_CHAIN, + recipient: '0x0000000000000000000000000000000000000000', + recipientType: QuoteRequest.recipientType.DESTINATION_CHAIN, + deadline: '2025-09-03T15:46:55.000Z', + }, + signature: 'ed25519:Y54QM45ockDtJf3uAVhV8xndF79GPeQW5fJaZZLKfnaj8mW9NaBDsGg3uVXY1Fge73fYDAsdn9qokhjm2rsJATz', + timestamp: '2025-09-03T14:46:55.987Z', + } + + it('should return true when signature is valid and from correct attestator', async () => { + jest.spyOn(provider.getApi(), 'getAttestation').mockResolvedValue({ + version: 1, + signature: + '0x66edc32e2ab001213321ab7d959a2207fcef5190cc9abb6da5b0d2a8a9af2d4d2b0700e2c317c4106f337fd934fbbb0bf62efc8811a78603b33a8265d3b8f8cb1c', + }) + + const recoveredAddress = await provider.recoverDepositAddress(mockQuoteResponse) + + // Just a test value + expect(recoveredAddress).toBe('0xCa545a774087a784EcEDa609C822FB0379efdb1b') + }) + }) + }) +}) diff --git a/packages/bridging/src/providers/near-intents/NearIntentsBridgeProvider.ts b/packages/bridging/src/providers/near-intents/NearIntentsBridgeProvider.ts new file mode 100644 index 000000000..20ec54861 --- /dev/null +++ b/packages/bridging/src/providers/near-intents/NearIntentsBridgeProvider.ts @@ -0,0 +1,326 @@ +import { getGlobalAdapter, setGlobalAdapter } from '@cowprotocol/sdk-common' +import { ETH_ADDRESS } from '@cowprotocol/sdk-config' +import { CowShedSdk } from '@cowprotocol/sdk-cow-shed' +import { OrderKind, EnrichedOrder } from '@cowprotocol/sdk-order-book' +import { QuoteRequest } from '@defuse-protocol/one-click-sdk-typescript' +import { BridgeStatus } from '../../types' + +import { HOOK_DAPP_BRIDGE_PROVIDER_PREFIX, RAW_PROVIDERS_FILES_PATH } from '../../const' +import { BridgeProviderQuoteError, BridgeQuoteErrors } from '../../errors' +import { NearIntentsApi } from './NearIntentsApi' +import { + ATTESTATION_PREFIX_CONST, + ATTESTATOR_ADDRESS, + ATTESTION_VERSION_BYTE, + NEAR_INTENTS_STATUS_TO_COW_STATUS, + NEAR_INTENTS_SUPPORTED_NETWORKS, +} from './const' +import { adaptToken, adaptTokens, calculateDeadline, getTokenByAddressAndChainId, hashQuote } from './util' + +import type { QuoteResponse } from '@defuse-protocol/one-click-sdk-typescript' +import type { AbstractProviderAdapter } from '@cowprotocol/sdk-common' +import type { ChainId, ChainInfo, EvmCall, SupportedChainId, TokenInfo } from '@cowprotocol/sdk-config' +import type { CowShedSdkOptions } from '@cowprotocol/sdk-cow-shed' +import type { Address, Hex } from 'viem' +import type { + BridgeProviderInfo, + BridgeQuoteResult, + BridgeStatusResult, + BridgingDepositParams, + BuyTokensParams, + GetProviderBuyTokens, + QuoteBridgeRequest, + ReceiverAccountBridgeProvider, +} from '../../types' + +export const NEAR_INTENTS_HOOK_DAPP_ID = `${HOOK_DAPP_BRIDGE_PROVIDER_PREFIX}/near-intents` +export const REFERRAL = 'cow' + +export interface NearIntentsQuoteResult extends BridgeQuoteResult { + depositAddress: Hex +} + +export interface NearIntentsBridgeProviderOptions { + cowShedOptions?: CowShedSdkOptions +} + +const providerType = 'ReceiverAccountBridgeProvider' as const + +export class NearIntentsBridgeProvider implements ReceiverAccountBridgeProvider { + type = providerType + + protected api: NearIntentsApi + protected cowShedSdk: CowShedSdk + + info: BridgeProviderInfo = { + name: 'Near Intents', + logoUrl: `${RAW_PROVIDERS_FILES_PATH}/near-intents/near-intents-logo.png`, + dappId: NEAR_INTENTS_HOOK_DAPP_ID, + website: 'https://www.near.org/intents', + type: providerType, + } + + constructor(options?: NearIntentsBridgeProviderOptions, _adapter?: AbstractProviderAdapter) { + const adapter = _adapter || options?.cowShedOptions?.adapter + if (adapter) { + setGlobalAdapter(adapter) + } + this.api = new NearIntentsApi() + this.cowShedSdk = new CowShedSdk(adapter, options?.cowShedOptions?.factoryOptions) + } + + async getNetworks(): Promise { + return NEAR_INTENTS_SUPPORTED_NETWORKS + } + + async getBuyTokens(params: BuyTokensParams): Promise { + const tokens = adaptTokens(await this.api.getTokens()) + const filteredTokens = tokens.filter((token) => token.chainId === params.buyChainId) + + return { + tokens: filteredTokens, + isRouteAvailable: filteredTokens.length > 0, + } + } + + async getIntermediateTokens(request: QuoteBridgeRequest): Promise { + if (request.kind !== OrderKind.SELL) { + throw new BridgeProviderQuoteError(BridgeQuoteErrors.ONLY_SELL_ORDER_SUPPORTED, { kind: request.kind }) + } + + const { sellTokenChainId, buyTokenChainId, buyTokenAddress, sellTokenAddress } = request + + const tokens = adaptTokens(await this.api.getTokens()) + const { sourceTokens, targetTokens } = tokens.reduce( + (acc, token) => { + if (token.chainId === sellTokenChainId) { + acc.sourceTokens.set(token.address.toLowerCase() as Address, token) + } + if (token.chainId === buyTokenChainId) { + acc.targetTokens.set(token.address.toLowerCase() as Address, token) + } + return acc + }, + { + sourceTokens: new Map(), + targetTokens: new Map(), + }, + ) + + const targetToken = targetTokens.get(buyTokenAddress.toLowerCase() as Address) + + if (!targetToken) return [] + + /** + * Example: trade USDT (bnb) -> POL (polygon) + * sellTokenAddress - address of USDT on bnb + * We have to exclude USDT from sourceTokens + * Otherwise, the result of getIntermediateTokens() will include USDT + * * And CoW Swap will try to swap USDT (bnb) -> USDT (bnb) which is not allowed + */ + return Array.from(sourceTokens.values()).filter((token) => { + return token.address?.toLowerCase() !== sellTokenAddress.toLowerCase() + }) + } + + async getQuote(request: QuoteBridgeRequest): Promise { + const { + sellTokenAddress, + sellTokenChainId, + buyTokenAddress, + buyTokenChainId, + account, + amount, + receiver, + validFor, + owner, + } = request + + const tokens = await this.api.getTokens() + const sellToken = getTokenByAddressAndChainId(tokens, sellTokenAddress, sellTokenChainId) + const buyToken = getTokenByAddressAndChainId(tokens, buyTokenAddress, buyTokenChainId) + if (!sellToken || !buyToken) throw new BridgeProviderQuoteError(BridgeQuoteErrors.NO_ROUTES) + + const quoteResponse = await this.api.getQuote({ + dry: false, + swapType: QuoteRequest.swapType.EXACT_INPUT, + slippageTolerance: request.slippageBps ?? 100, + originAsset: sellToken.assetId, + depositType: QuoteRequest.depositType.ORIGIN_CHAIN, + destinationAsset: buyToken.assetId, + amount: amount.toString(), + refundTo: owner || account, + refundType: QuoteRequest.refundType.ORIGIN_CHAIN, + recipient: receiver || account, + recipientType: QuoteRequest.recipientType.DESTINATION_CHAIN, + deadline: calculateDeadline(validFor || 3600), + referral: REFERRAL, + }) + + const recoveredDepositAddress = await this.recoverDepositAddress(quoteResponse) + + if (recoveredDepositAddress?.toLowerCase() !== ATTESTATOR_ADDRESS.toLowerCase()) { + throw new BridgeProviderQuoteError(BridgeQuoteErrors.QUOTE_DOES_NOT_MATCH_DEPOSIT_ADDRESS) + } + + const { quote, timestamp: isoDate } = quoteResponse + + const payoutRatio = Number(quote.amountOutUsd) / Number(quote.amountInUsd) + const slippage = 1 - payoutRatio + const slippageBps = Math.trunc(slippage * 10_000) + const feeAmountInBuyCurrency = Math.trunc(Number(quote.amountIn) * slippage) + const feeAmountInSellCurrency = Math.trunc(Number(quote.amountOut) * slippage) + const bridgeFee = Math.trunc(Number(quote.amountIn) * slippage) + + return { + isSell: request.kind === OrderKind.SELL, + depositAddress: quote.depositAddress as Hex, + quoteTimestamp: new Date(isoDate).getTime(), + expectedFillTimeSeconds: quote.timeEstimate, + limits: { + minDeposit: BigInt(quote.minAmountIn), + maxDeposit: BigInt(quote.amountIn), + }, + fees: { + bridgeFee: BigInt(bridgeFee), // The bridge fee is already included in `minAmountOut`. This means `bridgeFee` represents the maximum possible fee (worst case), but the actual fee may be lower. + destinationGasFee: BigInt(0), + }, + amountsAndCosts: { + beforeFee: { + sellAmount: BigInt(quote.amountIn), + buyAmount: BigInt(quote.amountOut), + }, + afterFee: { + sellAmount: BigInt(quote.amountIn), + buyAmount: BigInt(quote.minAmountOut), + }, + afterSlippage: { + sellAmount: BigInt(quote.amountIn), + buyAmount: BigInt(quote.minAmountOut), + }, + slippageBps, + costs: { + bridgingFee: { + feeBps: slippageBps, + amountInSellCurrency: BigInt(feeAmountInSellCurrency), + amountInBuyCurrency: BigInt(feeAmountInBuyCurrency), + }, + }, + }, + } + } + + async getBridgeReceiverOverride(_request: QuoteBridgeRequest, quote: NearIntentsQuoteResult): Promise { + return quote.depositAddress + } + + async getBridgingParams( + _chainId: ChainId, + order: EnrichedOrder, + _txHash: string, + ): Promise<{ params: BridgingDepositParams; status: BridgeStatusResult } | null> { + const depositAddress = order.receiver + if (!depositAddress) return null + + const [tokens, status] = await Promise.all([this.api.getTokens(), this.api.getStatus(depositAddress)]) + + // Unpack quote data + const qr = status.quoteResponse?.quoteRequest + const swapDetails = status.swapDetails + const quote = status.quoteResponse?.quote + const timestampMs = Date.parse(status.quoteResponse?.timestamp ?? '') + if (!qr || !quote || Number.isNaN(timestampMs)) { + throw new Error('Malformed quote response from NEAR Intents') + } + + const quoteTimestamp = Math.floor(timestampMs / 1000) + + // Locate origin/destination tokens + const inputToken = tokens.find((t) => t.assetId === qr.originAsset) + const outputToken = tokens.find((t) => t.assetId === qr.destinationAsset) + if (!inputToken || !outputToken) throw new Error('Token not supported') + + // Normalize to local token shape + const adaptedInput = adaptToken(inputToken) + const adaptedOutput = adaptToken(outputToken) + if (!adaptedInput?.chainId || !adaptedOutput?.chainId) { + throw new Error('Token not supported') + } + + // Build response + return { + status: { + fillTimeInSeconds: quote.timeEstimate, + status: NEAR_INTENTS_STATUS_TO_COW_STATUS[status.status] ?? BridgeStatus.UNKNOWN, + fillTxHash: status.swapDetails?.destinationChainTxHashes?.[0]?.hash, + }, + params: { + inputTokenAddress: inputToken.contractAddress ?? ETH_ADDRESS, + outputTokenAddress: outputToken.contractAddress ?? ETH_ADDRESS, + inputAmount: BigInt(quote.amountIn), + outputAmount: swapDetails.amountOut ? BigInt(swapDetails.amountOut) : BigInt(quote.amountOut), + owner: order.owner, + quoteTimestamp, + fillDeadline: quoteTimestamp + quote.timeEstimate, + recipient: qr.recipient, + sourceChainId: adaptedInput.chainId, + destinationChainId: adaptedOutput.chainId, + bridgingId: depositAddress, // NEAR Intents deposit address + }, + } + } + + getExplorerUrl(bridgingId: string): string { + return `https://explorer.near-intents.org/transactions/${bridgingId}` + } + + async getStatus(bridgingId: string, _originChainId: SupportedChainId): Promise { + // bridingId must be the deposit address + try { + const statusResponse = await this.api.getStatus(bridgingId) + return { + status: NEAR_INTENTS_STATUS_TO_COW_STATUS[statusResponse.status] || BridgeStatus.UNKNOWN, + depositTxHash: statusResponse.swapDetails?.originChainTxHashes[0]?.hash, + fillTxHash: statusResponse.swapDetails?.destinationChainTxHashes[0]?.hash, + } + } catch { + return { + status: BridgeStatus.UNKNOWN, + } + } + } + + getCancelBridgingTx(_bridgingId: string): Promise { + throw new Error('Not implemented') + } + + getRefundBridgingTx(_bridgingId: string): Promise { + throw new Error('Not implemented') + } + + async recoverDepositAddress({ quote, quoteRequest, timestamp }: QuoteResponse): Promise
{ + try { + if (!quote?.depositAddress) return null + + const utils = getGlobalAdapter().utils + const quoteHash = hashQuote({ quote, quoteRequest, timestamp }) + + const depositAddr = utils.getChecksumAddress(quote.depositAddress as Address) + const { signature } = await this.api.getAttestation({ + quoteHash, + depositAddress: depositAddr, + }) + if (!signature || !utils.isHexString(signature)) return null + + // Build message bytes (prefix || version || depositAddress || quoteHash) + const payload = utils.hexConcat([depositAddr, quoteHash]) + const messageBytes = utils.hexConcat([ATTESTATION_PREFIX_CONST, ATTESTION_VERSION_BYTE, payload]) + + const hash = utils.keccak256(messageBytes) + + return utils.recoverAddress(hash, signature) + } catch { + return null + } + } +} diff --git a/packages/bridging/src/providers/near-intents/const/index.ts b/packages/bridging/src/providers/near-intents/const/index.ts new file mode 100644 index 000000000..b88281e92 --- /dev/null +++ b/packages/bridging/src/providers/near-intents/const/index.ts @@ -0,0 +1,45 @@ +import { arbitrumOne, avalanche, base, bnb, gnosisChain, mainnet, optimism, polygon } from '@cowprotocol/sdk-config' + +import { HOOK_DAPP_BRIDGE_PROVIDER_PREFIX } from '../../../const' + +import { BridgeStatus } from '../../../types' + +export const NEAR_INTENTS_HOOK_DAPP_ID = `${HOOK_DAPP_BRIDGE_PROVIDER_PREFIX}/near-intents` + +export const NEAR_INTENTS_SUPPORTED_NETWORKS = [ + arbitrumOne, + avalanche, + base, + bnb, + gnosisChain, + mainnet, + optimism, + polygon, +] + +export type NearBlockchainKey = 'arb' | 'avax' | 'base' | 'bsc' | 'eth' | 'gnosis' | 'op' | 'pol' + +export const NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS = { + arb: arbitrumOne.id, + avax: avalanche.id, + base: base.id, + bsc: bnb.id, + eth: mainnet.id, + gnosis: gnosisChain.id, + op: optimism.id, + pol: polygon.id, +} as const satisfies Record + +export const NEAR_INTENTS_STATUS_TO_COW_STATUS: Record = { + KNOWN_DEPOSIT_TX: BridgeStatus.IN_PROGRESS, + PENDING_DEPOSIT: BridgeStatus.IN_PROGRESS, + INCOMPLETE_DEPOSIT: BridgeStatus.UNKNOWN, + PROCESSING: BridgeStatus.IN_PROGRESS, + SUCCESS: BridgeStatus.EXECUTED, + REFUNDED: BridgeStatus.REFUND, + FAILED: BridgeStatus.UNKNOWN, +} + +export const ATTESTATION_PREFIX_CONST = '0x0a773570' +export const ATTESTION_VERSION_BYTE = '0x00' +export const ATTESTATOR_ADDRESS = '0x0073DD100b51C555E41B2a452E5933ef76F42790' diff --git a/packages/bridging/src/providers/near-intents/near-intents-logo.png b/packages/bridging/src/providers/near-intents/near-intents-logo.png new file mode 100644 index 000000000..57b03db8a Binary files /dev/null and b/packages/bridging/src/providers/near-intents/near-intents-logo.png differ diff --git a/packages/bridging/src/providers/near-intents/util.test.ts b/packages/bridging/src/providers/near-intents/util.test.ts new file mode 100644 index 000000000..6d034bdf8 --- /dev/null +++ b/packages/bridging/src/providers/near-intents/util.test.ts @@ -0,0 +1,144 @@ +import { ETH_ADDRESS, NATIVE_CURRENCY_ADDRESS, SupportedChainId } from '@cowprotocol/sdk-config' +import { TokenResponse } from '@defuse-protocol/one-click-sdk-typescript' + +import { adaptToken, getTokenByAddressAndChainId } from './util' + +describe('Near Intents Utils', () => { + describe('adaptToken', () => { + it('should adapt a token without contractAddress', () => { + const tokenResponse: TokenResponse = { + assetId: 'nep141:eth.omft.near', + decimals: 18, + blockchain: TokenResponse.blockchain.ETH, + symbol: 'ETH', + price: 4503.21, + priceUpdatedAt: '2025-09-12T04:08:30.252Z', + } + + expect(adaptToken(tokenResponse)).toStrictEqual({ + chainId: SupportedChainId.MAINNET, + decimals: 18, + address: NATIVE_CURRENCY_ADDRESS, + name: 'ETH', + symbol: 'ETH', + }) + }) + + it('should adapt a token with contractAddress', () => { + const tokenResponse: TokenResponse = { + assetId: 'nep141:eth-0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.omft.near', + decimals: 6, + blockchain: TokenResponse.blockchain.ETH, + symbol: 'USDC', + price: 0.999788, + priceUpdatedAt: '2025-09-12T04:08:30.252Z', + contractAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + } + + expect(adaptToken(tokenResponse)).toStrictEqual({ + chainId: SupportedChainId.MAINNET, + decimals: 6, + address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + name: 'USDC', + symbol: 'USDC', + }) + }) + + it('should return null for a non supported chain', () => { + const tokenResponse: TokenResponse = { + assetId: 'nep141:sol.omft.near', + decimals: 9, + blockchain: TokenResponse.blockchain.SOL, + symbol: 'SOL', + price: 234.78, + priceUpdatedAt: '2025-09-12T04:08:30.252Z', + } + + expect(adaptToken(tokenResponse)).toStrictEqual(null) + }) + }) + + describe('getTokenByAddressAndChainId', () => { + it('should get token by address and chain id using ETH_ADDRESS', () => { + const token = { + assetId: 'nep141:eth.omft.near', + decimals: 18, + blockchain: TokenResponse.blockchain.ETH, + symbol: 'ETH', + price: 4503.21, + priceUpdatedAt: '2025-09-12T04:08:30.252Z', + } + const tokens: TokenResponse[] = [ + token, + { + assetId: 'nep141:eth-0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.omft.near', + decimals: 6, + blockchain: TokenResponse.blockchain.ETH, + symbol: 'USDC', + price: 0.999788, + priceUpdatedAt: '2025-09-12T04:08:30.252Z', + contractAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + }, + ] + + expect(getTokenByAddressAndChainId(tokens, ETH_ADDRESS, SupportedChainId.MAINNET)).toStrictEqual(token) + }) + + it('should get token by address and chain id using a contract address', () => { + const token = { + assetId: 'nep141:eth-0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.omft.near', + decimals: 6, + blockchain: TokenResponse.blockchain.ETH, + symbol: 'USDC', + price: 0.999788, + priceUpdatedAt: '2025-09-12T04:08:30.252Z', + contractAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + } + const tokens: TokenResponse[] = [ + { + assetId: 'nep141:eth.omft.near', + decimals: 18, + blockchain: TokenResponse.blockchain.ETH, + symbol: 'ETH', + price: 4503.21, + priceUpdatedAt: '2025-09-12T04:08:30.252Z', + }, + token, + ] + + expect( + getTokenByAddressAndChainId(tokens, '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', SupportedChainId.MAINNET), + ).toStrictEqual(token) + }) + + it('should return null if the token is not found', () => { + const tokens: TokenResponse[] = [ + { + assetId: 'nep141:eth.omft.near', + decimals: 18, + blockchain: TokenResponse.blockchain.ETH, + symbol: 'ETH', + price: 4503.21, + priceUpdatedAt: '2025-09-12T04:08:30.252Z', + }, + { + assetId: 'nep141:eth-0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.omft.near', + decimals: 6, + blockchain: TokenResponse.blockchain.ETH, + symbol: 'USDC', + price: 0.999788, + priceUpdatedAt: '2025-09-12T04:08:30.252Z', + contractAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + }, + ] + + expect( + getTokenByAddressAndChainId( + tokens, + '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + SupportedChainId.ARBITRUM_ONE, + ), + ).toStrictEqual(undefined) + }) + }) +}) diff --git a/packages/bridging/src/providers/near-intents/util.ts b/packages/bridging/src/providers/near-intents/util.ts new file mode 100644 index 000000000..7d87c6bb8 --- /dev/null +++ b/packages/bridging/src/providers/near-intents/util.ts @@ -0,0 +1,106 @@ +import stringify from 'json-stable-stringify' +import type { Quote, QuoteRequest, TokenResponse } from '@defuse-protocol/one-click-sdk-typescript' +import { getGlobalAdapter } from '@cowprotocol/sdk-common' +import { ETH_ADDRESS, TokenInfo } from '@cowprotocol/sdk-config' +import type { Hex } from 'viem' + +import { NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS } from './const' + +import type { NearBlockchainKey } from './const' + +export const calculateDeadline = (seconds: number) => { + const secs = Number(seconds) + if (!Number.isFinite(secs)) { + throw new Error(`Invalid seconds value: ${seconds}`) + } + const d = new Date(Date.now() + secs * 1000) + return d.toISOString().replace(/\.\d{3}Z$/, 'Z') +} + +export const adaptToken = (token: TokenResponse): TokenInfo | null => { + const chainId = NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS[token.blockchain as NearBlockchainKey] + if (!chainId) return null + const tokenAddress = token.contractAddress || ETH_ADDRESS + if (!tokenAddress) return null + + return { + chainId, + decimals: token.decimals, + address: tokenAddress, + name: token.symbol, // TODO: how to handle? v0/tokens doesn't return the token name + symbol: token.symbol, + } +} + +export const adaptTokens = (tokens: TokenResponse[]): TokenInfo[] => + tokens.reduce((acc, token) => { + const adaptedToken = adaptToken(token) + if (!adaptedToken) return acc + acc.push(adaptedToken) + return acc + }, []) + +export const getTokenByAddressAndChainId = ( + tokens: TokenResponse[], + targetTokenAddress: string, + targetTokenChainId: number, +): TokenResponse | undefined => { + return tokens.find((token) => { + const chainId = NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS[token.blockchain as NearBlockchainKey] + if (!chainId) return false + if (targetTokenAddress.toLowerCase() === ETH_ADDRESS.toLowerCase()) { + return chainId === targetTokenChainId && !token.contractAddress + } + const tokenAddress = token.contractAddress || ETH_ADDRESS + return tokenAddress?.toLowerCase() === targetTokenAddress.toLowerCase() && chainId === targetTokenChainId + }) +} + +export const hashQuote = ({ + quote, + quoteRequest, + timestamp, +}: { + quote: Quote + quoteRequest: QuoteRequest + timestamp: any +}): Hex => { + const adapter = getGlobalAdapter() + const data = stringify({ + dry: false, + swapType: quoteRequest.swapType, + slippageTolerance: quoteRequest.slippageTolerance, + originAsset: quoteRequest.originAsset, + depositType: quoteRequest.depositType, + destinationAsset: quoteRequest.destinationAsset, + amount: quoteRequest.amount, + refundTo: quoteRequest.refundTo, + refundType: quoteRequest.refundType, + recipient: quoteRequest.recipient, + recipientType: quoteRequest.recipientType, + deadline: quoteRequest.deadline, + quoteWaitingTimeMs: !!quoteRequest.quoteWaitingTimeMs ? quoteRequest.quoteWaitingTimeMs : undefined, + referral: !!quoteRequest.referral ? quoteRequest.referral : undefined, + virtualChainRecipient: !!quoteRequest.virtualChainRecipient ? quoteRequest.virtualChainRecipient : undefined, + virtualChainRefundRecipient: !!quoteRequest.virtualChainRefundRecipient + ? quoteRequest.virtualChainRefundRecipient + : undefined, + customRecipientMsg: undefined, + sessionId: undefined, + connectedWallets: undefined, + depositMode: quoteRequest.depositMode, + amountIn: quote.amountIn, + amountInFormatted: quote.amountInFormatted, + amountInUsd: quote.amountInUsd, + minAmountIn: quote.minAmountIn, + amountOut: quote.amountOut, + amountOutFormatted: quote.amountOutFormatted, + amountOutUsd: quote.amountOutUsd, + minAmountOut: quote.minAmountOut, + timestamp, + }) + if (!data) { + throw new Error('Failed to serialize quote data: quote or quoteRequest may be undefined or invalid') + } + return adapter.utils.sha256(adapter.utils.toUtf8Bytes(data)) +} diff --git a/packages/bridging/src/types.ts b/packages/bridging/src/types.ts index 411bd2ef2..fd59a28ab 100644 --- a/packages/bridging/src/types.ts +++ b/packages/bridging/src/types.ts @@ -13,11 +13,14 @@ import type { } from '@cowprotocol/sdk-trading' import type { AccountAddress, SignerLike, TTLCache } from '@cowprotocol/sdk-common' +export type BridgeProviderType = 'ReceiverAccountBridgeProvider' | 'HookBridgeProvider' + export interface BridgeProviderInfo { name: string logoUrl: string dappId: string website: string + type: BridgeProviderType } interface WithSellToken { @@ -159,7 +162,7 @@ export interface BridgeDeposit extends Omit { * It contains the main information about the provider, and the methods to get the quote, the bridging params, the status, the cancelling and the refunding of the bridging. */ export interface BridgeProvider { - type: 'ReceiverAccountBridgeProvider' | 'HookBridgeProvider' + type: BridgeProviderType info: BridgeProviderInfo /** @@ -192,12 +195,12 @@ export interface BridgeProvider { /** * Get the identifier of the bridging transaction from the settlement transaction. * @param chainId - * @param orderUid - The unique identifier of the order + * @param order - CoW Protocol order * @param txHash - The hash of the settlement transaction in which the bridging post-hook was executed */ getBridgingParams( chainId: ChainId, - orderUid: string, + order: EnrichedOrder, txHash: string, ): Promise<{ params: BridgingDepositParams; status: BridgeStatusResult } | null> @@ -511,3 +514,5 @@ export interface BestQuoteProviderContext extends MultiQuoteContext { bestResult: { current: MultiQuoteResult | null } firstError: { current: MultiQuoteResult | null } } + +export type DefaultBridgeProvider = BridgeProvider diff --git a/packages/bridging/src/utils.ts b/packages/bridging/src/utils.ts index e4a3a9721..ff77aedc2 100644 --- a/packages/bridging/src/utils.ts +++ b/packages/bridging/src/utils.ts @@ -29,12 +29,12 @@ export function assertIsQuoteAndPost(quote: CrossChainQuoteAndPost): asserts quo } } -export function getPostHooks(fullAppData?: string): latestAppData.CoWHook[] { +export function getPostHooks(fullAppData?: string | object): latestAppData.CoWHook[] { if (!fullAppData) { return [] } - const appData = JSON.parse(fullAppData) + const appData = typeof fullAppData === 'string' ? JSON.parse(fullAppData) : fullAppData if (!isAppDoc(appData)) { return [] } diff --git a/packages/common/src/adapters/types/AdapterUtils.ts b/packages/common/src/adapters/types/AdapterUtils.ts index aa61dfc71..08717c804 100644 --- a/packages/common/src/adapters/types/AdapterUtils.ts +++ b/packages/common/src/adapters/types/AdapterUtils.ts @@ -11,6 +11,8 @@ import { ParamType, } from '.' +export type Hex = `0x${string}` + /** * Abstract class defining the interface for adapter utilities * Based on the EthersV6Utils implementation @@ -32,7 +34,7 @@ export abstract class AdapterUtils { abstract getCreate2Address(from: string, salt: Bytes, initCodeHash: Bytes): string /** - * Concatenates multiple Bytes values + * Concatenates multiple Bytes values into hex string */ abstract hexConcat(items: ReadonlyArray): string @@ -44,7 +46,12 @@ export abstract class AdapterUtils { /** * Computes the keccak256 hash of data */ - abstract keccak256(data: Bytes): string + abstract keccak256(data: Bytes): Hex + + /** + * Computes the sha256 hash of data + */ + abstract sha256(data: Bytes): Hex /** * Pads a value with zeros to the specified length @@ -74,7 +81,9 @@ export abstract class AdapterUtils { /** * Returns the checksum address of an Ethereum address */ - abstract getChecksumAddress(address: string): string + abstract getChecksumAddress(address: string): Hex + + abstract recoverAddress(hash: Hex, signature: Hex): Promise /** * Encodes values using ABI encoding diff --git a/packages/config/src/chains/images/plasma-logo.svg b/packages/config/src/chains/images/plasma-logo.svg index bec9a0352..bf43fdc70 100644 --- a/packages/config/src/chains/images/plasma-logo.svg +++ b/packages/config/src/chains/images/plasma-logo.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/packages/contracts-ts/src/generated/packageVersion.ts b/packages/contracts-ts/src/generated/packageVersion.ts index a3d9331ab..a66d8a609 100644 --- a/packages/contracts-ts/src/generated/packageVersion.ts +++ b/packages/contracts-ts/src/generated/packageVersion.ts @@ -1,3 +1,3 @@ // Automatically generated by the script in scripts/version.js // Do not edit this file manually -export const CONTRACTS_PKG_VERSION = '0.4.4'; +export const CONTRACTS_PKG_VERSION = '0.5.0'; diff --git a/packages/providers/ethers-v5-adapter/src/EthersV5Utils.ts b/packages/providers/ethers-v5-adapter/src/EthersV5Utils.ts index 6a64fbd46..aa3314682 100644 --- a/packages/providers/ethers-v5-adapter/src/EthersV5Utils.ts +++ b/packages/providers/ethers-v5-adapter/src/EthersV5Utils.ts @@ -4,6 +4,7 @@ import { BigIntish, ContractValue, GenericContractInterface, + Hex, ParamType as CommonParamType, } from '@cowprotocol/sdk-common' import { BytesLike, ethers, TypedDataDomain, TypedDataField } from 'ethers' @@ -36,8 +37,12 @@ export class EthersV5Utils implements AdapterUtils { return contractInterface.encodeDeploy(encodeDeployArgs) } - keccak256(data: BytesLike) { - return ethers.utils.keccak256(data) + keccak256(data: BytesLike): Hex { + return ethers.utils.keccak256(data) as Hex + } + + sha256(data: BytesLike): Hex { + return ethers.utils.sha256(data) as Hex } hexZeroPad(value: BytesLike, length: number): string { @@ -64,8 +69,12 @@ export class EthersV5Utils implements AdapterUtils { return ethers.utils._TypedDataEncoder.hash(domain, types, data) } - getChecksumAddress(address: string): string { - return ethers.utils.getAddress(address) + getChecksumAddress(address: string): Hex { + return ethers.utils.getAddress(address) as Hex + } + + async recoverAddress(hash: Hex, signature: Hex): Promise { + return ethers.utils.recoverAddress(hash, signature) as Hex } encodeAbi(types: string[], values: ContractValue[]): BytesLike { diff --git a/packages/providers/ethers-v6-adapter/src/EthersV6Utils.ts b/packages/providers/ethers-v6-adapter/src/EthersV6Utils.ts index 0a601eef1..a69911563 100644 --- a/packages/providers/ethers-v6-adapter/src/EthersV6Utils.ts +++ b/packages/providers/ethers-v6-adapter/src/EthersV6Utils.ts @@ -1,4 +1,4 @@ -import { AdapterUtils, ContractValue, CowError, ParamType as CommonParamType } from '@cowprotocol/sdk-common' +import { AdapterUtils, ContractValue, CowError, Hex, ParamType as CommonParamType } from '@cowprotocol/sdk-common' import { Interface, TypedDataField, @@ -30,6 +30,8 @@ import { parseUnits, ParamType, isAddress, + sha256, + recoverAddress, } from 'ethers' import { TypedDataDomain } from 'ethers' import { EthersV6InterfaceWrapper } from './EthersV6InterfaceWrapper' @@ -77,8 +79,12 @@ export class EthersV6Utils implements AdapterUtils { return encodeBytes32String(text) } - keccak256(data: BytesLike): string { - return keccak256(this.toEthersBytesLike(data)) + keccak256(data: BytesLike): Hex { + return keccak256(this.toEthersBytesLike(data)) as Hex + } + + sha256(data: BytesLike): Hex { + return sha256(this.toEthersBytesLike(data)) as Hex } // Helper method to convert our BytesLike to ethers BytesLike @@ -122,8 +128,12 @@ export class EthersV6Utils implements AdapterUtils { return TypedDataEncoder.hash(domain, types, data) } - getChecksumAddress(address: string): string { - return getAddress(address) + getChecksumAddress(address: string): Hex { + return getAddress(address) as Hex + } + + async recoverAddress(hash: Hex, signature: Hex): Promise { + return recoverAddress(hash, signature) as Hex } encodeAbi(types: string[], values: ContractValue[]): BytesLike { diff --git a/packages/providers/viem-adapter/src/ViemUtils.ts b/packages/providers/viem-adapter/src/ViemUtils.ts index 7654e2bda..164768d2c 100644 --- a/packages/providers/viem-adapter/src/ViemUtils.ts +++ b/packages/providers/viem-adapter/src/ViemUtils.ts @@ -40,6 +40,8 @@ import { parseUnits, sliceHex, toBytes, + sha256, + recoverAddress, } from 'viem' import { ViemInterfaceWrapper } from './ViemInterfaceWrapper' import { ViemParamType } from './ViemParamtype' @@ -98,10 +100,14 @@ export class ViemUtils implements AdapterUtils { return paddedBytes } - keccak256(data: Hex): string { + keccak256(data: Hex): `0x${string}` { return keccak256(data) } + sha256(data: Hex): Hex { + return sha256(data) + } + private bytesToHex(bytes: Uint8Array): Hex { return `0x${Array.from(bytes) .map((b) => b.toString(16).padStart(2, '0')) @@ -149,6 +155,10 @@ export class ViemUtils implements AdapterUtils { return getAddress(address) } + recoverAddress(hash: Hex, signature: Hex): Promise { + return recoverAddress({ hash, signature }) + } + encodeAbi(types: { type: string; name: string }[] | string[], values: ContractValue[]): `0x${string}` { if (typeof types[0] === 'string') { return encodeAbiParameters( diff --git a/packages/trading/src/appDataUtils.ts b/packages/trading/src/appDataUtils.ts index fbb8cad9c..df3096d92 100644 --- a/packages/trading/src/appDataUtils.ts +++ b/packages/trading/src/appDataUtils.ts @@ -59,7 +59,7 @@ export async function mergeAppDataDoc( hooks: {}, }, } - : _doc + : { ..._doc } const appData = (appDataOverride ? deepmerge(doc, appDataOverride) : doc) as LatestAppDataDocVersion const { fullAppData, appDataKeccak256 } = await generateAppDataFromDoc(appData) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1768a952e..c20a142cc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -31,10 +31,10 @@ importers: version: 16.18.0 tsup: specifier: ^7.2.0 - version: 7.3.0(@swc/core@1.13.4)(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@22.15.24)(typescript@5.8.3))(typescript@5.8.3) + version: 7.3.0(@swc/core@1.13.4(@swc/helpers@0.5.17))(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@22.15.24)(typescript@5.8.3))(typescript@5.8.3) turbo: specifier: latest - version: 2.5.5 + version: 2.6.0 typescript: specifier: ^5.2.2 version: 5.8.3 @@ -65,7 +65,7 @@ importers: version: 20.17.52 ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3) + version: 10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3) typescript: specifier: ^5.6.3 version: 5.8.3 @@ -90,7 +90,7 @@ importers: version: 20.17.52 ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3) + version: 10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3) typescript: specifier: ^5.6.3 version: 5.8.3 @@ -115,7 +115,7 @@ importers: version: 20.17.52 ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3) + version: 10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3) typescript: specifier: ^5.6.3 version: 5.8.3 @@ -152,7 +152,7 @@ importers: version: 19.1.7(@types/react@19.1.10) '@vitejs/plugin-react-swc': specifier: ^4.0.0 - version: 4.0.1(vite@7.1.3(@types/node@22.15.24)(jiti@2.4.2)(tsx@4.19.4)(yaml@2.8.0)) + version: 4.0.1(@swc/helpers@0.5.17)(vite@7.1.3(@types/node@22.15.24)(jiti@2.4.2)(tsx@4.19.4)(yaml@2.8.0)) eslint: specifier: ^9.33.0 version: 9.33.0(jiti@2.4.2) @@ -204,7 +204,7 @@ importers: version: 19.1.7(@types/react@19.1.10) '@vitejs/plugin-react-swc': specifier: ^4.0.0 - version: 4.0.1(vite@7.1.3(@types/node@22.15.24)(jiti@2.4.2)(tsx@4.19.4)(yaml@2.8.0)) + version: 4.0.1(@swc/helpers@0.5.17)(vite@7.1.3(@types/node@22.15.24)(jiti@2.4.2)(tsx@4.19.4)(yaml@2.8.0)) eslint: specifier: ^9.33.0 version: 9.33.0(jiti@2.4.2) @@ -256,7 +256,7 @@ importers: version: 19.1.7(@types/react@19.1.10) '@vitejs/plugin-react-swc': specifier: ^4.0.0 - version: 4.0.1(vite@7.1.3(@types/node@22.15.24)(jiti@2.4.2)(tsx@4.19.4)(yaml@2.8.0)) + version: 4.0.1(@swc/helpers@0.5.17)(vite@7.1.3(@types/node@22.15.24)(jiti@2.4.2)(tsx@4.19.4)(yaml@2.8.0)) eslint: specifier: ^9.33.0 version: 9.33.0(jiti@2.4.2) @@ -297,24 +297,24 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) viem: - specifier: ^2.28.4 - version: 2.37.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + specifier: ^2.38.6 + version: 2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) wagmi: specifier: latest - version: 2.16.9(@tanstack/query-core@5.45.0)(@tanstack/react-query@5.45.1(react@18.3.1))(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.37.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + version: 2.19.2(@tanstack/query-core@5.45.0)(@tanstack/react-query@5.45.1(react@18.3.1))(@types/react@18.3.26)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.12) devDependencies: '@types/react': specifier: ^18.3.1 - version: 18.3.24 + version: 18.3.26 '@types/react-dom': specifier: ^18.3.0 - version: 18.3.7(@types/react@18.3.24) + version: 18.3.7(@types/react@18.3.26) '@vitejs/plugin-react': specifier: ^4.2.1 - version: 4.7.0(vite@5.4.20(@types/node@22.15.24)) + version: 4.7.0(vite@5.4.21(@types/node@22.15.24)) '@wagmi/cli': specifier: latest - version: 2.5.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + version: 2.7.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) buffer: specifier: ^6.0.3 version: 6.0.3 @@ -323,7 +323,7 @@ importers: version: 5.8.3 vite: specifier: ^5.2.11 - version: 5.4.20(@types/node@22.15.24) + version: 5.4.21(@types/node@22.15.24) packages/app-data: dependencies: @@ -381,7 +381,7 @@ importers: version: ethers@6.14.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)) + version: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)) jest-fetch-mock: specifier: ^3.0.3 version: 3.0.3 @@ -396,10 +396,10 @@ importers: version: 1.0.0 ts-jest: specifier: ^29.0.0 - version: 29.3.4(@babel/core@7.27.1)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.1))(esbuild@0.19.12)(jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)))(typescript@5.8.3) + version: 29.3.4(@babel/core@7.27.1)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.1))(esbuild@0.19.12)(jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)))(typescript@5.8.3) tsup: specifier: ^7.2.0 - version: 7.3.0(@swc/core@1.13.4)(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) + version: 7.3.0(@swc/core@1.13.4(@swc/helpers@0.5.17))(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) tsx: specifier: ^4.19.4 version: 4.19.4 @@ -436,6 +436,12 @@ importers: '@cowprotocol/sdk-weiroll': specifier: workspace:* version: link:../weiroll + '@defuse-protocol/one-click-sdk-typescript': + specifier: 0.1.1-0.2 + version: 0.1.1-0.2 + json-stable-stringify: + specifier: ^1.3.0 + version: 1.3.0 devDependencies: '@cow-sdk/typescript-config': specifier: workspace:* @@ -472,16 +478,16 @@ importers: version: ethers@6.14.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)) + version: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)) jest-fetch-mock: specifier: ^3.0.3 version: 3.0.3 ts-jest: specifier: ^29.0.0 - version: 29.3.4(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)))(typescript@5.8.3) + version: 29.3.4(@babel/core@7.28.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.5))(jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)))(typescript@5.8.3) tsup: specifier: ^7.2.0 - version: 7.3.0(@swc/core@1.13.4)(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) + version: 7.3.0(@swc/core@1.13.4(@swc/helpers@0.5.17))(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) typescript: specifier: ^5.2.2 version: 5.8.3 @@ -502,13 +508,13 @@ importers: version: 20.17.52 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)) + version: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)) ts-jest: specifier: ^29.0.0 - version: 29.3.4(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)))(typescript@5.8.3) + version: 29.3.4(@babel/core@7.28.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.5))(jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)))(typescript@5.8.3) tsup: specifier: ^7.2.0 - version: 7.3.0(@swc/core@1.13.4)(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) + version: 7.3.0(@swc/core@1.13.4(@swc/helpers@0.5.17))(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) typescript: specifier: ^5.2.2 version: 5.8.3 @@ -566,13 +572,13 @@ importers: version: ethers@6.14.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)) + version: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)) ts-jest: specifier: ^29.1.1 - version: 29.3.4(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)))(typescript@5.8.3) + version: 29.3.4(@babel/core@7.28.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.5))(jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)))(typescript@5.8.3) tsup: specifier: ^7.2.0 - version: 7.3.0(@swc/core@1.13.4)(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) + version: 7.3.0(@swc/core@1.13.4(@swc/helpers@0.5.17))(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) typescript: specifier: ^5.2.2 version: 5.8.3 @@ -597,7 +603,7 @@ importers: version: 20.17.52 tsup: specifier: ^7.2.0 - version: 7.3.0(@swc/core@1.13.4)(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) + version: 7.3.0(@swc/core@1.13.4(@swc/helpers@0.5.17))(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) typescript: specifier: ^5.2.2 version: 5.8.3 @@ -640,13 +646,13 @@ importers: version: ethers@6.14.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)) + version: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)) ts-jest: specifier: ^29.1.1 - version: 29.3.4(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)))(typescript@5.8.3) + version: 29.3.4(@babel/core@7.28.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.5))(jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)))(typescript@5.8.3) tsup: specifier: ^7.2.0 - version: 7.3.0(@swc/core@1.13.4)(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) + version: 7.3.0(@swc/core@1.13.4(@swc/helpers@0.5.17))(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) typescript: specifier: ^5.2.2 version: 5.8.3 @@ -701,16 +707,16 @@ importers: version: ethers@6.14.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)) + version: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)) jest-fetch-mock: specifier: ^3.0.3 version: 3.0.3 ts-jest: specifier: ^29.0.0 - version: 29.3.4(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)))(typescript@5.8.3) + version: 29.3.4(@babel/core@7.28.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.5))(jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)))(typescript@5.8.3) tsup: specifier: ^7.2.0 - version: 7.3.0(@swc/core@1.13.4)(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) + version: 7.3.0(@swc/core@1.13.4(@swc/helpers@0.5.17))(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) tsx: specifier: ^4.19.4 version: 4.19.4 @@ -774,16 +780,16 @@ importers: version: ethers@6.14.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)) + version: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)) jest-fetch-mock: specifier: ^3.0.3 version: 3.0.3 ts-jest: specifier: ^29.0.0 - version: 29.3.4(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)))(typescript@5.8.3) + version: 29.3.4(@babel/core@7.28.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.5))(jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)))(typescript@5.8.3) tsup: specifier: ^7.2.0 - version: 7.3.0(@swc/core@1.13.4)(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) + version: 7.3.0(@swc/core@1.13.4(@swc/helpers@0.5.17))(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) typescript: specifier: ^5.2.2 version: 5.8.3 @@ -826,7 +832,7 @@ importers: version: 3.1.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)) + version: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)) jest-fetch-mock: specifier: ^3.0.3 version: 3.0.3 @@ -835,10 +841,10 @@ importers: version: 0.29.0 ts-jest: specifier: ^29.0.0 - version: 29.3.4(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)))(typescript@5.8.3) + version: 29.3.4(@babel/core@7.28.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.5))(jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)))(typescript@5.8.3) tsup: specifier: ^7.2.0 - version: 7.3.0(@swc/core@1.13.4)(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) + version: 7.3.0(@swc/core@1.13.4(@swc/helpers@0.5.17))(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) tsx: specifier: ^4.19.4 version: 4.19.4 @@ -893,13 +899,13 @@ importers: version: ethers@6.14.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)) + version: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)) ts-jest: specifier: ^29.1.1 - version: 29.3.4(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)))(typescript@5.8.3) + version: 29.3.4(@babel/core@7.28.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.5))(jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)))(typescript@5.8.3) tsup: specifier: ^7.2.0 - version: 7.3.0(@swc/core@1.13.4)(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) + version: 7.3.0(@swc/core@1.13.4(@swc/helpers@0.5.17))(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) typescript: specifier: ^5.2.2 version: 5.8.3 @@ -930,7 +936,7 @@ importers: version: 20.17.52 tsup: specifier: ^7.2.0 - version: 7.3.0(@swc/core@1.13.4)(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) + version: 7.3.0(@swc/core@1.13.4(@swc/helpers@0.5.17))(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) typescript: specifier: ^5.2.2 version: 5.8.3 @@ -952,7 +958,7 @@ importers: version: 20.17.52 tsup: specifier: ^7.2.0 - version: 7.3.0(@swc/core@1.13.4)(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) + version: 7.3.0(@swc/core@1.13.4(@swc/helpers@0.5.17))(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) typescript: specifier: ^5.2.2 version: 5.8.3 @@ -974,7 +980,7 @@ importers: version: 20.17.52 tsup: specifier: ^7.2.0 - version: 7.3.0(@swc/core@1.13.4)(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) + version: 7.3.0(@swc/core@1.13.4(@swc/helpers@0.5.17))(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) typescript: specifier: ^5.2.2 version: 5.8.3 @@ -1023,16 +1029,16 @@ importers: version: 20.17.52 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)) + version: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)) shx: specifier: ^0.3.4 version: 0.3.4 ts-node: specifier: ^10.8.2 - version: 10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3) + version: 10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3) tsup: specifier: ^7.2.0 - version: 7.3.0(@swc/core@1.13.4)(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) + version: 7.3.0(@swc/core@1.13.4(@swc/helpers@0.5.17))(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) typescript: specifier: ^5.2.2 version: 5.8.3 @@ -1075,16 +1081,16 @@ importers: version: 3.1.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)) + version: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)) jest-fetch-mock: specifier: ^3.0.3 version: 3.0.3 ts-node: specifier: ^10.8.2 - version: 10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3) + version: 10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3) tsup: specifier: ^7.2.0 - version: 7.3.0(@swc/core@1.13.4)(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) + version: 7.3.0(@swc/core@1.13.4(@swc/helpers@0.5.17))(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) typescript: specifier: ^5.2.2 version: 5.8.3 @@ -1145,19 +1151,19 @@ importers: version: ethers@6.14.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)) + version: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)) jest-fetch-mock: specifier: ^3.0.3 version: 3.0.3 ts-jest: specifier: ^29.0.0 - version: 29.3.4(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)))(typescript@5.8.3) + version: 29.3.4(@babel/core@7.28.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.5))(jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)))(typescript@5.8.3) ts-node: specifier: ^10.8.2 - version: 10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3) + version: 10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3) tsup: specifier: ^7.2.0 - version: 7.3.0(@swc/core@1.13.4)(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) + version: 7.3.0(@swc/core@1.13.4(@swc/helpers@0.5.17))(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) tsx: specifier: ^4.19.4 version: 4.19.4 @@ -1211,16 +1217,16 @@ importers: version: ethers@6.14.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)) + version: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)) jest-fetch-mock: specifier: ^3.0.3 version: 3.0.3 ts-jest: specifier: ^29.0.0 - version: 29.3.4(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)))(typescript@5.8.3) + version: 29.3.4(@babel/core@7.28.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.5))(jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)))(typescript@5.8.3) tsup: specifier: ^7.2.0 - version: 7.3.0(@swc/core@1.13.4)(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) + version: 7.3.0(@swc/core@1.13.4(@swc/helpers@0.5.17))(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3) tsx: specifier: ^4.19.4 version: 4.19.4 @@ -1271,16 +1277,16 @@ packages: resolution: {integrity: sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==} engines: {node: '>=6.9.0'} - '@babel/core@7.28.4': - resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==} + '@babel/core@7.28.5': + resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} engines: {node: '>=6.9.0'} '@babel/generator@7.27.3': resolution: {integrity: sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q==} engines: {node: '>=6.9.0'} - '@babel/generator@7.28.3': - resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} + '@babel/generator@7.28.5': + resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} engines: {node: '>=6.9.0'} '@babel/helper-compilation-targets@7.27.2': @@ -1319,6 +1325,10 @@ packages: resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.27.1': resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} @@ -1336,8 +1346,8 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.28.4': - resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} + '@babel/parser@7.28.5': + resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} engines: {node: '>=6.0.0'} hasBin: true @@ -1462,24 +1472,27 @@ packages: resolution: {integrity: sha512-lId/IfN/Ye1CIu8xG7oKBHXd2iNb2aW1ilPszzGcJug6M8RCKfVNcYhpI5+bMvFYjK7lXIM0R+a+6r8xhHp2FQ==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.4': - resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} + '@babel/traverse@7.28.5': + resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} engines: {node: '>=6.9.0'} '@babel/types@7.27.3': resolution: {integrity: sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.4': - resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} + '@babel/types@7.28.5': + resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} engines: {node: '>=6.9.0'} - '@base-org/account@1.1.1': - resolution: {integrity: sha512-IfVJPrDPhHfqXRDb89472hXkpvJuQQR7FDI9isLPHEqSYt/45whIoBxSPgZ0ssTt379VhQo4+87PWI1DoLSfAQ==} + '@base-org/account@2.4.0': + resolution: {integrity: sha512-A4Umpi8B9/pqR78D1Yoze4xHyQaujioVRqqO3d6xuDFw9VRtjg6tK3bPlwE0aW+nVH/ntllCpPa2PbI8Rnjcug==} '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@coinbase/cdp-sdk@1.38.5': + resolution: {integrity: sha512-j8mvx1wMox/q2SjB7C09HtdRXVOpGpfkP7nG4+OjdowPj8pmQ03rigzycd86L8mawl6TUPXdm41YSQVmtc8SzQ==} + '@coinbase/wallet-sdk@3.9.3': resolution: {integrity: sha512-N/A2DRIf0Y3PHc1XAMvbBUu4zisna6qAdqABMZwBMNEfWrXpAwx16pZGkYCLGE+Rvv1edbcB2LYDRnACNcmCiw==} @@ -1493,6 +1506,10 @@ packages: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} + '@defuse-protocol/one-click-sdk-typescript@0.1.1-0.2': + resolution: {integrity: sha512-Jgt8uZlB5hQAo3UpyHH9XcXKNT6Vsqd7TTPy/vLEwuOvQ88Pag9qUxpU9Z2jYMD8SqOpxzaJrtgx+FSDb4lQ9A==} + engines: {node: '>=16', pnpm: '>=8'} + '@ecies/ciphers@0.2.4': resolution: {integrity: sha512-t+iX+Wf5nRKyNzk8dviW3Ikb/280+aEJAnw9YXvCp2tYGPSkMki+NRY+8aNLmVFv3eNtMdvViPNOPxS8SZNP+w==} engines: {bun: '>=1', deno: '>=2', node: '>=16'} @@ -2202,8 +2219,8 @@ packages: '@fastify/busboy@3.1.1': resolution: {integrity: sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==} - '@gemini-wallet/core@0.2.0': - resolution: {integrity: sha512-vv9aozWnKrrPWQ3vIFcWk7yta4hQW1Ie0fsNNPeXnjAxkbXr2hqMagEptLuMxpEP2W3mnRu05VDNKzcvAuuZDw==} + '@gemini-wallet/core@0.3.1': + resolution: {integrity: sha512-XP+/NRAaRV7Adlt6aFxrF/3a0i3qpxFTSVm/dzG+mceXTSgIGOUUT65w69ttLQ/GWEcAEQL/hKoV6PFAJA/DmQ==} peerDependencies: viem: '>=2.0.0' @@ -2408,6 +2425,7 @@ packages: '@graphql-tools/prisma-loader@8.0.17': resolution: {integrity: sha512-fnuTLeQhqRbA156pAyzJYN0KxCjKYRU5bz1q/SKOwElSnAU4k7/G1kyVsWLh7fneY78LoMNH5n+KlFV8iQlnyg==} engines: {node: '>=16.0.0'} + deprecated: 'This package was intended to be used with an older versions of Prisma.\nThe newer versions of Prisma has a different approach to GraphQL integration.\nTherefore, this package is no longer needed and has been deprecated and removed.\nLearn more: https://www.prisma.io/graphql' peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -2653,8 +2671,11 @@ packages: resolution: {integrity: sha512-5yb2gMI1BDm0JybZezeoX/3XhPDOtTbcFvpTXM9kxsoZjPZFh4XciqRbpD6N86HYZqWDhEaKUDuOyR0sQHEjMA==} engines: {node: '>=12.0.0'} - '@metamask/sdk-communication-layer@0.32.0': - resolution: {integrity: sha512-dmj/KFjMi1fsdZGIOtbhxdg3amxhKL/A5BqSU4uh/SyDKPub/OT+x5pX8bGjpTL1WPWY/Q0OIlvFyX3VWnT06Q==} + '@metamask/sdk-analytics@0.0.5': + resolution: {integrity: sha512-fDah+keS1RjSUlC8GmYXvx6Y26s3Ax1U9hGpWb6GSY5SAdmTSIqp2CvYy6yW0WgLhnYhW+6xERuD0eVqV63QIQ==} + + '@metamask/sdk-communication-layer@0.33.1': + resolution: {integrity: sha512-0bI9hkysxcfbZ/lk0T2+aKVo1j0ynQVTuB3sJ5ssPWlz+Z3VwveCkP1O7EVu1tsVVCb0YV5WxK9zmURu2FIiaA==} peerDependencies: cross-fetch: ^4.0.0 eciesjs: '*' @@ -2662,18 +2683,18 @@ packages: readable-stream: ^3.6.2 socket.io-client: ^4.5.1 - '@metamask/sdk-install-modal-web@0.32.0': - resolution: {integrity: sha512-TFoktj0JgfWnQaL3yFkApqNwcaqJ+dw4xcnrJueMP3aXkSNev2Ido+WVNOg4IIMxnmOrfAC9t0UJ0u/dC9MjOQ==} + '@metamask/sdk-install-modal-web@0.32.1': + resolution: {integrity: sha512-MGmAo6qSjf1tuYXhCu2EZLftq+DSt5Z7fsIKr2P+lDgdTPWgLfZB1tJKzNcwKKOdf6q9Qmmxn7lJuI/gq5LrKw==} - '@metamask/sdk@0.32.0': - resolution: {integrity: sha512-WmGAlP1oBuD9hk4CsdlG1WJFuPtYJY+dnTHJMeCyohTWD2GgkcLMUUuvu9lO1/NVzuOoSi1OrnjbuY1O/1NZ1g==} + '@metamask/sdk@0.33.1': + resolution: {integrity: sha512-1mcOQVGr9rSrVcbKPNVzbZ8eCl1K0FATsYH3WJ/MH4WcZDWGECWrXJPNMZoEAkLxWiMe8jOQBumg2pmcDa9zpQ==} '@metamask/superstruct@3.2.1': resolution: {integrity: sha512-fLgJnDOXFmuVlB38rUN5SmU7hAFQcCjrg3Vrxz67KTY7YHFnSNEKvX4avmEBdOI0yTCxZjwMCFEqsC8k2+Wd3g==} engines: {node: '>=16.0.0'} - '@metamask/utils@11.8.0': - resolution: {integrity: sha512-EJqiuvVBAjV1vd1kBhmVmRtGfadrBfY3ImcAMjl+8MSSByTB3VNwvlIBLQdp+TwdAomUdenJCx2BvOSQykm8Hg==} + '@metamask/utils@11.8.1': + resolution: {integrity: sha512-DIbsNUyqWLFgqJlZxi1OOCMYvI23GqFCvNJAtzv8/WXWzJfnJnvp1M24j7VvUe3URBi3S86UgQ7+7aWU9p/cnQ==} engines: {node: ^18.18 || ^20.14 || >=22} '@metamask/utils@5.0.2': @@ -2721,6 +2742,10 @@ packages: 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.3.2': resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} engines: {node: '>= 16'} @@ -3035,6 +3060,267 @@ packages: '@socket.io/component-emitter@3.1.2': resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} + '@solana-program/system@0.8.1': + resolution: {integrity: sha512-71U9Mzdpw8HQtfgfJSL5xKZbLMRnza2Llsfk7gGnmg2waqK+o8MMH4YNma8xXS1UmOBptXIiNvoZ3p7cmOVktg==} + peerDependencies: + '@solana/kit': ^3.0 + + '@solana-program/token@0.6.0': + resolution: {integrity: sha512-omkZh4Tt9rre4wzWHNOhOEHyenXQku3xyc/UrKvShexA/Qlhza67q7uRwmwEDUs4QqoDBidSZPooOmepnA/jig==} + peerDependencies: + '@solana/kit': ^3.0 + + '@solana/accounts@3.0.3': + resolution: {integrity: sha512-KqlePrlZaHXfu8YQTCxN204ZuVm9o68CCcUr6l27MG2cuRUtEM1Ta0iR8JFkRUAEfZJC4Cu0ZDjK/v49loXjZQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/addresses@3.0.3': + resolution: {integrity: sha512-AuMwKhJI89ANqiuJ/fawcwxNKkSeHH9CApZd2xelQQLS7X8uxAOovpcmEgiObQuiVP944s9ScGUT62Bdul9qYg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/assertions@3.0.3': + resolution: {integrity: sha512-2qspxdbWp2y62dfCIlqeWQr4g+hE8FYSSwcaP6itwMwGRb8393yDGCJfI/znuzJh6m/XVWhMHIgFgsBwnevCmg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/buffer-layout@4.0.1': + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + + '@solana/codecs-core@2.3.0': + resolution: {integrity: sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-core@3.0.3': + resolution: {integrity: sha512-emKykJ3h1DmnDOY29Uv9eJXP8E/FHzvlUBJ6te+5EbKdFjj7vdlKYPfDxOI6iGdXTY+YC/ELtbNBh6QwF2uEDQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-data-structures@3.0.3': + resolution: {integrity: sha512-R15cLp8riJvToXziW8lP6AMSwsztGhEnwgyGmll32Mo0Yjq+hduW2/fJrA/TJs6tA/OgTzMQjlxgk009EqZHCw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-numbers@2.3.0': + resolution: {integrity: sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-numbers@3.0.3': + resolution: {integrity: sha512-pfXkH9J0glrM8qj6389GAn30+cJOxzXLR2FsPOHCUMXrqLhGjMMZAWhsQkpOQ37SGc/7EiQsT/gmyGC7gxHqJQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-strings@3.0.3': + resolution: {integrity: sha512-VHBXnnTVtcQ1j+7Vrz+qSYo38no+jiHRdGnhFspRXEHNJbllzwKqgBE7YN3qoIXH+MKxgJUcwO5KHmdzf8Wn2A==} + engines: {node: '>=20.18.0'} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: '>=5.3.3' + + '@solana/codecs@3.0.3': + resolution: {integrity: sha512-GOHwTlIQsCoJx9Ryr6cEf0FHKAQ7pY4aO4xgncAftrv0lveTQ1rPP2inQ1QT0gJllsIa8nwbfXAADs9nNJxQDA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/errors@2.3.0': + resolution: {integrity: sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==} + engines: {node: '>=20.18.0'} + hasBin: true + peerDependencies: + typescript: '>=5.3.3' + + '@solana/errors@3.0.3': + resolution: {integrity: sha512-1l84xJlHNva6io62PcYfUamwWlc0eM95nHgCrKX0g0cLoC6D6QHYPCEbEVkR+C5UtP9JDgyQM8MFiv+Ei5tO9Q==} + engines: {node: '>=20.18.0'} + hasBin: true + peerDependencies: + typescript: '>=5.3.3' + + '@solana/fast-stable-stringify@3.0.3': + resolution: {integrity: sha512-ED0pxB6lSEYvg+vOd5hcuQrgzEDnOrURFgp1ZOY+lQhJkQU6xo+P829NcJZQVP1rdU2/YQPAKJKEseyfe9VMIw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/functional@3.0.3': + resolution: {integrity: sha512-2qX1kKANn8995vOOh5S9AmF4ItGZcfbny0w28Eqy8AFh+GMnSDN4gqpmV2LvxBI9HibXZptGH3RVOMk82h1Mpw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/instruction-plans@3.0.3': + resolution: {integrity: sha512-eqoaPtWtmLTTpdvbt4BZF5H6FIlJtXi9H7qLOM1dLYonkOX2Ncezx5NDCZ9tMb2qxVMF4IocYsQnNSnMfjQF1w==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/instructions@3.0.3': + resolution: {integrity: sha512-4csIi8YUDb5j/J+gDzmYtOvq7ZWLbCxj4t0xKn+fPrBk/FD2pK29KVT3Fu7j4Lh1/ojunQUP9X4NHwUexY3PnA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/keys@3.0.3': + resolution: {integrity: sha512-tp8oK9tMadtSIc4vF4aXXWkPd4oU5XPW8nf28NgrGDWGt25fUHIydKjkf2hPtMt9i1WfRyQZ33B5P3dnsNqcPQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/kit@3.0.3': + resolution: {integrity: sha512-CEEhCDmkvztd1zbgADsEQhmj9GyWOOGeW1hZD+gtwbBSF5YN1uofS/pex5MIh/VIqKRj+A2UnYWI1V+9+q/lyQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/nominal-types@3.0.3': + resolution: {integrity: sha512-aZavCiexeUAoMHRQg4s1AHkH3wscbOb70diyfjhwZVgFz1uUsFez7csPp9tNFkNolnadVb2gky7yBk3IImQJ6A==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/options@3.0.3': + resolution: {integrity: sha512-jarsmnQ63RN0JPC5j9sgUat07NrL9PC71XU7pUItd6LOHtu4+wJMio3l5mT0DHVfkfbFLL6iI6+QmXSVhTNF3g==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/programs@3.0.3': + resolution: {integrity: sha512-JZlVE3/AeSNDuH3aEzCZoDu8GTXkMpGXxf93zXLzbxfxhiQ/kHrReN4XE/JWZ/uGWbaFZGR5B3UtdN2QsoZL7w==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/promises@3.0.3': + resolution: {integrity: sha512-K+UflGBVxj30XQMHTylHHZJdKH5QG3oj5k2s42GrZ/Wbu72oapVJySMBgpK45+p90t8/LEqV6rRPyTXlet9J+Q==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-api@3.0.3': + resolution: {integrity: sha512-Yym9/Ama62OY69rAZgbOCAy1QlqaWAyb0VlqFuwSaZV1pkFCCFSwWEJEsiN1n8pb2ZP+RtwNvmYixvWizx9yvA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-parsed-types@3.0.3': + resolution: {integrity: sha512-/koM05IM2fU91kYDQxXil3VBNlOfcP+gXE0js1sdGz8KonGuLsF61CiKB5xt6u1KEXhRyDdXYLjf63JarL4Ozg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-spec-types@3.0.3': + resolution: {integrity: sha512-A6Jt8SRRetnN3CeGAvGJxigA9zYRslGgWcSjueAZGvPX+MesFxEUjSWZCfl+FogVFvwkqfkgQZQbPAGZQFJQ6Q==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-spec@3.0.3': + resolution: {integrity: sha512-MZn5/8BebB6MQ4Gstw6zyfWsFAZYAyLzMK+AUf/rSfT8tPmWiJ/mcxnxqOXvFup/l6D67U8pyGpIoFqwCeZqqA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-subscriptions-api@3.0.3': + resolution: {integrity: sha512-MGgVK3PUS15qsjuhimpzGZrKD/CTTvS0mAlQ0Jw84zsr1RJVdQJK/F0igu07BVd172eTZL8d90NoAQ3dahW5pA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-subscriptions-channel-websocket@3.0.3': + resolution: {integrity: sha512-zUzUlb8Cwnw+SHlsLrSqyBRtOJKGc+FvSNJo/vWAkLShoV0wUDMPv7VvhTngJx3B/3ANfrOZ4i08i9QfYPAvpQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + ws: ^8.18.0 + + '@solana/rpc-subscriptions-spec@3.0.3': + resolution: {integrity: sha512-9KpQ32OBJWS85mn6q3gkM0AjQe1LKYlMU7gpJRrla/lvXxNLhI95tz5K6StctpUreVmRWTVkNamHE69uUQyY8A==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-subscriptions@3.0.3': + resolution: {integrity: sha512-LRvz6NaqvtsYFd32KwZ+rwYQ9XCs+DWjV8BvBLsJpt9/NWSuHf/7Sy/vvP6qtKxut692H/TMvHnC4iulg0WmiQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-transformers@3.0.3': + resolution: {integrity: sha512-lzdaZM/dG3s19Tsk4mkJA5JBoS1eX9DnD7z62gkDwrwJDkDBzkAJT9aLcsYFfTmwTfIp6uU2UPgGYc97i1wezw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-transport-http@3.0.3': + resolution: {integrity: sha512-bIXFwr2LR5A97Z46dI661MJPbHnPfcShBjFzOS/8Rnr8P4ho3j/9EUtjDrsqoxGJT3SLWj5OlyXAlaDAvVTOUQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-types@3.0.3': + resolution: {integrity: sha512-petWQ5xSny9UfmC3Qp2owyhNU0w9SyBww4+v7tSVyXMcCC9v6j/XsqTeimH1S0qQUllnv0/FY83ohFaxofmZ6Q==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc@3.0.3': + resolution: {integrity: sha512-3oukAaLK78GegkKcm6iNmRnO4mFeNz+BMvA8T56oizoBNKiRVEq/6DFzVX/LkmZ+wvD601pAB3uCdrTPcC0YKQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/signers@3.0.3': + resolution: {integrity: sha512-UwCd/uPYTZiwd283JKVyOWLLN5sIgMBqGDyUmNU3vo9hcmXKv5ZGm/9TvwMY2z35sXWuIOcj7etxJ8OoWc/ObQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/subscribable@3.0.3': + resolution: {integrity: sha512-FJ27LKGHLQ5GGttPvTOLQDLrrOZEgvaJhB7yYaHAhPk25+p+erBaQpjePhfkMyUbL1FQbxn1SUJmS6jUuaPjlQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/sysvars@3.0.3': + resolution: {integrity: sha512-GnHew+QeKCs2f9ow+20swEJMH4mDfJA/QhtPgOPTYQx/z69J4IieYJ7fZenSHnA//lJ45fVdNdmy1trypvPLBQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/transaction-confirmation@3.0.3': + resolution: {integrity: sha512-dXx0OLtR95LMuARgi2dDQlL1QYmk56DOou5q9wKymmeV3JTvfDExeWXnOgjRBBq/dEfj4ugN1aZuTaS18UirFw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/transaction-messages@3.0.3': + resolution: {integrity: sha512-s+6NWRnBhnnjFWV4x2tzBzoWa6e5LiIxIvJlWwVQBFkc8fMGY04w7jkFh0PM08t/QFKeXBEWkyBDa/TFYdkWug==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/transactions@3.0.3': + resolution: {integrity: sha512-iMX+n9j4ON7H1nKlWEbMqMOpKYC6yVGxKKmWHT1KdLRG7v+03I4DnDeFoI+Zmw56FA+7Bbne8jwwX60Q1vk/MQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/web3.js@1.98.4': + resolution: {integrity: sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw==} + '@swc/core-darwin-arm64@1.13.4': resolution: {integrity: sha512-CGbTu9dGBwgklUj+NAQAYyPjBuoHaNRWK4QXJRv1QNIkhtE27aY7QA9uEON14SODxsio3t8+Pjjl2Mzx1Pxf+g==} engines: {node: '>=10'} @@ -3107,6 +3393,9 @@ packages: '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + '@swc/helpers@0.5.17': + resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + '@swc/types@0.1.24': resolution: {integrity: sha512-tjTMh3V4vAORHtdTprLlfoMptu1WfTZG9Rsca6yOKyNYsRr+MUXutKmliB17orgSZk5DpnDxs8GUdd/qwYxOng==} @@ -3151,6 +3440,9 @@ packages: '@types/babel__traverse@7.20.7': resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} @@ -3202,6 +3494,9 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + '@types/node@20.17.52': resolution: {integrity: sha512-2aj++KfxubvW/Lc0YyXE3OEW7Es8TWn1MsRzYgcOGyTNQxi0L8rxQUCZ7ZbyOBWZQD5I63PV9egZWMsapVaklg==} @@ -3236,8 +3531,8 @@ packages: peerDependencies: '@types/react': ^19.0.0 - '@types/react@18.3.24': - resolution: {integrity: sha512-0dLEBsA1kI3OezMBF8nSsb7Nk19ZnsyE1LLhB8r27KbgU5H4pvuqZLdtE+aUkJVoXgTVuA+iLIwmZ0TuK4tx6A==} + '@types/react@18.3.26': + resolution: {integrity: sha512-RFA/bURkcKzx/X9oumPG9Vp3D3JUgus/d0b67KB0t5S/raciymilkOa66olh78MUI92QLbEJevO7rvqU/kjwKA==} '@types/react@19.1.10': resolution: {integrity: sha512-EhBeSYX0Y6ye8pNebpKrwFJq7BoQ8J5SO6NlvNwwHjSj6adXJViPQrKlsyPw7hLBLvckEMO1yxeGdR82YBBlDg==} @@ -3254,6 +3549,12 @@ packages: '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + '@types/uuid@8.3.4': + resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} + + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} @@ -3397,8 +3698,8 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - '@wagmi/cli@2.5.1': - resolution: {integrity: sha512-X8cFOy9CtVZOiixqW+Y8/EbL91MLWfzV1Wd+M88LErxLBtP8K0Z4P6lS8I5nrH64zm5dC2ZN9SlrZMSbwQqbOQ==} + '@wagmi/cli@2.7.1': + resolution: {integrity: sha512-yuhTvbNkOAxMVDigO2IPySmV8/2i5KeU0gQs4XoGNL+hIoH/2tYlJ2BzbC/ylC8LWatWHlNMYspWKw7rE+izqw==} hasBin: true peerDependencies: typescript: '>=5.0.4' @@ -3406,18 +3707,18 @@ packages: typescript: optional: true - '@wagmi/connectors@5.9.9': - resolution: {integrity: sha512-6+eqU7P2OtxU2PkIw6kHojfYYUJykYG2K5rSkzVh29RDCAjhJqGEZW5f1b8kV5rUBORip1NpST8QTBNi96JHGQ==} + '@wagmi/connectors@6.1.3': + resolution: {integrity: sha512-Rx3/4Rug3SrBC/WSuNUC0XEpWC/yP71BhQzz3u064ueemIWtvrIxXZxH2byWd0dF3osarjuHBr904bm3L6eNHg==} peerDependencies: - '@wagmi/core': 2.20.3 + '@wagmi/core': 2.22.1 typescript: '>=5.0.4' viem: 2.x peerDependenciesMeta: typescript: optional: true - '@wagmi/core@2.20.3': - resolution: {integrity: sha512-gsbuHnWxf0AYZISvR8LvF/vUCIq6/ZwT5f5/FKd6wLA7Wq05NihCvmQpIgrcVbpSJPL67wb6S8fXm3eJGJA1vQ==} + '@wagmi/core@2.22.1': + resolution: {integrity: sha512-cG/xwQWsBEcKgRTkQVhH29cbpbs/TdcUJVFXCyri3ZknxhMyGv0YEjTcrNpRgt2SaswL1KrvslSNYKKo+5YEAg==} peerDependencies: '@tanstack/query-core': '>=5.0.0' typescript: '>=5.0.4' @@ -3441,6 +3742,7 @@ packages: '@walletconnect/ethereum-provider@2.21.1': resolution: {integrity: sha512-SSlIG6QEVxClgl1s0LMk4xr2wg4eT3Zn/Hb81IocyqNSGfXpjtawWxKxiC5/9Z95f1INyBD6MctJbL/R1oBwIw==} + deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' '@walletconnect/events@1.0.1': resolution: {integrity: sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ==} @@ -3485,9 +3787,11 @@ packages: '@walletconnect/sign-client@2.21.0': resolution: {integrity: sha512-z7h+PeLa5Au2R591d/8ZlziE0stJvdzP9jNFzFolf2RG/OiXulgFKum8PrIyXy+Rg2q95U9nRVUF9fWcn78yBA==} + deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' '@walletconnect/sign-client@2.21.1': resolution: {integrity: sha512-QaXzmPsMnKGV6tc4UcdnQVNOz4zyXgarvdIQibJ4L3EmLat73r5ZVl4c0cCOcoaV7rgM9Wbphgu5E/7jNcd3Zg==} + deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' '@walletconnect/time@1.0.2': resolution: {integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==} @@ -3500,9 +3804,11 @@ packages: '@walletconnect/universal-provider@2.21.0': resolution: {integrity: sha512-mtUQvewt+X0VBQay/xOJBvxsB3Xsm1lTwFjZ6WUwSOTR1X+FNb71hSApnV5kbsdDIpYPXeQUbGt2se1n5E5UBg==} + deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' '@walletconnect/universal-provider@2.21.1': resolution: {integrity: sha512-Wjx9G8gUHVMnYfxtasC9poGm8QMiPCpXpbbLFT+iPoQskDDly8BwueWnqKs4Mx2SdIAWAwuXeZ5ojk5qQOxJJg==} + deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' '@walletconnect/utils@2.21.0': resolution: {integrity: sha512-zfHLiUoBrQ8rP57HTPXW7rQMnYxYI4gT9yTACxVW6LhIFROTF6/ytm5SKNoIvi4a5nX5dfXG4D9XwQUCu8Ilig==} @@ -3536,6 +3842,17 @@ packages: resolution: {integrity: sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==} engines: {node: '>=10.0.0'} + abitype@1.0.6: + resolution: {integrity: sha512-MMSqYh4+C/aVqI2RQaWqbvI4Kxo5cQV40WQ4QFtDnNzCkqChm8MuENhElmynZlO0qUy/ObkEUaXtKqYnx1Kp3A==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3 >=3.22.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + abitype@1.0.8: resolution: {integrity: sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg==} peerDependencies: @@ -3558,6 +3875,17 @@ packages: zod: optional: true + abitype@1.1.1: + resolution: {integrity: sha512-Loe5/6tAgsBukY95eGaPSDmQHIjRZYQq8PB1MpsNccDIK8WiV+Uw6WzaIXipvaxTEL2yEB0OpEaQv3gs8pkS9Q==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3.22.0 || ^4.0.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -3587,6 +3915,10 @@ packages: resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} engines: {node: '>= 14'} + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -3704,6 +4036,17 @@ packages: aws4@1.13.2: resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} + axios-retry@4.5.0: + resolution: {integrity: sha512-aR99oXhpEDGo0UuAlYcn2iGRds30k366Zfa05XWScR9QaQD4JYiP3/1Qt1u7YlefUOK+cn0CcwoL1oefavQUlQ==} + peerDependencies: + axios: 0.x || 1.x + + axios@1.11.0: + resolution: {integrity: sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==} + + axios@1.13.2: + resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==} + babel-jest@29.7.0: resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3736,6 +4079,9 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + base-x@3.0.11: + resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==} + base-x@5.0.1: resolution: {integrity: sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==} @@ -3776,6 +4122,9 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + bowser@2.12.1: resolution: {integrity: sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw==} @@ -3801,6 +4150,9 @@ packages: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} engines: {node: '>= 6'} + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + bs58@6.0.0: resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} @@ -3887,6 +4239,10 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + change-case-all@1.0.15: resolution: {integrity: sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==} @@ -3903,6 +4259,9 @@ packages: chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + charenc@0.0.2: + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -4013,6 +4372,17 @@ packages: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} + commander@14.0.0: + resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} + engines: {node: '>=20'} + + commander@14.0.2: + resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==} + engines: {node: '>=20'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} @@ -4100,6 +4470,9 @@ packages: crossws@0.3.5: resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} + crypt@0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + css-select@5.2.2: resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} @@ -4138,8 +4511,8 @@ packages: debounce@1.2.1: resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} - debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -4200,6 +4573,10 @@ packages: defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -4302,8 +4679,8 @@ packages: ecc-jsbn@0.1.2: resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} - eciesjs@0.4.15: - resolution: {integrity: sha512-r6kEJXDKecVOCj2nLMuXK/FCPeurW33+3JRpfXVbjLja3XUYFfD9I/JBreH6sUyzcm3G/YQboBjMla6poKeSdA==} + eciesjs@0.4.16: + resolution: {integrity: sha512-dS5cbA9rA2VR4Ybuvhg6jvdmp46ubLn3E+px8cG/35aEDNclrqoCjg6mt0HYZ/M+OoESS3jSkCrqk1kWAEhWAw==} engines: {bun: '>=1', deno: '>=2', node: '>=16'} ejs@3.1.10: @@ -4379,6 +4756,12 @@ packages: es6-iterator@2.0.3: resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + es6-symbol@3.1.4: resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} engines: {node: '>=0.12'} @@ -4605,6 +4988,10 @@ packages: resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} engines: {'0': node >=0.6.0} + eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -4625,6 +5012,12 @@ packages: fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + + fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} @@ -4696,6 +5089,15 @@ packages: flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + for-each@0.3.5: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} @@ -4715,6 +5117,10 @@ packages: resolution: {integrity: sha512-q5YBMeWy6E2Un0nMGWMgI65MAKtaylxfNJGJxpGh45YDciZB4epbWpaAfImil6CPAPTYB4sh0URQNDRIZG5F2w==} engines: {node: '>= 6'} + form-data@4.0.4: + resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + engines: {node: '>= 6'} + formdata-polyfill@4.0.10: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} @@ -4738,6 +5144,10 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + generator-function@2.0.1: + resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} + engines: {node: '>= 0.4'} + gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -4938,6 +5348,10 @@ packages: hmac-drbg@1.0.1: resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + hono@4.10.3: + resolution: {integrity: sha512-2LOYWUbnhdxdL8MNbNg9XZig6k+cZXm5IjHn2Aviv7honhBMOHb+jxrKIeJRZJRmn+htUCKhaicxwXuUDlchRA==} + engines: {node: '>=16.9.0'} + hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -4964,6 +5378,9 @@ packages: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -5067,6 +5484,9 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} + is-buffer@1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -5087,8 +5507,8 @@ packages: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} - is-generator-function@1.1.0: - resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + is-generator-function@1.1.2: + resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} engines: {node: '>= 0.4'} is-glob@4.0.3: @@ -5137,6 +5557,10 @@ packages: resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} engines: {node: '>=0.10.0'} + is-retry-allowed@2.2.0: + resolution: {integrity: sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==} + engines: {node: '>=10'} + is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -5172,6 +5596,11 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + isomorphic-ws@5.0.0: resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} peerDependencies: @@ -5234,6 +5663,11 @@ packages: engines: {node: '>=10'} hasBin: true + jayson@4.2.0: + resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==} + engines: {node: '>=8'} + hasBin: true + jest-changed-files@29.7.0: resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -5377,6 +5811,9 @@ packages: jose@5.10.0: resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} + jose@6.1.0: + resolution: {integrity: sha512-TTQJyoEoKcC1lscpVDCSsVgYzUDg/0Bt3WE//WiTPK6uOCQC2KZS4MpugbMWt/zyjkopgZoXhZuCi00gLudfUA==} + joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} @@ -5442,6 +5879,10 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + json-stable-stringify@1.3.0: + resolution: {integrity: sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==} + engines: {node: '>= 0.4'} + json-stringify-deterministic@1.0.12: resolution: {integrity: sha512-q3PN0lbUdv0pmurkBNdJH3pfFvOTL/Zp0lquqpvcjfKzt6Y0j49EPHAmVHCAS4Ceq/Y+PejWTzyiVpoY71+D6g==} engines: {node: '>= 4'} @@ -5464,6 +5905,9 @@ packages: jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonify@0.0.1: + resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} + jsonpath-plus@10.3.0: resolution: {integrity: sha512-8TNmfeTCk2Le33A3vRRwtuworG/L5RrgMvdjhKZxvyShO+mBu2fP50OWUjRLNtvw344DdDarFh9buFAZs5ujeA==} engines: {node: '>=18.0.0'} @@ -5631,6 +6075,9 @@ packages: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} + md5@2.3.0: + resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + memoizee@0.4.17: resolution: {integrity: sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==} engines: {node: '>=0.12'} @@ -5731,6 +6178,9 @@ packages: resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==} engines: {node: '>=0.10.0'} + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -5859,8 +6309,12 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - ofetch@1.4.1: - resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + ofetch@1.5.0: + resolution: {integrity: sha512-A7llJ7eZyziA5xq9//3ZurA8OhFqtS99K5/V1sLBJ5j137CM/OAjlbA/TEJXBuOWwOfLqih+oH5U3ran4za1FQ==} on-exit-leak-free@0.2.0: resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} @@ -5872,10 +6326,16 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} + openapi-fetch@0.13.8: + resolution: {integrity: sha512-yJ4QKRyNxE44baQ9mY5+r/kAzZ8yXMemtNAOFwOzRXJscdjSxxzWSNlyBAr+o5JjkUw9Lc3W7OIoca0cY3PYnQ==} + openapi-typescript-codegen@0.29.0: resolution: {integrity: sha512-/wC42PkD0LGjDTEULa/XiWQbv4E9NwLjwLjsaJ/62yOsoYhwvmBR31kPttn1DzQ2OlGe5stACcF/EIkZk43M6w==} hasBin: true + openapi-typescript-helpers@0.0.15: + resolution: {integrity: sha512-opyTPaunsklCBpTK8JGef6mfPhLSnyy5a0IN9vKtx3+4aExf+KxEqYwIy3hqkedXIB97u357uLMJsOnm3GVjsw==} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -5912,8 +6372,16 @@ packages: typescript: optional: true - ox@0.9.3: - resolution: {integrity: sha512-KzyJP+fPV4uhuuqrTZyok4DC7vFzi7HLUFiUNEmpbyh59htKWkOC98IONC1zgXJPbHAhQgqs6B0Z6StCGhmQvg==} + ox@0.9.14: + resolution: {integrity: sha512-lxZYCzGH00WtIPPrqXCrbSW/ZiKjigfII6R0Vu1eH2GpobmcwVheiivbCvsBZzmVZcNpwkabSamPP+ZNtdnKIQ==} + 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: @@ -6060,6 +6528,38 @@ packages: resolution: {integrity: sha512-M7LhCsdNbNgiLYiP4WjsfLUuFmCfnjdF6jKe2R9NKl4WFN+HZPGHJZ9lnLP7f9ZnKe3U9nuWD0szirmj+migUg==} engines: {node: '>=12.0.0'} + porto@0.2.35: + resolution: {integrity: sha512-gu9FfjjvvYBgQXUHWTp6n3wkTxVtEcqFotM7i3GEZeoQbvLGbssAicCz6hFZ8+xggrJWwi/RLmbwNra50SMmUQ==} + hasBin: true + peerDependencies: + '@tanstack/react-query': '>=5.59.0' + '@wagmi/core': '>=2.16.3' + expo-auth-session: '>=7.0.8' + expo-crypto: '>=15.0.7' + expo-web-browser: '>=15.0.8' + react: '>=18' + react-native: '>=0.81.4' + typescript: '>=5.4.0' + viem: '>=2.37.0' + wagmi: '>=2.0.0' + peerDependenciesMeta: + '@tanstack/react-query': + optional: true + expo-auth-session: + optional: true + expo-crypto: + optional: true + expo-web-browser: + optional: true + react: + optional: true + react-native: + optional: true + typescript: + optional: true + wagmi: + optional: true + possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} @@ -6127,6 +6627,9 @@ packages: proxy-compare@2.6.0: resolution: {integrity: sha512-8xuCeM3l8yqdmbPoYeLbrAXCBWu19XEYc5/F28f5qOaoAIMyfmBUkl5axiK+x9olUvRlcekvnm98AP9RDngOIw==} + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + psl@1.15.0: resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} @@ -6316,6 +6819,9 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rpc-websockets@9.3.1: + resolution: {integrity: sha512-bY6a+i/lEtBJ/mUxwsCTgevoV1P0foXTVA7UoThzaIWbM+3NDqorf8NBWs5DmqKTFeA1IoNzgvkWjFCPgnzUiQ==} + run-async@2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} @@ -6469,6 +6975,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 sparse-array@1.3.2: resolution: {integrity: sha512-ZT711fePGn3+kQyLuv1fpd3rNSkNF8vd5Kv2D+qnOANeyKs3fx6bUMGWRPvgTTcYV64QMqZKZwcuaQSP3AZ0tg==} @@ -6515,6 +7022,12 @@ packages: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} + stream-chain@2.2.5: + resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==} + + stream-json@1.9.1: + resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==} + stream-shift@1.0.3: resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} @@ -6579,6 +7092,10 @@ packages: resolution: {integrity: sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==} engines: {node: '>=14.0.0'} + superstruct@2.0.2: + resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} + engines: {node: '>=14.0.0'} + supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -6610,6 +7127,9 @@ packages: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -6648,8 +7168,8 @@ packages: tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - to-buffer@1.2.1: - resolution: {integrity: sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==} + to-buffer@1.2.2: + resolution: {integrity: sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==} engines: {node: '>= 0.4'} to-regex-range@5.0.1: @@ -6770,38 +7290,38 @@ packages: tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - turbo-darwin-64@2.5.5: - resolution: {integrity: sha512-RYnTz49u4F5tDD2SUwwtlynABNBAfbyT2uU/brJcyh5k6lDLyNfYKdKmqd3K2ls4AaiALWrFKVSBsiVwhdFNzQ==} + turbo-darwin-64@2.6.0: + resolution: {integrity: sha512-6vHnLAubHj8Ib45Knu+oY0ZVCLO7WcibzAvt5b1E72YHqAs4y8meMAGMZM0jLqWPh/9maHDc16/qBCMxtW4pXg==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@2.5.5: - resolution: {integrity: sha512-Tk+ZeSNdBobZiMw9aFypQt0DlLsWSFWu1ymqsAdJLuPoAH05qCfYtRxE1pJuYHcJB5pqI+/HOxtJoQ40726Btw==} + turbo-darwin-arm64@2.6.0: + resolution: {integrity: sha512-IU+gWMEXNBw8H0pxvE7nPEa5p6yahxbN8g/Q4Bf0AHymsAFqsScgV0peeNbWybdmY9jk1LPbALOsF2kY1I7ZiQ==} cpu: [arm64] os: [darwin] - turbo-linux-64@2.5.5: - resolution: {integrity: sha512-2/XvMGykD7VgsvWesZZYIIVXMlgBcQy+ZAryjugoTcvJv8TZzSU/B1nShcA7IAjZ0q7OsZ45uP2cOb8EgKT30w==} + turbo-linux-64@2.6.0: + resolution: {integrity: sha512-CKoiJ2ZFJLCDsWdRlZg+ew1BkGn8iCEGdePhISVpjsGwkJwSVhVu49z2zKdBeL1IhcSKS2YALwp9ellNZANJxw==} cpu: [x64] os: [linux] - turbo-linux-arm64@2.5.5: - resolution: {integrity: sha512-DW+8CjCjybu0d7TFm9dovTTVg1VRnlkZ1rceO4zqsaLrit3DgHnN4to4uwyuf9s2V/BwS3IYcRy+HG9BL596Iw==} + turbo-linux-arm64@2.6.0: + resolution: {integrity: sha512-WroVCdCvJbrhNxNdw7XB7wHAfPPJPV+IXY+ZKNed+9VdfBu/2mQNfKnvqTuFTH7n+Pdpv8to9qwhXRTJe26upg==} cpu: [arm64] os: [linux] - turbo-windows-64@2.5.5: - resolution: {integrity: sha512-q5p1BOy8ChtSZfULuF1BhFMYIx6bevXu4fJ+TE/hyNfyHJIfjl90Z6jWdqAlyaFLmn99X/uw+7d6T/Y/dr5JwQ==} + turbo-windows-64@2.6.0: + resolution: {integrity: sha512-7pZo5aGQPR+A7RMtWCZHusarJ6y15LQ+o3jOmpMxTic/W6Bad+jSeqo07TWNIseIWjCVzrSv27+0odiYRYtQdA==} cpu: [x64] os: [win32] - turbo-windows-arm64@2.5.5: - resolution: {integrity: sha512-AXbF1KmpHUq3PKQwddMGoKMYhHsy5t1YBQO8HZ04HLMR0rWv9adYlQ8kaeQJTko1Ay1anOBFTqaxfVOOsu7+1Q==} + turbo-windows-arm64@2.6.0: + resolution: {integrity: sha512-1Ty+NwIksQY7AtFUCPrTpcKQE7zmd/f7aRjdT+qkqGFQjIjFYctEtN7qo4vpQPBgCfS1U3ka83A2u/9CfJQ3wQ==} cpu: [arm64] os: [win32] - turbo@2.5.5: - resolution: {integrity: sha512-eZ7wI6KjtT1eBqCnh2JPXWNUAxtoxxfi6VdBdZFvil0ychCOTxbm7YLRBi1JSt7U3c+u3CLxpoPxLdvr/Npr3A==} + turbo@2.6.0: + resolution: {integrity: sha512-kC5VJqOXo50k0/0jnJDDjibLAXalqT9j7PQ56so0pN+81VR4Fwb2QgIE9dTzT3phqOTQuEXkPh3sCpnv5Isz2g==} hasBin: true tweetnacl@0.14.5: @@ -6922,6 +7442,9 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + unist-util-is@4.1.0: resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} @@ -7107,16 +7630,16 @@ packages: typescript: optional: true - viem@2.37.6: - resolution: {integrity: sha512-b+1IozQ8TciVQNdQUkOH5xtFR0z7ZxR8pyloENi/a+RA408lv4LoX12ofwoiT3ip0VRhO5ni1em//X0jn/eW0g==} + viem@2.38.6: + resolution: {integrity: sha512-aqO6P52LPXRjdnP6rl5Buab65sYa4cZ6Cpn+k4OLOzVJhGIK8onTVoKMFMT04YjDfyDICa/DZyV9HmvLDgcjkw==} peerDependencies: typescript: '>=5.0.4' peerDependenciesMeta: typescript: optional: true - vite@5.4.20: - resolution: {integrity: sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==} + vite@5.4.21: + resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -7186,8 +7709,8 @@ packages: yaml: optional: true - wagmi@2.16.9: - resolution: {integrity: sha512-5NbjvuNNhT0t0lQsDD5otQqZ5RZBM1UhInHoBq/Lpnr6xLLa8AWxYqHg5oZtGCdiUNltys11iBOS6z4mLepIqw==} + wagmi@2.19.2: + resolution: {integrity: sha512-UN8CQKNsUgQD2Lr2ybjAi07ZKq1SV4T/Pb9IN77t3oSXANr9C9tI3mijLNyINeA5ET4hJxIny3C2dWJ48zrFiA==} peerDependencies: '@tanstack/react-query': '>=5.0.0' react: '>=18' @@ -7415,6 +7938,9 @@ packages: zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + zod@4.1.12: + resolution: {integrity: sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==} + zustand@5.0.0: resolution: {integrity: sha512-LE+VcmbartOPM+auOjCCLQOsQ05zUTp8RkgwRzefUk+2jISdMMFnxvyTjA4YNWr5ZGXYbVsEMZosttuxUBkojQ==} engines: {node: '>=12.20.0'} @@ -7451,6 +7977,24 @@ packages: use-sync-external-store: optional: true + zustand@5.0.8: + resolution: {integrity: sha512-gyPKpIaxY9XcO2vSMrLbiER7QMAMGOQZVRdJ6Zi782jkbzZygq5GI9nG8g+sMgitRtndwaBSl7uiqC49o1SSiw==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=18.0.0' + immer: '>=9.0.6' + react: '>=18.0.0' + use-sync-external-store: '>=1.2.0' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + use-sync-external-store: + optional: true + snapshots: '@adraffy/ens-normalize@1.10.1': {} @@ -7521,17 +8065,17 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/core@7.28.4': + '@babel/core@7.28.5': dependencies: '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.3 + '@babel/generator': 7.28.5 '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) '@babel/helpers': 7.28.4 - '@babel/parser': 7.28.4 + '@babel/parser': 7.28.5 '@babel/template': 7.27.2 - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.1 @@ -7549,10 +8093,10 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 - '@babel/generator@7.28.3': + '@babel/generator@7.28.5': dependencies: - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 @@ -7583,12 +8127,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)': + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-module-imports': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color @@ -7598,6 +8142,8 @@ snapshots: '@babel/helper-validator-identifier@7.27.1': {} + '@babel/helper-validator-identifier@7.28.5': {} + '@babel/helper-validator-option@7.27.1': {} '@babel/helpers@7.27.3': @@ -7608,24 +8154,24 @@ snapshots: '@babel/helpers@7.28.4': dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 '@babel/parser@7.27.3': dependencies: '@babel/types': 7.27.3 - '@babel/parser@7.28.4': + '@babel/parser@7.28.5': dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.4)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 optional: true @@ -7634,9 +8180,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.4)': + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 optional: true @@ -7645,9 +8191,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.4)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 optional: true @@ -7656,9 +8202,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.4)': + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 optional: true @@ -7672,9 +8218,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 optional: true @@ -7683,9 +8229,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.4)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 optional: true @@ -7694,9 +8240,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.4)': + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 optional: true @@ -7710,9 +8256,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.4)': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 optional: true @@ -7721,9 +8267,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.4)': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 optional: true @@ -7732,9 +8278,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.4)': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 optional: true @@ -7743,9 +8289,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.4)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 optional: true @@ -7754,9 +8300,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.4)': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 optional: true @@ -7765,9 +8311,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.4)': + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 optional: true @@ -7776,9 +8322,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.4)': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 optional: true @@ -7787,9 +8333,9 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.4)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 optional: true @@ -7798,14 +8344,14 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 '@babel/runtime@7.27.3': {} @@ -7828,14 +8374,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/traverse@7.28.4': + '@babel/traverse@7.28.5': dependencies: '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.3 + '@babel/generator': 7.28.5 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.4 + '@babel/parser': 7.28.5 '@babel/template': 7.27.2 - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 debug: 4.4.1 transitivePeerDependencies: - supports-color @@ -7845,33 +8391,61 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/types@7.28.4': + '@babel/types@7.28.5': dependencies: '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 - '@base-org/account@1.1.1(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@3.25.76)': + '@base-org/account@2.4.0(@types/react@18.3.26)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.12)': dependencies: + '@coinbase/cdp-sdk': 1.38.5(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(utf-8-validate@5.0.10)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@noble/hashes': 1.4.0 clsx: 1.2.1 eventemitter3: 5.0.1 idb-keyval: 6.2.1 - ox: 0.6.9(typescript@5.8.3)(zod@3.25.76) + ox: 0.6.9(typescript@5.8.3)(zod@4.1.12) preact: 10.24.2 - viem: 2.37.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) - zustand: 5.0.3(@types/react@18.3.24)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) + viem: 2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) + zustand: 5.0.3(@types/react@18.3.26)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) transitivePeerDependencies: - '@types/react' - bufferutil + - debug + - encoding + - fastestsmallesttextencoderdecoder - immer - react - typescript - use-sync-external-store - utf-8-validate + - ws - zod '@bcoe/v8-coverage@0.2.3': {} + '@coinbase/cdp-sdk@1.38.5(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(utf-8-validate@5.0.10)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@solana-program/system': 0.8.1(@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@solana-program/token': 0.6.0(@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@solana/kit': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + abitype: 1.0.6(typescript@5.8.3)(zod@3.25.76) + axios: 1.13.2 + axios-retry: 4.5.0(axios@1.13.2) + jose: 6.1.0 + md5: 2.3.0 + uncrypto: 0.1.3 + viem: 2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + zod: 3.25.76 + transitivePeerDependencies: + - bufferutil + - debug + - encoding + - fastestsmallesttextencoderdecoder + - typescript + - utf-8-validate + - ws + '@coinbase/wallet-sdk@3.9.3': dependencies: bn.js: 5.2.2 @@ -7886,16 +8460,16 @@ snapshots: transitivePeerDependencies: - supports-color - '@coinbase/wallet-sdk@4.3.6(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@3.25.76)': + '@coinbase/wallet-sdk@4.3.6(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@4.1.12)': dependencies: '@noble/hashes': 1.4.0 clsx: 1.2.1 eventemitter3: 5.0.1 idb-keyval: 6.2.1 - ox: 0.6.9(typescript@5.8.3)(zod@3.25.76) + ox: 0.6.9(typescript@5.8.3)(zod@4.1.12) preact: 10.24.2 - viem: 2.30.5(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) - zustand: 5.0.3(@types/react@18.3.24)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) + viem: 2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) + zustand: 5.0.3(@types/react@18.3.26)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) transitivePeerDependencies: - '@types/react' - bufferutil @@ -7915,6 +8489,13 @@ snapshots: dependencies: '@jridgewell/trace-mapping': 0.3.9 + '@defuse-protocol/one-click-sdk-typescript@0.1.1-0.2': + dependencies: + axios: 1.11.0 + form-data: 4.0.4 + transitivePeerDependencies: + - debug + '@ecies/ciphers@0.2.4(@noble/ciphers@1.3.0)': dependencies: '@noble/ciphers': 1.3.0 @@ -8772,11 +9353,11 @@ snapshots: '@fastify/busboy@3.1.1': {} - '@gemini-wallet/core@0.2.0(viem@2.37.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76))': + '@gemini-wallet/core@0.3.1(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))': dependencies: '@metamask/rpc-errors': 7.0.2 eventemitter3: 5.0.1 - viem: 2.37.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) transitivePeerDependencies: - supports-color @@ -9138,7 +9719,7 @@ snapshots: '@graphql-tools/optimize@2.0.0(graphql@16.11.0)': dependencies: graphql: 16.11.0 - tslib: 2.6.3 + tslib: 2.8.1 '@graphql-tools/prisma-loader@8.0.17(@types/node@20.17.52)(bufferutil@4.0.9)(crossws@0.3.5)(graphql@16.11.0)(utf-8-validate@5.0.10)': dependencies: @@ -9174,7 +9755,7 @@ snapshots: '@ardatan/relay-compiler': 12.0.3(graphql@16.11.0) '@graphql-tools/utils': 10.8.6(graphql@16.11.0) graphql: 16.11.0 - tslib: 2.6.3 + tslib: 2.8.1 transitivePeerDependencies: - encoding @@ -9283,7 +9864,7 @@ snapshots: jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3))': + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -9297,7 +9878,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)) + jest-config: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -9564,7 +10145,7 @@ snapshots: '@metamask/rpc-errors@7.0.2': dependencies: - '@metamask/utils': 11.8.0 + '@metamask/utils': 11.8.1 fast-safe-stringify: 2.1.1 transitivePeerDependencies: - supports-color @@ -9573,13 +10154,18 @@ snapshots: '@metamask/safe-event-emitter@3.1.2': {} - '@metamask/sdk-communication-layer@0.32.0(cross-fetch@4.1.0)(eciesjs@0.4.15)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@metamask/sdk-analytics@0.0.5': + dependencies: + openapi-fetch: 0.13.8 + + '@metamask/sdk-communication-layer@0.33.1(cross-fetch@4.1.0)(eciesjs@0.4.16)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: + '@metamask/sdk-analytics': 0.0.5 bufferutil: 4.0.9 cross-fetch: 4.1.0 date-fns: 2.30.0 - debug: 4.4.1 - eciesjs: 0.4.15 + debug: 4.3.4 + eciesjs: 0.4.16 eventemitter2: 6.4.9 readable-stream: 3.6.2 socket.io-client: 4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) @@ -9588,22 +10174,23 @@ snapshots: transitivePeerDependencies: - supports-color - '@metamask/sdk-install-modal-web@0.32.0': + '@metamask/sdk-install-modal-web@0.32.1': dependencies: '@paulmillr/qr': 0.2.1 - '@metamask/sdk@0.32.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + '@metamask/sdk@0.33.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@babel/runtime': 7.27.3 '@metamask/onboarding': 1.0.1 '@metamask/providers': 16.1.0 - '@metamask/sdk-communication-layer': 0.32.0(cross-fetch@4.1.0)(eciesjs@0.4.15)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@metamask/sdk-install-modal-web': 0.32.0 + '@metamask/sdk-analytics': 0.0.5 + '@metamask/sdk-communication-layer': 0.33.1(cross-fetch@4.1.0)(eciesjs@0.4.16)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@metamask/sdk-install-modal-web': 0.32.1 '@paulmillr/qr': 0.2.1 bowser: 2.12.1 cross-fetch: 4.1.0 - debug: 4.4.1 - eciesjs: 0.4.15 + debug: 4.3.4 + eciesjs: 0.4.16 eth-rpc-errors: 4.0.3 eventemitter2: 6.4.9 obj-multiplex: 1.0.0 @@ -9621,7 +10208,7 @@ snapshots: '@metamask/superstruct@3.2.1': {} - '@metamask/utils@11.8.0': + '@metamask/utils@11.8.1': dependencies: '@ethereumjs/tx': 4.2.0 '@metamask/superstruct': 3.2.1 @@ -9705,6 +10292,10 @@ snapshots: dependencies: '@noble/hashes': 1.8.0 + '@noble/curves@1.9.7': + dependencies: + '@noble/hashes': 1.8.0 + '@noble/hashes@1.3.2': {} '@noble/hashes@1.4.0': {} @@ -9847,31 +10438,31 @@ snapshots: dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.30.5(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.22.4) + viem: 2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.22.4) transitivePeerDependencies: - bufferutil - typescript - utf-8-validate - zod - '@reown/appkit-common@1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit-common@1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12)': dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.30.5(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) transitivePeerDependencies: - bufferutil - typescript - utf-8-validate - zod - '@reown/appkit-controllers@1.7.8(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit-controllers@1.7.8(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12)': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) - valtio: 1.13.2(@types/react@18.3.24)(react@18.3.1) - viem: 2.30.5(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) + valtio: 1.13.2(@types/react@18.3.26)(react@18.3.1) + viem: 2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -9900,14 +10491,14 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-pay@1.7.8(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit-pay@1.7.8(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12)': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.7.8(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-ui': 1.7.8(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-utils': 1.7.8(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.3.24)(react@18.3.1))(zod@3.25.76) + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) + '@reown/appkit-controllers': 1.7.8(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) + '@reown/appkit-ui': 1.7.8(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) + '@reown/appkit-utils': 1.7.8(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.3.26)(react@18.3.1))(zod@4.1.12) lit: 3.3.0 - valtio: 1.13.2(@types/react@18.3.24)(react@18.3.1) + valtio: 1.13.2(@types/react@18.3.26)(react@18.3.1) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -9940,12 +10531,12 @@ snapshots: dependencies: buffer: 6.0.3 - '@reown/appkit-scaffold-ui@1.7.8(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.3.24)(react@18.3.1))(zod@3.25.76)': + '@reown/appkit-scaffold-ui@1.7.8(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.3.26)(react@18.3.1))(zod@4.1.12)': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.7.8(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-ui': 1.7.8(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-utils': 1.7.8(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.3.24)(react@18.3.1))(zod@3.25.76) + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) + '@reown/appkit-controllers': 1.7.8(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) + '@reown/appkit-ui': 1.7.8(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) + '@reown/appkit-utils': 1.7.8(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.3.26)(react@18.3.1))(zod@4.1.12) '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) lit: 3.3.0 transitivePeerDependencies: @@ -9977,10 +10568,10 @@ snapshots: - valtio - zod - '@reown/appkit-ui@1.7.8(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit-ui@1.7.8(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12)': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.7.8(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) + '@reown/appkit-controllers': 1.7.8(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) lit: 3.3.0 qrcode: 1.5.3 @@ -10012,16 +10603,16 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-utils@1.7.8(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.3.24)(react@18.3.1))(zod@3.25.76)': + '@reown/appkit-utils@1.7.8(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.3.26)(react@18.3.1))(zod@4.1.12)': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.7.8(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) + '@reown/appkit-controllers': 1.7.8(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) '@reown/appkit-polyfills': 1.7.8 '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) '@walletconnect/logger': 2.1.2 - '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) - valtio: 1.13.2(@types/react@18.3.24)(react@18.3.1) - viem: 2.30.5(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) + valtio: 1.13.2(@types/react@18.3.26)(react@18.3.1) + viem: 2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -10061,21 +10652,21 @@ snapshots: - typescript - utf-8-validate - '@reown/appkit@1.7.8(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit@1.7.8(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12)': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.7.8(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-pay': 1.7.8(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) + '@reown/appkit-controllers': 1.7.8(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) + '@reown/appkit-pay': 1.7.8(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) '@reown/appkit-polyfills': 1.7.8 - '@reown/appkit-scaffold-ui': 1.7.8(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.3.24)(react@18.3.1))(zod@3.25.76) - '@reown/appkit-ui': 1.7.8(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-utils': 1.7.8(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.3.24)(react@18.3.1))(zod@3.25.76) + '@reown/appkit-scaffold-ui': 1.7.8(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.3.26)(react@18.3.1))(zod@4.1.12) + '@reown/appkit-ui': 1.7.8(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) + '@reown/appkit-utils': 1.7.8(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.3.26)(react@18.3.1))(zod@4.1.12) '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) '@walletconnect/types': 2.21.0 - '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) bs58: 6.0.0 - valtio: 1.13.2(@types/react@18.3.24)(react@18.3.1) - viem: 2.30.5(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + valtio: 1.13.2(@types/react@18.3.26)(react@18.3.1) + viem: 2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -10170,9 +10761,9 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.45.1': optional: true - '@safe-global/safe-apps-provider@0.18.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@safe-global/safe-apps-provider@0.18.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12)': dependencies: - '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) events: 3.3.0 transitivePeerDependencies: - bufferutil @@ -10180,10 +10771,10 @@ snapshots: - utf-8-validate - zod - '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12)': dependencies: '@safe-global/safe-gateway-typescript-sdk': 3.23.1 - viem: 2.30.5(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) transitivePeerDependencies: - bufferutil - typescript @@ -10210,7 +10801,7 @@ snapshots: '@scure/bip32@1.7.0': dependencies: - '@noble/curves': 1.9.1 + '@noble/curves': 1.9.7 '@noble/hashes': 1.8.0 '@scure/base': 1.2.6 @@ -10241,14 +10832,430 @@ snapshots: '@socket.io/component-emitter@3.1.2': {} - '@swc/core-darwin-arm64@1.13.4': - optional: true - - '@swc/core-darwin-x64@1.13.4': - optional: true + '@solana-program/system@0.8.1(@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': + dependencies: + '@solana/kit': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@swc/core-linux-arm-gnueabihf@1.13.4': - optional: true + '@solana-program/token@0.6.0(@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': + dependencies: + '@solana/kit': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + + '@solana/accounts@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + dependencies: + '@solana/addresses': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/codecs-core': 3.0.3(typescript@5.8.3) + '@solana/codecs-strings': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/errors': 3.0.3(typescript@5.8.3) + '@solana/rpc-spec': 3.0.3(typescript@5.8.3) + '@solana/rpc-types': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/addresses@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + dependencies: + '@solana/assertions': 3.0.3(typescript@5.8.3) + '@solana/codecs-core': 3.0.3(typescript@5.8.3) + '@solana/codecs-strings': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/errors': 3.0.3(typescript@5.8.3) + '@solana/nominal-types': 3.0.3(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/assertions@3.0.3(typescript@5.8.3)': + dependencies: + '@solana/errors': 3.0.3(typescript@5.8.3) + typescript: 5.8.3 + + '@solana/buffer-layout@4.0.1': + dependencies: + buffer: 6.0.3 + + '@solana/codecs-core@2.3.0(typescript@5.8.3)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.8.3) + typescript: 5.8.3 + + '@solana/codecs-core@3.0.3(typescript@5.8.3)': + dependencies: + '@solana/errors': 3.0.3(typescript@5.8.3) + typescript: 5.8.3 + + '@solana/codecs-data-structures@3.0.3(typescript@5.8.3)': + dependencies: + '@solana/codecs-core': 3.0.3(typescript@5.8.3) + '@solana/codecs-numbers': 3.0.3(typescript@5.8.3) + '@solana/errors': 3.0.3(typescript@5.8.3) + typescript: 5.8.3 + + '@solana/codecs-numbers@2.3.0(typescript@5.8.3)': + dependencies: + '@solana/codecs-core': 2.3.0(typescript@5.8.3) + '@solana/errors': 2.3.0(typescript@5.8.3) + typescript: 5.8.3 + + '@solana/codecs-numbers@3.0.3(typescript@5.8.3)': + dependencies: + '@solana/codecs-core': 3.0.3(typescript@5.8.3) + '@solana/errors': 3.0.3(typescript@5.8.3) + typescript: 5.8.3 + + '@solana/codecs-strings@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + dependencies: + '@solana/codecs-core': 3.0.3(typescript@5.8.3) + '@solana/codecs-numbers': 3.0.3(typescript@5.8.3) + '@solana/errors': 3.0.3(typescript@5.8.3) + fastestsmallesttextencoderdecoder: 1.0.22 + typescript: 5.8.3 + + '@solana/codecs@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + dependencies: + '@solana/codecs-core': 3.0.3(typescript@5.8.3) + '@solana/codecs-data-structures': 3.0.3(typescript@5.8.3) + '@solana/codecs-numbers': 3.0.3(typescript@5.8.3) + '@solana/codecs-strings': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/options': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/errors@2.3.0(typescript@5.8.3)': + dependencies: + chalk: 5.6.2 + commander: 14.0.2 + typescript: 5.8.3 + + '@solana/errors@3.0.3(typescript@5.8.3)': + dependencies: + chalk: 5.6.2 + commander: 14.0.0 + typescript: 5.8.3 + + '@solana/fast-stable-stringify@3.0.3(typescript@5.8.3)': + dependencies: + typescript: 5.8.3 + + '@solana/functional@3.0.3(typescript@5.8.3)': + dependencies: + typescript: 5.8.3 + + '@solana/instruction-plans@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + dependencies: + '@solana/errors': 3.0.3(typescript@5.8.3) + '@solana/instructions': 3.0.3(typescript@5.8.3) + '@solana/promises': 3.0.3(typescript@5.8.3) + '@solana/transaction-messages': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/transactions': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/instructions@3.0.3(typescript@5.8.3)': + dependencies: + '@solana/codecs-core': 3.0.3(typescript@5.8.3) + '@solana/errors': 3.0.3(typescript@5.8.3) + typescript: 5.8.3 + + '@solana/keys@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + dependencies: + '@solana/assertions': 3.0.3(typescript@5.8.3) + '@solana/codecs-core': 3.0.3(typescript@5.8.3) + '@solana/codecs-strings': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/errors': 3.0.3(typescript@5.8.3) + '@solana/nominal-types': 3.0.3(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@solana/accounts': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/addresses': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/codecs': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/errors': 3.0.3(typescript@5.8.3) + '@solana/functional': 3.0.3(typescript@5.8.3) + '@solana/instruction-plans': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/instructions': 3.0.3(typescript@5.8.3) + '@solana/keys': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/programs': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/rpc': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/rpc-parsed-types': 3.0.3(typescript@5.8.3) + '@solana/rpc-spec-types': 3.0.3(typescript@5.8.3) + '@solana/rpc-subscriptions': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/rpc-types': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/signers': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/sysvars': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/transaction-confirmation': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/transaction-messages': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/transactions': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - ws + + '@solana/nominal-types@3.0.3(typescript@5.8.3)': + dependencies: + typescript: 5.8.3 + + '@solana/options@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + dependencies: + '@solana/codecs-core': 3.0.3(typescript@5.8.3) + '@solana/codecs-data-structures': 3.0.3(typescript@5.8.3) + '@solana/codecs-numbers': 3.0.3(typescript@5.8.3) + '@solana/codecs-strings': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/errors': 3.0.3(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/programs@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + dependencies: + '@solana/addresses': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/errors': 3.0.3(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/promises@3.0.3(typescript@5.8.3)': + dependencies: + typescript: 5.8.3 + + '@solana/rpc-api@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + dependencies: + '@solana/addresses': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/codecs-core': 3.0.3(typescript@5.8.3) + '@solana/codecs-strings': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/errors': 3.0.3(typescript@5.8.3) + '@solana/keys': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/rpc-parsed-types': 3.0.3(typescript@5.8.3) + '@solana/rpc-spec': 3.0.3(typescript@5.8.3) + '@solana/rpc-transformers': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/rpc-types': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/transaction-messages': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/transactions': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/rpc-parsed-types@3.0.3(typescript@5.8.3)': + dependencies: + typescript: 5.8.3 + + '@solana/rpc-spec-types@3.0.3(typescript@5.8.3)': + dependencies: + typescript: 5.8.3 + + '@solana/rpc-spec@3.0.3(typescript@5.8.3)': + dependencies: + '@solana/errors': 3.0.3(typescript@5.8.3) + '@solana/rpc-spec-types': 3.0.3(typescript@5.8.3) + typescript: 5.8.3 + + '@solana/rpc-subscriptions-api@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + dependencies: + '@solana/addresses': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/keys': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/rpc-subscriptions-spec': 3.0.3(typescript@5.8.3) + '@solana/rpc-transformers': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/rpc-types': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/transaction-messages': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/transactions': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/rpc-subscriptions-channel-websocket@3.0.3(typescript@5.8.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@solana/errors': 3.0.3(typescript@5.8.3) + '@solana/functional': 3.0.3(typescript@5.8.3) + '@solana/rpc-subscriptions-spec': 3.0.3(typescript@5.8.3) + '@solana/subscribable': 3.0.3(typescript@5.8.3) + typescript: 5.8.3 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + + '@solana/rpc-subscriptions-spec@3.0.3(typescript@5.8.3)': + dependencies: + '@solana/errors': 3.0.3(typescript@5.8.3) + '@solana/promises': 3.0.3(typescript@5.8.3) + '@solana/rpc-spec-types': 3.0.3(typescript@5.8.3) + '@solana/subscribable': 3.0.3(typescript@5.8.3) + typescript: 5.8.3 + + '@solana/rpc-subscriptions@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@solana/errors': 3.0.3(typescript@5.8.3) + '@solana/fast-stable-stringify': 3.0.3(typescript@5.8.3) + '@solana/functional': 3.0.3(typescript@5.8.3) + '@solana/promises': 3.0.3(typescript@5.8.3) + '@solana/rpc-spec-types': 3.0.3(typescript@5.8.3) + '@solana/rpc-subscriptions-api': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/rpc-subscriptions-channel-websocket': 3.0.3(typescript@5.8.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/rpc-subscriptions-spec': 3.0.3(typescript@5.8.3) + '@solana/rpc-transformers': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/rpc-types': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/subscribable': 3.0.3(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - ws + + '@solana/rpc-transformers@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + dependencies: + '@solana/errors': 3.0.3(typescript@5.8.3) + '@solana/functional': 3.0.3(typescript@5.8.3) + '@solana/nominal-types': 3.0.3(typescript@5.8.3) + '@solana/rpc-spec-types': 3.0.3(typescript@5.8.3) + '@solana/rpc-types': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/rpc-transport-http@3.0.3(typescript@5.8.3)': + dependencies: + '@solana/errors': 3.0.3(typescript@5.8.3) + '@solana/rpc-spec': 3.0.3(typescript@5.8.3) + '@solana/rpc-spec-types': 3.0.3(typescript@5.8.3) + typescript: 5.8.3 + undici-types: 7.16.0 + + '@solana/rpc-types@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + dependencies: + '@solana/addresses': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/codecs-core': 3.0.3(typescript@5.8.3) + '@solana/codecs-numbers': 3.0.3(typescript@5.8.3) + '@solana/codecs-strings': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/errors': 3.0.3(typescript@5.8.3) + '@solana/nominal-types': 3.0.3(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/rpc@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + dependencies: + '@solana/errors': 3.0.3(typescript@5.8.3) + '@solana/fast-stable-stringify': 3.0.3(typescript@5.8.3) + '@solana/functional': 3.0.3(typescript@5.8.3) + '@solana/rpc-api': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/rpc-spec': 3.0.3(typescript@5.8.3) + '@solana/rpc-spec-types': 3.0.3(typescript@5.8.3) + '@solana/rpc-transformers': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/rpc-transport-http': 3.0.3(typescript@5.8.3) + '@solana/rpc-types': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/signers@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + dependencies: + '@solana/addresses': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/codecs-core': 3.0.3(typescript@5.8.3) + '@solana/errors': 3.0.3(typescript@5.8.3) + '@solana/instructions': 3.0.3(typescript@5.8.3) + '@solana/keys': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/nominal-types': 3.0.3(typescript@5.8.3) + '@solana/transaction-messages': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/transactions': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/subscribable@3.0.3(typescript@5.8.3)': + dependencies: + '@solana/errors': 3.0.3(typescript@5.8.3) + typescript: 5.8.3 + + '@solana/sysvars@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + dependencies: + '@solana/accounts': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/codecs': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/errors': 3.0.3(typescript@5.8.3) + '@solana/rpc-types': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/transaction-confirmation@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@solana/addresses': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/codecs-strings': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/errors': 3.0.3(typescript@5.8.3) + '@solana/keys': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/promises': 3.0.3(typescript@5.8.3) + '@solana/rpc': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/rpc-subscriptions': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/rpc-types': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/transaction-messages': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/transactions': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - ws + + '@solana/transaction-messages@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + dependencies: + '@solana/addresses': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/codecs-core': 3.0.3(typescript@5.8.3) + '@solana/codecs-data-structures': 3.0.3(typescript@5.8.3) + '@solana/codecs-numbers': 3.0.3(typescript@5.8.3) + '@solana/errors': 3.0.3(typescript@5.8.3) + '@solana/functional': 3.0.3(typescript@5.8.3) + '@solana/instructions': 3.0.3(typescript@5.8.3) + '@solana/nominal-types': 3.0.3(typescript@5.8.3) + '@solana/rpc-types': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/transactions@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + dependencies: + '@solana/addresses': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/codecs-core': 3.0.3(typescript@5.8.3) + '@solana/codecs-data-structures': 3.0.3(typescript@5.8.3) + '@solana/codecs-numbers': 3.0.3(typescript@5.8.3) + '@solana/codecs-strings': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/errors': 3.0.3(typescript@5.8.3) + '@solana/functional': 3.0.3(typescript@5.8.3) + '@solana/instructions': 3.0.3(typescript@5.8.3) + '@solana/keys': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/nominal-types': 3.0.3(typescript@5.8.3) + '@solana/rpc-types': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/transaction-messages': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.27.3 + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + '@solana/buffer-layout': 4.0.1 + '@solana/codecs-numbers': 2.3.0(typescript@5.8.3) + agentkeepalive: 4.6.0 + bn.js: 5.2.2 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + node-fetch: 2.7.0 + rpc-websockets: 9.3.1 + superstruct: 2.0.2 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + + '@swc/core-darwin-arm64@1.13.4': + optional: true + + '@swc/core-darwin-x64@1.13.4': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.13.4': + optional: true '@swc/core-linux-arm64-gnu@1.13.4': optional: true @@ -10271,7 +11278,7 @@ snapshots: '@swc/core-win32-x64-msvc@1.13.4': optional: true - '@swc/core@1.13.4': + '@swc/core@1.13.4(@swc/helpers@0.5.17)': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.24 @@ -10286,9 +11293,14 @@ snapshots: '@swc/core-win32-arm64-msvc': 1.13.4 '@swc/core-win32-ia32-msvc': 1.13.4 '@swc/core-win32-x64-msvc': 1.13.4 + '@swc/helpers': 0.5.17 '@swc/counter@0.1.3': {} + '@swc/helpers@0.5.17': + dependencies: + tslib: 2.8.1 + '@swc/types@0.1.24': dependencies: '@swc/counter': 0.1.3 @@ -10339,6 +11351,10 @@ snapshots: dependencies: '@babel/types': 7.27.3 + '@types/connect@3.4.38': + dependencies: + '@types/node': 20.17.52 + '@types/debug@4.1.12': dependencies: '@types/ms': 2.1.0 @@ -10387,6 +11403,8 @@ snapshots: '@types/ms@2.1.0': {} + '@types/node@12.20.55': {} + '@types/node@20.17.52': dependencies: undici-types: 6.19.8 @@ -10411,15 +11429,15 @@ snapshots: '@types/prop-types@15.7.15': {} - '@types/react-dom@18.3.7(@types/react@18.3.24)': + '@types/react-dom@18.3.7(@types/react@18.3.26)': dependencies: - '@types/react': 18.3.24 + '@types/react': 18.3.26 '@types/react-dom@19.1.7(@types/react@19.1.10)': dependencies: '@types/react': 19.1.10 - '@types/react@18.3.24': + '@types/react@18.3.26': dependencies: '@types/prop-types': 15.7.15 csstype: 3.1.3 @@ -10436,6 +11454,12 @@ snapshots: '@types/unist@2.0.11': {} + '@types/uuid@8.3.4': {} + + '@types/ws@7.4.7': + dependencies: + '@types/node': 20.17.52 + '@types/ws@8.18.1': dependencies: '@types/node': 20.17.52 @@ -10680,29 +11704,29 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-react-swc@4.0.1(vite@7.1.3(@types/node@22.15.24)(jiti@2.4.2)(tsx@4.19.4)(yaml@2.8.0))': + '@vitejs/plugin-react-swc@4.0.1(@swc/helpers@0.5.17)(vite@7.1.3(@types/node@22.15.24)(jiti@2.4.2)(tsx@4.19.4)(yaml@2.8.0))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.32 - '@swc/core': 1.13.4 + '@swc/core': 1.13.4(@swc/helpers@0.5.17) vite: 7.1.3(@types/node@22.15.24)(jiti@2.4.2)(tsx@4.19.4)(yaml@2.8.0) transitivePeerDependencies: - '@swc/helpers' - '@vitejs/plugin-react@4.7.0(vite@5.4.20(@types/node@22.15.24))': + '@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@22.15.24))': dependencies: - '@babel/core': 7.28.4 - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.5) '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 5.4.20(@types/node@22.15.24) + vite: 5.4.21(@types/node@22.15.24) transitivePeerDependencies: - supports-color - '@wagmi/cli@2.5.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@wagmi/cli@2.7.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - abitype: 1.0.8(typescript@5.8.3)(zod@3.25.76) + abitype: 1.0.8(typescript@5.8.3)(zod@4.1.12) bundle-require: 5.1.0(esbuild@0.25.5) cac: 6.7.14 change-case: 5.4.4 @@ -10718,26 +11742,27 @@ snapshots: picocolors: 1.1.1 picomatch: 3.0.1 prettier: 3.5.3 - viem: 2.30.5(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) - zod: 3.25.76 + viem: 2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) + zod: 4.1.12 optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - bufferutil - utf-8-validate - '@wagmi/connectors@5.9.9(@types/react@18.3.24)(@wagmi/core@2.20.3(@tanstack/query-core@5.45.0)(@types/react@18.3.24)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.37.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(viem@2.37.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)': + '@wagmi/connectors@6.1.3(@tanstack/react-query@5.45.1(react@18.3.1))(@types/react@18.3.26)(@wagmi/core@2.22.1(@tanstack/query-core@5.45.0)(@types/react@18.3.26)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12)))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(wagmi@2.19.2(@tanstack/query-core@5.45.0)(@tanstack/react-query@5.45.1(react@18.3.1))(@types/react@18.3.26)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.12))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.12)': dependencies: - '@base-org/account': 1.1.1(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@3.25.76) - '@coinbase/wallet-sdk': 4.3.6(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@3.25.76) - '@gemini-wallet/core': 0.2.0(viem@2.37.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76)) - '@metamask/sdk': 0.32.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) - '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@wagmi/core': 2.20.3(@tanstack/query-core@5.45.0)(@types/react@18.3.24)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.37.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76)) - '@walletconnect/ethereum-provider': 2.21.1(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@base-org/account': 2.4.0(@types/react@18.3.26)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.12) + '@coinbase/wallet-sdk': 4.3.6(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@4.1.12) + '@gemini-wallet/core': 0.3.1(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12)) + '@metamask/sdk': 0.33.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) + '@wagmi/core': 2.22.1(@tanstack/query-core@5.45.0)(@types/react@18.3.26)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12)) + '@walletconnect/ethereum-provider': 2.21.1(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) cbw-sdk: '@coinbase/wallet-sdk@3.9.3' - viem: 2.37.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + porto: 0.2.35(@tanstack/react-query@5.45.1(react@18.3.1))(@types/react@18.3.26)(@wagmi/core@2.22.1(@tanstack/query-core@5.45.0)(@types/react@18.3.26)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12)))(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(wagmi@2.19.2(@tanstack/query-core@5.45.0)(@tanstack/react-query@5.45.1(react@18.3.1))(@types/react@18.3.26)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.12)) + viem: 2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -10752,6 +11777,7 @@ snapshots: - '@netlify/blobs' - '@planetscale/database' - '@react-native-async-storage/async-storage' + - '@tanstack/react-query' - '@types/react' - '@upstash/redis' - '@vercel/blob' @@ -10760,22 +11786,30 @@ snapshots: - aws4fetch - bufferutil - db0 + - debug - encoding + - expo-auth-session + - expo-crypto + - expo-web-browser + - fastestsmallesttextencoderdecoder - immer - ioredis - react + - react-native - supports-color - uploadthing - use-sync-external-store - utf-8-validate + - wagmi + - ws - zod - '@wagmi/core@2.20.3(@tanstack/query-core@5.45.0)(@types/react@18.3.24)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.37.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76))': + '@wagmi/core@2.22.1(@tanstack/query-core@5.45.0)(@types/react@18.3.26)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))': dependencies: eventemitter3: 5.0.1 mipd: 0.0.7(typescript@5.8.3) - viem: 2.37.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) - zustand: 5.0.0(@types/react@18.3.24)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) + viem: 2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) + zustand: 5.0.0(@types/react@18.3.26)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) optionalDependencies: '@tanstack/query-core': 5.45.0 typescript: 5.8.3 @@ -10785,7 +11819,7 @@ snapshots: - react - use-sync-external-store - '@walletconnect/core@2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/core@2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12)': dependencies: '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-provider': 1.0.14 @@ -10799,7 +11833,7 @@ snapshots: '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 '@walletconnect/types': 2.21.0 - '@walletconnect/utils': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/utils': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) '@walletconnect/window-getters': 1.0.1 es-toolkit: 1.33.0 events: 3.3.0 @@ -10829,7 +11863,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/core@2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/core@2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12)': dependencies: '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-provider': 1.0.14 @@ -10843,7 +11877,7 @@ snapshots: '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 '@walletconnect/types': 2.21.1 - '@walletconnect/utils': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/utils': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) '@walletconnect/window-getters': 1.0.1 es-toolkit: 1.33.0 events: 3.3.0 @@ -10877,18 +11911,18 @@ snapshots: dependencies: tslib: 1.14.1 - '@walletconnect/ethereum-provider@2.21.1(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/ethereum-provider@2.21.1(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12)': dependencies: - '@reown/appkit': 1.7.8(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit': 1.7.8(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) '@walletconnect/jsonrpc-http-connection': 1.0.8 '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/keyvaluestorage': 1.1.1 - '@walletconnect/sign-client': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/sign-client': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) '@walletconnect/types': 2.21.1 - '@walletconnect/universal-provider': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@walletconnect/utils': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/universal-provider': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) + '@walletconnect/utils': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -11011,16 +12045,16 @@ snapshots: dependencies: tslib: 1.14.1 - '@walletconnect/sign-client@2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/sign-client@2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12)': dependencies: - '@walletconnect/core': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/core': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/logger': 2.1.2 '@walletconnect/time': 1.0.2 '@walletconnect/types': 2.21.0 - '@walletconnect/utils': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/utils': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -11047,16 +12081,16 @@ snapshots: - utf-8-validate - zod - '@walletconnect/sign-client@2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/sign-client@2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12)': dependencies: - '@walletconnect/core': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/core': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/logger': 2.1.2 '@walletconnect/time': 1.0.2 '@walletconnect/types': 2.21.1 - '@walletconnect/utils': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/utils': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -11145,7 +12179,7 @@ snapshots: - ioredis - uploadthing - '@walletconnect/universal-provider@2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/universal-provider@2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12)': dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/jsonrpc-http-connection': 1.0.8 @@ -11154,9 +12188,9 @@ snapshots: '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/keyvaluestorage': 1.1.1 '@walletconnect/logger': 2.1.2 - '@walletconnect/sign-client': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/sign-client': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) '@walletconnect/types': 2.21.0 - '@walletconnect/utils': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/utils': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) es-toolkit: 1.33.0 events: 3.3.0 transitivePeerDependencies: @@ -11185,7 +12219,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/universal-provider@2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/universal-provider@2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12)': dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/jsonrpc-http-connection': 1.0.8 @@ -11194,9 +12228,9 @@ snapshots: '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/keyvaluestorage': 1.1.1 '@walletconnect/logger': 2.1.2 - '@walletconnect/sign-client': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/sign-client': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) '@walletconnect/types': 2.21.1 - '@walletconnect/utils': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/utils': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) es-toolkit: 1.33.0 events: 3.3.0 transitivePeerDependencies: @@ -11225,7 +12259,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/utils@2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/utils@2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12)': dependencies: '@noble/ciphers': 1.2.1 '@noble/curves': 1.8.1 @@ -11243,7 +12277,7 @@ snapshots: detect-browser: 5.3.0 query-string: 7.1.3 uint8arrays: 3.1.0 - viem: 2.23.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.23.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -11269,7 +12303,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/utils@2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/utils@2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12)': dependencies: '@noble/ciphers': 1.2.1 '@noble/curves': 1.8.1 @@ -11287,7 +12321,7 @@ snapshots: detect-browser: 5.3.0 query-string: 7.1.3 uint8arrays: 3.1.0 - viem: 2.23.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.23.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -11345,16 +12379,21 @@ snapshots: '@xmldom/xmldom@0.8.11': {} - abitype@1.0.8(typescript@5.8.3)(zod@3.22.4): + abitype@1.0.6(typescript@5.8.3)(zod@3.25.76): optionalDependencies: typescript: 5.8.3 - zod: 3.22.4 + zod: 3.25.76 abitype@1.0.8(typescript@5.8.3)(zod@3.25.76): optionalDependencies: typescript: 5.8.3 zod: 3.25.76 + abitype@1.0.8(typescript@5.8.3)(zod@4.1.12): + optionalDependencies: + typescript: 5.8.3 + zod: 4.1.12 + abitype@1.1.0(typescript@5.8.3)(zod@3.22.4): optionalDependencies: typescript: 5.8.3 @@ -11365,6 +12404,26 @@ snapshots: typescript: 5.8.3 zod: 3.25.76 + abitype@1.1.0(typescript@5.8.3)(zod@4.1.12): + optionalDependencies: + typescript: 5.8.3 + zod: 4.1.12 + + abitype@1.1.1(typescript@5.8.3)(zod@3.22.4): + optionalDependencies: + typescript: 5.8.3 + zod: 3.22.4 + + abitype@1.1.1(typescript@5.8.3)(zod@3.25.76): + optionalDependencies: + typescript: 5.8.3 + zod: 3.25.76 + + abitype@1.1.1(typescript@5.8.3)(zod@4.1.12): + optionalDependencies: + typescript: 5.8.3 + zod: 4.1.12 + acorn-jsx@5.3.2(acorn@8.14.1): dependencies: acorn: 8.14.1 @@ -11387,6 +12446,10 @@ snapshots: agent-base@7.1.3: {} + agentkeepalive@4.6.0: + dependencies: + humanize-ms: 1.2.1 + aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 @@ -11485,6 +12548,27 @@ snapshots: aws4@1.13.2: {} + axios-retry@4.5.0(axios@1.13.2): + dependencies: + axios: 1.13.2 + is-retry-allowed: 2.2.0 + + axios@1.11.0: + dependencies: + follow-redirects: 1.15.11 + form-data: 4.0.4 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + axios@1.13.2: + dependencies: + follow-redirects: 1.15.11 + form-data: 4.0.4 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + babel-jest@29.7.0(@babel/core@7.27.1): dependencies: '@babel/core': 7.27.1 @@ -11498,13 +12582,13 @@ snapshots: transitivePeerDependencies: - supports-color - babel-jest@29.7.0(@babel/core@7.28.4): + babel-jest@29.7.0(@babel/core@7.28.5): dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@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.28.4) + babel-preset-jest: 29.6.3(@babel/core@7.28.5) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -11555,24 +12639,24 @@ snapshots: '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.27.1) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.27.1) - babel-preset-current-node-syntax@1.1.0(@babel/core@7.28.4): - dependencies: - '@babel/core': 7.28.4 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.4) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.4) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.4) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.4) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.4) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.4) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.4) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.4) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.4) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.4) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.4) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.4) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.4) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.4) + babel-preset-current-node-syntax@1.1.0(@babel/core@7.28.5): + dependencies: + '@babel/core': 7.28.5 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.5) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.5) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.5) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.5) optional: true babel-preset-jest@29.6.3(@babel/core@7.27.1): @@ -11581,15 +12665,19 @@ snapshots: babel-plugin-jest-hoist: 29.6.3 babel-preset-current-node-syntax: 1.1.0(@babel/core@7.27.1) - babel-preset-jest@29.6.3(@babel/core@7.28.4): + babel-preset-jest@29.6.3(@babel/core@7.28.5): dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.28.4) + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.28.5) optional: true balanced-match@1.0.2: {} + base-x@3.0.11: + dependencies: + safe-buffer: 5.2.1 + base-x@5.0.1: {} base64-js@1.5.1: {} @@ -11626,6 +12714,12 @@ snapshots: boolbase@1.0.0: {} + borsh@0.7.0: + dependencies: + bn.js: 5.2.2 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + bowser@2.12.1: {} brace-expansion@1.1.11: @@ -11654,6 +12748,10 @@ snapshots: dependencies: fast-json-stable-stringify: 2.1.0 + bs58@4.0.1: + dependencies: + base-x: 3.0.11 + bs58@6.0.0: dependencies: base-x: 5.0.1 @@ -11747,6 +12845,8 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + chalk@5.6.2: {} + change-case-all@1.0.15: dependencies: change-case: 4.1.2 @@ -11781,6 +12881,8 @@ snapshots: chardet@0.7.0: {} + charenc@0.0.2: {} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -11907,6 +13009,12 @@ snapshots: commander@12.1.0: {} + commander@14.0.0: {} + + commander@14.0.2: {} + + commander@2.20.3: {} + commander@4.1.1: {} common-tags@1.8.2: {} @@ -11977,13 +13085,13 @@ snapshots: crc-32@1.2.2: {} - create-jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)): + create-jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)) + jest-config: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -12020,6 +13128,8 @@ snapshots: dependencies: uncrypto: 0.1.3 + crypt@0.0.2: {} + css-select@5.2.2: dependencies: boolbase: 1.0.0 @@ -12055,9 +13165,9 @@ snapshots: debounce@1.2.1: {} - debug@4.3.7: + debug@4.3.4: dependencies: - ms: 2.1.3 + ms: 2.1.2 debug@4.4.1: dependencies: @@ -12096,15 +13206,17 @@ snapshots: defu@6.1.4: {} + delay@5.0.0: {} + delayed-stream@1.0.0: {} dependency-graph@0.11.0: {} deprecation@2.3.1: {} - derive-valtio@0.1.0(valtio@1.13.2(@types/react@18.3.24)(react@18.3.1)): + derive-valtio@0.1.0(valtio@1.13.2(@types/react@18.3.26)(react@18.3.1)): dependencies: - valtio: 1.13.2(@types/react@18.3.24)(react@18.3.1) + valtio: 1.13.2(@types/react@18.3.26)(react@18.3.1) destr@2.0.5: {} @@ -12185,11 +13297,11 @@ snapshots: jsbn: 0.1.1 safer-buffer: 2.1.2 - eciesjs@0.4.15: + eciesjs@0.4.16: dependencies: '@ecies/ciphers': 0.2.4(@noble/ciphers@1.3.0) '@noble/ciphers': 1.3.0 - '@noble/curves': 1.9.1 + '@noble/curves': 1.9.7 '@noble/hashes': 1.8.0 ejs@3.1.10: @@ -12233,7 +13345,7 @@ snapshots: engine.io-client@6.6.3(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@socket.io/component-emitter': 3.1.2 - debug: 4.3.7 + debug: 4.3.4 engine.io-parser: 5.2.3 ws: 8.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) xmlhttprequest-ssl: 2.1.2 @@ -12282,6 +13394,12 @@ snapshots: es5-ext: 0.10.64 es6-symbol: 3.1.4 + es6-promise@4.2.8: {} + + es6-promisify@5.0.0: + dependencies: + es6-promise: 4.2.8 + es6-symbol@3.1.4: dependencies: d: 1.0.2 @@ -12766,6 +13884,8 @@ snapshots: extsprintf@1.3.0: {} + eyes@0.1.8: {} + fast-deep-equal@3.1.3: {} fast-glob@3.3.3: @@ -12784,6 +13904,10 @@ snapshots: fast-safe-stringify@2.1.1: {} + fast-stable-stringify@1.0.0: {} + + fastestsmallesttextencoderdecoder@1.0.22: {} + fastq@1.19.1: dependencies: reusify: 1.1.0 @@ -12868,6 +13992,8 @@ snapshots: flatted@3.3.3: {} + follow-redirects@1.15.11: {} + for-each@0.3.5: dependencies: is-callable: 1.2.7 @@ -12892,6 +14018,14 @@ snapshots: es-set-tostringtag: 2.1.0 mime-types: 2.1.35 + form-data@4.0.4: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + formdata-polyfill@4.0.10: dependencies: fetch-blob: 3.2.0 @@ -12915,6 +14049,8 @@ snapshots: function-bind@1.1.2: {} + generator-function@2.0.1: {} + gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} @@ -13059,7 +14195,7 @@ snapshots: graphql-tag@2.12.6(graphql@16.11.0): dependencies: graphql: 16.11.0 - tslib: 2.6.3 + tslib: 2.8.1 graphql-ws@6.0.5(crossws@0.3.5)(graphql@16.11.0)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: @@ -13141,6 +14277,8 @@ snapshots: minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 + hono@4.10.3: {} + hosted-git-info@2.8.9: {} hosted-git-info@4.1.0: @@ -13171,6 +14309,10 @@ snapshots: human-signals@2.1.0: {} + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -13301,6 +14443,8 @@ snapshots: dependencies: binary-extensions: 2.3.0 + is-buffer@1.1.6: {} + is-callable@1.2.7: {} is-core-module@2.16.1: @@ -13313,9 +14457,10 @@ snapshots: is-generator-fn@2.1.0: {} - is-generator-function@1.1.0: + is-generator-function@1.1.2: dependencies: call-bound: 1.0.4 + generator-function: 2.0.1 get-proto: 1.0.1 has-tostringtag: 1.0.2 safe-regex-test: 1.1.0 @@ -13355,6 +14500,8 @@ snapshots: dependencies: is-unc-path: 1.0.0 + is-retry-allowed@2.2.0: {} + is-stream@2.0.1: {} is-typed-array@1.1.15: @@ -13381,6 +14528,10 @@ snapshots: isexe@2.0.0: {} + isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + isomorphic-ws@5.0.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) @@ -13463,6 +14614,24 @@ snapshots: filelist: 1.0.4 minimatch: 3.1.2 + jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + '@types/connect': 3.4.38 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + json-stringify-safe: 5.0.1 + stream-json: 1.9.1 + uuid: 8.3.2 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + jest-changed-files@29.7.0: dependencies: execa: 5.1.1 @@ -13495,16 +14664,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)): + jest-cli@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)) + create-jest: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)) + jest-config: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -13514,7 +14683,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)): + jest-config@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)): dependencies: '@babel/core': 7.27.1 '@jest/test-sequencer': 29.7.0 @@ -13540,7 +14709,7 @@ snapshots: strip-json-comments: 3.1.1 optionalDependencies: '@types/node': 20.17.52 - ts-node: 10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3) + ts-node: 10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -13767,12 +14936,12 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)): + jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)) + jest-cli: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -13785,6 +14954,8 @@ snapshots: jose@5.10.0: {} + jose@6.1.0: {} + joycon@3.1.1: {} js-sha3@0.8.0: {} @@ -13847,6 +15018,14 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} + json-stable-stringify@1.3.0: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + isarray: 2.0.5 + jsonify: 0.0.1 + object-keys: 1.1.1 + json-stringify-deterministic@1.0.12: {} json-stringify-safe@5.0.1: {} @@ -13868,6 +15047,8 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + jsonify@0.0.1: {} + jsonpath-plus@10.3.0: dependencies: '@jsep-plugin/assignment': 1.3.0(jsep@1.4.0) @@ -14027,6 +15208,12 @@ snapshots: math-intrinsics@1.1.0: {} + md5@2.3.0: + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + is-buffer: 1.1.6 + memoizee@0.4.17: dependencies: d: 1.0.2 @@ -14130,6 +15317,8 @@ snapshots: modify-values@1.0.1: {} + ms@2.1.2: {} + ms@2.1.3: {} multibase@4.0.6: @@ -14254,7 +15443,9 @@ snapshots: object-assign@4.1.1: {} - ofetch@1.4.1: + object-keys@1.1.1: {} + + ofetch@1.5.0: dependencies: destr: 2.0.5 node-fetch-native: 1.6.7 @@ -14270,6 +15461,10 @@ snapshots: dependencies: mimic-fn: 2.1.0 + openapi-fetch@0.13.8: + dependencies: + openapi-typescript-helpers: 0.0.15 + openapi-typescript-codegen@0.29.0: dependencies: '@apidevtools/json-schema-ref-parser': 11.9.3 @@ -14278,6 +15473,8 @@ snapshots: fs-extra: 11.3.0 handlebars: 4.7.8 + openapi-typescript-helpers@0.0.15: {} + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -14301,35 +15498,65 @@ snapshots: os-tmpdir@1.0.2: {} - ox@0.6.7(typescript@5.8.3)(zod@3.25.76): + ox@0.6.7(typescript@5.8.3)(zod@4.1.12): dependencies: '@adraffy/ens-normalize': 1.11.0 - '@noble/curves': 1.9.1 + '@noble/curves': 1.9.7 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.1.0(typescript@5.8.3)(zod@3.25.76) + abitype: 1.1.1(typescript@5.8.3)(zod@4.1.12) eventemitter3: 5.0.1 optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - zod - ox@0.6.9(typescript@5.8.3)(zod@3.25.76): + ox@0.6.9(typescript@5.8.3)(zod@4.1.12): dependencies: '@adraffy/ens-normalize': 1.11.0 + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.1.1(typescript@5.8.3)(zod@4.1.12) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - zod + + ox@0.7.1(typescript@5.8.3)(zod@3.25.76): + dependencies: + '@adraffy/ens-normalize': 1.11.0 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.1.1(typescript@5.8.3)(zod@3.25.76) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - zod + + ox@0.9.14(typescript@5.8.3)(zod@4.1.12): + dependencies: + '@adraffy/ens-normalize': 1.11.0 + '@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.0(typescript@5.8.3)(zod@3.25.76) + abitype: 1.1.1(typescript@5.8.3)(zod@4.1.12) eventemitter3: 5.0.1 optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - zod - ox@0.7.1(typescript@5.8.3)(zod@3.22.4): + ox@0.9.6(typescript@5.8.3)(zod@3.22.4): dependencies: '@adraffy/ens-normalize': 1.11.0 '@noble/ciphers': 1.3.0 @@ -14337,14 +15564,14 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.1.0(typescript@5.8.3)(zod@3.22.4) + abitype: 1.1.1(typescript@5.8.3)(zod@3.22.4) eventemitter3: 5.0.1 optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - zod - ox@0.7.1(typescript@5.8.3)(zod@3.25.76): + ox@0.9.6(typescript@5.8.3)(zod@3.25.76): dependencies: '@adraffy/ens-normalize': 1.11.0 '@noble/ciphers': 1.3.0 @@ -14352,14 +15579,14 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.1.0(typescript@5.8.3)(zod@3.25.76) + abitype: 1.1.1(typescript@5.8.3)(zod@3.25.76) eventemitter3: 5.0.1 optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - zod - ox@0.9.3(typescript@5.8.3)(zod@3.25.76): + ox@0.9.6(typescript@5.8.3)(zod@4.1.12): dependencies: '@adraffy/ens-normalize': 1.11.0 '@noble/ciphers': 1.3.0 @@ -14367,7 +15594,7 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.1.0(typescript@5.8.3)(zod@3.25.76) + abitype: 1.1.1(typescript@5.8.3)(zod@4.1.12) eventemitter3: 5.0.1 optionalDependencies: typescript: 5.8.3 @@ -14502,23 +15729,43 @@ snapshots: pony-cause@2.1.11: {} + porto@0.2.35(@tanstack/react-query@5.45.1(react@18.3.1))(@types/react@18.3.26)(@wagmi/core@2.22.1(@tanstack/query-core@5.45.0)(@types/react@18.3.26)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12)))(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(wagmi@2.19.2(@tanstack/query-core@5.45.0)(@tanstack/react-query@5.45.1(react@18.3.1))(@types/react@18.3.26)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.12)): + dependencies: + '@wagmi/core': 2.22.1(@tanstack/query-core@5.45.0)(@types/react@18.3.26)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12)) + hono: 4.10.3 + idb-keyval: 6.2.2 + mipd: 0.0.7(typescript@5.8.3) + ox: 0.9.14(typescript@5.8.3)(zod@4.1.12) + viem: 2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) + zod: 4.1.12 + zustand: 5.0.8(@types/react@18.3.26)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) + optionalDependencies: + '@tanstack/react-query': 5.45.1(react@18.3.1) + react: 18.3.1 + typescript: 5.8.3 + wagmi: 2.19.2(@tanstack/query-core@5.45.0)(@tanstack/react-query@5.45.1(react@18.3.1))(@types/react@18.3.26)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.12) + transitivePeerDependencies: + - '@types/react' + - immer + - use-sync-external-store + possible-typed-array-names@1.1.0: {} - postcss-load-config@4.0.2(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)): + postcss-load-config@4.0.2(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)): dependencies: lilconfig: 3.1.3 yaml: 2.8.0 optionalDependencies: postcss: 8.5.6 - ts-node: 10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3) + ts-node: 10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3) - postcss-load-config@4.0.2(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@22.15.24)(typescript@5.8.3)): + postcss-load-config@4.0.2(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@22.15.24)(typescript@5.8.3)): dependencies: lilconfig: 3.1.3 yaml: 2.8.0 optionalDependencies: postcss: 8.5.6 - ts-node: 10.9.2(@swc/core@1.13.4)(@types/node@22.15.24)(typescript@5.8.3) + ts-node: 10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@22.15.24)(typescript@5.8.3) postcss@8.5.6: dependencies: @@ -14575,6 +15822,8 @@ snapshots: proxy-compare@2.6.0: {} + proxy-from-env@1.1.0: {} + psl@1.15.0: dependencies: punycode: 2.3.1 @@ -14832,6 +16081,19 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.45.1 fsevents: 2.3.3 + rpc-websockets@9.3.1: + dependencies: + '@swc/helpers': 0.5.17 + '@types/uuid': 8.3.4 + '@types/ws': 8.18.1 + buffer: 6.0.3 + eventemitter3: 5.0.1 + uuid: 8.3.2 + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + run-async@2.4.1: {} run-parallel@1.2.0: @@ -14902,7 +16164,7 @@ snapshots: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 - to-buffer: 1.2.1 + to-buffer: 1.2.2 shebang-command@2.0.0: dependencies: @@ -14953,7 +16215,7 @@ snapshots: socket.io-client@4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@socket.io/component-emitter': 3.1.2 - debug: 4.3.7 + debug: 4.3.4 engine.io-client: 6.6.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) socket.io-parser: 4.2.4 transitivePeerDependencies: @@ -14964,7 +16226,7 @@ snapshots: socket.io-parser@4.2.4: dependencies: '@socket.io/component-emitter': 3.1.2 - debug: 4.3.7 + debug: 4.3.4 transitivePeerDependencies: - supports-color @@ -15033,6 +16295,12 @@ snapshots: dependencies: escape-string-regexp: 2.0.0 + stream-chain@2.2.5: {} + + stream-json@1.9.1: + dependencies: + stream-chain: 2.2.5 + stream-shift@1.0.3: {} strict-uri-encode@2.0.0: {} @@ -15096,6 +16364,8 @@ snapshots: superstruct@1.0.4: {} + superstruct@2.0.2: {} + supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -15133,6 +16403,8 @@ snapshots: glob: 7.2.3 minimatch: 3.1.2 + text-encoding-utf-8@1.0.2: {} + text-table@0.2.0: {} thenify-all@1.6.0: @@ -15171,7 +16443,7 @@ snapshots: tmpl@1.0.5: {} - to-buffer@1.2.1: + to-buffer@1.2.2: dependencies: isarray: 2.0.5 safe-buffer: 5.2.1 @@ -15213,12 +16485,12 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-jest@29.3.4(@babel/core@7.27.1)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.1))(esbuild@0.19.12)(jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)))(typescript@5.8.3): + ts-jest@29.3.4(@babel/core@7.27.1)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.1))(esbuild@0.19.12)(jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)))(typescript@5.8.3): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)) + jest: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -15234,12 +16506,12 @@ snapshots: babel-jest: 29.7.0(@babel/core@7.27.1) esbuild: 0.19.12 - ts-jest@29.3.4(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)))(typescript@5.8.3): + ts-jest@29.3.4(@babel/core@7.28.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.5))(jest@29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)))(typescript@5.8.3): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)) + jest: 29.7.0(@types/node@20.17.52)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -15249,14 +16521,14 @@ snapshots: typescript: 5.8.3 yargs-parser: 21.1.1 optionalDependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.28.4) + babel-jest: 29.7.0(@babel/core@7.28.5) ts-log@2.2.7: {} - ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3): + ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -15274,9 +16546,9 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.13.4 + '@swc/core': 1.13.4(@swc/helpers@0.5.17) - ts-node@10.9.2(@swc/core@1.13.4)(@types/node@22.15.24)(typescript@5.8.3): + ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@22.15.24)(typescript@5.8.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -15294,7 +16566,7 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.13.4 + '@swc/core': 1.13.4(@swc/helpers@0.5.17) optional: true tslib@1.14.1: {} @@ -15305,7 +16577,7 @@ snapshots: tslib@2.8.1: {} - tsup@7.3.0(@swc/core@1.13.4)(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3): + tsup@7.3.0(@swc/core@1.13.4(@swc/helpers@0.5.17))(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3))(typescript@5.8.3): dependencies: bundle-require: 4.2.1(esbuild@0.19.12) cac: 6.7.14 @@ -15315,21 +16587,21 @@ snapshots: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 4.0.2(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@20.17.52)(typescript@5.8.3)) + postcss-load-config: 4.0.2(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@20.17.52)(typescript@5.8.3)) resolve-from: 5.0.0 rollup: 4.45.1 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tree-kill: 1.2.2 optionalDependencies: - '@swc/core': 1.13.4 + '@swc/core': 1.13.4(@swc/helpers@0.5.17) postcss: 8.5.6 typescript: 5.8.3 transitivePeerDependencies: - supports-color - ts-node - tsup@7.3.0(@swc/core@1.13.4)(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@22.15.24)(typescript@5.8.3))(typescript@5.8.3): + tsup@7.3.0(@swc/core@1.13.4(@swc/helpers@0.5.17))(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@22.15.24)(typescript@5.8.3))(typescript@5.8.3): dependencies: bundle-require: 4.2.1(esbuild@0.19.12) cac: 6.7.14 @@ -15339,14 +16611,14 @@ snapshots: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 4.0.2(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4)(@types/node@22.15.24)(typescript@5.8.3)) + postcss-load-config: 4.0.2(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.13.4(@swc/helpers@0.5.17))(@types/node@22.15.24)(typescript@5.8.3)) resolve-from: 5.0.0 rollup: 4.45.1 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tree-kill: 1.2.2 optionalDependencies: - '@swc/core': 1.13.4 + '@swc/core': 1.13.4(@swc/helpers@0.5.17) postcss: 8.5.6 typescript: 5.8.3 transitivePeerDependencies: @@ -15364,32 +16636,32 @@ snapshots: dependencies: safe-buffer: 5.2.1 - turbo-darwin-64@2.5.5: + turbo-darwin-64@2.6.0: optional: true - turbo-darwin-arm64@2.5.5: + turbo-darwin-arm64@2.6.0: optional: true - turbo-linux-64@2.5.5: + turbo-linux-64@2.6.0: optional: true - turbo-linux-arm64@2.5.5: + turbo-linux-arm64@2.6.0: optional: true - turbo-windows-64@2.5.5: + turbo-windows-64@2.6.0: optional: true - turbo-windows-arm64@2.5.5: + turbo-windows-arm64@2.6.0: optional: true - turbo@2.5.5: + turbo@2.6.0: optionalDependencies: - turbo-darwin-64: 2.5.5 - turbo-darwin-arm64: 2.5.5 - turbo-linux-64: 2.5.5 - turbo-linux-arm64: 2.5.5 - turbo-windows-64: 2.5.5 - turbo-windows-arm64: 2.5.5 + turbo-darwin-64: 2.6.0 + turbo-darwin-arm64: 2.6.0 + turbo-linux-64: 2.6.0 + turbo-linux-arm64: 2.6.0 + turbo-windows-64: 2.6.0 + turbo-windows-arm64: 2.6.0 tweetnacl@0.14.5: {} @@ -15494,6 +16766,8 @@ snapshots: undici-types@6.21.0: optional: true + undici-types@7.16.0: {} + unist-util-is@4.1.0: {} unist-util-visit-parents@3.1.1: @@ -15525,7 +16799,7 @@ snapshots: h3: 1.15.4 lru-cache: 10.4.3 node-fetch-native: 1.6.7 - ofetch: 1.4.1 + ofetch: 1.5.0 ufo: 1.6.1 optionalDependencies: idb-keyval: 6.2.2 @@ -15568,7 +16842,7 @@ snapshots: dependencies: inherits: 2.0.4 is-arguments: 1.2.0 - is-generator-function: 1.1.0 + is-generator-function: 1.1.2 is-typed-array: 1.1.15 which-typed-array: 1.1.19 @@ -15591,13 +16865,13 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - valtio@1.13.2(@types/react@18.3.24)(react@18.3.1): + valtio@1.13.2(@types/react@18.3.26)(react@18.3.1): dependencies: - derive-valtio: 0.1.0(valtio@1.13.2(@types/react@18.3.24)(react@18.3.1)) + derive-valtio: 0.1.0(valtio@1.13.2(@types/react@18.3.26)(react@18.3.1)) proxy-compare: 2.6.0 use-sync-external-store: 1.2.0(react@18.3.1) optionalDependencies: - '@types/react': 18.3.24 + '@types/react': 18.3.26 react: 18.3.1 varint@5.0.2: {} @@ -15610,15 +16884,15 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.3.0 - viem@2.23.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76): + viem@2.23.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12): dependencies: '@noble/curves': 1.8.1 '@noble/hashes': 1.7.1 '@scure/bip32': 1.6.2 '@scure/bip39': 1.5.4 - abitype: 1.0.8(typescript@5.8.3)(zod@3.25.76) + abitype: 1.0.8(typescript@5.8.3)(zod@4.1.12) isows: 1.0.6(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - ox: 0.6.7(typescript@5.8.3)(zod@3.25.76) + ox: 0.6.7(typescript@5.8.3)(zod@4.1.12) ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: typescript: 5.8.3 @@ -15627,15 +16901,15 @@ snapshots: - utf-8-validate - zod - viem@2.30.5(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.22.4): + viem@2.30.5(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.0.8(typescript@5.8.3)(zod@3.22.4) + abitype: 1.0.8(typescript@5.8.3)(zod@3.25.76) isows: 1.0.7(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - ox: 0.7.1(typescript@5.8.3)(zod@3.22.4) + ox: 0.7.1(typescript@5.8.3)(zod@3.25.76) ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: typescript: 5.8.3 @@ -15644,16 +16918,16 @@ snapshots: - utf-8-validate - zod - viem@2.30.5(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76): + viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.22.4): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.0.8(typescript@5.8.3)(zod@3.25.76) - isows: 1.0.7(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - ox: 0.7.1(typescript@5.8.3)(zod@3.25.76) - ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) + abitype: 1.1.0(typescript@5.8.3)(zod@3.22.4) + isows: 1.0.7(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + ox: 0.9.6(typescript@5.8.3)(zod@3.22.4) + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -15661,7 +16935,7 @@ snapshots: - utf-8-validate - zod - viem@2.37.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76): + viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 @@ -15669,7 +16943,7 @@ snapshots: '@scure/bip39': 1.6.0 abitype: 1.1.0(typescript@5.8.3)(zod@3.25.76) isows: 1.0.7(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - ox: 0.9.3(typescript@5.8.3)(zod@3.25.76) + ox: 0.9.6(typescript@5.8.3)(zod@3.25.76) ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: typescript: 5.8.3 @@ -15678,7 +16952,24 @@ snapshots: - utf-8-validate - zod - vite@5.4.20(@types/node@22.15.24): + viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12): + 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.8.3)(zod@4.1.12) + isows: 1.0.7(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + ox: 0.9.6(typescript@5.8.3)(zod@4.1.12) + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + + vite@5.4.21(@types/node@22.15.24): dependencies: esbuild: 0.21.5 postcss: 8.5.6 @@ -15702,14 +16993,14 @@ snapshots: tsx: 4.19.4 yaml: 2.8.0 - wagmi@2.16.9(@tanstack/query-core@5.45.0)(@tanstack/react-query@5.45.1(react@18.3.1))(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.37.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76): + wagmi@2.19.2(@tanstack/query-core@5.45.0)(@tanstack/react-query@5.45.1(react@18.3.1))(@types/react@18.3.26)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.12): dependencies: '@tanstack/react-query': 5.45.1(react@18.3.1) - '@wagmi/connectors': 5.9.9(@types/react@18.3.24)(@wagmi/core@2.20.3(@tanstack/query-core@5.45.0)(@types/react@18.3.24)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.37.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(viem@2.37.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) - '@wagmi/core': 2.20.3(@tanstack/query-core@5.45.0)(@types/react@18.3.24)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.37.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76)) + '@wagmi/connectors': 6.1.3(@tanstack/react-query@5.45.1(react@18.3.1))(@types/react@18.3.26)(@wagmi/core@2.22.1(@tanstack/query-core@5.45.0)(@types/react@18.3.26)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12)))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(wagmi@2.19.2(@tanstack/query-core@5.45.0)(@tanstack/react-query@5.45.1(react@18.3.1))(@types/react@18.3.26)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.12))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.12) + '@wagmi/core': 2.22.1(@tanstack/query-core@5.45.0)(@types/react@18.3.26)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12)) react: 18.3.1 use-sync-external-store: 1.4.0(react@18.3.1) - viem: 2.37.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.38.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@4.1.12) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -15733,12 +17024,19 @@ snapshots: - aws4fetch - bufferutil - db0 + - debug - encoding + - expo-auth-session + - expo-crypto + - expo-web-browser + - fastestsmallesttextencoderdecoder - immer - ioredis + - react-native - supports-color - uploadthing - utf-8-validate + - ws - zod walker@1.0.8: @@ -15922,14 +17220,22 @@ snapshots: zod@3.25.76: {} - zustand@5.0.0(@types/react@18.3.24)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)): + zod@4.1.12: {} + + zustand@5.0.0(@types/react@18.3.26)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)): + optionalDependencies: + '@types/react': 18.3.26 + react: 18.3.1 + use-sync-external-store: 1.4.0(react@18.3.1) + + zustand@5.0.3(@types/react@18.3.26)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)): optionalDependencies: - '@types/react': 18.3.24 + '@types/react': 18.3.26 react: 18.3.1 use-sync-external-store: 1.4.0(react@18.3.1) - zustand@5.0.3(@types/react@18.3.24)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)): + zustand@5.0.8(@types/react@18.3.26)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)): optionalDependencies: - '@types/react': 18.3.24 + '@types/react': 18.3.26 react: 18.3.1 use-sync-external-store: 1.4.0(react@18.3.1)