diff --git a/packages/app/control/prisma/migrations/20251023210535_x402_transaction_metadata/migration.sql b/packages/app/control/prisma/migrations/20251023210535_x402_transaction_metadata/migration.sql new file mode 100644 index 000000000..91282c05e --- /dev/null +++ b/packages/app/control/prisma/migrations/20251023210535_x402_transaction_metadata/migration.sql @@ -0,0 +1,15 @@ +-- CreateTable +CREATE TABLE "x402_transaction_metadata" ( + "id" UUID NOT NULL, + "resourcePath" TEXT NOT NULL, + "resourceArgs" JSONB NOT NULL, + "resourceResponse" JSONB NOT NULL, + "resourceError" JSONB NOT NULL, + "createdAt" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMPTZ NOT NULL, + + CONSTRAINT "x402_transaction_metadata_pkey" PRIMARY KEY ("id") +); + +-- AddForeignKey +ALTER TABLE "transactions" ADD CONSTRAINT "transactions_id_fkey" FOREIGN KEY ("id") REFERENCES "x402_transaction_metadata"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/packages/app/control/prisma/migrations/20251024031608_transaction_metadata_fix/migration.sql b/packages/app/control/prisma/migrations/20251024031608_transaction_metadata_fix/migration.sql new file mode 100644 index 000000000..ea8f903e5 --- /dev/null +++ b/packages/app/control/prisma/migrations/20251024031608_transaction_metadata_fix/migration.sql @@ -0,0 +1,13 @@ +-- DropForeignKey +ALTER TABLE "public"."transactions" DROP CONSTRAINT "transactions_id_fkey"; + +-- AlterTable +ALTER TABLE "transactions" ADD COLUMN "x402TransactionMetadataId" UUID; + +-- AlterTable +ALTER TABLE "x402_transaction_metadata" ALTER COLUMN "resourceArgs" SET DEFAULT '{}', +ALTER COLUMN "resourceResponse" SET DEFAULT '{}', +ALTER COLUMN "resourceError" SET DEFAULT '{}'; + +-- AddForeignKey +ALTER TABLE "transactions" ADD CONSTRAINT "transactions_x402TransactionMetadataId_fkey" FOREIGN KEY ("x402TransactionMetadataId") REFERENCES "x402_transaction_metadata"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/packages/app/control/prisma/schema.prisma b/packages/app/control/prisma/schema.prisma index 1978962bc..2aa7f9708 100644 --- a/packages/app/control/prisma/schema.prisma +++ b/packages/app/control/prisma/schema.prisma @@ -40,7 +40,7 @@ model User { latestFreeCreditsVersion Decimal? OutboundEmailSent OutboundEmailSent[] creditGrantCodeUsages CreditGrantCodeUsage[] - VideoGenerationX402 VideoGenerationX402[] + VideoGenerationX402 VideoGenerationX402[] @@map("users") } @@ -103,9 +103,9 @@ model EchoApp { markUp MarkUp? // The markup rate for this app (one-to-one) githubLink GithubLink? // The GitHub link for this app (one-to-one) spendPools SpendPool[] // Spend pools associated with this app - currentReferralRewardId String? @db.Uuid // Reference to current active referral reward - currentReferralReward ReferralReward? @relation("CurrentReferralReward", fields: [currentReferralRewardId], references: [id]) - ReferralRewards ReferralReward[] @relation("AppReferralRewards") // All referral rewards for this app + currentReferralRewardId String? @db.Uuid // Reference to current active referral reward + currentReferralReward ReferralReward? @relation("CurrentReferralReward", fields: [currentReferralRewardId], references: [id]) + ReferralRewards ReferralReward[] @relation("AppReferralRewards") // All referral rewards for this app appSessions AppSession[] payouts Payout[] OutboundEmailSent OutboundEmailSent[] @@ -234,23 +234,23 @@ enum EnumPayoutType { } model Payout { - id String @id @default(uuid()) @db.Uuid - amount Decimal @db.Decimal(65, 14) + id String @id @default(uuid()) @db.Uuid + amount Decimal @db.Decimal(65, 14) status EnumPayoutStatus - payoutBatchId String? @db.Uuid + payoutBatchId String? @db.Uuid type EnumPayoutType - createdAt DateTime @default(now()) @db.Timestamptz(6) - updatedAt DateTime @updatedAt @db.Timestamptz(6) + createdAt DateTime @default(now()) @db.Timestamptz(6) + updatedAt DateTime @updatedAt @db.Timestamptz(6) description String? transactionId String? senderAddress String? - recipientGithubLinkId String? @db.Uuid + recipientGithubLinkId String? @db.Uuid recipientAddress String? - userId String? @db.Uuid // User ID if type is "referral" - echoAppId String? @db.Uuid // App ID if type is "markup" - recipientGithubLink GithubLink? @relation(fields: [recipientGithubLinkId], references: [id]) - user User? @relation(fields: [userId], references: [id], onDelete: Cascade) - echoApp EchoApp? @relation(fields: [echoAppId], references: [id], onDelete: Cascade) + userId String? @db.Uuid // User ID if type is "referral" + echoAppId String? @db.Uuid // App ID if type is "markup" + recipientGithubLink GithubLink? @relation(fields: [recipientGithubLinkId], references: [id]) + user User? @relation(fields: [userId], references: [id], onDelete: Cascade) + echoApp EchoApp? @relation(fields: [echoAppId], references: [id], onDelete: Cascade) @@map("payouts") } @@ -302,34 +302,36 @@ enum EnumPaymentSource { } model Transaction { - id String @id @default(uuid()) @db.Uuid - transactionMetadataId String? @db.Uuid - totalCost Decimal @default(0.0) @db.Decimal(65, 14) - appProfit Decimal @default(0.0) @db.Decimal(65, 14) - markUpProfit Decimal @default(0.0) @db.Decimal(65, 14) - referralProfit Decimal @default(0.0) @db.Decimal(65, 14) - rawTransactionCost Decimal @default(0.0) @db.Decimal(65, 14) - status String? - isArchived Boolean @default(false) - archivedAt DateTime? @db.Timestamptz(6) - createdAt DateTime @default(now()) @db.Timestamptz(6) - userId String @db.Uuid - echoAppId String @db.Uuid - apiKeyId String? @db.Uuid - markUpId String? @db.Uuid - spendPoolId String? @db.Uuid - userSpendPoolUsageId String? @db.Uuid - referralCodeId String? @db.Uuid - referrerRewardId String? @db.Uuid - apiKey ApiKey? @relation(fields: [apiKeyId], references: [id], onDelete: Cascade) - echoApp EchoApp @relation(fields: [echoAppId], references: [id]) - markUp MarkUp? @relation(fields: [markUpId], references: [id]) - spendPool SpendPool? @relation(fields: [spendPoolId], references: [id]) - transactionMetadata TransactionMetadata? @relation(fields: [transactionMetadataId], references: [id]) - user User @relation(fields: [userId], references: [id], onDelete: Cascade) - userSpendPoolUsage UserSpendPoolUsage? @relation(fields: [userSpendPoolUsageId], references: [id]) - referralCode ReferralCode? @relation(fields: [referralCodeId], references: [id]) - referrerReward ReferralReward? @relation(fields: [referrerRewardId], references: [id]) + id String @id @default(uuid()) @db.Uuid + transactionMetadataId String? @db.Uuid + x402TransactionMetadataId String? @db.Uuid + totalCost Decimal @default(0.0) @db.Decimal(65, 14) + appProfit Decimal @default(0.0) @db.Decimal(65, 14) + markUpProfit Decimal @default(0.0) @db.Decimal(65, 14) + referralProfit Decimal @default(0.0) @db.Decimal(65, 14) + status String? + rawTransactionCost Decimal @default(0.0) @db.Decimal(65, 14) + isArchived Boolean @default(false) + archivedAt DateTime? @db.Timestamptz(6) + createdAt DateTime @default(now()) @db.Timestamptz(6) + userId String @db.Uuid + echoAppId String @db.Uuid + apiKeyId String? @db.Uuid + markUpId String? @db.Uuid + spendPoolId String? @db.Uuid + userSpendPoolUsageId String? @db.Uuid + referralCodeId String? @db.Uuid + referrerRewardId String? @db.Uuid + apiKey ApiKey? @relation(fields: [apiKeyId], references: [id], onDelete: Cascade) + echoApp EchoApp @relation(fields: [echoAppId], references: [id]) + markUp MarkUp? @relation(fields: [markUpId], references: [id]) + spendPool SpendPool? @relation(fields: [spendPoolId], references: [id]) + transactionMetadata TransactionMetadata? @relation(fields: [transactionMetadataId], references: [id]) + x402TransactionMetadata x402TransactionMetadata? @relation(fields: [x402TransactionMetadataId], references: [id], onDelete: Cascade) + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + userSpendPoolUsage UserSpendPoolUsage? @relation(fields: [userSpendPoolUsageId], references: [id]) + referralCode ReferralCode? @relation(fields: [referralCodeId], references: [id]) + referrerReward ReferralReward? @relation(fields: [referrerRewardId], references: [id]) @@map("transactions") } @@ -372,26 +374,39 @@ model UserSpendPoolUsage { } model TransactionMetadata { - id String @id @default(uuid()) @db.Uuid - providerId String - provider String - model String - inputTokens Int? - outputTokens Int? - totalTokens Int? + id String @id @default(uuid()) @db.Uuid + providerId String + provider String + model String + inputTokens Int? + outputTokens Int? + totalTokens Int? durationSeconds Int? - generateAudio Boolean? - toolCost Decimal @default(0.0) @db.Decimal(65, 14) - prompt String? - isArchived Boolean @default(false) - archivedAt DateTime? @db.Timestamptz(6) - createdAt DateTime @default(now()) @db.Timestamptz(6) - updatedAt DateTime @updatedAt @db.Timestamptz(6) - transactions Transaction[] + generateAudio Boolean? + toolCost Decimal @default(0.0) @db.Decimal(65, 14) + prompt String? + isArchived Boolean @default(false) + archivedAt DateTime? @db.Timestamptz(6) + createdAt DateTime @default(now()) @db.Timestamptz(6) + updatedAt DateTime @updatedAt @db.Timestamptz(6) + transactions Transaction[] @@map("transaction_metadata") } +model x402TransactionMetadata { + id String @id @default(uuid()) @db.Uuid + resourcePath String + resourceArgs Json @default("{}") + resourceResponse Json @default("{}") + resourceError Json @default("{}") + createdAt DateTime @default(now()) @db.Timestamptz + updatedAt DateTime @updatedAt @db.Timestamptz + transactions Transaction[] + + @@map("x402_transaction_metadata") +} + model ReferralCode { id String @id @default(uuid()) @db.Uuid code String @unique @@ -494,16 +509,17 @@ model OutboundEmailSent { } model VideoGenerationX402 { - videoId String @id - wallet String? - userId String? @db.Uuid - echoAppId String? @db.Uuid - cost Decimal - createdAt DateTime @default(now()) @db.Timestamptz(6) - expiresAt DateTime @db.Timestamptz(6) - isFinal Boolean @default(false) - - user User? @relation(fields: [userId], references: [id], onDelete: Cascade) + videoId String @id + wallet String? + userId String? @db.Uuid + echoAppId String? @db.Uuid + cost Decimal + createdAt DateTime @default(now()) @db.Timestamptz(6) + expiresAt DateTime @db.Timestamptz(6) + isFinal Boolean @default(false) + + user User? @relation(fields: [userId], references: [id], onDelete: Cascade) echoApp EchoApp? @relation(fields: [echoAppId], references: [id], onDelete: Cascade) + @@map("video_generation_x402") } diff --git a/packages/app/server/package.json b/packages/app/server/package.json index f0a2fcc47..a28a8ab44 100644 --- a/packages/app/server/package.json +++ b/packages/app/server/package.json @@ -24,6 +24,7 @@ "sora-2-client": "npx tsx src/clients/sora-2-client.ts", "openrouter-client": "npx tsx src/clients/openrouter-client.ts", "openai-image-formdata-client": "npx tsx src/clients/openai-image-formdata-client.ts", + "echo-credit-client": "npx tsx src/clients/echo-credit-client.ts", "test": "vitest run", "test:integration": "vitest run", "test:watch": "vitest", @@ -79,6 +80,7 @@ "uuid": "^11.1.0", "viem": "^2.33.3", "winston": "^3.17.0", + "x402": "^0.6.5", "x402-express": "^0.6.5", "zod": "^4.1.11" }, diff --git a/packages/app/server/src/clients/echo-credit-client.ts b/packages/app/server/src/clients/echo-credit-client.ts new file mode 100644 index 000000000..aeb674ae8 --- /dev/null +++ b/packages/app/server/src/clients/echo-credit-client.ts @@ -0,0 +1,79 @@ +import dotenv from 'dotenv'; +dotenv.config(); + +const TRUECAST_URL = 'https://true-cast-agent.vercel.app/api/trueCast'; +const GLORIA_URL = 'https://api.itsgloria.ai/news'; +const ECHO_ROUTER_BASE_URL = + process.env.ECHO_ROUTER_BASE_URL || 'http://localhost:3070'; +const ECHO_API_KEY = process.env.ECHO_API_KEY; + +interface TrueCastRequest { + prompt: string; +} +interface GloriaNewsParams { + feed_categories?: string; +} +export async function postTrueCastRequest( + prompt: string, + apiKey?: string +): Promise { + const key = apiKey || ECHO_API_KEY; + + if (!key) { + throw new Error('ECHO_API_KEY is required'); + } + + const trueCastBody: TrueCastRequest = { prompt }; + + const response = await fetch( + `${ECHO_ROUTER_BASE_URL}/x402?proxy=${encodeURIComponent(TRUECAST_URL)}`, + { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${key}`, + }, + body: JSON.stringify(trueCastBody), + } + ); + console.log('response', response.status); + const data = await response.json(); + console.log('data', data); + return data; +} + +export async function getGloriaNews( + params: GloriaNewsParams = { feed_categories: 'base' }, + apiKey?: string +): Promise { + const key = apiKey || ECHO_API_KEY; + + if (!key) { + throw new Error('ECHO_API_KEY is required'); + } + + const queryParams = new URLSearchParams( + params as Record + ).toString(); + const gloriaUrlWithParams = `${GLORIA_URL}?${queryParams}`; + + const response = await fetch( + `${ECHO_ROUTER_BASE_URL}/x402?proxy=${encodeURIComponent(gloriaUrlWithParams)}`, + { + method: 'GET', + headers: { + Authorization: `Bearer ${key}`, + }, + } + ); + + console.log('response', response.status); + const data = await response.json(); + console.log('data', data); + return data; +} +getGloriaNews({ feed_categories: 'base' }, ECHO_API_KEY); +postTrueCastRequest( + 'Was donald trump the first president of the united states?', + ECHO_API_KEY +); diff --git a/packages/app/server/src/errors/http.ts b/packages/app/server/src/errors/http.ts index 703666539..9af91404c 100644 --- a/packages/app/server/src/errors/http.ts +++ b/packages/app/server/src/errors/http.ts @@ -32,3 +32,19 @@ export class UnknownModelError extends HttpError { super(400, message); } } + +export class MissingProxyError extends HttpError { + constructor( + message: string = 'Missing proxy parameter: Query must be passed with ?proxy=""' + ) { + super(400, message); + } +} + +export class InvalidProxyError extends HttpError { + constructor( + message: string = 'Invalid proxy URL: Proxy must be a valid URL. Example: ?proxy="https://proxy.example.com"' + ) { + super(400, message); + } +} diff --git a/packages/app/server/src/routers/x402-credit.ts b/packages/app/server/src/routers/x402-credit.ts new file mode 100644 index 000000000..77550b594 --- /dev/null +++ b/packages/app/server/src/routers/x402-credit.ts @@ -0,0 +1,120 @@ +import { Router } from 'express'; +import { checkBalance } from 'services/BalanceCheckService'; +import { Transaction, X402CreditHandlerInput } from 'types'; +import { X402CreditRequestService } from 'services/HandleX402CreditService'; +import { Decimal } from 'generated/prisma/runtime/library'; +import logger from 'logger'; +import { authenticateRequest } from 'auth'; +import { EscrowRequest } from 'middleware/transaction-escrow-middleware'; +import { prisma } from 'server'; +import { Response as ExpressResponse } from 'express'; +import { EchoDbService } from 'services/DbService'; +import { getSmartAccount } from 'utils'; +import { PaymentRequiredError, UnauthorizedError } from 'errors/http'; + +const x402Router: Router = Router(); + +x402Router.all('/', async (req: EscrowRequest, res: ExpressResponse) => { + const headers = req.headers as Record; + const { processedHeaders, echoControlService } = await authenticateRequest( + headers, + prisma + ); + const dbService = new EchoDbService(prisma); + + return handleApiX402CreditRequest({ + req, + res, + headers: processedHeaders, + echoControlService, + dbService, + }).catch(error => { + logger.error('Failed to handle X402 credit request', error); + return res.status(500).json({ error: 'Internal server error' }); + }); +}); + +export async function handleApiX402CreditRequest({ + req, + res, + headers, + echoControlService, + dbService, +}: X402CreditHandlerInput) { + try { + const { owner } = await getSmartAccount(); + const handleX402CreditRequestService = new X402CreditRequestService({ + req, + headers, + dbService, + owner, + }); + + const balanceCheckResult = await checkBalance(echoControlService); + const balanceCheckDecimal = new Decimal( + balanceCheckResult.effectiveBalance || 0 + ); + + const x402RequestPriceRaw = + await handleX402CreditRequestService.getX402RequestPrice(); + const x402RequestPrice = + handleX402CreditRequestService.convertUsdcToDecimal(x402RequestPriceRaw); + logger.info('X402 pricing check', { + x402RequestPriceRaw: x402RequestPriceRaw.toString(), + x402RequestPrice: x402RequestPrice.toString(), + balanceCheckDecimal: balanceCheckDecimal.toString(), + }); + + if (x402RequestPrice.gt(balanceCheckDecimal)) { + return res.status(402).json({ error: 'Insufficient balance' }); + } + + const proxyUrl = handleX402CreditRequestService.getRequestUrl(); + const resourcePath = proxyUrl.origin + proxyUrl.pathname; + const queryParams: Record = {}; + proxyUrl.searchParams.forEach((value, key) => { + queryParams[key] = value; + }); + + const resourceArgs = + req.method === 'GET' ? queryParams : { queryParams, body: req.body }; + + const transaction: Transaction = { + metadata: { + resourcePath, + resourceArgs, + }, + rawTransactionCost: x402RequestPrice, + status: 'success', + }; + + const createdTransaction = await echoControlService.createTransaction( + transaction, + x402RequestPrice + ); + + void handleX402CreditRequestService + .checkOwnerWalletBalance() + .catch(error => { + logger.error('Failed to check owner wallet balance', error); + }); + + const response = + await handleX402CreditRequestService.executeX402RequestAndUpdateMetadata( + createdTransaction + ); + const body = await response.json(); + return res.status(response.status).json(body); + } catch (error) { + if (error instanceof UnauthorizedError) { + return res.status(401).json({ error: error.message }); + } + if (error instanceof PaymentRequiredError) { + return res.status(402).json({ error: error.message }); + } + logger.error('Failed to handle X402 credit request', error); + return res.status(500).json({ error: 'Internal server error' }); + } +} + +export { x402Router }; diff --git a/packages/app/server/src/server.ts b/packages/app/server/src/server.ts index 6d3a8724d..7473974bc 100644 --- a/packages/app/server/src/server.ts +++ b/packages/app/server/src/server.ts @@ -31,6 +31,7 @@ import { initializeProvider } from './services/ProviderInitializationService'; import { getRequestMaxCost } from './services/PricingService'; import { Decimal } from '@prisma/client/runtime/library'; import resourceRouter from './routers/resource'; +import { x402Router } from 'routers/x402-credit'; dotenv.config(); @@ -98,6 +99,8 @@ app.use(inFlightMonitorRouter); // Use resource router for resource routes app.use('/resource', resourceRouter); +app.use('/x402', x402Router); + // Main route handler app.all('*', async (req: EscrowRequest, res: Response, next: NextFunction) => { try { diff --git a/packages/app/server/src/services/DbService.ts b/packages/app/server/src/services/DbService.ts index a019cf089..c3b6c2fa0 100644 --- a/packages/app/server/src/services/DbService.ts +++ b/packages/app/server/src/services/DbService.ts @@ -5,6 +5,10 @@ import { TransactionRequest, isLlmTransactionMetadata, isVeoTransactionMetadata, + isX402TransactionMetadata, + X402TransactionMetadata, + LlmTransactionMetadata, + VeoTransactionMetadata, } from '../types'; import { createHmac } from 'crypto'; import { jwtVerify } from 'jose'; @@ -14,7 +18,11 @@ import { Transaction, UserSpendPoolUsage, } from '../generated/prisma'; -import { Decimal } from '@prisma/client/runtime/library'; +import { + Decimal, + JsonValue, + InputJsonValue, +} from '@prisma/client/runtime/library'; import logger from '../logger'; /** * Secret key for deterministic API key hashing (should match echo-control) @@ -283,43 +291,90 @@ export class EchoDbService { }); } - /** - * Create a new transaction record - * @param tx - Prisma transaction client - * @param transaction - The transaction data to create - */ - private async createTransactionRecord( + private async createX402TransactionMetadata( tx: Prisma.TransactionClient, - transaction: TransactionRequest - ): Promise { - // First create the transaction metadata record - const transactionMetadata = await tx.transactionMetadata.create({ + metadata: + | LlmTransactionMetadata + | VeoTransactionMetadata + | X402TransactionMetadata + ) { + if (!isX402TransactionMetadata(metadata)) { + return null; + } + + return await tx.x402TransactionMetadata.create({ + data: { + resourcePath: metadata.resourcePath, + resourceArgs: metadata.resourceArgs, + resourceResponse: metadata.resourceResponse ?? Prisma.JsonNull, + resourceError: metadata.resourceError ?? Prisma.JsonNull, + }, + }); + } + + private async createTransactionMetadata( + tx: Prisma.TransactionClient, + metadata: + | LlmTransactionMetadata + | VeoTransactionMetadata + | X402TransactionMetadata + ) { + if ( + !isLlmTransactionMetadata(metadata) && + !isVeoTransactionMetadata(metadata) + ) { + return null; + } + + return await tx.transactionMetadata.create({ data: { - providerId: transaction.metadata.providerId, - provider: transaction.metadata.provider, - model: transaction.metadata.model, + providerId: metadata.providerId, + provider: metadata.provider, + model: metadata.model, // LLM-specific fields - inputTokens: isLlmTransactionMetadata(transaction.metadata) - ? transaction.metadata.inputTokens + inputTokens: isLlmTransactionMetadata(metadata) + ? metadata.inputTokens : null, - outputTokens: isLlmTransactionMetadata(transaction.metadata) - ? transaction.metadata.outputTokens + outputTokens: isLlmTransactionMetadata(metadata) + ? metadata.outputTokens : null, - totalTokens: isLlmTransactionMetadata(transaction.metadata) - ? transaction.metadata.totalTokens + totalTokens: isLlmTransactionMetadata(metadata) + ? metadata.totalTokens : null, - prompt: isLlmTransactionMetadata(transaction.metadata) - ? transaction.metadata.prompt || null + prompt: isLlmTransactionMetadata(metadata) + ? metadata.prompt || null : null, // Veo-specific fields - durationSeconds: isVeoTransactionMetadata(transaction.metadata) - ? transaction.metadata.durationSeconds + durationSeconds: isVeoTransactionMetadata(metadata) + ? metadata.durationSeconds : null, - generateAudio: isVeoTransactionMetadata(transaction.metadata) - ? transaction.metadata.generateAudio + generateAudio: isVeoTransactionMetadata(metadata) + ? metadata.generateAudio : null, }, }); + } + + /** + * Create a new transaction record + * @param tx - Prisma transaction client + * @param transaction - The transaction data to create + */ + private async createTransactionRecord( + tx: Prisma.TransactionClient, + transaction: TransactionRequest + ): Promise { + // Handle X402 transactions separately + + const x402TransactionMetadata = await this.createX402TransactionMetadata( + tx, + transaction.metadata + ); + + const transactionMetadata = await this.createTransactionMetadata( + tx, + transaction.metadata + ); // Then create the transaction record with the linked metadata ID return await tx.transaction.create({ @@ -335,7 +390,8 @@ export class EchoDbService { apiKeyId: transaction.apiKeyId || null, markUpId: transaction.markUpId || null, spendPoolId: transaction.spendPoolId || null, - transactionMetadataId: transactionMetadata.id, + transactionMetadataId: transactionMetadata?.id || null, + x402TransactionMetadataId: x402TransactionMetadata?.id || null, referralCodeId: transaction.referralCodeId || null, referrerRewardId: transaction.referrerRewardId || null, }, @@ -428,7 +484,7 @@ export class EchoDbService { }); logger.info( - `Created transaction for model ${transaction.metadata.model}: $${transaction.totalCost}, updated user totalSpent`, + `Created transaction: $${transaction.totalCost}, updated user totalSpent`, result.id ); return result; @@ -490,7 +546,7 @@ export class EchoDbService { ); logger.info( - `Created free tier transaction for model ${transactionData.metadata.model}: $${transactionData.totalCost}`, + `Created free tier transaction: $${transactionData.totalCost}`, transaction.id ); @@ -522,4 +578,18 @@ export class EchoDbService { return !!transaction; } + + async upsertX402TransactionMetadata( + metadataId: string, + resourceResponse: InputJsonValue | null, + resourceError: InputJsonValue | null + ): Promise { + await this.db.x402TransactionMetadata.update({ + where: { id: metadataId }, + data: { + resourceResponse: resourceResponse ?? Prisma.JsonNull, + resourceError: resourceError ?? Prisma.JsonNull, + }, + }); + } } diff --git a/packages/app/server/src/services/EchoControlService.ts b/packages/app/server/src/services/EchoControlService.ts index dca4e6558..740ade0ed 100644 --- a/packages/app/server/src/services/EchoControlService.ts +++ b/packages/app/server/src/services/EchoControlService.ts @@ -141,30 +141,26 @@ export class EchoControlService { * Create an LLM transaction record directly in the database * Uses centralized logic from EchoDbService */ - async createTransaction( - transaction: Transaction, - maxCost: Decimal - ): Promise { + async createTransaction(transaction: Transaction, maxCost: Decimal) { try { if (!this.authResult) { logger.error('No authentication result available'); - return; + return null; } if (!this.markUpAmount) { logger.error('Error Fetching Markup Amount'); - return; + return null; } if (this.freeTierSpendPool) { - await this.createFreeTierTransaction(transaction); - return; + return await this.createFreeTierTransaction(transaction); } else { - await this.createPaidTransaction(transaction, maxCost); - return; + return await this.createPaidTransaction(transaction, maxCost); } } catch (error) { logger.error(`Error creating transaction: ${error}`); + return null; } } @@ -242,7 +238,7 @@ export class EchoControlService { markUpProfit: markUpProfitDecimal, }; } - async createFreeTierTransaction(transaction: Transaction): Promise { + async createFreeTierTransaction(transaction: Transaction) { if (!this.authResult) { logger.error('No authentication result available'); throw new UnauthorizedError('No authentication result available'); @@ -286,16 +282,13 @@ export class EchoControlService { ...(this.referrerRewardId && { referrerRewardId: this.referrerRewardId }), }; - await this.freeTierService.createFreeTierTransaction( + return await this.freeTierService.createFreeTierTransaction( transactionData, this.freeTierSpendPool.id ); } - async createPaidTransaction( - transaction: Transaction, - maxCost: Decimal - ): Promise { + async createPaidTransaction(transaction: Transaction, maxCost: Decimal) { if (!this.authResult) { logger.error('No authentication result available'); throw new UnauthorizedError('No authentication result available'); @@ -334,6 +327,6 @@ export class EchoControlService { ...(this.referrerRewardId && { referrerRewardId: this.referrerRewardId }), }; - await this.dbService.createPaidTransaction(transactionData); + return await this.dbService.createPaidTransaction(transactionData); } } diff --git a/packages/app/server/src/services/HandleX402CreditService.ts b/packages/app/server/src/services/HandleX402CreditService.ts new file mode 100644 index 000000000..9cba94438 --- /dev/null +++ b/packages/app/server/src/services/HandleX402CreditService.ts @@ -0,0 +1,241 @@ +import { EscrowRequest } from 'middleware/transaction-escrow-middleware'; +import { X402CreditServiceInput } from 'types'; +import { InvalidProxyError, MissingProxyError } from 'errors/http'; +import { createPaymentHeader, selectPaymentRequirements } from 'x402/client'; +import { toAccount } from 'viem/accounts'; +import { x402ResponseSchema } from './facilitator/x402-types'; +import { Decimal, InputJsonValue } from 'generated/prisma/runtime/library'; +import { EchoDbService } from './DbService'; +import { Transaction, UserSpendPoolUsage } from 'generated/prisma'; +import logger, { logMetric } from 'logger'; +import { createPublicClient, http } from 'viem'; +import { base } from 'viem/chains'; +import { ERC20_CONTRACT_ABI, USDC_ADDRESS } from 'services/fund-repo/constants'; +import { EvmServerAccount } from '@coinbase/cdp-sdk'; + +export class X402CreditRequestService { + private req: EscrowRequest; + private headers: Record; + private dbService: EchoDbService; + private owner: EvmServerAccount; + + constructor({ req, headers, dbService, owner }: X402CreditServiceInput) { + this.req = req; + this.headers = headers; + this.dbService = dbService; + this.owner = owner; + } + + getRequestUrl(): URL { + if (!this.req.query.proxy) { + throw new MissingProxyError(); + } + try { + return new URL(this.req.query.proxy as string); + } catch (error) { + throw new InvalidProxyError(); + } + } + + getRequestMethod(): string { + return this.req.method; + } + + getRequestHeaders(): Record { + return this.headers; + } + + getRequestBody(): any { + return this.req.body; + } + + /** + * Converts 6-decimal USDC amount to standard decimal representation. + * USDC uses 6 decimals, so 10000 = 0.01 USD. + * @param usdcAmount - The amount in 6-decimal USDC format + * @returns The amount in standard decimal format + */ + convertUsdcToDecimal(usdcAmount: Decimal): Decimal { + return usdcAmount.div(1e6); + } + + async getX402RequestPrice(): Promise { + const response = await this.makeX402Request(); + + if (response.status !== 402) { + const responseText = await response.text(); + throw new Error( + `Expected 402 Payment Required response, got ${response.status}. Response: ${responseText.substring(0, 200)}` + ); + } + + const responseJson = await response.json(); + const x402Response = x402ResponseSchema.safeParse(responseJson); + + if (!x402Response.success) { + throw new Error( + `Failed to parse X402 response: ${JSON.stringify(x402Response.error.issues)}` + ); + } + + return new Decimal(x402Response.data.accepts?.[0]?.maxAmountRequired || 0); + } + + async makeX402Request(signedPaymentHeader?: string): Promise { + const headers = this.getRequestHeaders(); + if (signedPaymentHeader) { + headers['X-PAYMENT'] = signedPaymentHeader; + } + + const method = this.getRequestMethod(); + const fetchOptions: RequestInit = { + method, + headers, + }; + + if (method !== 'GET' && method !== 'HEAD') { + const body = this.getRequestBody(); + if (body && Object.keys(body).length > 0) { + fetchOptions.body = JSON.stringify(body); + } + } + + return await fetch(this.getRequestUrl(), fetchOptions); + } + + async checkOwnerWalletBalance(): Promise { + const publicClient = createPublicClient({ + chain: base, + transport: http(), + }); + + const usdcBalance = await publicClient.readContract({ + address: USDC_ADDRESS, + abi: ERC20_CONTRACT_ABI, + functionName: 'balanceOf', + args: [this.owner.address], + }); + + const usdcBalanceFormatted = Number(usdcBalance) / 1e6; + + logger.info('USDC Balance on Base for wallet:', { + address: this.owner.address, + balance: usdcBalance.toString(), + rawUnits: usdcBalanceFormatted, + usdc: usdcBalanceFormatted, + function: 'getPaymentHeaderFromBody', + }); + + const enoughBalance = usdcBalance > 0; + const enoughBalanceWithSafetyBuffer = usdcBalanceFormatted > 5; + + if (!enoughBalanceWithSafetyBuffer) { + logMetric('x402_credit_insufficient_balance_with_safety_buffer', 1, { + address: this.owner.address, + balance: usdcBalance.toString(), + rawUnits: usdcBalanceFormatted, + usdc: usdcBalanceFormatted, + function: 'getPaymentHeaderFromBody', + }); + } + + return enoughBalance; + } + + async getPaymentHeaderFromBody(): Promise { + // Get x402 response to extract payment requirements + const response = await this.makeX402Request(); + if (response.status !== 402) { + throw new Error(`Expected 402 response, got ${response.status}`); + } + + const responseJson = await response.json(); + const x402Response = x402ResponseSchema.safeParse(responseJson); + + if (!x402Response.success) { + throw new Error( + `Failed to parse X402 response: ${JSON.stringify(x402Response.error.issues)}` + ); + } + + const ownerAccount = toAccount(this.owner); + const x402Version = x402Response.data.x402Version; + const accepts = x402Response.data.accepts; + + if (!accepts || accepts.length === 0) { + throw new Error('No payment requirements in X402 response'); + } + const selectedPaymentRequirements = selectPaymentRequirements(accepts); + const paymentHeader = await createPaymentHeader( + ownerAccount, + x402Version, + selectedPaymentRequirements + ); + return paymentHeader; + } + + async upsertTransactionArgsAfterResponse( + metadataId: string, + resourceResponse: InputJsonValue | null, + resourceError: InputJsonValue | null + ): Promise { + await this.dbService.upsertX402TransactionMetadata( + metadataId, + resourceResponse, + resourceError + ); + } + + private extractTransactionRecord( + createdTransaction: + | Transaction + | { transaction: Transaction; userSpendPoolUsage: UserSpendPoolUsage } + ): Transaction { + return 'transaction' in createdTransaction + ? createdTransaction.transaction + : createdTransaction; + } + + async executeX402RequestAndUpdateMetadata( + createdTransaction: + | Transaction + | { transaction: Transaction; userSpendPoolUsage: UserSpendPoolUsage } + | null + ): Promise { + if (!createdTransaction) { + throw new Error('Failed to create transaction'); + } + + const transactionRecord = this.extractTransactionRecord(createdTransaction); + + if (!transactionRecord.x402TransactionMetadataId) { + throw new Error('Missing x402TransactionMetadataId'); + } + + const paymentHeader = await this.getPaymentHeaderFromBody(); + const response = await this.makeX402Request(paymentHeader); + + const responseClone = response.clone(); + try { + const responseData = await response.json(); + await this.upsertTransactionArgsAfterResponse( + transactionRecord.x402TransactionMetadataId, + responseData, + null + ); + } catch (error) { + const errorObj = { + error: 'Failed to parse response JSON', + message: error instanceof Error ? error.message : String(error), + statusCode: response.status, + statusText: response.statusText, + }; + await this.upsertTransactionArgsAfterResponse( + transactionRecord.x402TransactionMetadataId, + null, + errorObj + ); + } + return responseClone; + } +} diff --git a/packages/app/server/src/services/facilitator/x402-types.ts b/packages/app/server/src/services/facilitator/x402-types.ts index cd9345fcb..2fd4796f3 100644 --- a/packages/app/server/src/services/facilitator/x402-types.ts +++ b/packages/app/server/src/services/facilitator/x402-types.ts @@ -16,7 +16,6 @@ export const NetworkSchema = z.enum([ 'sei-testnet', 'polygon', 'polygon-amoy', - 'peaq', ]); export type Network = z.infer; // Constants @@ -141,7 +140,7 @@ export type UnsignedPaymentPayload = Omit & { // x402 Resource Server Response export const x402ResponseSchema = z.object({ x402Version: z.number().refine(val => x402Versions.includes(val as 1)), - error: z.enum(ErrorReasons).optional(), + error: z.string().optional(), accepts: z.array(PaymentRequirementsSchema).optional(), payer: z.string().regex(MixedAddressRegex).optional(), }); diff --git a/packages/app/server/src/types.ts b/packages/app/server/src/types.ts index b92451816..72e876f30 100644 --- a/packages/app/server/src/types.ts +++ b/packages/app/server/src/types.ts @@ -1,9 +1,11 @@ -import { Decimal } from '@prisma/client/runtime/library'; +import { Decimal, InputJsonValue } from '@prisma/client/runtime/library'; import { EscrowRequest } from 'middleware/transaction-escrow-middleware'; import { EchoControlService } from 'services/EchoControlService'; import { Response } from 'express'; import { BaseProvider } from 'providers/BaseProvider'; import { Hex } from 'viem'; +import { EchoDbService } from 'services/DbService'; +import { EvmServerAccount } from '@coinbase/cdp-sdk'; export interface EchoApp { id: string; @@ -70,8 +72,15 @@ export interface VeoTransactionMetadata extends TransactionMetadata { generateAudio: boolean; } +export interface X402TransactionMetadata { + resourcePath: string; + resourceArgs: InputJsonValue; + resourceResponse?: InputJsonValue; + resourceError?: InputJsonValue; +} + export interface Transaction { - metadata: LlmTransactionMetadata | VeoTransactionMetadata; + metadata: LlmTransactionMetadata | VeoTransactionMetadata | X402TransactionMetadata; rawTransactionCost: Decimal; status: string; } @@ -113,17 +122,23 @@ export interface EchoAccessJwtPayload { // Type guard functions for transaction metadata export function isLlmTransactionMetadata( - metadata: LlmTransactionMetadata | VeoTransactionMetadata + metadata: LlmTransactionMetadata | VeoTransactionMetadata | X402TransactionMetadata ): metadata is LlmTransactionMetadata { return 'inputTokens' in metadata; } export function isVeoTransactionMetadata( - metadata: LlmTransactionMetadata | VeoTransactionMetadata + metadata: LlmTransactionMetadata | VeoTransactionMetadata | X402TransactionMetadata ): metadata is VeoTransactionMetadata { return 'durationSeconds' in metadata; } +export function isX402TransactionMetadata( + metadata: LlmTransactionMetadata | VeoTransactionMetadata | X402TransactionMetadata +): metadata is X402TransactionMetadata { + return 'resourcePath' in metadata; +} + export enum Network { BASE = 'base', BASE_SEPOLIA = 'base-sepolia', @@ -225,6 +240,21 @@ export type TransferWithAuthorization = Omit< 'from' >; +export type X402CreditServiceInput = { + req: EscrowRequest; + headers: Record; + dbService: EchoDbService; + owner: EvmServerAccount; +} + +export type X402CreditHandlerInput = { + req: EscrowRequest; + res: Response; + headers: Record; + echoControlService: EchoControlService; + dbService: EchoDbService; +}; + export type HandlerInput = { req: EscrowRequest; res: Response; diff --git a/packages/app/server/src/utils.ts b/packages/app/server/src/utils.ts index f1944774d..8b0dabd52 100644 --- a/packages/app/server/src/utils.ts +++ b/packages/app/server/src/utils.ts @@ -4,7 +4,7 @@ import { X402ChallengeParams, } from 'types'; import { Request, Response } from 'express'; -import { CdpClient, EvmSmartAccount } from '@coinbase/cdp-sdk'; +import { CdpClient, EvmSmartAccount, EvmServerAccount } from '@coinbase/cdp-sdk'; import { WALLET_SMART_ACCOUNT, DOMAIN_NAME, @@ -202,6 +202,7 @@ export function isX402Request(headers: Record): boolean { export async function getSmartAccount(): Promise<{ smartAccount: EvmSmartAccount; + owner: EvmServerAccount; }> { try { const cdp = new CdpClient({ @@ -219,7 +220,7 @@ export async function getSmartAccount(): Promise<{ owner, }); - return { smartAccount }; + return { smartAccount, owner }; } catch (error) { logger.error('Failed to get smart account', { error }); throw new Error( diff --git a/packages/app/server/tsconfig.json b/packages/app/server/tsconfig.json index cd038b9b9..84fac503d 100644 --- a/packages/app/server/tsconfig.json +++ b/packages/app/server/tsconfig.json @@ -4,7 +4,9 @@ "outDir": "./dist", "rootDir": "./src", "baseUrl": "./src", - "types": ["node"] + "types": ["node"], + "module": "esnext", + "moduleResolution": "bundler" }, "include": ["src/**/*"], "exclude": ["node_modules", "dist", "__tests__/**/*"] diff --git a/packages/tests/integration/tests/echo-data-server/echo-credit.client.test.ts b/packages/tests/integration/tests/echo-data-server/echo-credit.client.test.ts new file mode 100644 index 000000000..eee75b5eb --- /dev/null +++ b/packages/tests/integration/tests/echo-data-server/echo-credit.client.test.ts @@ -0,0 +1,177 @@ +import { describe, test, expect } from 'vitest'; +import { TEST_CONFIG } from '../../utils'; +import { TEST_USER_API_KEYS } from '../../config/test-data'; + +const TRUECAST_URL = 'https://true-cast-agent.vercel.app/api/trueCast'; +const GLORIA_URL = 'https://api.itsgloria.ai/news'; + +interface TrueCastRequest { + prompt: string; +} + +interface GloriaNewsParams { + feed_categories?: string; +} + +describe('Echo Credit Client - X402 Proxy Tests', () => { + describe('TrueCast Integration', () => { + test('should successfully make proxied POST request to TrueCast', async () => { + const apiKey = TEST_USER_API_KEYS.primary; + const prompt = 'Was donald trump the first president of the united states?'; + + const trueCastBody: TrueCastRequest = { prompt }; + + const response = await fetch( + `${TEST_CONFIG.services.echoDataServer}/x402?proxy=${encodeURIComponent(TRUECAST_URL)}`, + { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${apiKey}`, + }, + body: JSON.stringify(trueCastBody), + } + ); + + expect(response.status).toBe(200); + + const data = await response.json(); + expect(data).toBeDefined(); + + console.log('✅ Successfully made proxied POST request to TrueCast'); + console.log('Response status:', response.status); + console.log('Response data:', data); + }); + + test('should reject TrueCast request with invalid API key', async () => { + const prompt = 'test prompt'; + const trueCastBody: TrueCastRequest = { prompt }; + + const response = await fetch( + `${TEST_CONFIG.services.echoDataServer}/x402?proxy=${encodeURIComponent(TRUECAST_URL)}`, + { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer invalid-api-key-12345', + }, + body: JSON.stringify(trueCastBody), + } + ); + + expect(response.status).toBe(401); + console.log('✅ Invalid API key correctly rejected for TrueCast request'); + }); + }); + + describe('Gloria News Integration', () => { + test('should successfully make proxied GET request to Gloria News', async () => { + const apiKey = TEST_USER_API_KEYS.primary; + const params: GloriaNewsParams = { feed_categories: 'base' }; + + const queryParams = new URLSearchParams( + params as Record + ).toString(); + const gloriaUrlWithParams = `${GLORIA_URL}?${queryParams}`; + + const response = await fetch( + `${TEST_CONFIG.services.echoDataServer}/x402?proxy=${encodeURIComponent(gloriaUrlWithParams)}`, + { + method: 'GET', + headers: { + Authorization: `Bearer ${apiKey}`, + }, + } + ); + + expect(response.status).toBe(200); + + const data = await response.json(); + expect(data).toBeDefined(); + + console.log('✅ Successfully made proxied GET request to Gloria News'); + console.log('Response status:', response.status); + console.log('Response data:', data); + }); + + test('should reject Gloria News request with invalid API key', async () => { + const params: GloriaNewsParams = { feed_categories: 'base' }; + + const queryParams = new URLSearchParams( + params as Record + ).toString(); + const gloriaUrlWithParams = `${GLORIA_URL}?${queryParams}`; + + const response = await fetch( + `${TEST_CONFIG.services.echoDataServer}/x402?proxy=${encodeURIComponent(gloriaUrlWithParams)}`, + { + method: 'GET', + headers: { + Authorization: 'Bearer invalid-api-key-12345', + }, + } + ); + + expect(response.status).toBe(401); + console.log('✅ Invalid API key correctly rejected for Gloria News request'); + }); + }); + + describe('X402 Proxy - No Authentication', () => { + test('should return 402 Payment Required when no auth headers provided to TrueCast proxy', async () => { + const prompt = 'test prompt'; + const trueCastBody: TrueCastRequest = { prompt }; + + const response = await fetch( + `${TEST_CONFIG.services.echoDataServer}/x402?proxy=${encodeURIComponent(TRUECAST_URL)}`, + { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(trueCastBody), + } + ); + + expect(response.status).toBe(402); + + const wwwAuthHeader = response.headers.get('WWW-Authenticate'); + expect(wwwAuthHeader).toBeTruthy(); + expect(wwwAuthHeader).toContain('X-402'); + + const data = await response.json(); + expect(data).toHaveProperty('error'); + expect(data.error).toContain('Payment Required'); + + console.log('✅ No auth headers correctly triggers 402 Payment Required for TrueCast proxy'); + }); + + test('should return 402 Payment Required when no auth headers provided to Gloria proxy', async () => { + const params: GloriaNewsParams = { feed_categories: 'base' }; + const queryParams = new URLSearchParams( + params as Record + ).toString(); + const gloriaUrlWithParams = `${GLORIA_URL}?${queryParams}`; + + const response = await fetch( + `${TEST_CONFIG.services.echoDataServer}/x402?proxy=${encodeURIComponent(gloriaUrlWithParams)}`, + { + method: 'GET', + } + ); + + expect(response.status).toBe(402); + + const wwwAuthHeader = response.headers.get('WWW-Authenticate'); + expect(wwwAuthHeader).toBeTruthy(); + expect(wwwAuthHeader).toContain('X-402'); + + const data = await response.json(); + expect(data).toHaveProperty('error'); + expect(data.error).toContain('Payment Required'); + + console.log('✅ No auth headers correctly triggers 402 Payment Required for Gloria proxy'); + }); + }); +}); + diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9ee0e8162..8e316353b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,7 +67,7 @@ importers: version: 2.10.0(@prisma/client@6.16.0(prisma@6.16.0(magicast@0.3.5)(typescript@5.9.2))(typescript@5.9.2)) '@coinbase/x402': specifier: ^0.6.4 - version: 0.6.5(@tanstack/react-query@5.90.2(react@19.1.1))(@types/react@19.1.10)(@vercel/blob@0.25.1)(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 0.6.5(@tanstack/react-query@5.90.2(react@19.1.1))(@types/react@19.1.10)(@vercel/blob@0.25.1)(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10) '@hookform/resolvers': specifier: ^5.2.1 version: 5.2.1(react-hook-form@7.62.0(react@19.1.1)) @@ -416,7 +416,7 @@ importers: version: 1.34.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(utf-8-validate@5.0.10) '@coinbase/x402': specifier: ^0.6.5 - version: 0.6.5(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(utf-8-validate@5.0.10)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 0.6.5(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2))(@tanstack/react-query@5.90.2(react@19.1.1))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@e2b/code-interpreter': specifier: ^2.0.1 version: 2.0.1 @@ -506,7 +506,7 @@ importers: version: 2.7.0 openai: specifier: ^6.2.0 - version: 6.2.0(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11) + version: 6.2.0(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11) prisma: specifier: 6.16.0 version: 6.16.0(magicast@0.3.5)(typescript@5.9.2) @@ -525,9 +525,12 @@ importers: winston: specifier: ^3.17.0 version: 3.17.0 + x402: + specifier: ^0.6.5 + version: 0.6.5(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2))(@tanstack/react-query@5.90.2(react@19.1.1))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) x402-express: specifier: ^0.6.5 - version: 0.6.5(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(utf-8-validate@5.0.10)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 0.6.5(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2))(@tanstack/react-query@5.90.2(react@19.1.1))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) zod: specifier: ^4.1.11 version: 4.1.11 @@ -12642,11 +12645,11 @@ snapshots: - utf-8-validate - zod - '@coinbase/x402@0.6.5(@tanstack/react-query@5.90.2(react@19.1.1))(@types/react@19.1.10)(@vercel/blob@0.25.1)(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@coinbase/x402@0.6.5(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2))(@tanstack/react-query@5.90.2(react@19.1.1))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@coinbase/cdp-sdk': 1.34.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(utf-8-validate@5.0.10) viem: 2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - x402: 0.6.5(@tanstack/react-query@5.90.2(react@19.1.1))(@types/react@19.1.10)(@vercel/blob@0.25.1)(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + x402: 0.6.5(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2))(@tanstack/react-query@5.90.2(react@19.1.1))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) zod: 3.25.76 transitivePeerDependencies: - '@azure/app-configuration' @@ -12682,11 +12685,11 @@ snapshots: - utf-8-validate - ws - '@coinbase/x402@0.6.5(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(utf-8-validate@5.0.10)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@coinbase/x402@0.6.5(@tanstack/react-query@5.90.2(react@19.1.1))(@types/react@19.1.10)(@vercel/blob@0.25.1)(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)': dependencies: '@coinbase/cdp-sdk': 1.34.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(utf-8-validate@5.0.10) viem: 2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - x402: 0.6.5(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(utf-8-validate@5.0.10)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + x402: 0.6.5(@tanstack/react-query@5.90.2(react@19.1.1))(@types/react@19.1.10)(@vercel/blob@0.25.1)(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10) zod: 3.25.76 transitivePeerDependencies: - '@azure/app-configuration' @@ -12992,6 +12995,14 @@ snapshots: dependencies: tslib: 2.8.1 + '@gemini-wallet/core@0.2.0(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))': + dependencies: + '@metamask/rpc-errors': 7.0.2 + eventemitter3: 5.0.1 + viem: 2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + transitivePeerDependencies: + - supports-color + '@gemini-wallet/core@0.2.0(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))': dependencies: '@metamask/rpc-errors': 7.0.2 @@ -16123,12 +16134,12 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-controllers@1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit-controllers@1.7.8(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10) '@walletconnect/universal-provider': 2.21.0(@vercel/blob@0.25.1)(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - valtio: 1.13.2 + valtio: 1.13.2(react@19.1.1) viem: 2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' @@ -16297,14 +16308,14 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-pay@1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit-pay@1.7.8(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-ui': 1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-utils': 1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(valtio@1.13.2)(zod@3.25.76) + '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-ui': 1.7.8(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-utils': 1.7.8(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@19.1.1))(zod@3.25.76) lit: 3.3.0 - valtio: 1.13.2 + valtio: 1.13.2(react@19.1.1) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -16480,12 +16491,12 @@ snapshots: - valtio - zod - '@reown/appkit-scaffold-ui@1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(valtio@1.13.2)(zod@3.25.76)': + '@reown/appkit-scaffold-ui@1.7.8(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@19.1.1))(zod@3.25.76)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-ui': 1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-utils': 1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(valtio@1.13.2)(zod@3.25.76) + '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-ui': 1.7.8(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-utils': 1.7.8(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@19.1.1))(zod@3.25.76) '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10) lit: 3.3.0 transitivePeerDependencies: @@ -16652,10 +16663,10 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-ui@1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit-ui@1.7.8(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10) lit: 3.3.0 qrcode: 1.5.3 @@ -16834,15 +16845,15 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-utils@1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(valtio@1.13.2)(zod@3.25.76)': + '@reown/appkit-utils@1.7.8(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@19.1.1))(zod@3.25.76)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) '@reown/appkit-polyfills': 1.7.8 '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10) '@walletconnect/logger': 2.1.2 '@walletconnect/universal-provider': 2.21.0(@vercel/blob@0.25.1)(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - valtio: 1.13.2 + valtio: 1.13.2(react@19.1.1) viem: 2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' @@ -17050,20 +17061,20 @@ snapshots: - utf-8-validate - zod - '@reown/appkit@1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit@1.7.8(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-pay': 1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-controllers': 1.7.8(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-pay': 1.7.8(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) '@reown/appkit-polyfills': 1.7.8 - '@reown/appkit-scaffold-ui': 1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(valtio@1.13.2)(zod@3.25.76) - '@reown/appkit-ui': 1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-utils': 1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(valtio@1.13.2)(zod@3.25.76) + '@reown/appkit-scaffold-ui': 1.7.8(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@19.1.1))(zod@3.25.76) + '@reown/appkit-ui': 1.7.8(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-utils': 1.7.8(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(valtio@1.13.2(react@19.1.1))(zod@3.25.76) '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10) '@walletconnect/types': 2.21.0(@vercel/blob@0.25.1) '@walletconnect/universal-provider': 2.21.0(@vercel/blob@0.25.1)(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) bs58: 6.0.0 - valtio: 1.13.2 + valtio: 1.13.2(react@19.1.1) viem: 2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' @@ -17401,10 +17412,6 @@ snapshots: '@socket.io/component-emitter@3.1.2': {} - '@solana-program/compute-budget@0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': - dependencies: - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@solana-program/compute-budget@0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': dependencies: '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) @@ -17413,13 +17420,9 @@ snapshots: dependencies: '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@solana-program/compute-budget@0.8.0(@solana/kit@2.3.0(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': - dependencies: - '@solana/kit': 2.3.0(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - - '@solana-program/token-2022@0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': + '@solana-program/compute-budget@0.8.0(@solana/kit@2.3.0(typescript@5.9.2))': dependencies: - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/kit': 2.3.0(typescript@5.9.2) '@solana-program/token-2022@0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2))': dependencies: @@ -17431,13 +17434,9 @@ snapshots: '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/sysvars': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) - '@solana-program/token-2022@0.4.2(@solana/kit@2.3.0(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': + '@solana-program/token-2022@0.4.2(@solana/kit@2.3.0(typescript@5.9.2))': dependencies: - '@solana/kit': 2.3.0(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - - '@solana-program/token@0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': - dependencies: - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/kit': 2.3.0(typescript@5.9.2) '@solana-program/token@0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': dependencies: @@ -17447,9 +17446,9 @@ snapshots: dependencies: '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@solana-program/token@0.5.1(@solana/kit@2.3.0(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': + '@solana-program/token@0.5.1(@solana/kit@2.3.0(typescript@5.9.2))': dependencies: - '@solana/kit': 2.3.0(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/kit': 2.3.0(typescript@5.9.2) '@solana/accounts@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)': dependencies: @@ -17606,31 +17605,6 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))': - dependencies: - '@solana/accounts': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) - '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) - '@solana/codecs': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) - '@solana/errors': 2.3.0(typescript@5.9.2) - '@solana/functional': 2.3.0(typescript@5.9.2) - '@solana/instructions': 2.3.0(typescript@5.9.2) - '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) - '@solana/programs': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) - '@solana/rpc': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) - '@solana/rpc-parsed-types': 2.3.0(typescript@5.9.2) - '@solana/rpc-spec-types': 2.3.0(typescript@5.9.2) - '@solana/rpc-subscriptions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) - '@solana/signers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) - '@solana/sysvars': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) - '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) - '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) - typescript: 5.9.2 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - - ws - '@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@solana/accounts': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) @@ -17681,7 +17655,7 @@ snapshots: - fastestsmallesttextencoderdecoder - ws - '@solana/kit@2.3.0(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@solana/kit@2.3.0(typescript@5.9.2)': dependencies: '@solana/accounts': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) @@ -17694,11 +17668,11 @@ snapshots: '@solana/rpc': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) '@solana/rpc-parsed-types': 2.3.0(typescript@5.9.2) '@solana/rpc-spec-types': 2.3.0(typescript@5.9.2) - '@solana/rpc-subscriptions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/rpc-subscriptions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) '@solana/signers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) '@solana/sysvars': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) - '@solana/transaction-confirmation': 2.3.0(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/transaction-confirmation': 2.3.0(typescript@5.9.2) '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) typescript: 5.9.2 @@ -17788,15 +17762,6 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/rpc-subscriptions-channel-websocket@2.3.0(typescript@5.9.2)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))': - dependencies: - '@solana/errors': 2.3.0(typescript@5.9.2) - '@solana/functional': 2.3.0(typescript@5.9.2) - '@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.9.2) - '@solana/subscribable': 2.3.0(typescript@5.9.2) - typescript: 5.9.2 - ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) - '@solana/rpc-subscriptions-channel-websocket@2.3.0(typescript@5.9.2)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@solana/errors': 2.3.0(typescript@5.9.2) @@ -17823,24 +17788,6 @@ snapshots: '@solana/subscribable': 2.3.0(typescript@5.9.2) typescript: 5.9.2 - '@solana/rpc-subscriptions@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))': - dependencies: - '@solana/errors': 2.3.0(typescript@5.9.2) - '@solana/fast-stable-stringify': 2.3.0(typescript@5.9.2) - '@solana/functional': 2.3.0(typescript@5.9.2) - '@solana/promises': 2.3.0(typescript@5.9.2) - '@solana/rpc-spec-types': 2.3.0(typescript@5.9.2) - '@solana/rpc-subscriptions-api': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) - '@solana/rpc-subscriptions-channel-websocket': 2.3.0(typescript@5.9.2)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.9.2) - '@solana/rpc-transformers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) - '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) - '@solana/subscribable': 2.3.0(typescript@5.9.2) - typescript: 5.9.2 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - - ws - '@solana/rpc-subscriptions@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@solana/errors': 2.3.0(typescript@5.9.2) @@ -17983,23 +17930,6 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/transaction-confirmation@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))': - dependencies: - '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) - '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) - '@solana/errors': 2.3.0(typescript@5.9.2) - '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) - '@solana/promises': 2.3.0(typescript@5.9.2) - '@solana/rpc': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) - '@solana/rpc-subscriptions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) - '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) - '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) - typescript: 5.9.2 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - - ws - '@solana/transaction-confirmation@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) @@ -18034,7 +17964,7 @@ snapshots: - fastestsmallesttextencoderdecoder - ws - '@solana/transaction-confirmation@2.3.0(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@solana/transaction-confirmation@2.3.0(typescript@5.9.2)': dependencies: '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) @@ -18042,7 +17972,7 @@ snapshots: '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) '@solana/promises': 2.3.0(typescript@5.9.2) '@solana/rpc': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) - '@solana/rpc-subscriptions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/rpc-subscriptions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) @@ -19118,14 +19048,14 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.3(msw@2.11.2(@types/node@20.19.16)(typescript@5.9.2))(vite@6.3.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.5)(yaml@2.8.0))': + '@vitest/mocker@3.2.3(msw@2.11.2(@types/node@20.19.16)(typescript@5.9.2))(vite@6.3.5(@types/node@20.19.16)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.5)(yaml@2.8.0))': dependencies: '@vitest/spy': 3.2.3 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: msw: 2.11.2(@types/node@20.19.16)(typescript@5.9.2) - vite: 6.3.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.5)(yaml@2.8.0) + vite: 6.3.5(@types/node@20.19.16)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.5)(yaml@2.8.0) '@vitest/mocker@3.2.3(msw@2.11.2(@types/node@24.3.1)(typescript@5.9.2))(vite@6.3.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.5)(yaml@2.8.0))': dependencies: @@ -19173,7 +19103,7 @@ snapshots: sirv: 3.0.1 tinyglobby: 0.2.15 tinyrainbow: 2.0.0 - vitest: 3.2.3(@types/debug@4.1.12)(@types/node@24.3.1)(@vitest/ui@3.2.3)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(msw@2.11.2(@types/node@24.3.1)(typescript@5.9.2))(terser@5.42.0)(tsx@4.20.5)(yaml@2.8.0) + vitest: 3.2.3(@types/debug@4.1.12)(@types/node@20.19.16)(@vitest/ui@3.2.3)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(msw@2.11.2(@types/node@20.19.16)(typescript@5.9.2))(terser@5.42.0)(tsx@4.20.5)(yaml@2.8.0) '@vitest/utils@3.0.9': dependencies: @@ -19232,19 +19162,19 @@ snapshots: '@vue/shared@3.5.16': {} - '@wagmi/connectors@5.11.2(@tanstack/react-query@5.90.2(react@18.3.1))(@types/react@19.1.10)(@wagmi/core@2.21.2(@types/react@19.1.10)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11)))(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(wagmi@2.17.5(@tanstack/react-query@5.90.2(react@18.3.1))(@types/react@19.1.10)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(zod@3.25.76))(zod@3.25.76)': + '@wagmi/connectors@5.11.2(@tanstack/react-query@5.90.2(react@18.3.1))(@types/react@19.1.10)(@wagmi/core@2.21.2(@types/react@19.1.10)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.17.5(@tanstack/react-query@5.90.2(react@18.3.1))(@types/react@19.1.10)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76))(zod@3.25.76)': dependencies: '@base-org/account': 1.1.1(@types/react@19.1.10)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(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@19.1.10)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(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.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11)) + '@gemini-wallet/core': 0.2.0(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)) '@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.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - '@wagmi/core': 2.21.2(@types/react@19.1.10)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11)) + '@wagmi/core': 2.21.2(@types/react@19.1.10)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)) '@walletconnect/ethereum-provider': 2.21.1(@types/react@19.1.10)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) cbw-sdk: '@coinbase/wallet-sdk@3.9.3' - porto: 0.2.19(@tanstack/react-query@5.90.2(react@18.3.1))(@types/react@19.1.10)(@wagmi/core@2.21.2(@types/react@19.1.10)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11)))(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(wagmi@2.17.5(@tanstack/react-query@5.90.2(react@18.3.1))(@types/react@19.1.10)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(zod@3.25.76)) - viem: 2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11) + porto: 0.2.19(@tanstack/react-query@5.90.2(react@18.3.1))(@types/react@19.1.10)(@wagmi/core@2.21.2(@types/react@19.1.10)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.17.5(@tanstack/react-query@5.90.2(react@18.3.1))(@types/react@19.1.10)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)) + viem: 2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) optionalDependencies: typescript: 5.9.2 transitivePeerDependencies: @@ -19416,18 +19346,18 @@ snapshots: - wagmi - zod - '@wagmi/connectors@5.11.2(@wagmi/core@2.21.2(typescript@5.9.2)(use-sync-external-store@1.4.0)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11)))(bufferutil@4.0.9)(typescript@5.9.2)(use-sync-external-store@1.4.0)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(wagmi@2.17.5(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(zod@3.25.76))(zod@3.25.76)': + '@wagmi/connectors@5.11.2(@tanstack/react-query@5.90.2(react@19.1.1))(@wagmi/core@2.21.2(react@19.1.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.1.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11)))(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.1.1))(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(wagmi@2.17.5(@tanstack/react-query@5.90.2(react@19.1.1))(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(zod@3.25.76))(zod@3.25.76)': dependencies: - '@base-org/account': 1.1.1(@types/react@19.1.10)(bufferutil@4.0.9)(immer@10.1.3)(react@19.1.0)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76) - '@coinbase/wallet-sdk': 4.3.6(@types/react@19.1.10)(bufferutil@4.0.9)(immer@10.1.3)(react@19.1.0)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76) + '@base-org/account': 1.1.1(@types/react@19.1.10)(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.1.1))(utf-8-validate@5.0.10)(zod@3.25.76) + '@coinbase/wallet-sdk': 4.3.6(@types/react@19.1.10)(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.1.1))(utf-8-validate@5.0.10)(zod@3.25.76) '@gemini-wallet/core': 0.2.0(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11)) '@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.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - '@wagmi/core': 2.21.2(@tanstack/query-core@5.90.2)(@types/react@19.1.10)(immer@10.1.3)(react@19.1.0)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11)) - '@walletconnect/ethereum-provider': 2.21.1(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + '@wagmi/core': 2.21.2(@types/react@19.1.10)(react@19.1.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.1.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11)) + '@walletconnect/ethereum-provider': 2.21.1(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) cbw-sdk: '@coinbase/wallet-sdk@3.9.3' - porto: 0.2.19(@wagmi/core@2.21.2(typescript@5.9.2)(use-sync-external-store@1.4.0)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11)))(typescript@5.9.2)(use-sync-external-store@1.4.0)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(wagmi@2.17.5(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(zod@3.25.76)) + porto: 0.2.19(@tanstack/react-query@5.90.2(react@19.1.1))(@wagmi/core@2.21.2(react@19.1.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.1.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11)))(react@19.1.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.1.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(wagmi@2.17.5(@tanstack/react-query@5.90.2(react@19.1.1))(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(zod@3.25.76)) viem: 2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11) optionalDependencies: typescript: 5.9.2 @@ -19477,11 +19407,11 @@ snapshots: - react - use-sync-external-store - '@wagmi/core@2.21.2(@types/react@19.1.10)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))': + '@wagmi/core@2.21.2(@types/react@19.1.10)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))': dependencies: eventemitter3: 5.0.1 mipd: 0.0.7(typescript@5.9.2) - viem: 2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11) + viem: 2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) zustand: 5.0.0(@types/react@19.1.10)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) optionalDependencies: typescript: 5.9.2 @@ -19841,9 +19771,9 @@ snapshots: - utf-8-validate - zod - '@walletconnect/ethereum-provider@2.21.1(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/ethereum-provider@2.21.1(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: - '@reown/appkit': 1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit': 1.7.8(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) '@walletconnect/jsonrpc-http-connection': 1.0.8 '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 @@ -21620,9 +21550,9 @@ snapshots: dependencies: valtio: 1.13.2(@types/react@19.1.10)(react@19.1.1) - derive-valtio@0.1.0(valtio@1.13.2): + derive-valtio@0.1.0(valtio@1.13.2(react@19.1.1)): dependencies: - valtio: 1.13.2 + valtio: 1.13.2(react@19.1.1) destr@2.0.5: {} @@ -25022,9 +24952,9 @@ snapshots: ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) zod: 4.1.11 - openai@6.2.0(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11): + openai@6.2.0(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11): optionalDependencies: - ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) zod: 4.1.11 openapi-fetch@0.13.8: @@ -25403,21 +25333,21 @@ snapshots: pony-cause@2.1.11: {} - porto@0.2.19(@tanstack/react-query@5.90.2(react@18.3.1))(@types/react@19.1.10)(@wagmi/core@2.21.2(@types/react@19.1.10)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11)))(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(wagmi@2.17.5(@tanstack/react-query@5.90.2(react@18.3.1))(@types/react@19.1.10)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(zod@3.25.76)): + porto@0.2.19(@tanstack/react-query@5.90.2(react@18.3.1))(@types/react@19.1.10)(@wagmi/core@2.21.2(@types/react@19.1.10)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.17.5(@tanstack/react-query@5.90.2(react@18.3.1))(@types/react@19.1.10)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)): dependencies: - '@wagmi/core': 2.21.2(@types/react@19.1.10)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11)) + '@wagmi/core': 2.21.2(@types/react@19.1.10)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)) hono: 4.9.9 idb-keyval: 6.2.2 mipd: 0.0.7(typescript@5.9.2) ox: 0.9.8(typescript@5.9.2)(zod@4.1.11) - viem: 2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11) + viem: 2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) zod: 4.1.11 zustand: 5.0.3(@types/react@19.1.10)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) optionalDependencies: '@tanstack/react-query': 5.90.2(react@18.3.1) react: 18.3.1 typescript: 5.9.2 - wagmi: 2.17.5(@tanstack/react-query@5.90.2(react@18.3.1))(@types/react@19.1.10)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(zod@3.25.76) + wagmi: 2.17.5(@tanstack/react-query@5.90.2(react@18.3.1))(@types/react@19.1.10)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) transitivePeerDependencies: - '@types/react' - immer @@ -25463,19 +25393,21 @@ snapshots: - immer - use-sync-external-store - porto@0.2.19(@wagmi/core@2.21.2(typescript@5.9.2)(use-sync-external-store@1.4.0)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11)))(typescript@5.9.2)(use-sync-external-store@1.4.0)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(wagmi@2.17.5(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(zod@3.25.76)): + porto@0.2.19(@tanstack/react-query@5.90.2(react@19.1.1))(@wagmi/core@2.21.2(react@19.1.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.1.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11)))(react@19.1.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.1.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(wagmi@2.17.5(@tanstack/react-query@5.90.2(react@19.1.1))(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(zod@3.25.76)): dependencies: - '@wagmi/core': 2.21.2(@tanstack/query-core@5.90.2)(@types/react@19.1.10)(immer@10.1.3)(react@19.1.0)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11)) + '@wagmi/core': 2.21.2(@types/react@19.1.10)(react@19.1.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.1.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11)) hono: 4.9.9 idb-keyval: 6.2.2 mipd: 0.0.7(typescript@5.9.2) ox: 0.9.8(typescript@5.9.2)(zod@4.1.11) viem: 2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11) zod: 4.1.11 - zustand: 5.0.3(@types/react@19.1.10)(immer@10.1.3)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)) + zustand: 5.0.3(@types/react@19.1.10)(react@19.1.1)(use-sync-external-store@1.4.0(react@19.1.1)) optionalDependencies: + '@tanstack/react-query': 5.90.2(react@19.1.1) + react: 19.1.1 typescript: 5.9.2 - wagmi: 2.17.5(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(zod@3.25.76) + wagmi: 2.17.5(@tanstack/react-query@5.90.2(react@19.1.1))(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(zod@3.25.76) transitivePeerDependencies: - '@types/react' - immer @@ -27598,12 +27530,6 @@ snapshots: v8-compile-cache-lib@3.0.1: {} - valtio@1.13.2: - dependencies: - derive-valtio: 0.1.0(valtio@1.13.2) - proxy-compare: 2.6.0 - use-sync-external-store: 1.2.0(react@19.1.0) - valtio@1.13.2(@types/react@19.1.10)(react@18.3.1): dependencies: derive-valtio: 0.1.0(valtio@1.13.2(@types/react@19.1.10)(react@18.3.1)) @@ -27631,6 +27557,14 @@ snapshots: '@types/react': 19.1.10 react: 19.1.1 + valtio@1.13.2(react@19.1.1): + dependencies: + derive-valtio: 0.1.0(valtio@1.13.2(react@19.1.1)) + proxy-compare: 2.6.0 + use-sync-external-store: 1.2.0(react@19.1.1) + optionalDependencies: + react: 19.1.1 + vary@1.1.2: {} vfile-location@5.0.3: @@ -27849,7 +27783,7 @@ snapshots: dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.3 - '@vitest/mocker': 3.2.3(msw@2.11.2(@types/node@20.19.16)(typescript@5.9.2))(vite@6.3.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.5)(yaml@2.8.0)) + '@vitest/mocker': 3.2.3(msw@2.11.2(@types/node@20.19.16)(typescript@5.9.2))(vite@6.3.5(@types/node@20.19.16)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.42.0)(tsx@4.20.5)(yaml@2.8.0)) '@vitest/pretty-format': 3.2.3 '@vitest/runner': 3.2.3 '@vitest/snapshot': 3.2.3 @@ -28032,14 +27966,14 @@ snapshots: - utf-8-validate - zod - wagmi@2.17.5(@tanstack/react-query@5.90.2(react@18.3.1))(@types/react@19.1.10)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(zod@3.25.76): + wagmi@2.17.5(@tanstack/react-query@5.90.2(react@18.3.1))(@types/react@19.1.10)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76): dependencies: '@tanstack/react-query': 5.90.2(react@18.3.1) - '@wagmi/connectors': 5.11.2(@tanstack/react-query@5.90.2(react@18.3.1))(@types/react@19.1.10)(@wagmi/core@2.21.2(@types/react@19.1.10)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11)))(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(wagmi@2.17.5(@tanstack/react-query@5.90.2(react@18.3.1))(@types/react@19.1.10)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(zod@3.25.76))(zod@3.25.76) - '@wagmi/core': 2.21.2(@types/react@19.1.10)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11)) + '@wagmi/connectors': 5.11.2(@tanstack/react-query@5.90.2(react@18.3.1))(@types/react@19.1.10)(@wagmi/core@2.21.2(@types/react@19.1.10)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.17.5(@tanstack/react-query@5.90.2(react@18.3.1))(@types/react@19.1.10)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76))(zod@3.25.76) + '@wagmi/core': 2.21.2(@types/react@19.1.10)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)) react: 18.3.1 use-sync-external-store: 1.4.0(react@18.3.1) - viem: 2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11) + viem: 2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) optionalDependencies: typescript: 5.9.2 transitivePeerDependencies: @@ -28108,11 +28042,13 @@ snapshots: - utf-8-validate - zod - wagmi@2.17.5(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(zod@3.25.76): + wagmi@2.17.5(@tanstack/react-query@5.90.2(react@19.1.1))(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(zod@3.25.76): dependencies: - '@wagmi/connectors': 5.11.2(@wagmi/core@2.21.2(typescript@5.9.2)(use-sync-external-store@1.4.0)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11)))(bufferutil@4.0.9)(typescript@5.9.2)(use-sync-external-store@1.4.0)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(wagmi@2.17.5(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(zod@3.25.76))(zod@3.25.76) - '@wagmi/core': 2.21.2(@tanstack/query-core@5.90.2)(@types/react@19.1.10)(immer@10.1.3)(react@19.1.0)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11)) - use-sync-external-store: 1.4.0(react@19.1.0) + '@tanstack/react-query': 5.90.2(react@19.1.1) + '@wagmi/connectors': 5.11.2(@tanstack/react-query@5.90.2(react@19.1.1))(@wagmi/core@2.21.2(react@19.1.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.1.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11)))(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.1.1))(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(wagmi@2.17.5(@tanstack/react-query@5.90.2(react@19.1.1))(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(zod@3.25.76))(zod@3.25.76) + '@wagmi/core': 2.21.2(@types/react@19.1.10)(react@19.1.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.1.1))(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11)) + react: 19.1.1 + use-sync-external-store: 1.4.0(react@19.1.1) viem: 2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11) optionalDependencies: typescript: 5.9.2 @@ -28304,13 +28240,13 @@ snapshots: bufferutil: 4.0.9 utf-8-validate: 5.0.10 - x402-express@0.6.5(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(utf-8-validate@5.0.10)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + x402-express@0.6.5(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2))(@tanstack/react-query@5.90.2(react@19.1.1))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: '@coinbase/cdp-sdk': 1.34.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(utf-8-validate@5.0.10) - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) express: 4.21.2 viem: 2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - x402: 0.6.5(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(utf-8-validate@5.0.10)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + x402: 0.6.5(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2))(@tanstack/react-query@5.90.2(react@19.1.1))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) zod: 3.25.76 transitivePeerDependencies: - '@azure/app-configuration' @@ -28518,7 +28454,7 @@ snapshots: '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) viem: 2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - wagmi: 2.17.5(@tanstack/react-query@5.90.2(react@18.3.1))(@types/react@19.1.10)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(zod@3.25.76) + wagmi: 2.17.5(@tanstack/react-query@5.90.2(react@18.3.1))(@types/react@19.1.10)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) zod: 3.25.76 transitivePeerDependencies: - '@azure/app-configuration' @@ -28553,16 +28489,16 @@ snapshots: - utf-8-validate - ws - x402@0.6.5(@tanstack/react-query@5.90.2(react@19.1.1))(@types/react@19.1.10)(@vercel/blob@0.25.1)(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + x402@0.6.5(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2))(@tanstack/react-query@5.90.2(react@19.1.1))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: '@scure/base': 1.2.6 - '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))) - '@solana-program/token': 0.5.1(@solana/kit@2.3.0(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))) - '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))) - '@solana/kit': 2.3.0(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@solana/transaction-confirmation': 2.3.0(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@solana-program/token': 0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) viem: 2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - wagmi: 2.17.5(@tanstack/react-query@5.90.2(react@19.1.1))(@types/react@19.1.10)(@vercel/blob@0.25.1)(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(zod@3.25.76) + wagmi: 2.17.5(@tanstack/react-query@5.90.2(react@19.1.1))(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(zod@3.25.76) zod: 3.25.76 transitivePeerDependencies: - '@azure/app-configuration' @@ -28597,16 +28533,16 @@ snapshots: - utf-8-validate - ws - x402@0.6.5(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(utf-8-validate@5.0.10)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + x402@0.6.5(@tanstack/react-query@5.90.2(react@19.1.1))(@types/react@19.1.10)(@vercel/blob@0.25.1)(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10): dependencies: '@scure/base': 1.2.6 - '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))) - '@solana-program/token': 0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))) - '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))) - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(typescript@5.9.2)) + '@solana-program/token': 0.5.1(@solana/kit@2.3.0(typescript@5.9.2)) + '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(typescript@5.9.2)) + '@solana/kit': 2.3.0(typescript@5.9.2) + '@solana/transaction-confirmation': 2.3.0(typescript@5.9.2) viem: 2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - wagmi: 2.17.5(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(zod@3.25.76) + wagmi: 2.17.5(@tanstack/react-query@5.90.2(react@19.1.1))(@types/react@19.1.10)(@vercel/blob@0.25.1)(bufferutil@4.0.9)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.11))(zod@3.25.76) zod: 3.25.76 transitivePeerDependencies: - '@azure/app-configuration'