From 13686d41214790da9fa6abee2fc5a80fb54318bd Mon Sep 17 00:00:00 2001 From: Jonas Hahn Date: Mon, 29 Sep 2025 12:44:32 +0300 Subject: [PATCH 1/8] Add Solana e2e example --- demos/payments/package.json | 2 + demos/payments/src/constants.ts | 14 + demos/payments/src/index.ts | 160 +++++- demos/payments/src/receipt-service.ts | 60 ++ demos/payments/src/server.ts | 19 +- demos/payments/src/utils/ensure-balances.ts | 30 + .../payments/src/utils/ensure-private-keys.ts | 18 + pnpm-lock.yaml | 526 ++++++++++++++++-- 8 files changed, 787 insertions(+), 42 deletions(-) diff --git a/demos/payments/package.json b/demos/payments/package.json index 55340b7..da75896 100644 --- a/demos/payments/package.json +++ b/demos/payments/package.json @@ -29,6 +29,8 @@ "@hono/node-server": "^1.14.2", "@repo/api-utils": "workspace:*", "@repo/cli-tools": "workspace:*", + "@solana/spl-token": "^0.4.14", + "@solana/web3.js": "^1.98.4", "agentcommercekit": "workspace:*", "hono": "^4.7.10", "valibot": "^1.1.0", diff --git a/demos/payments/src/constants.ts b/demos/payments/src/constants.ts index 7665cff..b4aa487 100644 --- a/demos/payments/src/constants.ts +++ b/demos/payments/src/constants.ts @@ -26,3 +26,17 @@ export const publicClient = createPublicClient({ chain, transport: http() }) + +// Solana configuration for demo (devnet) +export const solana = { + // CAIP-2 chain id for Solana devnet + chainId: caip2ChainIds.solanaDevnet, + // Example RPC; users can override via environment if desired + rpcUrl: process.env.SOLANA_RPC_URL ?? "https://api.devnet.solana.com", + // Example USDC devnet mint; replace if you prefer a different SPL mint + usdcMint: + process.env.SOLANA_USDC_MINT ?? + "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU", + // Commitment to use for verification + commitment: "confirmed" as const +} diff --git a/demos/payments/src/index.ts b/demos/payments/src/index.ts index 0e82673..44fb7da 100644 --- a/demos/payments/src/index.ts +++ b/demos/payments/src/index.ts @@ -31,10 +31,14 @@ import { chain, chainId, publicClient, + solana, usdcAddress } from "./constants" -import { ensureNonZeroBalances } from "./utils/ensure-balances" -import { ensurePrivateKey } from "./utils/ensure-private-keys" +import { + ensureNonZeroBalances, + ensureSolanaSolBalance +} from "./utils/ensure-balances" +import { ensurePrivateKey, ensureSolanaKeys } from "./utils/ensure-private-keys" import { getKeypairInfo } from "./utils/keypair-info" import { transferUsdc } from "./utils/usdc-contract" import type { KeypairInfo } from "./utils/keypair-info" @@ -47,6 +51,17 @@ import type { import "./server" import "./receipt-service" import "./payment-service" +import { + Connection, + Keypair, + PublicKey, + TransactionMessage, + VersionedTransaction +} from "@solana/web3.js" +import { + createTransferInstruction, + getOrCreateAssociatedTokenAccount +} from "@solana/spl-token" /** * Example showcasing payments using the ACK-Pay protocol. @@ -153,9 +168,20 @@ The Client attempts to access a protected resource on the Server. Since no valid const selectedPaymentOptionId = await select({ message: "Select which payment option to use", choices: paymentOptions.map((option) => ({ - name: option.network === "stripe" ? "Stripe" : "Base Sepolia", + name: + option.network === "stripe" + ? "Stripe" + : option.network?.startsWith("solana:") + ? "Solana" + : "Base Sepolia", value: option.id, - description: `Pay on ${option.network === "stripe" ? "Stripe" : "Base Sepolia"} using ${option.currency}` + description: `Pay on ${ + option.network === "stripe" + ? "Stripe" + : option.network?.startsWith("solana:") + ? "Solana" + : "Base Sepolia" + } using ${option.currency}` })) }) @@ -178,6 +204,17 @@ The Client attempts to access a protected resource on the Server. Since no valid ) receipt = paymentResult.receipt details = paymentResult.details + } else if ( + typeof selectedPaymentOption.network === "string" && + selectedPaymentOption.network.startsWith("solana:") + ) { + const paymentResult = await performSolanaPayment( + clientKeypairInfo, + selectedPaymentOption, + paymentRequestToken + ) + receipt = paymentResult.receipt + details = paymentResult.details } else if (selectedPaymentOption.network === chainId) { const paymentResult = await performOnChainPayment( clientKeypairInfo, @@ -400,6 +437,121 @@ If all checks pass, the Receipt Service issues a Verifiable Credential (VC) serv return { receipt, details } } +async function performSolanaPayment( + client: KeypairInfo, + paymentOption: PaymentRequest["paymentOptions"][number], + paymentRequestToken: JwtString +) { + const receiptServiceUrl = paymentOption.receiptService + if (!receiptServiceUrl) { + throw new Error(errorMessage("Receipt service URL is required")) + } + + log(sectionHeader("💸 Execute Payment (Client Agent -> Solana / SPL Token)")) + + const connection = new Connection(solana.rpcUrl, solana.commitment) + const { secretKeyJson } = await ensureSolanaKeys( + "SOLANA_CLIENT_PUBLIC_KEY", + "SOLANA_CLIENT_SECRET_KEY_JSON" + ) + const keyBytes = new Uint8Array(JSON.parse(secretKeyJson) as number[]) + const payer = Keypair.fromSecretKey(keyBytes) + + const mint = new PublicKey(solana.usdcMint) + + // Ensure payer has SOL for fees + await ensureSolanaSolBalance(payer.publicKey.toBase58()) + + const recipient = new PublicKey(paymentOption.recipient) + + const senderAta = await getOrCreateAssociatedTokenAccount( + connection, + payer, + mint, + payer.publicKey, + undefined, + solana.commitment + ) + // Ensure sender has USDC balance; if not, prompt Circle faucet + let tokenBal = await connection.getTokenAccountBalance( + senderAta.address, + solana.commitment + ) + while (!tokenBal || tokenBal.value.amount === "0") { + log( + colors.dim( + "USDC balance is 0. Please request devnet USDC from Circle's faucet, then press Enter to retry." + ) + ) + log(colors.dim(`Send USDC to your wallet: ${payer.publicKey.toBase58()}`)) + log(colors.cyan("https://faucet.circle.com/")) + await waitForEnter("Press Enter after funding USDC...") + tokenBal = await connection.getTokenAccountBalance( + senderAta.address, + solana.commitment + ) + } + const recipientAta = await getOrCreateAssociatedTokenAccount( + connection, + payer, + mint, + recipient, + undefined, + solana.commitment + ) + + const amount = BigInt(paymentOption.amount) + const ix = createTransferInstruction( + senderAta.address, + recipientAta.address, + payer.publicKey, + Number(amount) // safe here as demo amounts are tiny (5e4) + ) + + const { blockhash, lastValidBlockHeight } = + await connection.getLatestBlockhash(solana.commitment) + const msg = new TransactionMessage({ + payerKey: payer.publicKey, + recentBlockhash: blockhash, + instructions: [ix] + }).compileToV0Message() + const tx = new VersionedTransaction(msg) + tx.sign([payer]) + const signature = await connection.sendTransaction(tx, { + maxRetries: 10 + }) + await connection.confirmTransaction( + { signature, blockhash, lastValidBlockHeight }, + solana.commitment + ) + + // Request receipt from receipt-service + const payload = { + paymentRequestToken, + paymentOptionId: paymentOption.id, + metadata: { + network: solana.chainId, + txHash: signature + }, + payerDid: client.did + } + const signedPayload = await createJwt(payload, { + issuer: client.did, + signer: client.jwtSigner + }) + + const response = await fetch(receiptServiceUrl, { + method: "POST", + body: JSON.stringify({ payload: signedPayload }) + }) + const { receipt, details } = (await response.json()) as { + receipt: string + details: Verifiable + } + + return { receipt, details } +} + async function performStripePayment( _client: KeypairInfo, paymentOption: PaymentRequest["paymentOptions"][number], diff --git a/demos/payments/src/receipt-service.ts b/demos/payments/src/receipt-service.ts index 62e5700..1bf87be 100644 --- a/demos/payments/src/receipt-service.ts +++ b/demos/payments/src/receipt-service.ts @@ -24,6 +24,8 @@ import * as v from "valibot" import { erc20Abi, isAddressEqual } from "viem" import { parseEventLogs } from "viem/utils" import { chainId, publicClient, usdcAddress } from "./constants" +import { solana } from "./constants" +import { Connection, PublicKey } from "@solana/web3.js" import { asAddress } from "./utils/as-address" import { getKeypairInfo } from "./utils/keypair-info" import type { paymentOptionSchema } from "agentcommercekit/schemas/valibot" @@ -111,6 +113,8 @@ app.post("/", async (c) => { await verifyStripePayment(parsed.issuer, paymentDetails, paymentOption) } else if (paymentOption.network === chainId) { await verifyOnChainPayment(parsed.issuer, paymentDetails, paymentOption) + } else if (paymentOption.network === solana.chainId) { + await verifySolanaPayment(parsed.issuer, paymentDetails, paymentOption) } else { log(errorMessage("Invalid network")) throw new HTTPException(400, { @@ -234,6 +238,62 @@ async function verifyOnChainPayment( // Additional checks, like checking txHash block number timestamp occurred after payment_request issued } +async function verifySolanaPayment( + _issuer: string, + paymentDetails: v.InferOutput, + paymentOption: v.InferOutput +) { + if (paymentDetails.metadata.network !== solana.chainId) { + log(errorMessage("Invalid network")) + throw new HTTPException(400, { message: "Invalid network" }) + } + const signature = paymentDetails.metadata.txHash + const connection = new Connection(solana.rpcUrl, solana.commitment) + log(colors.dim("Loading Solana transaction details...")) + const tx = await connection.getParsedTransaction(signature, { + maxSupportedTransactionVersion: 0, + commitment: solana.commitment + } as never) + if (!tx || tx.meta?.err) { + log(errorMessage("Solana transaction not found or failed")) + throw new HTTPException(400, { message: "Invalid transaction" }) + } + + // Validate postTokenBalances reflect the transfer to recipient for the mint + const mint = new PublicKey(solana.usdcMint).toBase58() + const recipient = new PublicKey( + typeof paymentOption.recipient === "string" + ? paymentOption.recipient + : (paymentOption.recipient as string) + ).toBase58() + + const dec = paymentOption.decimals + const expectedAmount = BigInt(paymentOption.amount) + + const post = tx.meta?.postTokenBalances || [] + const pre = tx.meta?.preTokenBalances || [] + + const preBal = pre.find((b) => b.mint === mint && b.owner === recipient) + const postBal = post.find((b) => b.mint === mint && b.owner === recipient) + + if (!postBal) { + log(errorMessage("Recipient post token balance not found")) + throw new HTTPException(400, { message: "Recipient not credited" }) + } + if (postBal.uiTokenAmount.decimals !== dec) { + log(errorMessage("Invalid token decimals")) + throw new HTTPException(400, { message: "Invalid token decimals" }) + } + + const preAmount = BigInt(preBal?.uiTokenAmount.amount ?? "0") + const postAmount = BigInt(postBal.uiTokenAmount.amount) + const delta = postAmount - preAmount + if (delta !== expectedAmount) { + log(errorMessage("Invalid amount")) + throw new HTTPException(400, { message: "Invalid amount" }) + } +} + serve({ port: 4568, fetch: app.fetch diff --git a/demos/payments/src/server.ts b/demos/payments/src/server.ts index 4ab38d4..155a33e 100644 --- a/demos/payments/src/server.ts +++ b/demos/payments/src/server.ts @@ -11,6 +11,7 @@ import { Hono } from "hono" import { env } from "hono/adapter" import { HTTPException } from "hono/http-exception" import { PAYMENT_SERVICE_URL, RECEIPT_SERVICE_URL, chainId } from "./constants" +import { ensureSolanaKeys } from "./utils/ensure-private-keys" import { getKeypairInfo } from "./utils/keypair-info" import type { PaymentRequestInit } from "agentcommercekit" import type { Env, TypedResponse } from "hono" @@ -37,6 +38,12 @@ app.get("/", async (c): Promise> => { const serverIdentity = await getKeypairInfo(env(c).SERVER_PRIVATE_KEY_HEX) const didResolver = getDidResolver() + // Ensure Solana server keys are present + const { publicKey: solanaServerPublicKey } = await ensureSolanaKeys( + "SOLANA_SERVER_PUBLIC_KEY", + "SOLANA_SERVER_SECRET_KEY_JSON" + ) + const { did: receiptIssuerDid } = await getKeypairInfo( env(c).RECEIPT_SERVICE_PRIVATE_KEY_HEX ) @@ -54,7 +61,7 @@ app.get("/", async (c): Promise> => { if (!receipt) { log(colors.yellow("No receipt found, generating payment request...")) - // Build a payment request with a single payment option for USDC on Base Sepolia + // Build a payment request with multiple options: USDC on Base Sepolia, Stripe, and Solana (devnet) const paymentRequestInit: PaymentRequestInit = { id: crypto.randomUUID(), paymentOptions: [ @@ -78,6 +85,16 @@ app.get("/", async (c): Promise> => { recipient: serverIdentity.did, paymentService: PAYMENT_SERVICE_URL, receiptService: RECEIPT_SERVICE_URL + }, + // USDC on Solana (devnet) + { + id: "usdc-solana-devnet", + amount: BigInt(50000).toString(), + decimals: 6, + currency: "USDC", + recipient: solanaServerPublicKey, + network: "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", // devnet + receiptService: RECEIPT_SERVICE_URL } ] } diff --git a/demos/payments/src/utils/ensure-balances.ts b/demos/payments/src/utils/ensure-balances.ts index b96f3c6..b0c23d0 100644 --- a/demos/payments/src/utils/ensure-balances.ts +++ b/demos/payments/src/utils/ensure-balances.ts @@ -2,6 +2,8 @@ import { waitForEnter } from "@repo/cli-tools" import { createPublicClient, erc20Abi, http } from "viem" import { formatUnits } from "viem/utils" import type { Chain } from "viem" +import { Connection, PublicKey } from "@solana/web3.js" +import { solana } from "@/constants" /** * Ensure the client wallet has a non-zero balance of USDC and ETH @@ -43,6 +45,34 @@ export async function ensureNonZeroBalances( return { balanceUsdc, balanceEth } } +export async function ensureSolanaSolBalance(address: string) { + const connection = new Connection(solana.rpcUrl, solana.commitment) + let lamports = await connection.getBalance( + new PublicKey(address), + solana.commitment + ) + + while (lamports === 0) { + console.log("We need to fund this Solana address with devnet SOL:", address) + console.log("Faucet: https://faucet.solana.com/") + const prefilled = `https://faucet.solana.com/?walletAddress=${encodeURIComponent( + address + )}&amount=0.5` + console.log("Prefilled faucet (0.5 SOL):", prefilled) + console.log("Once funded, press enter to check balance again") + await waitForEnter() + console.log("Attempting to fetch SOL balance...") + lamports = await connection.getBalance( + new PublicKey(address), + solana.commitment + ) + console.log("SOL balance fetched (lamports):", lamports) + } + + console.log("Client Solana SOL balance (lamports):", lamports) + return lamports +} + async function getEthBalance(chain: Chain, address: `0x${string}`) { const publicClient = createPublicClient({ chain, diff --git a/demos/payments/src/utils/ensure-private-keys.ts b/demos/payments/src/utils/ensure-private-keys.ts index 23f8e21..a9f92ef 100644 --- a/demos/payments/src/utils/ensure-private-keys.ts +++ b/demos/payments/src/utils/ensure-private-keys.ts @@ -1,6 +1,7 @@ import { colors, log, updateEnvFile } from "@repo/cli-tools" import { envFilePath } from "@/constants" import { generatePrivateKeyHex } from "./keypair-info" +import { Keypair } from "@solana/web3.js" export async function ensurePrivateKey(name: string) { const privateKeyHex = process.env[name] @@ -14,3 +15,20 @@ export async function ensurePrivateKey(name: string) { await updateEnvFile({ [name]: newPrivateKeyHex }, envFilePath) return newPrivateKeyHex } + +export async function ensureSolanaKeys(pubEnv: string, secretEnv: string) { + const existingPub = process.env[pubEnv] + const existingSecret = process.env[secretEnv] + if (existingPub && existingSecret) { + return { publicKey: existingPub, secretKeyJson: existingSecret } + } + log(colors.dim(`Generating ${pubEnv}/${secretEnv}...`)) + const kp = Keypair.generate() + const publicKey = kp.publicKey.toBase58() + const secretKeyJson = JSON.stringify(Array.from(kp.secretKey)) + await updateEnvFile( + { [pubEnv]: publicKey, [secretEnv]: secretKeyJson }, + envFilePath + ) + return { publicKey, secretKeyJson } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bcc1f3c..7588b07 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -43,7 +43,7 @@ importers: version: 1.1.0(typescript@5.8.3) viem: specifier: ^2.29.4 - version: 2.29.4(typescript@5.8.3)(zod@3.25.4) + version: 2.29.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.4) devDependencies: '@repo/eslint-config': specifier: workspace:* @@ -188,6 +188,12 @@ importers: '@repo/cli-tools': specifier: workspace:* version: link:../../tools/cli-tools + '@solana/spl-token': + specifier: ^0.4.14 + version: 0.4.14(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@solana/web3.js': + specifier: ^1.98.4 + version: 1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) agentcommercekit: specifier: workspace:* version: link:../../packages/agentcommercekit @@ -199,7 +205,7 @@ importers: version: 1.1.0(typescript@5.8.3) viem: specifier: ^2.29.4 - version: 2.29.4(typescript@5.8.3)(zod@3.25.4) + version: 2.29.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.4) devDependencies: '@repo/eslint-config': specifier: workspace:* @@ -264,7 +270,7 @@ importers: devDependencies: mintlify: specifier: ^4.0.538 - version: 4.0.538(@types/node@22.15.19)(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + version: 4.0.538(@types/node@22.15.19)(@types/react@19.1.4)(bufferutil@4.0.9)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) examples/issuer: dependencies: @@ -2212,18 +2218,47 @@ packages: '@socket.io/component-emitter@3.1.2': resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} + '@solana/buffer-layout-utils@0.2.0': + resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} + engines: {node: '>= 10'} + + '@solana/buffer-layout@4.0.1': + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + + '@solana/codecs-core@2.0.0-rc.1': + resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} + peerDependencies: + typescript: '>=5' + '@solana/codecs-core@2.1.1': resolution: {integrity: sha512-iPQW3UZ2Vi7QFBo2r9tw0NubtH8EdrhhmZulx6lC8V5a+qjaxovtM/q/UW2BTNpqqHLfO0tIcLyBLrNH4HTWPg==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/codecs-data-structures@2.0.0-rc.1': + resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} + peerDependencies: + typescript: '>=5' + + '@solana/codecs-numbers@2.0.0-rc.1': + resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} + peerDependencies: + typescript: '>=5' + '@solana/codecs-numbers@2.1.1': resolution: {integrity: sha512-m20IUPJhPUmPkHSlZ2iMAjJ7PaYUvlMtFhCQYzm9BEBSI6OCvXTG3GAPpAnSGRBfg5y+QNqqmKn4QHU3B6zzCQ==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/codecs-strings@2.0.0-rc.1': + resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: '>=5' + '@solana/codecs-strings@2.1.1': resolution: {integrity: sha512-uhj+A7eT6IJn4nuoX8jDdvZa7pjyZyN+k64EZ8+aUtJGt5Ft4NjRM8Jl5LljwYBWKQCgouVuigZHtTO2yAWExA==} engines: {node: '>=20.18.0'} @@ -2231,6 +2266,17 @@ packages: fastestsmallesttextencoderdecoder: ^1.0.22 typescript: '>=5.3.3' + '@solana/codecs@2.0.0-rc.1': + resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} + peerDependencies: + typescript: '>=5' + + '@solana/errors@2.0.0-rc.1': + resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} + hasBin: true + peerDependencies: + typescript: '>=5' + '@solana/errors@2.1.1': resolution: {integrity: sha512-sj6DaWNbSJFvLzT8UZoabMefQUfSW/8tXK7NTiagsDmh+Q87eyQDDC9L3z+mNmx9b6dEf6z660MOIplDD2nfEw==} engines: {node: '>=20.18.0'} @@ -2238,6 +2284,32 @@ packages: peerDependencies: typescript: '>=5.3.3' + '@solana/options@2.0.0-rc.1': + resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} + peerDependencies: + typescript: '>=5' + + '@solana/spl-token-group@0.0.7': + resolution: {integrity: sha512-V1N/iX7Cr7H0uazWUT2uk27TMqlqedpXHRqqAbVO2gvmJyT0E0ummMEAVQeXZ05ZhQ/xF39DLSdBp90XebWEug==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.3 + + '@solana/spl-token-metadata@0.1.6': + resolution: {integrity: sha512-7sMt1rsm/zQOQcUWllQX9mD2O6KhSAtY1hFR2hfFwgqfFWzSY9E9GDvFVNYUI1F0iQKcm6HmePU9QbKRXTEBiA==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.3 + + '@solana/spl-token@0.4.14': + resolution: {integrity: sha512-u09zr96UBpX4U685MnvQsNzlvw9TiY005hk1vJmJr7gMJldoPG1eYU5/wNEyOA5lkMLiR/gOi9SFD4MefOYEsA==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.5 + + '@solana/web3.js@1.98.4': + resolution: {integrity: sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw==} + '@standard-schema/spec@1.0.0': resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} @@ -2310,6 +2382,9 @@ packages: resolution: {integrity: sha512-JZlVFE6/dYpP9tQmV0/ADfn32L9uFarHWxfcRhReKUnljz1ZiUM5zpX+PH8h5CJs6lao3TuFqnPm9IJJCEkE2w==} engines: {node: '>=10.8'} + '@swc/helpers@0.5.17': + resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + '@szmarczak/http-timer@5.0.1': resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} engines: {node: '>=14.16'} @@ -2431,9 +2506,18 @@ packages: '@types/urijs@1.19.25': resolution: {integrity: sha512-XOfUup9r3Y06nFAZh3WvO0rBU4OtlfPB/vgxpjg+NRdGU6CN6djdc6OEiH+PcqHCY6eFLo9Ista73uarf4gnBg==} + '@types/uuid@8.3.4': + resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} + '@types/varint@6.0.3': resolution: {integrity: sha512-DHukoGWdJ2aYkveZJTB2rN2lp6m7APzVsoJQ7j/qy1fQxyamJTPD5xQzCMoJ2Qtgn0mE3wWeNOpbTyBFvF+dyA==} + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} @@ -2643,6 +2727,10 @@ packages: resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} engines: {node: '>= 14'} + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + aggregate-error@4.0.1: resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==} engines: {node: '>=12'} @@ -2824,6 +2912,9 @@ packages: bare-events: optional: true + base-x@3.0.11: + resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -2846,6 +2937,13 @@ packages: better-sqlite3@11.10.0: resolution: {integrity: sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ==} + bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + + bignumber.js@9.3.1: + resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} + binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} @@ -2865,6 +2963,9 @@ packages: bl@5.1.0: resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} + bn.js@5.2.2: + resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==} + body-parser@1.20.3: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -2873,6 +2974,9 @@ packages: resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} engines: {node: '>=18'} + borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -2883,6 +2987,9 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} @@ -2895,6 +3002,10 @@ packages: buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + bufferutil@4.0.9: + resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==} + engines: {node: '>=6.14.2'} + bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} @@ -3041,10 +3152,17 @@ packages: comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + commander@13.1.0: resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} engines: {node: '>=18'} + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + commander@8.3.0: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} @@ -3237,6 +3355,10 @@ packages: resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} engines: {node: '>= 14'} + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -3529,6 +3651,12 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + esast-util-from-estree@2.0.0: resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} @@ -3714,6 +3842,10 @@ packages: engines: {node: '>= 10.17.0'} hasBin: true + eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -3737,6 +3869,9 @@ packages: fast-memoize@2.5.2: resolution: {integrity: sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==} + fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + fast-uri@3.0.6: resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} @@ -4095,6 +4230,9 @@ packages: resolution: {integrity: sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg==} hasBin: true + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -4350,11 +4488,21 @@ packages: resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} engines: {node: '>=16'} + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + isows@1.0.7: resolution: {integrity: sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==} peerDependencies: ws: '*' + jayson@4.2.0: + resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==} + engines: {node: '>=8'} + hasBin: true + jiti@2.4.2: resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true @@ -4406,6 +4554,9 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + jsonc-parser@2.2.1: resolution: {integrity: sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==} @@ -4944,6 +5095,10 @@ packages: encoding: optional: true + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -5297,6 +5452,7 @@ packages: puppeteer@22.15.0: resolution: {integrity: sha512-XjCY1SiSEi1T7iSYuxS82ft85kwDJUS7wj1Z0eGVXKdtr5g4xnVcbjwxhq5xBnpK/E7x1VZZoJDxpjAOasHT4Q==} engines: {node: '>=18'} + deprecated: < 24.10.2 is no longer supported hasBin: true qs@6.13.0: @@ -5506,6 +5662,9 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rpc-websockets@9.2.0: + resolution: {integrity: sha512-DS/XHdPxplQTtNRKiBCRWGBJfjOk56W7fyFUpiYi9fSTWTzoEMbUkn3J4gB0IMniIEVeAGR1/rzFQogzD5MxvQ==} + run-async@3.0.0: resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} engines: {node: '>=0.12.0'} @@ -5745,6 +5904,12 @@ packages: resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + stream-chain@2.2.5: + resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==} + + stream-json@1.9.1: + resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==} + streamx@2.22.0: resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} @@ -5807,6 +5972,10 @@ packages: style-to-object@1.0.8: resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==} + superstruct@2.0.2: + resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} + engines: {node: '>=14.0.0'} + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -5852,6 +6021,9 @@ packages: text-decoder@1.2.3: resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + throttleit@2.1.0: resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==} engines: {node: '>=18'} @@ -6142,6 +6314,10 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -6157,6 +6333,10 @@ packages: resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} hasBin: true + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + valibot@1.1.0: resolution: {integrity: sha512-Nk8lX30Qhu+9txPYTwM0cFlWLdPFsFr6LblzqIySfbZph9+BFsAHsNvHOymEviUepeIW6KFHzpX8TKhbptBXXw==} peerDependencies: @@ -6352,6 +6532,18 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + ws@8.17.1: resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} engines: {node: '>=10.0.0'} @@ -7501,13 +7693,13 @@ snapshots: '@types/react': 19.1.4 react: 19.1.0 - '@mintlify/cli@4.0.536(@types/node@22.15.19)(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': + '@mintlify/cli@4.0.536(@types/node@22.15.19)(@types/react@19.1.4)(bufferutil@4.0.9)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: '@mintlify/common': 1.0.380(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0) - '@mintlify/link-rot': 3.0.494(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + '@mintlify/link-rot': 3.0.494(@types/react@19.1.4)(bufferutil@4.0.9)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@mintlify/models': 0.0.193 - '@mintlify/prebuild': 1.0.491(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3) - '@mintlify/previewing': 4.0.527(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + '@mintlify/prebuild': 1.0.491(@types/react@19.1.4)(bufferutil@4.0.9)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@mintlify/previewing': 4.0.527(@types/react@19.1.4)(bufferutil@4.0.9)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@mintlify/validation': 0.1.367 chalk: 5.4.1 detect-port: 1.6.1 @@ -7575,10 +7767,10 @@ snapshots: - react-dom - supports-color - '@mintlify/link-rot@3.0.494(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': + '@mintlify/link-rot@3.0.494(@types/react@19.1.4)(bufferutil@4.0.9)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: '@mintlify/common': 1.0.380(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0) - '@mintlify/prebuild': 1.0.491(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + '@mintlify/prebuild': 1.0.491(@types/react@19.1.4)(bufferutil@4.0.9)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) fs-extra: 11.3.0 is-absolute-url: 4.0.1 unist-util-visit: 4.1.2 @@ -7630,11 +7822,11 @@ snapshots: leven: 4.0.0 yaml: 2.8.0 - '@mintlify/prebuild@1.0.491(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': + '@mintlify/prebuild@1.0.491(@types/react@19.1.4)(bufferutil@4.0.9)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: '@mintlify/common': 1.0.380(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0) '@mintlify/openapi-parser': 0.0.7 - '@mintlify/scraping': 4.0.236(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + '@mintlify/scraping': 4.0.236(@types/react@19.1.4)(bufferutil@4.0.9)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@mintlify/validation': 0.1.367 axios: 1.9.0 chalk: 5.4.1 @@ -7658,10 +7850,10 @@ snapshots: - typescript - utf-8-validate - '@mintlify/previewing@4.0.527(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': + '@mintlify/previewing@4.0.527(@types/react@19.1.4)(bufferutil@4.0.9)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: '@mintlify/common': 1.0.380(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0) - '@mintlify/prebuild': 1.0.491(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + '@mintlify/prebuild': 1.0.491(@types/react@19.1.4)(bufferutil@4.0.9)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@mintlify/validation': 0.1.367 better-opn: 3.0.2 chalk: 5.4.1 @@ -7676,7 +7868,7 @@ snapshots: mdast: 3.0.0 openapi-types: 12.1.3 ora: 6.3.1 - socket.io: 4.8.1 + socket.io: 4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) tar: 6.2.1 unist-util-visit: 4.1.2 yargs: 17.7.2 @@ -7692,7 +7884,7 @@ snapshots: - typescript - utf-8-validate - '@mintlify/scraping@4.0.236(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': + '@mintlify/scraping@4.0.236(@types/react@19.1.4)(bufferutil@4.0.9)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: '@mintlify/common': 1.0.380(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0) '@mintlify/openapi-parser': 0.0.7 @@ -7701,7 +7893,7 @@ snapshots: js-yaml: 4.1.0 mdast-util-mdx-jsx: 3.2.0 neotraverse: 0.6.18 - puppeteer: 22.15.0(typescript@5.8.3) + puppeteer: 22.15.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) rehype-parse: 9.0.1 remark-gfm: 4.0.1 remark-mdx: 3.1.0 @@ -7933,17 +8125,59 @@ snapshots: '@socket.io/component-emitter@3.1.2': {} + '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + bigint-buffer: 1.1.5 + bignumber.js: 9.3.1 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + + '@solana/buffer-layout@4.0.1': + dependencies: + buffer: 6.0.3 + + '@solana/codecs-core@2.0.0-rc.1(typescript@5.8.3)': + dependencies: + '@solana/errors': 2.0.0-rc.1(typescript@5.8.3) + typescript: 5.8.3 + '@solana/codecs-core@2.1.1(typescript@5.8.3)': dependencies: '@solana/errors': 2.1.1(typescript@5.8.3) typescript: 5.8.3 + '@solana/codecs-data-structures@2.0.0-rc.1(typescript@5.8.3)': + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.8.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.8.3) + typescript: 5.8.3 + + '@solana/codecs-numbers@2.0.0-rc.1(typescript@5.8.3)': + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.8.3) + typescript: 5.8.3 + '@solana/codecs-numbers@2.1.1(typescript@5.8.3)': dependencies: '@solana/codecs-core': 2.1.1(typescript@5.8.3) '@solana/errors': 2.1.1(typescript@5.8.3) typescript: 5.8.3 + '@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.8.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.8.3) + fastestsmallesttextencoderdecoder: 1.0.22 + typescript: 5.8.3 + '@solana/codecs-strings@2.1.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': dependencies: '@solana/codecs-core': 2.1.1(typescript@5.8.3) @@ -7952,12 +8186,94 @@ snapshots: fastestsmallesttextencoderdecoder: 1.0.22 typescript: 5.8.3 + '@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/options': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/errors@2.0.0-rc.1(typescript@5.8.3)': + dependencies: + chalk: 5.4.1 + commander: 12.1.0 + typescript: 5.8.3 + '@solana/errors@2.1.1(typescript@5.8.3)': dependencies: chalk: 5.4.1 commander: 13.1.0 typescript: 5.8.3 + '@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/errors': 2.0.0-rc.1(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/spl-token-group@0.0.7(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + dependencies: + '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - typescript + + '@solana/spl-token-metadata@0.1.6(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + dependencies: + '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - typescript + + '@solana/spl-token@0.4.14(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@solana/spl-token-group': 0.0.7(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + buffer: 6.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - typescript + - utf-8-validate + + '@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.27.1 + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@solana/buffer-layout': 4.0.1 + '@solana/codecs-numbers': 2.1.1(typescript@5.8.3) + agentkeepalive: 4.6.0 + bn.js: 5.2.2 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + node-fetch: 2.7.0 + rpc-websockets: 9.2.0 + superstruct: 2.0.2 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + '@standard-schema/spec@1.0.0': {} '@stoplight/better-ajv-errors@1.0.3(ajv@8.17.1)': @@ -8103,6 +8419,10 @@ snapshots: '@stoplight/yaml-ast-parser': 0.0.50 tslib: 2.8.1 + '@swc/helpers@0.5.17': + dependencies: + tslib: 2.8.1 + '@szmarczak/http-timer@5.0.1': dependencies: defer-to-connect: 2.0.1 @@ -8238,10 +8558,20 @@ snapshots: '@types/urijs@1.19.25': {} + '@types/uuid@8.3.4': {} + '@types/varint@6.0.3': dependencies: '@types/node': 22.15.19 + '@types/ws@7.4.7': + dependencies: + '@types/node': 22.15.19 + + '@types/ws@8.18.1': + dependencies: + '@types/node': 22.15.19 + '@types/yauzl@2.10.3': dependencies: '@types/node': 22.15.19 @@ -8449,6 +8779,10 @@ snapshots: agent-base@7.1.3: {} + agentkeepalive@4.6.0: + dependencies: + humanize-ms: 1.2.1 + aggregate-error@4.0.1: dependencies: clean-stack: 4.2.0 @@ -8610,6 +8944,10 @@ snapshots: bare-events: 2.5.4 optional: true + base-x@3.0.11: + dependencies: + safe-buffer: 5.2.1 + base64-js@1.5.1: {} base64id@2.0.0: {} @@ -8629,6 +8967,12 @@ snapshots: bindings: 1.5.0 prebuild-install: 7.1.3 + bigint-buffer@1.1.5: + dependencies: + bindings: 1.5.0 + + bignumber.js@9.3.1: {} + binary-extensions@2.3.0: {} bindings@1.5.0: @@ -8654,6 +8998,8 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 + bn.js@5.2.2: {} + body-parser@1.20.3: dependencies: bytes: 3.1.2 @@ -8685,6 +9031,12 @@ snapshots: transitivePeerDependencies: - supports-color + borsh@0.7.0: + dependencies: + bn.js: 5.2.2 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -8698,6 +9050,10 @@ snapshots: dependencies: fill-range: 7.1.1 + bs58@4.0.1: + dependencies: + base-x: 3.0.11 + buffer-crc32@0.2.13: {} buffer-from@1.1.2: {} @@ -8712,6 +9068,11 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + bufferutil@4.0.9: + dependencies: + node-gyp-build: 4.8.4 + optional: true + bytes@3.1.2: {} cac@6.7.14: {} @@ -8856,8 +9217,12 @@ snapshots: comma-separated-tokens@2.0.3: {} + commander@12.1.0: {} + commander@13.1.0: {} + commander@2.20.3: {} + commander@8.3.0: {} comment-json@4.2.5: @@ -9053,6 +9418,8 @@ snapshots: escodegen: 2.1.0 esprima: 4.0.1 + delay@5.0.0: {} + delayed-stream@1.0.0: {} depd@2.0.0: {} @@ -9190,7 +9557,7 @@ snapshots: engine.io-parser@5.2.3: {} - engine.io@6.6.4: + engine.io@6.6.4(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@types/cors': 2.8.18 '@types/node': 22.15.19 @@ -9200,7 +9567,7 @@ snapshots: cors: 2.8.5 debug: 4.3.7 engine.io-parser: 5.2.3 - ws: 8.17.1 + ws: 8.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - supports-color @@ -9309,6 +9676,12 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 + es6-promise@4.2.8: {} + + es6-promisify@5.0.0: + dependencies: + es6-promise: 4.2.8 + esast-util-from-estree@2.0.0: dependencies: '@types/estree-jsx': 1.0.5 @@ -9623,6 +9996,8 @@ snapshots: transitivePeerDependencies: - supports-color + eyes@0.1.8: {} + fast-deep-equal@3.1.3: {} fast-equals@5.2.2: {} @@ -9643,6 +10018,8 @@ snapshots: fast-memoize@2.5.2: {} + fast-stable-stringify@1.0.0: {} + fast-uri@3.0.6: {} fastestsmallesttextencoderdecoder@1.0.22: {} @@ -10146,6 +10523,10 @@ snapshots: human-id@4.1.1: {} + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -10378,9 +10759,31 @@ snapshots: isexe@3.1.1: optional: true - isows@1.0.7(ws@8.18.1): + isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + + isows@1.0.7(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: - ws: 8.18.1 + ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + + jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + '@types/connect': 3.4.38 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + json-stringify-safe: 5.0.1 + stream-json: 1.9.1 + uuid: 8.3.2 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate jiti@2.4.2: {} @@ -10417,6 +10820,8 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} + json-stringify-safe@5.0.1: {} + jsonc-parser@2.2.1: {} jsondiffpatch@0.6.0: @@ -11102,9 +11507,9 @@ snapshots: minipass: 3.3.6 yallist: 4.0.0 - mintlify@4.0.538(@types/node@22.15.19)(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3): + mintlify@4.0.538(@types/node@22.15.19)(@types/react@19.1.4)(bufferutil@4.0.9)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10): dependencies: - '@mintlify/cli': 4.0.536(@types/node@22.15.19)(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + '@mintlify/cli': 4.0.536(@types/node@22.15.19)(@types/react@19.1.4)(bufferutil@4.0.9)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) transitivePeerDependencies: - '@types/node' - '@types/react' @@ -11196,6 +11601,9 @@ snapshots: dependencies: whatwg-url: 5.0.0 + node-gyp-build@4.8.4: + optional: true + normalize-path@3.0.0: {} normalize-url@8.0.1: {} @@ -11573,25 +11981,25 @@ snapshots: punycode@2.3.1: {} - puppeteer-core@22.15.0: + puppeteer-core@22.15.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@puppeteer/browsers': 2.3.0 chromium-bidi: 0.6.3(devtools-protocol@0.0.1312386) debug: 4.4.1 devtools-protocol: 0.0.1312386 - ws: 8.18.2 + ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bare-buffer - bufferutil - supports-color - utf-8-validate - puppeteer@22.15.0(typescript@5.8.3): + puppeteer@22.15.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10): dependencies: '@puppeteer/browsers': 2.3.0 cosmiconfig: 9.0.0(typescript@5.8.3) devtools-protocol: 0.0.1312386 - puppeteer-core: 22.15.0 + puppeteer-core: 22.15.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bare-buffer - bufferutil @@ -11950,6 +12358,19 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.39.0 fsevents: 2.3.3 + rpc-websockets@9.2.0: + dependencies: + '@swc/helpers': 0.5.17 + '@types/uuid': 8.3.4 + '@types/ws': 8.18.1 + buffer: 6.0.3 + eventemitter3: 5.0.1 + uuid: 8.3.2 + ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + run-async@3.0.0: {} run-parallel@1.2.0: @@ -12148,10 +12569,10 @@ snapshots: smart-buffer@4.2.0: {} - socket.io-adapter@2.5.5: + socket.io-adapter@2.5.5(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: debug: 4.3.7 - ws: 8.17.1 + ws: 8.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - supports-color @@ -12164,14 +12585,14 @@ snapshots: transitivePeerDependencies: - supports-color - socket.io@4.8.1: + socket.io@4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: accepts: 1.3.8 base64id: 2.0.0 cors: 2.8.5 debug: 4.3.7 - engine.io: 6.6.4 - socket.io-adapter: 2.5.5 + engine.io: 6.6.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) + socket.io-adapter: 2.5.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) socket.io-parser: 4.2.4 transitivePeerDependencies: - bufferutil @@ -12248,6 +12669,12 @@ snapshots: dependencies: bl: 5.1.0 + stream-chain@2.2.5: {} + + stream-json@1.9.1: + dependencies: + stream-chain: 2.2.5 + streamx@2.22.0: dependencies: fast-fifo: 1.3.2 @@ -12327,6 +12754,8 @@ snapshots: dependencies: inline-style-parser: 0.2.4 + superstruct@2.0.2: {} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -12394,6 +12823,8 @@ snapshots: dependencies: b4a: 1.6.7 + text-encoding-utf-8@1.0.2: {} + throttleit@2.1.0: {} through@2.3.8: {} @@ -12729,6 +13160,11 @@ snapshots: dependencies: react: 19.1.0 + utf-8-validate@5.0.10: + dependencies: + node-gyp-build: 4.8.4 + optional: true + util-deprecate@1.0.2: {} utility-types@3.11.0: {} @@ -12737,6 +13173,8 @@ snapshots: uuid@11.1.0: {} + uuid@8.3.2: {} + valibot@1.1.0(typescript@5.8.3): optionalDependencies: typescript: 5.8.3 @@ -12765,16 +13203,16 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - viem@2.29.4(typescript@5.8.3)(zod@3.25.4): + viem@2.29.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.4): dependencies: '@noble/curves': 1.8.2 '@noble/hashes': 1.7.2 '@scure/bip32': 1.6.2 '@scure/bip39': 1.5.4 abitype: 1.0.8(typescript@5.8.3)(zod@3.25.4) - isows: 1.0.7(ws@8.18.1) + isows: 1.0.7(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)) ox: 0.6.9(typescript@5.8.3)(zod@3.25.4) - ws: 8.18.1 + ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -12968,11 +13406,25 @@ snapshots: wrappy@1.0.2: {} - ws@8.17.1: {} + ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 - ws@8.18.1: {} + ws@8.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 - ws@8.18.2: {} + ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 xdg-basedir@5.1.0: {} From 3b90080a602858e68257de4dc0085bace20716e8 Mon Sep 17 00:00:00 2001 From: Jonas Hahn Date: Mon, 29 Sep 2025 13:36:46 +0300 Subject: [PATCH 2/8] Prevent replay attack via receipt memo instruction - fixed some type errors - added a memo instruction that is verified in the receipt service to prevent replay attacks --- demos/payments/package.json | 2 + demos/payments/src/index.ts | 28 ++++++-- demos/payments/src/receipt-service.ts | 69 +++++++++++++++++-- demos/payments/src/server.ts | 17 ++++- demos/payments/src/utils/ensure-balances.ts | 24 +++---- .../payments/src/utils/ensure-private-keys.ts | 5 +- pnpm-lock.yaml | 29 ++++++++ 7 files changed, 148 insertions(+), 26 deletions(-) diff --git a/demos/payments/package.json b/demos/payments/package.json index da75896..df6e8f4 100644 --- a/demos/payments/package.json +++ b/demos/payments/package.json @@ -29,9 +29,11 @@ "@hono/node-server": "^1.14.2", "@repo/api-utils": "workspace:*", "@repo/cli-tools": "workspace:*", + "@solana/spl-memo": "^0.2.5", "@solana/spl-token": "^0.4.14", "@solana/web3.js": "^1.98.4", "agentcommercekit": "workspace:*", + "bs58": "^6.0.0", "hono": "^4.7.10", "valibot": "^1.1.0", "viem": "^2.29.4" diff --git a/demos/payments/src/index.ts b/demos/payments/src/index.ts index 44fb7da..3ca850d 100644 --- a/demos/payments/src/index.ts +++ b/demos/payments/src/index.ts @@ -58,10 +58,12 @@ import { TransactionMessage, VersionedTransaction } from "@solana/web3.js" +import { createHash } from "node:crypto" import { createTransferInstruction, getOrCreateAssociatedTokenAccount } from "@solana/spl-token" +import { createMemoInstruction } from "@solana/spl-memo" /** * Example showcasing payments using the ACK-Pay protocol. @@ -450,11 +452,15 @@ async function performSolanaPayment( log(sectionHeader("💸 Execute Payment (Client Agent -> Solana / SPL Token)")) const connection = new Connection(solana.rpcUrl, solana.commitment) - const { secretKeyJson } = await ensureSolanaKeys( - "SOLANA_CLIENT_PUBLIC_KEY", - "SOLANA_CLIENT_SECRET_KEY_JSON" + const clientSolKeys = await ( + ensureSolanaKeys as unknown as ( + pubEnv: string, + secretEnv: string + ) => Promise<{ publicKey: string; secretKeyJson: string }> + )("SOLANA_CLIENT_PUBLIC_KEY", "SOLANA_CLIENT_SECRET_KEY_JSON") + const keyBytes = new Uint8Array( + JSON.parse(clientSolKeys.secretKeyJson) as number[] ) - const keyBytes = new Uint8Array(JSON.parse(secretKeyJson) as number[]) const payer = Keypair.fromSecretKey(keyBytes) const mint = new PublicKey(solana.usdcMint) @@ -464,6 +470,12 @@ async function performSolanaPayment( const recipient = new PublicKey(paymentOption.recipient) + // Bind tx to the payment request using a Memo (replay mitigation) + const expectedMemo = createHash("sha256") + .update(paymentRequestToken) + .digest("hex") + const memoIx = createMemoInstruction(expectedMemo, [payer.publicKey]) + const senderAta = await getOrCreateAssociatedTokenAccount( connection, payer, @@ -477,7 +489,7 @@ async function performSolanaPayment( senderAta.address, solana.commitment ) - while (!tokenBal || tokenBal.value.amount === "0") { + while (tokenBal.value.amount === "0") { log( colors.dim( "USDC balance is 0. Please request devnet USDC from Circle's faucet, then press Enter to retry." @@ -513,13 +525,17 @@ async function performSolanaPayment( const msg = new TransactionMessage({ payerKey: payer.publicKey, recentBlockhash: blockhash, - instructions: [ix] + instructions: [memoIx, ix] }).compileToV0Message() const tx = new VersionedTransaction(msg) tx.sign([payer]) const signature = await connection.sendTransaction(tx, { maxRetries: 10 }) + log(colors.dim("View on Solana Explorer:")) + log(link(`https://explorer.solana.com/tx/${signature}?cluster=devnet`), { + wrap: false + }) await connection.confirmTransaction( { signature, blockhash, lastValidBlockHeight }, solana.commitment diff --git a/demos/payments/src/receipt-service.ts b/demos/payments/src/receipt-service.ts index 1bf87be..e97cbd4 100644 --- a/demos/payments/src/receipt-service.ts +++ b/demos/payments/src/receipt-service.ts @@ -1,3 +1,4 @@ +import { createHash } from "node:crypto" import { serve } from "@hono/node-server" import { logger } from "@repo/api-utils/middleware/logger" import { @@ -7,6 +8,7 @@ import { logJson, successMessage } from "@repo/cli-tools" +import { Connection, PublicKey } from "@solana/web3.js" import { createPaymentReceipt, getDidResolver, @@ -17,17 +19,21 @@ import { verifyPaymentRequestToken } from "agentcommercekit" import { caip2ChainIdSchema } from "agentcommercekit/schemas/valibot" +import bs58 from "bs58" import { Hono } from "hono" import { env } from "hono/adapter" import { HTTPException } from "hono/http-exception" import * as v from "valibot" import { erc20Abi, isAddressEqual } from "viem" import { parseEventLogs } from "viem/utils" -import { chainId, publicClient, usdcAddress } from "./constants" -import { solana } from "./constants" -import { Connection, PublicKey } from "@solana/web3.js" +import { chainId, publicClient, solana, usdcAddress } from "./constants" import { asAddress } from "./utils/as-address" import { getKeypairInfo } from "./utils/keypair-info" +import type { + ParsedInstruction, + ParsedTransactionWithMeta, + PartiallyDecodedInstruction +} from "@solana/web3.js" import type { paymentOptionSchema } from "agentcommercekit/schemas/valibot" import type { Env } from "hono" @@ -259,6 +265,59 @@ async function verifySolanaPayment( throw new HTTPException(400, { message: "Invalid transaction" }) } + // Verify Memo binds to the Payment Request + const expectedMemo = createHash("sha256") + .update(paymentDetails.paymentRequestToken) + .digest("hex") + .toLowerCase() + const MEMO_PROGRAM_ID = "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr" + + function extractMemosFromParsedTx( + txParsed: ParsedTransactionWithMeta + ): string[] { + const memos: string[] = [] + + const scan = (ix: ParsedInstruction | PartiallyDecodedInstruction) => { + // Parsed memo + if ("program" in ix && ix.program === "spl-memo") { + const parsed: unknown = ix.parsed + if (typeof parsed === "string") { + memos.push(parsed) + return + } + const info = (parsed as { info?: { memo?: string } } | undefined)?.info + if (info?.memo) memos.push(String(info.memo)) + return + } + + // Partially decoded memo: data is base-58 + if ("programId" in ix) { + const pid = (ix as PartiallyDecodedInstruction).programId.toBase58() + const data = (ix as PartiallyDecodedInstruction).data + if (pid === MEMO_PROGRAM_ID && typeof data === "string") { + try { + const raw = bs58.decode(data) + memos.push(Buffer.from(raw).toString("utf8")) + } catch { + // ignore malformed memo data + } + } + } + } + + for (const ix of txParsed.transaction.message.instructions) scan(ix) + for (const inner of txParsed.meta?.innerInstructions ?? []) { + for (const ix of inner.instructions) scan(ix) + } + return memos + } + + const memos = extractMemosFromParsedTx(tx).map((m) => m.trim().toLowerCase()) + if (!memos.includes(expectedMemo)) { + log(errorMessage("Payment memo missing or invalid")) + throw new HTTPException(400, { message: "Invalid memo" }) + } + // Validate postTokenBalances reflect the transfer to recipient for the mint const mint = new PublicKey(solana.usdcMint).toBase58() const recipient = new PublicKey( @@ -270,8 +329,8 @@ async function verifySolanaPayment( const dec = paymentOption.decimals const expectedAmount = BigInt(paymentOption.amount) - const post = tx.meta?.postTokenBalances || [] - const pre = tx.meta?.preTokenBalances || [] + const post = tx.meta?.postTokenBalances ?? [] + const pre = tx.meta?.preTokenBalances ?? [] const preBal = pre.find((b) => b.mint === mint && b.owner === recipient) const postBal = post.find((b) => b.mint === mint && b.owner === recipient) diff --git a/demos/payments/src/server.ts b/demos/payments/src/server.ts index 155a33e..ca1c4a8 100644 --- a/demos/payments/src/server.ts +++ b/demos/payments/src/server.ts @@ -16,6 +16,16 @@ import { getKeypairInfo } from "./utils/keypair-info" import type { PaymentRequestInit } from "agentcommercekit" import type { Env, TypedResponse } from "hono" +function isSolanaKeysResult( + v: unknown +): v is { publicKey: string; secretKeyJson: string } { + return ( + !!v && + typeof (v as { publicKey?: unknown }).publicKey === "string" && + typeof (v as { secretKeyJson?: unknown }).secretKeyJson === "string" + ) +} + const app = new Hono() app.use(logger()) @@ -39,10 +49,15 @@ app.get("/", async (c): Promise> => { const didResolver = getDidResolver() // Ensure Solana server keys are present - const { publicKey: solanaServerPublicKey } = await ensureSolanaKeys( + const getSolanaKeys = ensureSolanaKeys as ( + pubEnv: string, + secretEnv: string + ) => Promise<{ publicKey: string; secretKeyJson: string }> + const solanaKeys = await getSolanaKeys( "SOLANA_SERVER_PUBLIC_KEY", "SOLANA_SERVER_SECRET_KEY_JSON" ) + const solanaServerPublicKey: string = solanaKeys.publicKey const { did: receiptIssuerDid } = await getKeypairInfo( env(c).RECEIPT_SERVICE_PRIVATE_KEY_HEX diff --git a/demos/payments/src/utils/ensure-balances.ts b/demos/payments/src/utils/ensure-balances.ts index b0c23d0..932ffe4 100644 --- a/demos/payments/src/utils/ensure-balances.ts +++ b/demos/payments/src/utils/ensure-balances.ts @@ -1,9 +1,9 @@ import { waitForEnter } from "@repo/cli-tools" +import { Connection, PublicKey } from "@solana/web3.js" import { createPublicClient, erc20Abi, http } from "viem" import { formatUnits } from "viem/utils" -import type { Chain } from "viem" -import { Connection, PublicKey } from "@solana/web3.js" import { solana } from "@/constants" +import type { Chain } from "viem" /** * Ensure the client wallet has a non-zero balance of USDC and ETH @@ -45,27 +45,25 @@ export async function ensureNonZeroBalances( return { balanceUsdc, balanceEth } } -export async function ensureSolanaSolBalance(address: string) { +export async function ensureSolanaSolBalance(address: string | PublicKey) { + const pubkey = typeof address === "string" ? new PublicKey(address) : address const connection = new Connection(solana.rpcUrl, solana.commitment) - let lamports = await connection.getBalance( - new PublicKey(address), - solana.commitment - ) + let lamports = await connection.getBalance(pubkey, solana.commitment) while (lamports === 0) { - console.log("We need to fund this Solana address with devnet SOL:", address) + console.log( + "We need to fund this Solana address with devnet SOL:", + pubkey.toBase58() + ) console.log("Faucet: https://faucet.solana.com/") const prefilled = `https://faucet.solana.com/?walletAddress=${encodeURIComponent( - address + pubkey.toBase58() )}&amount=0.5` console.log("Prefilled faucet (0.5 SOL):", prefilled) console.log("Once funded, press enter to check balance again") await waitForEnter() console.log("Attempting to fetch SOL balance...") - lamports = await connection.getBalance( - new PublicKey(address), - solana.commitment - ) + lamports = await connection.getBalance(pubkey, solana.commitment) console.log("SOL balance fetched (lamports):", lamports) } diff --git a/demos/payments/src/utils/ensure-private-keys.ts b/demos/payments/src/utils/ensure-private-keys.ts index a9f92ef..677c164 100644 --- a/demos/payments/src/utils/ensure-private-keys.ts +++ b/demos/payments/src/utils/ensure-private-keys.ts @@ -16,7 +16,10 @@ export async function ensurePrivateKey(name: string) { return newPrivateKeyHex } -export async function ensureSolanaKeys(pubEnv: string, secretEnv: string) { +export async function ensureSolanaKeys( + pubEnv: string, + secretEnv: string +): Promise<{ publicKey: string; secretKeyJson: string }> { const existingPub = process.env[pubEnv] const existingSecret = process.env[secretEnv] if (existingPub && existingSecret) { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7588b07..d8034fd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -188,6 +188,9 @@ importers: '@repo/cli-tools': specifier: workspace:* version: link:../../tools/cli-tools + '@solana/spl-memo': + specifier: ^0.2.5 + version: 0.2.5(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) '@solana/spl-token': specifier: ^0.4.14 version: 0.4.14(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(utf-8-validate@5.0.10) @@ -197,6 +200,9 @@ importers: agentcommercekit: specifier: workspace:* version: link:../../packages/agentcommercekit + bs58: + specifier: ^6.0.0 + version: 6.0.0 hono: specifier: ^4.7.10 version: 4.7.10 @@ -2289,6 +2295,12 @@ packages: peerDependencies: typescript: '>=5' + '@solana/spl-memo@0.2.5': + resolution: {integrity: sha512-0Zx5t3gAdcHlRTt2O3RgGlni1x7vV7Xq7j4z9q8kKOMgU03PyoTbFQ/BSYCcICHzkaqD7ZxAiaJ6dlXolg01oA==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.91.6 + '@solana/spl-token-group@0.0.7': resolution: {integrity: sha512-V1N/iX7Cr7H0uazWUT2uk27TMqlqedpXHRqqAbVO2gvmJyT0E0ummMEAVQeXZ05ZhQ/xF39DLSdBp90XebWEug==} engines: {node: '>=16'} @@ -2915,6 +2927,9 @@ packages: base-x@3.0.11: resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==} + base-x@5.0.1: + resolution: {integrity: sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -2990,6 +3005,9 @@ packages: bs58@4.0.1: resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + bs58@6.0.0: + resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} + buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} @@ -8220,6 +8238,11 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder + '@solana/spl-memo@0.2.5(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))': + dependencies: + '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + buffer: 6.0.3 + '@solana/spl-token-group@0.0.7(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': dependencies: '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) @@ -8948,6 +8971,8 @@ snapshots: dependencies: safe-buffer: 5.2.1 + base-x@5.0.1: {} + base64-js@1.5.1: {} base64id@2.0.0: {} @@ -9054,6 +9079,10 @@ snapshots: dependencies: base-x: 3.0.11 + bs58@6.0.0: + dependencies: + base-x: 5.0.1 + buffer-crc32@0.2.13: {} buffer-from@1.1.2: {} From 08406adcf3ce815bd68db811dc974f0a94b580af Mon Sep 17 00:00:00 2001 From: Jonas Hahn Date: Mon, 29 Sep 2025 13:49:38 +0300 Subject: [PATCH 3/8] Update README.md --- demos/payments/README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/demos/payments/README.md b/demos/payments/README.md index 8e87637..65bbfa5 100644 --- a/demos/payments/README.md +++ b/demos/payments/README.md @@ -6,7 +6,7 @@ This interactive command-line demo showcases a common use case: the **Server-Ini - A **Client Agent** attempting to access a protected resource. - A **Server Agent** requiring payment and issuing a formal Payment Request. -- The Client Agent making a payment using **USDC on the Base Sepolia testnet**. +- The Client Agent making a payment using **USDC on the Base Sepolia testnet** or **USDC on Solana devnet**, or a **Stripe** simulated card payment. - A **Receipt Service** verifying the on-chain payment and issuing a cryptographically **Verifiable Credential (VC)** as a payment receipt. - The Client Agent using this receipt to gain access to the resource. @@ -50,7 +50,9 @@ pnpm run demo The interactive CLI will guide you through the following steps: 1. **Client requests resource**: The Client attempts to fetch data from the Server Agent, who responds with an HTTP `402 Payment Required` status. This response contains a `PaymentRequest` which includes details on how to pay for access to this resource and offers multiple payment options. -2. **Client makes payment**: If the client chooses to pay via Credit Card, they will pay via a sample Payment Service. Alternatively, the Client can use the information from the Payment Request to transfer USDC from its wallet to the Server's wallet on the Base Sepolia testnet. +2. **Client makes payment**: If the client chooses to pay via Credit Card, they will pay via a sample Payment Service. Alternatively, the Client can use the information from the Payment Request to transfer USDC from its wallet to the Server's wallet on: + - Base Sepolia (EVM), or + - Solana devnet (SPL token, USDC mint configurable via env) 3. **Client requests a receipt**: Once the payment transaction is complete, the Client or the Payment Service will request a formal Receipt **Verifiable Credential (VC)**. For on-chain payments, the Client provides the Receipt Service with proof of the on-chain transaction and the original Payment Request. 4. **Receipt Service verifies payment**: The Receipt Service verifies all of the provided data, performs on-chain transaction verification if required, and verifies the integrity of the original payment request. If all is successful, it issues a Receipt Credential (VC). 5. **Client presents receipt to Server**: The Client retries the request to the Server, this time presenting the Verifiable Credential (receipt). The Server verifies the receipt and, if valid, grants access to the protected resource. From eb559783c895a786796b78ea8a60383c01d7a65c Mon Sep 17 00:00:00 2001 From: Jonas Hahn Date: Tue, 30 Sep 2025 14:33:47 +0300 Subject: [PATCH 4/8] Add docs for on-chain payments --- docs/ack-pay/payment-request-payload.mdx | 12 ++++++++++++ docs/ack-pay/receipt-verification.mdx | 13 +++++++++++++ docs/ack-pay/summary.mdx | 2 +- docs/demos/demo-payments.mdx | 7 +++++++ 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/docs/ack-pay/payment-request-payload.mdx b/docs/ack-pay/payment-request-payload.mdx index 2ee463f..89ad2bb 100644 --- a/docs/ack-pay/payment-request-payload.mdx +++ b/docs/ack-pay/payment-request-payload.mdx @@ -46,6 +46,16 @@ Every Payment Request payload contains essential properties: "recipient": "acct_StripeAccountID", "paymentService": "https://payments.example.com/stripe", "receiptService": "https://receipts.example.com/stripe" + }, + { + // Option 3: USDC on Solana devnet + "id": "usdc-solana-devnet", + "currency": "USDC", + "network": "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", + "amount": 10000000, + "decimals": 6, + "recipient": "9juQ8sLL5NfwT7UhWHqHQAg45JDNrm41SiCDdeTQbLsw", + "receiptService": "https://receipts.example.com/solana" } // ... more options ... ] @@ -88,3 +98,5 @@ This abstraction provides key benefits: - **Client Flexibility:** The Client can pay using a method convenient for it, even if it differs from the Server's preferred settlement method. If fees are associated with bridging, FX conversions, or other transformations performed by the Payment Service, these should be communicated transparently to the Client during the payment negotiation or execution process. + +> Note: Solana networks use CAIP‑2 chain IDs (e.g., `solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1` for devnet). The `recipient` is the base58 wallet address receiving funds on that network. diff --git a/docs/ack-pay/receipt-verification.mdx b/docs/ack-pay/receipt-verification.mdx index 39ac7ff..24d8472 100644 --- a/docs/ack-pay/receipt-verification.mdx +++ b/docs/ack-pay/receipt-verification.mdx @@ -103,3 +103,16 @@ When an ACK Receipt is presented by a Client Agent to a Server Agent (e.g., when If all these checks pass, the Server can confidently treat the payment as valid and proceed with service delivery. + +## On-Chain Verification Example: Solana (SPL‑USDC) + +When verifying an on-chain payment on Solana, in addition to the general VC checks, a Receipt Service (or Server) typically performs these steps against the submitted transaction signature: + +- Fetch the parsed transaction (e.g., `getParsedTransaction`) with an appropriate commitment (e.g., `confirmed` in development, `finalized` in production). +- Extract Memo instructions and confirm a memo equals `sha256(paymentRequestToken)` to bind the payment to the specific request (replay protection). +- Confirm the token mint matches the expected USDC mint for the environment. +- Confirm the credited recipient is the expected address (e.g., canonical associated token account for recipient+mint). +- Compute the delta in recipient `postTokenBalances - preTokenBalances` and verify it equals the required `amount` with matching `decimals`. +- Optionally validate payer/fee-payer, ensure `blockTime >= paymentRequest.iat`, and reject duplicate receipts for the same `jti` or signature (idempotency). + +These checks mirror what the demo implementation performs for Solana devnet and complement the general ACK Receipt verification process. diff --git a/docs/ack-pay/summary.mdx b/docs/ack-pay/summary.mdx index 7056203..2ff9381 100644 --- a/docs/ack-pay/summary.mdx +++ b/docs/ack-pay/summary.mdx @@ -5,6 +5,6 @@ description: "Summary of the ACK-Pay Payments Protocol." ACK-Pay provides a flexible and robust pattern framework for agentic financial transactions. By defining standard interactions and leveraging Verifiable Credentials for receipts, it enables secure, automated, and compliant payments across diverse systems. -Its support for both [server-initiated](/ack-pay/server-initiated-sequence) and [client-initiated](/ack-pay/client-initiated-sequence) flows, coupled with the abstraction provided by [Payment Services](/ack-pay/payment-service), allows integration with various settlement rails. These include traditional finance, card networks (potentially via APIs like Stripe, PayPal, Visa, Mastercard, etc.), and blockchain-based digital assets (including via protocols like x402). +Its support for both [server-initiated](/ack-pay/server-initiated-sequence) and [client-initiated](/ack-pay/client-initiated-sequence) flows, coupled with the abstraction provided by [Payment Services](/ack-pay/payment-service), allows integration with various settlement rails. These include traditional finance, card networks (potentially via APIs like Stripe, PayPal, Visa, Mastercard, etc.), and blockchain-based digital assets (including via protocols like x402). On-chain examples include **EVM** networks (e.g., Base Sepolia) and **Solana** (SPL‑USDC), where Clients can pay directly on-chain and obtain a verifiable receipt via a [Receipt Service](/ack-pay/components-roles#receipt-service). When combined with [ACK-ID](/ack-id/introduction), ACK-Pay creates a powerful foundation for trust and accountability when executing payments in the emerging agent economy. diff --git a/docs/demos/demo-payments.mdx b/docs/demos/demo-payments.mdx index 520de0c..5a17c46 100644 --- a/docs/demos/demo-payments.mdx +++ b/docs/demos/demo-payments.mdx @@ -65,6 +65,13 @@ Client requests access to a protected resource. Server responds with an HTTP `40 Client performs an on-chain stablecoin (USDC) payment to the Server’s wallet on Base Sepolia testnet. Alternatively, a credit card payment can be handled via a Payment Service. + +This demo also supports an on-chain payment on **Solana devnet** using SPL‑USDC. +In that path, the Client transfers USDC directly to the Server’s Solana address +and includes a Memo bound to the signed Payment Request for replay protection. The +Receipt Service verifies the memo, mint, recipient and exact amount before issuing +a receipt. + From d63da19e76a32e5c06542f1011e3ed08fa380ede Mon Sep 17 00:00:00 2001 From: Jonas Hahn Date: Mon, 13 Oct 2025 19:24:52 +0200 Subject: [PATCH 5/8] Use kit + code review --- demos/payments/package.json | 9 +- demos/payments/src/index.ts | 203 +- demos/payments/src/receipt-service.ts | 161 +- demos/payments/src/server.ts | 6 +- demos/payments/src/utils/ensure-balances.ts | 27 +- .../payments/src/utils/ensure-private-keys.ts | 30 +- pnpm-lock.yaml | 3082 ++++++++++++----- 7 files changed, 2530 insertions(+), 988 deletions(-) diff --git a/demos/payments/package.json b/demos/payments/package.json index df6e8f4..77c9e37 100644 --- a/demos/payments/package.json +++ b/demos/payments/package.json @@ -29,11 +29,14 @@ "@hono/node-server": "^1.14.2", "@repo/api-utils": "workspace:*", "@repo/cli-tools": "workspace:*", - "@solana/spl-memo": "^0.2.5", - "@solana/spl-token": "^0.4.14", - "@solana/web3.js": "^1.98.4", + "@solana-program/system": "^0.9.0", + "@solana-program/token": "^0.6.0", + "@solana/addresses": "^4.0.0", + "@solana/keys": "^4.0.0", + "@solana/kit": "^4.0.0", "agentcommercekit": "workspace:*", "bs58": "^6.0.0", + "gill": "^0.12.0", "hono": "^4.7.10", "valibot": "^1.1.0", "viem": "^2.29.4" diff --git a/demos/payments/src/index.ts b/demos/payments/src/index.ts index 3ca850d..9248b87 100644 --- a/demos/payments/src/index.ts +++ b/demos/payments/src/index.ts @@ -1,3 +1,4 @@ +import { createHash } from "node:crypto" import { colors, demoFooter, @@ -12,9 +13,30 @@ import { waitForEnter, wordWrap } from "@repo/cli-tools" +import { + address, + appendTransactionMessageInstructions, + createKeyPairSignerFromBytes, + createSolanaRpc, + createTransactionMessage, + getBase64EncodedWireTransaction, + pipe, + setTransactionMessageFeePayerSigner, + setTransactionMessageLifetimeUsingBlockhash, + signTransactionMessageWithSigners +} from "@solana/kit" +import { + TOKEN_PROGRAM_ADDRESS, + findAssociatedTokenPda, + getCreateAssociatedTokenInstructionAsync, + getTransferCheckedInstruction +} from "@solana-program/token" import { addressFromDidPkhUri, + createDidPkhUri, createJwt, + createJwtSigner, + generateKeypair, getDidResolver, isDidPkhUri, isJwtString, @@ -51,19 +73,6 @@ import type { import "./server" import "./receipt-service" import "./payment-service" -import { - Connection, - Keypair, - PublicKey, - TransactionMessage, - VersionedTransaction -} from "@solana/web3.js" -import { createHash } from "node:crypto" -import { - createTransferInstruction, - getOrCreateAssociatedTokenAccount -} from "@solana/spl-token" -import { createMemoInstruction } from "@solana/spl-memo" /** * Example showcasing payments using the ACK-Pay protocol. @@ -451,97 +460,131 @@ async function performSolanaPayment( log(sectionHeader("💸 Execute Payment (Client Agent -> Solana / SPL Token)")) - const connection = new Connection(solana.rpcUrl, solana.commitment) - const clientSolKeys = await ( - ensureSolanaKeys as unknown as ( - pubEnv: string, - secretEnv: string - ) => Promise<{ publicKey: string; secretKeyJson: string }> - )("SOLANA_CLIENT_PUBLIC_KEY", "SOLANA_CLIENT_SECRET_KEY_JSON") + const rpc = createSolanaRpc(solana.rpcUrl) + const clientSolKeys = await ensureSolanaKeys( + "SOLANA_CLIENT_PUBLIC_KEY", + "SOLANA_CLIENT_SECRET_KEY_JSON" + ) const keyBytes = new Uint8Array( JSON.parse(clientSolKeys.secretKeyJson) as number[] ) - const payer = Keypair.fromSecretKey(keyBytes) + const payerSigner = await createKeyPairSignerFromBytes(keyBytes) - const mint = new PublicKey(solana.usdcMint) + const mint = address(solana.usdcMint) // Ensure payer has SOL for fees - await ensureSolanaSolBalance(payer.publicKey.toBase58()) + await ensureSolanaSolBalance(clientSolKeys.publicKey) - const recipient = new PublicKey(paymentOption.recipient) + const recipient = address(paymentOption.recipient) // Bind tx to the payment request using a Memo (replay mitigation) const expectedMemo = createHash("sha256") .update(paymentRequestToken) .digest("hex") - const memoIx = createMemoInstruction(expectedMemo, [payer.publicKey]) + const memoInstruction = { + programAddress: address("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"), + data: new TextEncoder().encode(expectedMemo) + } + + const [senderAta] = await findAssociatedTokenPda({ + mint: mint, + owner: payerSigner.address, + tokenProgram: TOKEN_PROGRAM_ADDRESS + }) + const [recipientAta] = await findAssociatedTokenPda({ + mint: mint, + owner: recipient, + tokenProgram: TOKEN_PROGRAM_ADDRESS + }) - const senderAta = await getOrCreateAssociatedTokenAccount( - connection, - payer, - mint, - payer.publicKey, - undefined, - solana.commitment - ) // Ensure sender has USDC balance; if not, prompt Circle faucet - let tokenBal = await connection.getTokenAccountBalance( - senderAta.address, - solana.commitment - ) - while (tokenBal.value.amount === "0") { + let tokenBal: { amount: string } + try { + ;({ value: tokenBal } = await rpc + .getTokenAccountBalance(senderAta, { commitment: solana.commitment }) + .send()) + } catch (e: unknown) { + tokenBal = { amount: "0" } + } + while (tokenBal.amount === "0") { log( colors.dim( "USDC balance is 0. Please request devnet USDC from Circle's faucet, then press Enter to retry." ) ) - log(colors.dim(`Send USDC to your wallet: ${payer.publicKey.toBase58()}`)) + log(colors.dim(`Send USDC to your wallet: ${clientSolKeys.publicKey}`)) log(colors.cyan("https://faucet.circle.com/")) await waitForEnter("Press Enter after funding USDC...") - tokenBal = await connection.getTokenAccountBalance( - senderAta.address, - solana.commitment - ) + try { + ;({ value: tokenBal } = await rpc + .getTokenAccountBalance(senderAta, { commitment: solana.commitment }) + .send()) + } catch (e: unknown) { + tokenBal = { amount: "0" } + } } - const recipientAta = await getOrCreateAssociatedTokenAccount( - connection, - payer, - mint, - recipient, - undefined, - solana.commitment - ) + const { value: recipientAtaInfo } = await rpc + .getAccountInfo(recipientAta, { + commitment: solana.commitment, + encoding: "base64" + }) + .send() + const maybeCreateRecipientAtaInstruction = !recipientAtaInfo + ? await getCreateAssociatedTokenInstructionAsync({ + payer: payerSigner, + owner: recipient, + mint: mint, + ata: recipientAta, + tokenProgram: TOKEN_PROGRAM_ADDRESS + }) + : undefined const amount = BigInt(paymentOption.amount) - const ix = createTransferInstruction( - senderAta.address, - recipientAta.address, - payer.publicKey, - Number(amount) // safe here as demo amounts are tiny (5e4) - ) - - const { blockhash, lastValidBlockHeight } = - await connection.getLatestBlockhash(solana.commitment) - const msg = new TransactionMessage({ - payerKey: payer.publicKey, - recentBlockhash: blockhash, - instructions: [memoIx, ix] - }).compileToV0Message() - const tx = new VersionedTransaction(msg) - tx.sign([payer]) - const signature = await connection.sendTransaction(tx, { - maxRetries: 10 + const transferIx = getTransferCheckedInstruction({ + source: senderAta, + destination: recipientAta, + mint, + authority: payerSigner.address, + amount, + decimals: paymentOption.decimals }) + + const { value: latestBlockhash } = await rpc.getLatestBlockhash().send() + const txMessage = pipe( + createTransactionMessage({ version: 0 }), + (m) => setTransactionMessageFeePayerSigner(payerSigner, m), + (m) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, m), + (m) => + appendTransactionMessageInstructions( + [ + memoInstruction, + ...(maybeCreateRecipientAtaInstruction + ? [maybeCreateRecipientAtaInstruction] + : []), + transferIx + ], + m + ) + ) + const signedTx = await signTransactionMessageWithSigners(txMessage) + const wireTx = getBase64EncodedWireTransaction(signedTx) + const base58Signature = await rpc + .sendTransaction(wireTx, { encoding: "base64", skipPreflight: true }) + .send() + const signature = base58Signature log(colors.dim("View on Solana Explorer:")) log(link(`https://explorer.solana.com/tx/${signature}?cluster=devnet`), { wrap: false }) - await connection.confirmTransaction( - { signature, blockhash, lastValidBlockHeight }, - solana.commitment - ) // Request receipt from receipt-service + // Sign with the actual Solana payer (Ed25519) and bind payerDid to Solana did:pkh + // Build an ACK signer from the same Ed25519 seed used for the Solana payer + const ackEd25519Keypair = await generateKeypair( + "Ed25519", + new Uint8Array(Array.from(keyBytes).slice(0, 32)) + ) + const ackEd25519JwtSigner = createJwtSigner(ackEd25519Keypair) const payload = { paymentRequestToken, paymentOptionId: paymentOption.id, @@ -549,12 +592,16 @@ async function performSolanaPayment( network: solana.chainId, txHash: signature }, - payerDid: client.did + payerDid: createDidPkhUri(solana.chainId, clientSolKeys.publicKey) } - const signedPayload = await createJwt(payload, { - issuer: client.did, - signer: client.jwtSigner - }) + const signedPayload = await createJwt( + payload, + { + issuer: createDidPkhUri(solana.chainId, clientSolKeys.publicKey), + signer: ackEd25519JwtSigner + }, + { alg: "EdDSA" } + ) const response = await fetch(receiptServiceUrl, { method: "POST", diff --git a/demos/payments/src/receipt-service.ts b/demos/payments/src/receipt-service.ts index e97cbd4..a47a97b 100644 --- a/demos/payments/src/receipt-service.ts +++ b/demos/payments/src/receipt-service.ts @@ -8,7 +8,10 @@ import { logJson, successMessage } from "@repo/cli-tools" -import { Connection, PublicKey } from "@solana/web3.js" +import { + createSolanaRpc, + signature as toSignature +} from "@solana/kit" import { createPaymentReceipt, getDidResolver, @@ -29,12 +32,10 @@ import { parseEventLogs } from "viem/utils" import { chainId, publicClient, solana, usdcAddress } from "./constants" import { asAddress } from "./utils/as-address" import { getKeypairInfo } from "./utils/keypair-info" -import type { - ParsedInstruction, - ParsedTransactionWithMeta, - PartiallyDecodedInstruction -} from "@solana/web3.js" +import type { Rpc, Signature } from "@solana/kit" +// Types narrowed inline to avoid @solana/web3.js dependency import type { paymentOptionSchema } from "agentcommercekit/schemas/valibot" +import type { GetTransactionApi } from "gill" import type { Env } from "hono" const app = new Hono() @@ -244,6 +245,20 @@ async function verifyOnChainPayment( // Additional checks, like checking txHash block number timestamp occurred after payment_request issued } +function getTransaction(rpc: Rpc, signature: Signature) { + return rpc + .getTransaction(signature, { + commitment: solana.commitment, + encoding: "jsonParsed", + maxSupportedTransactionVersion: 0 as const + }) + .send() +} + +type GetTransactionResult = Awaited> + +const MEMO_PROGRAM_ID = "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr" + async function verifySolanaPayment( _issuer: string, paymentDetails: v.InferOutput, @@ -254,12 +269,19 @@ async function verifySolanaPayment( throw new HTTPException(400, { message: "Invalid network" }) } const signature = paymentDetails.metadata.txHash - const connection = new Connection(solana.rpcUrl, solana.commitment) + const rpc = createSolanaRpc(solana.rpcUrl) log(colors.dim("Loading Solana transaction details...")) - const tx = await connection.getParsedTransaction(signature, { - maxSupportedTransactionVersion: 0, - commitment: solana.commitment - } as never) + // Poll for the transaction to appear; RPC may not have it immediately after send + + let tx: GetTransactionResult | null = null + const maxAttempts = 10 + const delayMs = 1000 + + for (let i = 0; i < maxAttempts; i++) { + tx = await getTransaction(rpc, toSignature(signature)) + if (tx && !tx.meta?.err) break + await new Promise((r) => setTimeout(r, delayMs)) + } if (!tx || tx.meta?.err) { log(errorMessage("Solana transaction not found or failed")) throw new HTTPException(400, { message: "Invalid transaction" }) @@ -270,47 +292,6 @@ async function verifySolanaPayment( .update(paymentDetails.paymentRequestToken) .digest("hex") .toLowerCase() - const MEMO_PROGRAM_ID = "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr" - - function extractMemosFromParsedTx( - txParsed: ParsedTransactionWithMeta - ): string[] { - const memos: string[] = [] - - const scan = (ix: ParsedInstruction | PartiallyDecodedInstruction) => { - // Parsed memo - if ("program" in ix && ix.program === "spl-memo") { - const parsed: unknown = ix.parsed - if (typeof parsed === "string") { - memos.push(parsed) - return - } - const info = (parsed as { info?: { memo?: string } } | undefined)?.info - if (info?.memo) memos.push(String(info.memo)) - return - } - - // Partially decoded memo: data is base-58 - if ("programId" in ix) { - const pid = (ix as PartiallyDecodedInstruction).programId.toBase58() - const data = (ix as PartiallyDecodedInstruction).data - if (pid === MEMO_PROGRAM_ID && typeof data === "string") { - try { - const raw = bs58.decode(data) - memos.push(Buffer.from(raw).toString("utf8")) - } catch { - // ignore malformed memo data - } - } - } - } - - for (const ix of txParsed.transaction.message.instructions) scan(ix) - for (const inner of txParsed.meta?.innerInstructions ?? []) { - for (const ix of inner.instructions) scan(ix) - } - return memos - } const memos = extractMemosFromParsedTx(tx).map((m) => m.trim().toLowerCase()) if (!memos.includes(expectedMemo)) { @@ -319,18 +300,22 @@ async function verifySolanaPayment( } // Validate postTokenBalances reflect the transfer to recipient for the mint - const mint = new PublicKey(solana.usdcMint).toBase58() - const recipient = new PublicKey( + const mint = solana.usdcMint + const recipient = typeof paymentOption.recipient === "string" ? paymentOption.recipient - : (paymentOption.recipient as string) - ).toBase58() + : String(paymentOption.recipient) const dec = paymentOption.decimals const expectedAmount = BigInt(paymentOption.amount) - const post = tx.meta?.postTokenBalances ?? [] - const pre = tx.meta?.preTokenBalances ?? [] + type TokenBalance = { + mint: string + owner: string + uiTokenAmount: { amount: string; decimals: number } + } + const post = (tx.meta?.postTokenBalances ?? []) as unknown as TokenBalance[] + const pre = (tx.meta?.preTokenBalances ?? []) as unknown as TokenBalance[] const preBal = pre.find((b) => b.mint === mint && b.owner === recipient) const postBal = post.find((b) => b.mint === mint && b.owner === recipient) @@ -344,8 +329,14 @@ async function verifySolanaPayment( throw new HTTPException(400, { message: "Invalid token decimals" }) } - const preAmount = BigInt(preBal?.uiTokenAmount.amount ?? "0") - const postAmount = BigInt(postBal.uiTokenAmount.amount) + const toBigInt = (v: unknown): bigint => { + if (typeof v === "string") return BigInt(v) + if (typeof v === "number") return BigInt(v) + if (typeof v === "bigint") return v + return 0n + } + const preAmount = toBigInt(preBal?.uiTokenAmount.amount ?? "0") + const postAmount = toBigInt(postBal.uiTokenAmount.amount) const delta = postAmount - preAmount if (delta !== expectedAmount) { log(errorMessage("Invalid amount")) @@ -353,6 +344,56 @@ async function verifySolanaPayment( } } +function extractMemosFromParsedTx(txParsed: GetTransactionResult): string[] { + const memos: string[] = [] + + if (txParsed === null) return memos + + const scan = (ix: unknown) => { + if (typeof ix !== "object" || ix === null) return + + // Parsed memo + if ( + "program" in ix && + (ix as { program?: unknown }).program === "spl-memo" + ) { + const parsed = (ix as { parsed?: unknown }).parsed + if (typeof parsed === "string") { + memos.push(parsed) + return + } + const info = (parsed as { info?: { memo?: string } } | undefined)?.info + if (info?.memo) memos.push(String(info.memo)) + return + } + + // Partially decoded memo: data is base-58 + if ("programId" in ix) { + const pidField = ( + ix as { + programId: string | { toBase58(): string } + } + ).programId + const pid = typeof pidField === "string" ? pidField : pidField.toBase58() + const data = (ix as { data?: unknown }).data + if (pid === MEMO_PROGRAM_ID && typeof data === "string") { + try { + const raw = bs58.decode(data) + memos.push(Buffer.from(raw).toString("utf8")) + } catch { + // ignore malformed memo data + } + } + } + } + + for (const ix of txParsed.transaction.message.instructions) scan(ix) + for (const inner of txParsed.meta?.innerInstructions ?? []) { + for (const ix of inner.instructions) scan(ix) + } + return memos +} + serve({ port: 4568, fetch: app.fetch diff --git a/demos/payments/src/server.ts b/demos/payments/src/server.ts index ca1c4a8..580f126 100644 --- a/demos/payments/src/server.ts +++ b/demos/payments/src/server.ts @@ -49,11 +49,7 @@ app.get("/", async (c): Promise> => { const didResolver = getDidResolver() // Ensure Solana server keys are present - const getSolanaKeys = ensureSolanaKeys as ( - pubEnv: string, - secretEnv: string - ) => Promise<{ publicKey: string; secretKeyJson: string }> - const solanaKeys = await getSolanaKeys( + const solanaKeys = await ensureSolanaKeys( "SOLANA_SERVER_PUBLIC_KEY", "SOLANA_SERVER_SECRET_KEY_JSON" ) diff --git a/demos/payments/src/utils/ensure-balances.ts b/demos/payments/src/utils/ensure-balances.ts index 932ffe4..4a9460d 100644 --- a/demos/payments/src/utils/ensure-balances.ts +++ b/demos/payments/src/utils/ensure-balances.ts @@ -1,5 +1,5 @@ import { waitForEnter } from "@repo/cli-tools" -import { Connection, PublicKey } from "@solana/web3.js" +import { createSolanaRpc, address as solAddress } from "@solana/kit" import { createPublicClient, erc20Abi, http } from "viem" import { formatUnits } from "viem/utils" import { solana } from "@/constants" @@ -45,25 +45,26 @@ export async function ensureNonZeroBalances( return { balanceUsdc, balanceEth } } -export async function ensureSolanaSolBalance(address: string | PublicKey) { - const pubkey = typeof address === "string" ? new PublicKey(address) : address - const connection = new Connection(solana.rpcUrl, solana.commitment) - let lamports = await connection.getBalance(pubkey, solana.commitment) +export async function ensureSolanaSolBalance(address: string) { + const rpc = createSolanaRpc(solana.rpcUrl) + const pubkey = solAddress(address) + let { value: lamports } = await rpc + .getBalance(pubkey, { commitment: solana.commitment }) + .send() - while (lamports === 0) { - console.log( - "We need to fund this Solana address with devnet SOL:", - pubkey.toBase58() - ) + while (lamports === BigInt(0)) { + console.log("We need to fund this Solana address with devnet SOL:", address) console.log("Faucet: https://faucet.solana.com/") const prefilled = `https://faucet.solana.com/?walletAddress=${encodeURIComponent( - pubkey.toBase58() + address )}&amount=0.5` console.log("Prefilled faucet (0.5 SOL):", prefilled) console.log("Once funded, press enter to check balance again") await waitForEnter() - console.log("Attempting to fetch SOL balance...") - lamports = await connection.getBalance(pubkey, solana.commitment) + console.log("Attempting to fetch SOL balance... " + pubkey) + ;({ value: lamports } = await rpc + .getBalance(pubkey, { commitment: solana.commitment }) + .send()) console.log("SOL balance fetched (lamports):", lamports) } diff --git a/demos/payments/src/utils/ensure-private-keys.ts b/demos/payments/src/utils/ensure-private-keys.ts index 677c164..81836e9 100644 --- a/demos/payments/src/utils/ensure-private-keys.ts +++ b/demos/payments/src/utils/ensure-private-keys.ts @@ -1,7 +1,7 @@ import { colors, log, updateEnvFile } from "@repo/cli-tools" +import { getAddressFromPublicKey } from "@solana/addresses" import { envFilePath } from "@/constants" import { generatePrivateKeyHex } from "./keypair-info" -import { Keypair } from "@solana/web3.js" export async function ensurePrivateKey(name: string) { const privateKeyHex = process.env[name] @@ -26,9 +26,31 @@ export async function ensureSolanaKeys( return { publicKey: existingPub, secretKeyJson: existingSecret } } log(colors.dim(`Generating ${pubEnv}/${secretEnv}...`)) - const kp = Keypair.generate() - const publicKey = kp.publicKey.toBase58() - const secretKeyJson = JSON.stringify(Array.from(kp.secretKey)) + const kp = await crypto.subtle.generateKey("Ed25519", true, [ + "sign", + "verify" + ]) + + const privateKeyJwk = await crypto.subtle.exportKey("jwk", kp.privateKey) + const privateKeyBase64 = privateKeyJwk.d + if (!privateKeyBase64) throw new Error("Failed to get private key bytes") + + const privateKeyBytes = new Uint8Array( + Buffer.from(privateKeyBase64, "base64") + ) + // Export raw 32-byte public key from SPKI (last 32 bytes of the DER-encoded key) + const publicKeySpki = await crypto.subtle.exportKey("spki", kp.publicKey) + const publicKeyBytes = new Uint8Array(publicKeySpki).slice(-32) + // Concatenate 32-byte private key + 32-byte public key => 64-byte secret key + const secretKey64 = new Uint8Array( + privateKeyBytes.length + publicKeyBytes.length + ) + secretKey64.set(privateKeyBytes, 0) + secretKey64.set(publicKeyBytes, privateKeyBytes.length) + const secretKeyJson = JSON.stringify(Array.from(secretKey64)) + + const publicKey = await getAddressFromPublicKey(kp.publicKey) + await updateEnvFile( { [pubEnv]: publicKey, [secretEnv]: secretKeyJson }, envFilePath diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d8034fd..d71a513 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,16 +19,16 @@ importers: version: link:tools/typescript-config prettier: specifier: ^3.5.3 - version: 3.5.3 + version: 3.6.2 prettier-plugin-packagejson: specifier: ^2.5.14 - version: 2.5.14(prettier@3.5.3) + version: 2.5.14(prettier@3.6.2) turbo: specifier: ^2.5.3 version: 2.5.3 typescript: specifier: ^5 - version: 5.8.3 + version: 5.9.3 demos/e2e: dependencies: @@ -40,10 +40,10 @@ importers: version: link:../../packages/agentcommercekit valibot: specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + version: 1.1.0(typescript@5.9.3) viem: specifier: ^2.29.4 - version: 2.29.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.4) + version: 2.29.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.4) devDependencies: '@repo/eslint-config': specifier: workspace:* @@ -53,16 +53,16 @@ importers: version: link:../../tools/typescript-config eslint: specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + version: 9.36.0(jiti@2.6.1) tsx: specifier: ^4.19.4 version: 4.20.3 typescript: specifier: ^5 - version: 5.8.3 + version: 5.9.3 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.6.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) demos/identity: dependencies: @@ -74,13 +74,13 @@ importers: version: 1.3.22(zod@3.25.4) '@ai-sdk/valibot': specifier: ^0.1.28 - version: 0.1.28(@valibot/to-json-schema@1.0.0(valibot@1.1.0(typescript@5.8.3)))(react@19.1.0)(valibot@1.1.0(typescript@5.8.3))(zod@3.25.4) + version: 0.1.28(@valibot/to-json-schema@1.0.0(valibot@1.1.0(typescript@5.9.3)))(react@19.1.1)(valibot@1.1.0(typescript@5.9.3))(zod@3.25.4) '@hono/node-server': specifier: ^1.14.2 version: 1.14.2(hono@4.7.10) '@hono/valibot-validator': specifier: ^0.5.2 - version: 0.5.2(hono@4.7.10)(valibot@1.1.0(typescript@5.8.3)) + version: 0.5.2(hono@4.7.10)(valibot@1.1.0(typescript@5.9.3)) '@repo/api-utils': specifier: workspace:* version: link:../../tools/api-utils @@ -92,13 +92,13 @@ importers: version: link:../../packages/agentcommercekit ai: specifier: ^4.3.16 - version: 4.3.16(react@19.1.0)(zod@3.25.4) + version: 4.3.16(react@19.1.1)(zod@3.25.4) hono: specifier: ^4.7.10 version: 4.7.10 valibot: specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + version: 1.1.0(typescript@5.9.3) devDependencies: '@repo/eslint-config': specifier: workspace:* @@ -114,16 +114,16 @@ importers: version: 8.0.0 eslint: specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + version: 9.36.0(jiti@2.6.1) tsx: specifier: ^4.19.4 version: 4.20.3 typescript: specifier: ^5 - version: 5.8.3 + version: 5.9.3 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) demos/identity-a2a: dependencies: @@ -150,7 +150,7 @@ importers: version: 11.1.0 valibot: specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + version: 1.1.0(typescript@5.9.3) devDependencies: '@repo/eslint-config': specifier: workspace:* @@ -166,16 +166,16 @@ importers: version: 22.15.19 eslint: specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + version: 9.36.0(jiti@2.6.1) tsx: specifier: ^4.19.4 version: 4.20.3 typescript: specifier: ^5 - version: 5.8.3 + version: 5.9.3 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) demos/payments: dependencies: @@ -188,30 +188,39 @@ importers: '@repo/cli-tools': specifier: workspace:* version: link:../../tools/cli-tools - '@solana/spl-memo': - specifier: ^0.2.5 - version: 0.2.5(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) - '@solana/spl-token': - specifier: ^0.4.14 - version: 0.4.14(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@solana/web3.js': - specifier: ^1.98.4 - version: 1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@solana-program/system': + specifier: ^0.9.0 + version: 0.9.0(@solana/kit@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@solana-program/token': + specifier: ^0.6.0 + version: 0.6.0(@solana/kit@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@solana/addresses': + specifier: ^4.0.0 + version: 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/keys': + specifier: ^4.0.0 + version: 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/kit': + specifier: ^4.0.0 + version: 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) agentcommercekit: specifier: workspace:* version: link:../../packages/agentcommercekit bs58: specifier: ^6.0.0 version: 6.0.0 + gill: + specifier: ^0.12.0 + version: 0.12.0(@solana/sysvars@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) hono: specifier: ^4.7.10 version: 4.7.10 valibot: specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + version: 1.1.0(typescript@5.9.3) viem: specifier: ^2.29.4 - version: 2.29.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.4) + version: 2.29.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.4) devDependencies: '@repo/eslint-config': specifier: workspace:* @@ -227,16 +236,16 @@ importers: version: 8.0.0 eslint: specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + version: 9.36.0(jiti@2.6.1) tsx: specifier: ^4.19.4 version: 4.20.3 typescript: specifier: ^5 - version: 5.8.3 + version: 5.9.3 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) demos/skyfire-kya: dependencies: @@ -261,22 +270,22 @@ importers: version: link:../../tools/typescript-config eslint: specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + version: 9.36.0(jiti@2.6.1) tsx: specifier: ^4.19.4 version: 4.20.3 typescript: specifier: ^5 - version: 5.8.3 + version: 5.9.3 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.6.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) docs: devDependencies: mintlify: specifier: ^4.0.538 - version: 4.0.538(@types/node@22.15.19)(@types/react@19.1.4)(bufferutil@4.0.9)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + version: 4.0.538(@types/node@24.6.1)(@types/react@19.1.16)(bufferutil@4.0.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.3)(utf-8-validate@5.0.10) examples/issuer: dependencies: @@ -303,7 +312,7 @@ importers: version: 4.7.10 valibot: specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + version: 1.1.0(typescript@5.9.3) devDependencies: '@repo/eslint-config': specifier: workspace:^ @@ -325,16 +334,16 @@ importers: version: 0.31.1 eslint: specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + version: 9.36.0(jiti@2.6.1) tsx: specifier: ^4.19.4 version: 4.20.3 vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0)) + version: 5.1.4(typescript@5.9.3)(vite@6.2.5(@types/node@22.15.19)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0)) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) examples/local-did-host: dependencies: @@ -352,7 +361,7 @@ importers: version: 1.14.2(hono@4.7.10) '@hono/valibot-validator': specifier: ^0.5.2 - version: 0.5.2(hono@4.7.10)(valibot@1.1.0(typescript@5.8.3)) + version: 0.5.2(hono@4.7.10)(valibot@1.1.0(typescript@5.9.3)) '@repo/api-utils': specifier: workspace:* version: link:../../tools/api-utils @@ -361,7 +370,7 @@ importers: version: 4.7.10 valibot: specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + version: 1.1.0(typescript@5.9.3) devDependencies: '@repo/eslint-config': specifier: workspace:^ @@ -374,13 +383,13 @@ importers: version: 8.0.0 eslint: specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + version: 9.36.0(jiti@2.6.1) tsx: specifier: ^4.19.4 version: 4.20.3 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.6.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) examples/verifier: dependencies: @@ -389,7 +398,7 @@ importers: version: 1.14.2(hono@4.7.10) '@hono/valibot-validator': specifier: ^0.5.2 - version: 0.5.2(hono@4.7.10)(valibot@1.1.0(typescript@5.8.3)) + version: 0.5.2(hono@4.7.10)(valibot@1.1.0(typescript@5.9.3)) '@repo/api-utils': specifier: workspace:* version: link:../../tools/api-utils @@ -401,7 +410,7 @@ importers: version: 4.7.10 valibot: specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + version: 1.1.0(typescript@5.9.3) devDependencies: '@repo/eslint-config': specifier: workspace:^ @@ -414,13 +423,13 @@ importers: version: 8.0.0 eslint: specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + version: 9.36.0(jiti@2.6.1) tsx: specifier: ^4.19.4 version: 4.20.3 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.6.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) packages/ack-id: dependencies: @@ -444,7 +453,7 @@ importers: version: 11.1.0 valibot: specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + version: 1.1.0(typescript@5.9.3) devDependencies: '@a2a-js/sdk': specifier: ^0.2.2 @@ -457,16 +466,16 @@ importers: version: link:../../tools/typescript-config eslint: specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + version: 9.36.0(jiti@2.6.1) tsdown: specifier: ^0.11.12 - version: 0.11.12(typescript@5.8.3) + version: 0.11.12(typescript@5.9.3) typescript: specifier: ^5 - version: 5.8.3 + version: 5.9.3 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.6.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) zod: specifier: ^3.25.0 version: 3.25.4 @@ -487,7 +496,7 @@ importers: version: link:../vc valibot: specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + version: 1.1.0(typescript@5.9.3) devDependencies: '@repo/eslint-config': specifier: workspace:* @@ -497,16 +506,16 @@ importers: version: link:../../tools/typescript-config eslint: specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + version: 9.36.0(jiti@2.6.1) tsdown: specifier: ^0.11.12 - version: 0.11.12(typescript@5.8.3) + version: 0.11.12(typescript@5.9.3) typescript: specifier: ^5 - version: 5.8.3 + version: 5.9.3 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.6.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) zod: specifier: ^3.25.0 version: 3.25.4 @@ -546,19 +555,19 @@ importers: version: link:../../tools/typescript-config eslint: specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + version: 9.36.0(jiti@2.6.1) tsdown: specifier: ^0.11.12 - version: 0.11.12(typescript@5.8.3) + version: 0.11.12(typescript@5.9.3) typescript: specifier: ^5 - version: 5.8.3 + version: 5.9.3 valibot: specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + version: 1.1.0(typescript@5.9.3) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.6.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) zod: specifier: ^3.25.0 version: 3.25.4 @@ -573,22 +582,22 @@ importers: version: link:../../tools/typescript-config eslint: specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + version: 9.36.0(jiti@2.6.1) standard-parse: specifier: ^0.3.0 - version: 0.3.0(valibot@1.1.0(typescript@5.8.3))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0))(zod@3.25.4) + version: 0.3.0(valibot@1.1.0(typescript@5.9.3))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.6.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0))(zod@3.25.4) tsdown: specifier: ^0.11.12 - version: 0.11.12(typescript@5.8.3) + version: 0.11.12(typescript@5.9.3) typescript: specifier: ^5 - version: 5.8.3 + version: 5.9.3 valibot: specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + version: 1.1.0(typescript@5.9.3) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.6.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) zod: specifier: ^3.25.0 version: 3.25.4 @@ -606,13 +615,13 @@ importers: version: 4.1.0 jwks-did-resolver: specifier: ^0.3.0 - version: 0.3.0(typescript@5.8.3)(zod@3.25.4) + version: 0.3.0(typescript@5.9.3)(zod@3.25.4) key-did-resolver: specifier: ^4.0.0 version: 4.0.0 valibot: specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + version: 1.1.0(typescript@5.9.3) varint: specifier: ^6.0.0 version: 6.0.0 @@ -628,19 +637,19 @@ importers: version: 6.0.3 eslint: specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + version: 9.36.0(jiti@2.6.1) standard-parse: specifier: ^0.3.0 - version: 0.3.0(valibot@1.1.0(typescript@5.8.3))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0))(zod@3.25.4) + version: 0.3.0(valibot@1.1.0(typescript@5.9.3))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.6.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0))(zod@3.25.4) tsdown: specifier: ^0.11.12 - version: 0.11.12(typescript@5.8.3) + version: 0.11.12(typescript@5.9.3) typescript: specifier: ^5 - version: 5.8.3 + version: 5.9.3 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.6.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) zod: specifier: ^3.25.0 version: 3.25.4 @@ -662,19 +671,19 @@ importers: version: link:../../tools/typescript-config eslint: specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + version: 9.36.0(jiti@2.6.1) tsdown: specifier: ^0.11.12 - version: 0.11.12(typescript@5.8.3) + version: 0.11.12(typescript@5.9.3) typescript: specifier: ^5 - version: 5.8.3 + version: 5.9.3 valibot: specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + version: 1.1.0(typescript@5.9.3) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.6.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) zod: specifier: ^3.25.0 version: 3.25.4 @@ -686,7 +695,7 @@ importers: version: 1.9.1 '@solana/codecs-strings': specifier: ^2.1.1 - version: 2.1.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + version: 2.1.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) multiformats: specifier: ^13.3.4 version: 13.3.4 @@ -702,16 +711,16 @@ importers: version: link:../../tools/typescript-config eslint: specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + version: 9.36.0(jiti@2.6.1) tsdown: specifier: ^0.11.12 - version: 0.11.12(typescript@5.8.3) + version: 0.11.12(typescript@5.9.3) typescript: specifier: ^5 - version: 5.8.3 + version: 5.9.3 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.6.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) packages/vc: dependencies: @@ -732,7 +741,7 @@ importers: version: 4.0.13 valibot: specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + version: 1.1.0(typescript@5.9.3) devDependencies: '@repo/eslint-config': specifier: workspace:* @@ -742,16 +751,16 @@ importers: version: link:../../tools/typescript-config eslint: specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + version: 9.36.0(jiti@2.6.1) tsdown: specifier: ^0.11.12 - version: 0.11.12(typescript@5.8.3) + version: 0.11.12(typescript@5.9.3) typescript: specifier: ^5 - version: 5.8.3 + version: 5.9.3 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.6.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) zod: specifier: ^3.25.0 version: 3.25.4 @@ -778,7 +787,7 @@ importers: version: 4.7.10 valibot: specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + version: 1.1.0(typescript@5.9.3) devDependencies: '@repo/eslint-config': specifier: workspace:* @@ -788,13 +797,13 @@ importers: version: link:../typescript-config eslint: specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + version: 9.36.0(jiti@2.6.1) typescript: specifier: ^5 - version: 5.8.3 + version: 5.9.3 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.6.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) tools/cli-tools: dependencies: @@ -828,22 +837,22 @@ importers: version: 22.15.19 eslint: specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + version: 9.36.0(jiti@2.6.1) typescript: specifier: ^5 - version: 5.8.3 + version: 5.9.3 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) tools/eslint-config: devDependencies: '@cspell/eslint-plugin': specifier: ^9.0.1 - version: 9.0.1(eslint@9.27.0(jiti@2.4.2)) + version: 9.0.1(eslint@9.36.0(jiti@2.6.1)) '@eslint/js': specifier: ^9.27.0 - version: 9.27.0 + version: 9.36.0 '@eslint/json': specifier: ^0.12.0 version: 0.12.0 @@ -852,25 +861,25 @@ importers: version: 6.4.0 eslint: specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + version: 9.36.0(jiti@2.6.1) eslint-config-prettier: specifier: ^10.1.5 - version: 10.1.5(eslint@9.27.0(jiti@2.4.2)) + version: 10.1.5(eslint@9.36.0(jiti@2.6.1)) eslint-import-resolver-typescript: specifier: ^4.3.5 - version: 4.3.5(eslint-plugin-import-x@4.12.2(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2)) + version: 4.3.5(eslint-plugin-import-x@4.12.2(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import@2.32.0)(eslint@9.36.0(jiti@2.6.1)) eslint-plugin-import-x: specifier: ^4.12.2 - version: 4.12.2(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + version: 4.12.2(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) eslint-plugin-turbo: specifier: ^2.5.3 - version: 2.5.3(eslint@9.27.0(jiti@2.4.2))(turbo@2.5.3) + version: 2.5.3(eslint@9.36.0(jiti@2.6.1))(turbo@2.5.3) typescript: specifier: ^5 - version: 5.8.3 + version: 5.9.3 typescript-eslint: specifier: ^8.32.1 - version: 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + version: 8.32.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) tools/typescript-config: {} @@ -1550,8 +1559,8 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.7.0': - resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} + '@eslint-community/eslint-utils@4.9.0': + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 @@ -1560,12 +1569,12 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.20.0': - resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} + '@eslint/config-array@0.21.0': + resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.2.1': - resolution: {integrity: sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==} + '@eslint/config-helpers@0.3.1': + resolution: {integrity: sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/core@0.10.0': @@ -1580,16 +1589,16 @@ packages: resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.14.0': - resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} + '@eslint/core@0.15.2': + resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.27.0': - resolution: {integrity: sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==} + '@eslint/js@9.36.0': + resolution: {integrity: sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/json@0.12.0': @@ -1608,8 +1617,8 @@ packages: resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.3.1': - resolution: {integrity: sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==} + '@eslint/plugin-kit@0.3.5': + resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@hono/node-server@1.14.2': @@ -1874,6 +1883,9 @@ packages: '@types/node': optional: true + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + '@jridgewell/gen-mapping@0.3.8': resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} @@ -1886,12 +1898,21 @@ packages: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} + '@jridgewell/source-map@0.3.11': + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} + '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@jsep-plugin/assignment@1.3.0': resolution: {integrity: sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==} engines: {node: '>= 10.16.0'} @@ -2200,6 +2221,9 @@ packages: cpu: [x64] os: [win32] + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + '@scure/base@1.2.4': resolution: {integrity: sha512-5Yy9czTO47mqz+/J8GM6GIId4umdCk1wc1q8rKERQulIoc8VP9pzDcghv10Tl2E7R96ZUx/PhND3ESYUQX8NuQ==} @@ -2224,18 +2248,72 @@ packages: '@socket.io/component-emitter@3.1.2': resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} - '@solana/buffer-layout-utils@0.2.0': - resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} - engines: {node: '>= 10'} + '@solana-program/address-lookup-table@0.7.0': + resolution: {integrity: sha512-dzCeIO5LtiK3bIg0AwO+TPeGURjSG2BKt0c4FRx7105AgLy7uzTktpUzUj6NXAK9SzbirI8HyvHUvw1uvL8O9A==} + peerDependencies: + '@solana/kit': ^2.1.0 + + '@solana-program/compute-budget@0.8.0': + resolution: {integrity: sha512-qPKxdxaEsFxebZ4K5RPuy7VQIm/tfJLa1+Nlt3KNA8EYQkz9Xm8htdoEaXVrer9kpgzzp9R3I3Bh6omwCM06tQ==} + peerDependencies: + '@solana/kit': ^2.1.0 - '@solana/buffer-layout@4.0.1': - resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} - engines: {node: '>=5.10'} + '@solana-program/system@0.7.0': + resolution: {integrity: sha512-FKTBsKHpvHHNc1ATRm7SlC5nF/VdJtOSjldhcyfMN9R7xo712Mo2jHIzvBgn8zQO5Kg0DcWuKB7268Kv1ocicw==} + peerDependencies: + '@solana/kit': ^2.1.0 - '@solana/codecs-core@2.0.0-rc.1': - resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} + '@solana-program/system@0.9.0': + resolution: {integrity: sha512-yu+i0SZ+c+0E9Cy+btoMiCbxRnP/FLQuv/Ba8l2klZApAiOX1Ja/2IGkctFV36fglsI7PwD9czkSkHm8og+QeA==} peerDependencies: - typescript: '>=5' + '@solana/kit': ^4.0 + + '@solana-program/token-2022@0.4.2': + resolution: {integrity: sha512-zIpR5t4s9qEU3hZKupzIBxJ6nUV5/UVyIT400tu9vT1HMs5JHxaTTsb5GUhYjiiTvNwU0MQavbwc4Dl29L0Xvw==} + peerDependencies: + '@solana/kit': ^2.1.0 + '@solana/sysvars': ^2.1.0 + + '@solana-program/token@0.6.0': + resolution: {integrity: sha512-omkZh4Tt9rre4wzWHNOhOEHyenXQku3xyc/UrKvShexA/Qlhza67q7uRwmwEDUs4QqoDBidSZPooOmepnA/jig==} + peerDependencies: + '@solana/kit': ^3.0 + + '@solana/accounts@2.3.0': + resolution: {integrity: sha512-QgQTj404Z6PXNOyzaOpSzjgMOuGwG8vC66jSDB+3zHaRcEPRVRd2sVSrd1U6sHtnV3aiaS6YyDuPQMheg4K2jw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/accounts@4.0.0': + resolution: {integrity: sha512-fxTtTk7PCJrigdzqhkc0eZYACVZpONKJZy4MkGvZzx5tCC7rUeDJvzau3IYACUCRaaAGPpkINHwYtp8weKsn8w==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/addresses@2.3.0': + resolution: {integrity: sha512-ypTNkY2ZaRFpHLnHAgaW8a83N0/WoqdFvCqf4CQmnMdFsZSdC7qOwcbd7YzdaQn9dy+P2hybewzB+KP7LutxGA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/addresses@4.0.0': + resolution: {integrity: sha512-1OS4nU0HFZxHRxgUb6A72Qg0QbIz6Vu2AbB0j/YSxN4EI+S2BftA83Y6uXhTFDQjKuA+MtHjxe6edB3cs1Pqxw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/assertions@2.3.0': + resolution: {integrity: sha512-Ekoet3khNg3XFLN7MIz8W31wPQISpKUGDGTylLptI+JjCDWx3PIa88xjEMqFo02WJ8sBj2NLV64Xg1sBcsHjZQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/assertions@4.0.0': + resolution: {integrity: sha512-QwtImPVM5JLEWOFpvHh+eKdvmxdNP6PW8FkmFFEVYR6VFDaZD/hbmSJlwt5p3L69sVmxJA0ughYgD/kkHM7fbg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' '@solana/codecs-core@2.1.1': resolution: {integrity: sha512-iPQW3UZ2Vi7QFBo2r9tw0NubtH8EdrhhmZulx6lC8V5a+qjaxovtM/q/UW2BTNpqqHLfO0tIcLyBLrNH4HTWPg==} @@ -2243,15 +2321,29 @@ packages: peerDependencies: typescript: '>=5.3.3' - '@solana/codecs-data-structures@2.0.0-rc.1': - resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} + '@solana/codecs-core@2.3.0': + resolution: {integrity: sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw==} + engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5' + typescript: '>=5.3.3' - '@solana/codecs-numbers@2.0.0-rc.1': - resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} + '@solana/codecs-core@4.0.0': + resolution: {integrity: sha512-28kNUsyIlhU3MO3/7ZLDqeJf2YAm32B4tnTjl5A9HrbBqsTZ+upT/RzxZGP1MMm7jnPuIKCMwmTpsyqyR6IUpw==} + engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5' + typescript: '>=5.3.3' + + '@solana/codecs-data-structures@2.3.0': + resolution: {integrity: sha512-qvU5LE5DqEdYMYgELRHv+HMOx73sSoV1ZZkwIrclwUmwTbTaH8QAJURBj0RhQ/zCne7VuLLOZFFGv6jGigWhSw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-data-structures@4.0.0': + resolution: {integrity: sha512-pvh+Oxz6UIbWxcgwvVwMJIV4nvZn3EHL5ZvCIPClE5Ep8K5sJ8RoRvOohqLcIv9LYn/EZNoXpCodREX/OYpsGw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' '@solana/codecs-numbers@2.1.1': resolution: {integrity: sha512-m20IUPJhPUmPkHSlZ2iMAjJ7PaYUvlMtFhCQYzm9BEBSI6OCvXTG3GAPpAnSGRBfg5y+QNqqmKn4QHU3B6zzCQ==} @@ -2259,11 +2351,17 @@ packages: peerDependencies: typescript: '>=5.3.3' - '@solana/codecs-strings@2.0.0-rc.1': - resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} + '@solana/codecs-numbers@2.3.0': + resolution: {integrity: sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==} + engines: {node: '>=20.18.0'} peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 - typescript: '>=5' + typescript: '>=5.3.3' + + '@solana/codecs-numbers@4.0.0': + resolution: {integrity: sha512-z9zpjtcwzqT9rbkKVZpkWB5/0V7+6YRKs6BccHkGJlaDx8Pe/+XOvPi2rEdXPqrPd9QWb5Xp1iBfcgaDMyiOiA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' '@solana/codecs-strings@2.1.1': resolution: {integrity: sha512-uhj+A7eT6IJn4nuoX8jDdvZa7pjyZyN+k64EZ8+aUtJGt5Ft4NjRM8Jl5LljwYBWKQCgouVuigZHtTO2yAWExA==} @@ -2272,16 +2370,31 @@ packages: fastestsmallesttextencoderdecoder: ^1.0.22 typescript: '>=5.3.3' - '@solana/codecs@2.0.0-rc.1': - resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} + '@solana/codecs-strings@2.3.0': + resolution: {integrity: sha512-y5pSBYwzVziXu521hh+VxqUtp0hYGTl1eWGoc1W+8mdvBdC1kTqm/X7aYQw33J42hw03JjryvYOvmGgk3Qz/Ug==} + engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5' + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: '>=5.3.3' - '@solana/errors@2.0.0-rc.1': - resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} - hasBin: true + '@solana/codecs-strings@4.0.0': + resolution: {integrity: sha512-XvyD+sQ1zyA0amfxbpoFZsucLoe+yASQtDiLUGMDg5TZ82IHE3B7n82jE8d8cTAqi0HgqQiwU13snPhvg1O0Ow==} + engines: {node: '>=20.18.0'} peerDependencies: - typescript: '>=5' + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: '>=5.3.3' + + '@solana/codecs@2.3.0': + resolution: {integrity: sha512-JVqGPkzoeyU262hJGdH64kNLH0M+Oew2CIPOa/9tR3++q2pEd4jU2Rxdfye9sd0Ce3XJrR5AIa8ZfbyQXzjh+g==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs@4.0.0': + resolution: {integrity: sha512-qh+Le1u9QBDPubqUrFU5BGX3Kyj7x0viO6z2SUuM0CSqYUvwE7w724LXwDA9QoEL5JkED1rB3bQg4M0bDrABpA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' '@solana/errors@2.1.1': resolution: {integrity: sha512-sj6DaWNbSJFvLzT8UZoabMefQUfSW/8tXK7NTiagsDmh+Q87eyQDDC9L3z+mNmx9b6dEf6z660MOIplDD2nfEw==} @@ -2290,142 +2403,453 @@ packages: peerDependencies: typescript: '>=5.3.3' - '@solana/options@2.0.0-rc.1': - resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} + '@solana/errors@2.3.0': + resolution: {integrity: sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==} + engines: {node: '>=20.18.0'} + hasBin: true peerDependencies: - typescript: '>=5' + typescript: '>=5.3.3' - '@solana/spl-memo@0.2.5': - resolution: {integrity: sha512-0Zx5t3gAdcHlRTt2O3RgGlni1x7vV7Xq7j4z9q8kKOMgU03PyoTbFQ/BSYCcICHzkaqD7ZxAiaJ6dlXolg01oA==} - engines: {node: '>=16'} + '@solana/errors@4.0.0': + resolution: {integrity: sha512-3YEtvcMvtcnTl4HahqLt0VnaGVf7vVWOnt6/uPky5e0qV6BlxDSbGkbBzttNjxLXHognV0AQi3pjvrtfUnZmbg==} + engines: {node: '>=20.18.0'} + hasBin: true peerDependencies: - '@solana/web3.js': ^1.91.6 + typescript: '>=5.3.3' - '@solana/spl-token-group@0.0.7': - resolution: {integrity: sha512-V1N/iX7Cr7H0uazWUT2uk27TMqlqedpXHRqqAbVO2gvmJyT0E0ummMEAVQeXZ05ZhQ/xF39DLSdBp90XebWEug==} - engines: {node: '>=16'} + '@solana/fast-stable-stringify@2.3.0': + resolution: {integrity: sha512-KfJPrMEieUg6D3hfQACoPy0ukrAV8Kio883llt/8chPEG3FVTX9z/Zuf4O01a15xZmBbmQ7toil2Dp0sxMJSxw==} + engines: {node: '>=20.18.0'} peerDependencies: - '@solana/web3.js': ^1.95.3 + typescript: '>=5.3.3' - '@solana/spl-token-metadata@0.1.6': - resolution: {integrity: sha512-7sMt1rsm/zQOQcUWllQX9mD2O6KhSAtY1hFR2hfFwgqfFWzSY9E9GDvFVNYUI1F0iQKcm6HmePU9QbKRXTEBiA==} - engines: {node: '>=16'} + '@solana/fast-stable-stringify@4.0.0': + resolution: {integrity: sha512-sNJRi0RQ93vkGQ9VyFTSGm6mfKLk0FWOFpJLcqyP0BNUK1CugBaUMnxAmGqNaVSCktJagTSLqAMi9k1VSdh+Cg==} + engines: {node: '>=20.18.0'} peerDependencies: - '@solana/web3.js': ^1.95.3 + typescript: '>=5.3.3' - '@solana/spl-token@0.4.14': - resolution: {integrity: sha512-u09zr96UBpX4U685MnvQsNzlvw9TiY005hk1vJmJr7gMJldoPG1eYU5/wNEyOA5lkMLiR/gOi9SFD4MefOYEsA==} - engines: {node: '>=16'} + '@solana/functional@2.3.0': + resolution: {integrity: sha512-AgsPh3W3tE+nK3eEw/W9qiSfTGwLYEvl0rWaxHht/lRcuDVwfKRzeSa5G79eioWFFqr+pTtoCr3D3OLkwKz02Q==} + engines: {node: '>=20.18.0'} peerDependencies: - '@solana/web3.js': ^1.95.5 - - '@solana/web3.js@1.98.4': - resolution: {integrity: sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw==} + typescript: '>=5.3.3' - '@standard-schema/spec@1.0.0': - resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + '@solana/functional@4.0.0': + resolution: {integrity: sha512-duprxASuT0VXlHj3bLBdy9+ZpqdmCZhzCUmTsXps4UlDKr9PxSCQIQ+NK6OPhtBWOh1sNEcT1f1nY/MVqF/KHg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' - '@stoplight/better-ajv-errors@1.0.3': - resolution: {integrity: sha512-0p9uXkuB22qGdNfy3VeEhxkU5uwvp/KrBTAbrLBURv6ilxIVwanKwjMc41lQfIVgPGcOkmLbTolfFrSsueu7zA==} - engines: {node: ^12.20 || >= 14.13} + '@solana/instruction-plans@4.0.0': + resolution: {integrity: sha512-FcyptPR5XmKoj1EyF9xARiqy2BuF+CfrIxTU0WQn5Tix/y7whKYz5CCFtBlWbwIcGxQftmG5tAlcidgnCb7jVw==} + engines: {node: '>=20.18.0'} peerDependencies: - ajv: '>=8' + typescript: '>=5.3.3' - '@stoplight/json-ref-readers@1.2.2': - resolution: {integrity: sha512-nty0tHUq2f1IKuFYsLM4CXLZGHdMn+X/IwEUIpeSOXt0QjMUbL0Em57iJUDzz+2MkWG83smIigNZ3fauGjqgdQ==} - engines: {node: '>=8.3.0'} + '@solana/instructions@2.3.0': + resolution: {integrity: sha512-PLMsmaIKu7hEAzyElrk2T7JJx4D+9eRwebhFZpy2PXziNSmFF929eRHKUsKqBFM3cYR1Yy3m6roBZfA+bGE/oQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' - '@stoplight/json-ref-resolver@3.1.6': - resolution: {integrity: sha512-YNcWv3R3n3U6iQYBsFOiWSuRGE5su1tJSiX6pAPRVk7dP0L7lqCteXGzuVRQ0gMZqUl8v1P0+fAKxF6PLo9B5A==} - engines: {node: '>=8.3.0'} + '@solana/instructions@4.0.0': + resolution: {integrity: sha512-/Lf3E+6mhe6EL7a3+9FY020yq71lVNgueplJGr221b4wP6ykwPVtoaAiNf+lIrRRYkW8DC81auhmjd2DYpND1w==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' - '@stoplight/json@3.21.0': - resolution: {integrity: sha512-5O0apqJ/t4sIevXCO3SBN9AHCEKKR/Zb4gaj7wYe5863jme9g02Q0n/GhM7ZCALkL+vGPTe4ZzTETP8TFtsw3g==} - engines: {node: '>=8.3.0'} + '@solana/keys@2.3.0': + resolution: {integrity: sha512-ZVVdga79pNH+2pVcm6fr2sWz9HTwfopDVhYb0Lh3dh+WBmJjwkabXEIHey2rUES7NjFa/G7sV8lrUn/v8LDCCQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' - '@stoplight/ordered-object-literal@1.0.5': - resolution: {integrity: sha512-COTiuCU5bgMUtbIFBuyyh2/yVVzlr5Om0v5utQDgBCuQUOPgU1DwoffkTfg4UBQOvByi5foF4w4T+H9CoRe5wg==} - engines: {node: '>=8'} + '@solana/keys@4.0.0': + resolution: {integrity: sha512-aPz+LF9QK3EHjuklYBnnalcLVHUNz5s4m4DXNVGAtjJD7Q9zEu2dBUm9mRKwlLbQibNOEGa1m86HCjcboqXdjg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' - '@stoplight/path@1.3.2': - resolution: {integrity: sha512-lyIc6JUlUA8Ve5ELywPC8I2Sdnh1zc1zmbYgVarhXIp9YeAB0ReeqmGEOWNtlHkbP2DAA1AL65Wfn2ncjK/jtQ==} - engines: {node: '>=8'} + '@solana/kit@2.3.0': + resolution: {integrity: sha512-sb6PgwoW2LjE5oTFu4lhlS/cGt/NB3YrShEyx7JgWFWysfgLdJnhwWThgwy/4HjNsmtMrQGWVls0yVBHcMvlMQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' - '@stoplight/spectral-core@1.20.0': - resolution: {integrity: sha512-5hBP81nCC1zn1hJXL/uxPNRKNcB+/pEIHgCjPRpl/w/qy9yC9ver04tw1W0l/PMiv0UeB5dYgozXVQ4j5a6QQQ==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} + '@solana/kit@4.0.0': + resolution: {integrity: sha512-5c4qMRL+ciWewEtNZ2gX4wf4VpscZYXbWnU2kBiyQhWiqj8zzFIh6iCHbqMX/Myx3pOHfQs/m/iQCnQHPOag9Q==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' - '@stoplight/spectral-formats@1.8.2': - resolution: {integrity: sha512-c06HB+rOKfe7tuxg0IdKDEA5XnjL2vrn/m/OVIIxtINtBzphZrOgtRn7epQ5bQF5SWp84Ue7UJWaGgDwVngMFw==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} + '@solana/nominal-types@2.3.0': + resolution: {integrity: sha512-uKlMnlP4PWW5UTXlhKM8lcgIaNj8dvd8xO4Y9l+FVvh9RvW2TO0GwUO6JCo7JBzCB0PSqRJdWWaQ8pu1Ti/OkA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' - '@stoplight/spectral-functions@1.10.1': - resolution: {integrity: sha512-obu8ZfoHxELOapfGsCJixKZXZcffjg+lSoNuttpmUFuDzVLT3VmH8QkPXfOGOL5Pz80BR35ClNAToDkdnYIURg==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} + '@solana/nominal-types@4.0.0': + resolution: {integrity: sha512-zIjHZY+5uboigbzsNhHmF3AlP/xACYxbB0Cb1VAI9i+eFShMeu/3VIrj7x1vbq9hfQKGSFHNFGFqQTivdzpbLw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' - '@stoplight/spectral-parsers@1.0.5': - resolution: {integrity: sha512-ANDTp2IHWGvsQDAY85/jQi9ZrF4mRrA5bciNHX+PUxPr4DwS6iv4h+FVWJMVwcEYdpyoIdyL+SRmHdJfQEPmwQ==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} + '@solana/options@2.3.0': + resolution: {integrity: sha512-PPnnZBRCWWoZQ11exPxf//DRzN2C6AoFsDI/u2AsQfYih434/7Kp4XLpfOMT/XESi+gdBMFNNfbES5zg3wAIkw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' - '@stoplight/spectral-ref-resolver@1.0.5': - resolution: {integrity: sha512-gj3TieX5a9zMW29z3mBlAtDOCgN3GEc1VgZnCVlr5irmR4Qi5LuECuFItAq4pTn5Zu+sW5bqutsCH7D4PkpyAA==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} + '@solana/options@4.0.0': + resolution: {integrity: sha512-QTjBh24a34At66mGfs0lVF1voug1KnA13IZkvcVPr52zFb90+xYiqYeKiICTaf3HkoeoKG+TC2Q0K64+se0+CQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' - '@stoplight/spectral-runtime@1.1.4': - resolution: {integrity: sha512-YHbhX3dqW0do6DhiPSgSGQzr6yQLlWybhKwWx0cqxjMwxej3TqLv3BXMfIUYFKKUqIwH4Q2mV8rrMM8qD2N0rQ==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} + '@solana/programs@2.3.0': + resolution: {integrity: sha512-UXKujV71VCI5uPs+cFdwxybtHZAIZyQkqDiDnmK+DawtOO9mBn4Nimdb/6RjR2CXT78mzO9ZCZ3qfyX+ydcB7w==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' - '@stoplight/types@13.20.0': - resolution: {integrity: sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA==} - engines: {node: ^12.20 || >=14.13} + '@solana/programs@4.0.0': + resolution: {integrity: sha512-tJCNoKyDKfipGTsQtUO6R9EXk4l4ai+gYuD2R3NubJgMaLPBqIv3IMSCeDSvhuSCDuN2lQ1mLkQrDnE3lm0/iQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' - '@stoplight/types@13.6.0': - resolution: {integrity: sha512-dzyuzvUjv3m1wmhPfq82lCVYGcXG0xUYgqnWfCq3PCVR4BKFhjdkHrnJ+jIDoMKvXb05AZP/ObQF6+NpDo29IQ==} - engines: {node: ^12.20 || >=14.13} + '@solana/promises@2.3.0': + resolution: {integrity: sha512-GjVgutZKXVuojd9rWy1PuLnfcRfqsaCm7InCiZc8bqmJpoghlyluweNc7ml9Y5yQn1P2IOyzh9+p/77vIyNybQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' - '@stoplight/types@14.1.1': - resolution: {integrity: sha512-/kjtr+0t0tjKr+heVfviO9FrU/uGLc+QNX3fHJc19xsCNYqU7lVhaXxDmEID9BZTjG+/r9pK9xP/xU02XGg65g==} - engines: {node: ^12.20 || >=14.13} + '@solana/promises@4.0.0': + resolution: {integrity: sha512-zEh815+n2OrrQunZ6m1iuNcoZRc9YnQaTeivBSgl1SYfPaq/Qj/rRiK5DID25Njo4L44p5quu7aal3Bk/eR+tQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' - '@stoplight/yaml-ast-parser@0.0.50': - resolution: {integrity: sha512-Pb6M8TDO9DtSVla9yXSTAxmo9GVEouq5P40DWXdOie69bXogZTkgvopCq+yEvTMA0F6PEvdJmbtTV3ccIp11VQ==} + '@solana/rpc-api@2.3.0': + resolution: {integrity: sha512-UUdiRfWoyYhJL9PPvFeJr4aJ554ob2jXcpn4vKmRVn9ire0sCbpQKYx6K8eEKHZWXKrDW8IDspgTl0gT/aJWVg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' - '@stoplight/yaml@4.3.0': - resolution: {integrity: sha512-JZlVFE6/dYpP9tQmV0/ADfn32L9uFarHWxfcRhReKUnljz1ZiUM5zpX+PH8h5CJs6lao3TuFqnPm9IJJCEkE2w==} - engines: {node: '>=10.8'} + '@solana/rpc-api@4.0.0': + resolution: {integrity: sha512-nfQkTJCIW3qzUDRrhvr9MBm9jKQ+dZn4ypK35UDPrV+QB5Gc9UmPJ6prvpPtDq8WoU7wqUzswKeY3k7qtgYjEg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' - '@swc/helpers@0.5.17': - resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + '@solana/rpc-parsed-types@2.3.0': + resolution: {integrity: sha512-B5pHzyEIbBJf9KHej+zdr5ZNAdSvu7WLU2lOUPh81KHdHQs6dEb310LGxcpCc7HVE8IEdO20AbckewDiAN6OCg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' - '@szmarczak/http-timer@5.0.1': - resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} - engines: {node: '>=14.16'} + '@solana/rpc-parsed-types@4.0.0': + resolution: {integrity: sha512-aOjwJwen5D0aDXoSths+ekdBO4mu7nmM+yASqCVW2PLN6v7NZmRBzV1/PgMFjDTiymVQj25ipCUvL395s1wsKg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' - '@tootallnate/quickjs-emscripten@0.23.0': - resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + '@solana/rpc-spec-types@2.3.0': + resolution: {integrity: sha512-xQsb65lahjr8Wc9dMtP7xa0ZmDS8dOE2ncYjlvfyw/h4mpdXTUdrSMi6RtFwX33/rGuztQ7Hwaid5xLNSLvsFQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' - '@tybys/wasm-util@0.9.0': - resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + '@solana/rpc-spec-types@4.0.0': + resolution: {integrity: sha512-rpFMIaetpubeyDXIlxV08vtmiDt7ME9527kCI61slHj6O2rbj+7fABhmlN6J4YDCcL/kfnMCxZyNna94DovHZA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' - '@types/better-sqlite3@7.6.13': - resolution: {integrity: sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==} + '@solana/rpc-spec@2.3.0': + resolution: {integrity: sha512-fA2LMX4BMixCrNB2n6T83AvjZ3oUQTu7qyPLyt8gHQaoEAXs8k6GZmu6iYcr+FboQCjUmRPgMaABbcr9j2J9Sw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' - '@types/body-parser@1.19.6': - resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} + '@solana/rpc-spec@4.0.0': + resolution: {integrity: sha512-9PFTFWjdgA/KFG4rgzbgA7gm9+aRDwsRJgI1aP7n3dGsGzYUp8vNgRQBhogWscEOETkgZNlsi/artLxgvHEHEg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' - '@types/chai@5.2.2': - resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} + '@solana/rpc-subscriptions-api@2.3.0': + resolution: {integrity: sha512-9mCjVbum2Hg9KGX3LKsrI5Xs0KX390lS+Z8qB80bxhar6MJPugqIPH8uRgLhCW9GN3JprAfjRNl7our8CPvsPQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' - '@types/connect@3.4.38': - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + '@solana/rpc-subscriptions-api@4.0.0': + resolution: {integrity: sha512-6/MzQT9VkcD7Rh8ExoGdbERTSEubA5eI+Q0R9FRuujl/SIy2BsWaNxaBMuZS0DFmKbIHM+m1ptUFdjKAVjGQuw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' - '@types/cors@2.8.18': - resolution: {integrity: sha512-nX3d0sxJW41CqQvfOzVG1NCTXfFDrDWIghCZncpHeWlVFd81zxB/DLhg7avFg6eHLCRX7ckBmoIIcqa++upvJA==} + '@solana/rpc-subscriptions-channel-websocket@2.3.0': + resolution: {integrity: sha512-2oL6ceFwejIgeWzbNiUHI2tZZnaOxNTSerszcin7wYQwijxtpVgUHiuItM/Y70DQmH9sKhmikQp+dqeGalaJxw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + ws: ^8.18.0 - '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@solana/rpc-subscriptions-channel-websocket@4.0.0': + resolution: {integrity: sha512-dc4cGfkQJEdkux/CXpItffuytnSU6wktReHEBL+2xaYmF+yGMBeBLzTvkCJ9BbGGfBMf06c5y5QH8X48W5CJdg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + ws: ^8.18.0 - '@types/deep-eql@4.0.2': + '@solana/rpc-subscriptions-spec@2.3.0': + resolution: {integrity: sha512-rdmVcl4PvNKQeA2l8DorIeALCgJEMSu7U8AXJS1PICeb2lQuMeaR+6cs/iowjvIB0lMVjYN2sFf6Q3dJPu6wWg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-subscriptions-spec@4.0.0': + resolution: {integrity: sha512-2ROfFymoy/TjDAlEPpsmSQAr6LZwG4l/UIhkW7+/VraRu7QPAycuWfSopJnG8D7F3fksICFSeQNwwgBXTN1TWA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-subscriptions@2.3.0': + resolution: {integrity: sha512-Uyr10nZKGVzvCOqwCZgwYrzuoDyUdwtgQRefh13pXIrdo4wYjVmoLykH49Omt6abwStB0a4UL5gX9V4mFdDJZg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-subscriptions@4.0.0': + resolution: {integrity: sha512-rM+R4Xpsym0tYF3sGAEpdY+D+c6fOMk/fhCEewR+veqdubRfvI5QEhq4kHs8qdKKuRbcpGmedPC306H+PQ6Hmg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-transformers@2.3.0': + resolution: {integrity: sha512-UuHYK3XEpo9nMXdjyGKkPCOr7WsZsxs7zLYDO1A5ELH3P3JoehvrDegYRAGzBS2VKsfApZ86ZpJToP0K3PhmMA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-transformers@4.0.0': + resolution: {integrity: sha512-3B3C9zpqN2O76CJV9tethtybMFdT2ViN5b2u8sObftGNFqxPmjt7XmbOmPdn7zwLyRM5S2RuZShzfcVJpBf+yQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-transport-http@2.3.0': + resolution: {integrity: sha512-HFKydmxGw8nAF5N+S0NLnPBDCe5oMDtI2RAmW8DMqP4U3Zxt2XWhvV1SNkAldT5tF0U1vP+is6fHxyhk4xqEvg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-transport-http@4.0.0': + resolution: {integrity: sha512-RjXcQehF3wHm8eoIala+MrdmS3mDSPRl+xwEWzmA1QmBdQl44/XTNOdPJvNkqWXrzE+bAsZGfn0gVua/oCC+zQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-types@2.3.0': + resolution: {integrity: sha512-O09YX2hED2QUyGxrMOxQ9GzH1LlEwwZWu69QbL4oYmIf6P5dzEEHcqRY6L1LsDVqc/dzAdEs/E1FaPrcIaIIPw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-types@4.0.0': + resolution: {integrity: sha512-mY4W6DQVaLf3M8hSSzIEtaRsVgLg9zv5qdjjYvxkALw0fzjkLW55h3ctGbJ/k+dNpYm9gcKg7zatA7eBNnNmtQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc@2.3.0': + resolution: {integrity: sha512-ZWN76iNQAOCpYC7yKfb3UNLIMZf603JckLKOOLTHuy9MZnTN8XV6uwvDFhf42XvhglgUjGCEnbUqWtxQ9pa/pQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc@4.0.0': + resolution: {integrity: sha512-KF91ghi7P48aeWd4eSY5Fly/ioYz9ww2loQd/YqV3eLQwo3/2HUWd6r6lpSHsLh/HUoUkm+EsYmVN8r/3mE5fg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/signers@2.3.0': + resolution: {integrity: sha512-OSv6fGr/MFRx6J+ZChQMRqKNPGGmdjkqarKkRzkwmv7v8quWsIRnJT5EV8tBy3LI4DLO/A8vKiNSPzvm1TdaiQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/signers@4.0.0': + resolution: {integrity: sha512-r3ZrltruadsQXmx3fsGOSqAZ3SsgD7zq/QB8sT6IOVcg11Pgdvx48/CEv7djdy44wF4HVpqNCZLfi12EhoaSXQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/subscribable@2.3.0': + resolution: {integrity: sha512-DkgohEDbMkdTWiKAoatY02Njr56WXx9e/dKKfmne8/Ad6/2llUIrax78nCdlvZW9quXMaXPTxZvdQqo9N669Og==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/subscribable@4.0.0': + resolution: {integrity: sha512-lDI4HkDuGkmdnX7hSgvJsFFadkQxt0pLHIpZTxOt7/6KBDtNs63NTwJGd3d/EuA7ReXwYg5HDG0QtOm64divXQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/sysvars@2.3.0': + resolution: {integrity: sha512-LvjADZrpZ+CnhlHqfI5cmsRzX9Rpyb1Ox2dMHnbsRNzeKAMhu9w4ZBIaeTdO322zsTr509G1B+k2ABD3whvUBA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/sysvars@4.0.0': + resolution: {integrity: sha512-HUu2B8P7iRYWAt1KL/5a6nNTKp73y04cSxZ9PZf2Ap1/KE0/5D8WnkEfnurUQmU3zBner95d+szNOyWMNBOoTw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/transaction-confirmation@2.3.0': + resolution: {integrity: sha512-UiEuiHCfAAZEKdfne/XljFNJbsKAe701UQHKXEInYzIgBjRbvaeYZlBmkkqtxwcasgBTOmEaEKT44J14N9VZDw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/transaction-confirmation@4.0.0': + resolution: {integrity: sha512-DTBIMB5/UCOpVyL5E0xwswtxs/PGeSD1VL5+C1UCPlggpZNIOlhZoaQqFO56wrJDFASzPMx+dakda5BUuhQkBg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/transaction-messages@2.3.0': + resolution: {integrity: sha512-bgqvWuy3MqKS5JdNLH649q+ngiyOu5rGS3DizSnWwYUd76RxZl1kN6CoqHSrrMzFMvis6sck/yPGG3wqrMlAww==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/transaction-messages@4.0.0': + resolution: {integrity: sha512-rQo0rRyvkrROFZHUT0uL3vqeBBtxTsNKDtx8pZo6BC3TgGA7V1MoSC3rVOLwYCK6rK5NJZiYNjmneHz/7hVpwQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/transactions@2.3.0': + resolution: {integrity: sha512-LnTvdi8QnrQtuEZor5Msje61sDpPstTVwKg4y81tNxDhiyomjuvnSNLAq6QsB9gIxUqbNzPZgOG9IU4I4/Uaug==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/transactions@4.0.0': + resolution: {integrity: sha512-bmHIIVTQq+Wlqg4es91Ew4KSbOrvdfPsKg/pVha8ZR77huwvfqQMxRyYF4zMQ+Fm3QXGFKOU0RPVKKYic15jBw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + + '@stoplight/better-ajv-errors@1.0.3': + resolution: {integrity: sha512-0p9uXkuB22qGdNfy3VeEhxkU5uwvp/KrBTAbrLBURv6ilxIVwanKwjMc41lQfIVgPGcOkmLbTolfFrSsueu7zA==} + engines: {node: ^12.20 || >= 14.13} + peerDependencies: + ajv: '>=8' + + '@stoplight/json-ref-readers@1.2.2': + resolution: {integrity: sha512-nty0tHUq2f1IKuFYsLM4CXLZGHdMn+X/IwEUIpeSOXt0QjMUbL0Em57iJUDzz+2MkWG83smIigNZ3fauGjqgdQ==} + engines: {node: '>=8.3.0'} + + '@stoplight/json-ref-resolver@3.1.6': + resolution: {integrity: sha512-YNcWv3R3n3U6iQYBsFOiWSuRGE5su1tJSiX6pAPRVk7dP0L7lqCteXGzuVRQ0gMZqUl8v1P0+fAKxF6PLo9B5A==} + engines: {node: '>=8.3.0'} + + '@stoplight/json@3.21.0': + resolution: {integrity: sha512-5O0apqJ/t4sIevXCO3SBN9AHCEKKR/Zb4gaj7wYe5863jme9g02Q0n/GhM7ZCALkL+vGPTe4ZzTETP8TFtsw3g==} + engines: {node: '>=8.3.0'} + + '@stoplight/ordered-object-literal@1.0.5': + resolution: {integrity: sha512-COTiuCU5bgMUtbIFBuyyh2/yVVzlr5Om0v5utQDgBCuQUOPgU1DwoffkTfg4UBQOvByi5foF4w4T+H9CoRe5wg==} + engines: {node: '>=8'} + + '@stoplight/path@1.3.2': + resolution: {integrity: sha512-lyIc6JUlUA8Ve5ELywPC8I2Sdnh1zc1zmbYgVarhXIp9YeAB0ReeqmGEOWNtlHkbP2DAA1AL65Wfn2ncjK/jtQ==} + engines: {node: '>=8'} + + '@stoplight/spectral-core@1.20.0': + resolution: {integrity: sha512-5hBP81nCC1zn1hJXL/uxPNRKNcB+/pEIHgCjPRpl/w/qy9yC9ver04tw1W0l/PMiv0UeB5dYgozXVQ4j5a6QQQ==} + engines: {node: ^16.20 || ^18.18 || >= 20.17} + + '@stoplight/spectral-formats@1.8.2': + resolution: {integrity: sha512-c06HB+rOKfe7tuxg0IdKDEA5XnjL2vrn/m/OVIIxtINtBzphZrOgtRn7epQ5bQF5SWp84Ue7UJWaGgDwVngMFw==} + engines: {node: ^16.20 || ^18.18 || >= 20.17} + + '@stoplight/spectral-functions@1.10.1': + resolution: {integrity: sha512-obu8ZfoHxELOapfGsCJixKZXZcffjg+lSoNuttpmUFuDzVLT3VmH8QkPXfOGOL5Pz80BR35ClNAToDkdnYIURg==} + engines: {node: ^16.20 || ^18.18 || >= 20.17} + + '@stoplight/spectral-parsers@1.0.5': + resolution: {integrity: sha512-ANDTp2IHWGvsQDAY85/jQi9ZrF4mRrA5bciNHX+PUxPr4DwS6iv4h+FVWJMVwcEYdpyoIdyL+SRmHdJfQEPmwQ==} + engines: {node: ^16.20 || ^18.18 || >= 20.17} + + '@stoplight/spectral-ref-resolver@1.0.5': + resolution: {integrity: sha512-gj3TieX5a9zMW29z3mBlAtDOCgN3GEc1VgZnCVlr5irmR4Qi5LuECuFItAq4pTn5Zu+sW5bqutsCH7D4PkpyAA==} + engines: {node: ^16.20 || ^18.18 || >= 20.17} + + '@stoplight/spectral-runtime@1.1.4': + resolution: {integrity: sha512-YHbhX3dqW0do6DhiPSgSGQzr6yQLlWybhKwWx0cqxjMwxej3TqLv3BXMfIUYFKKUqIwH4Q2mV8rrMM8qD2N0rQ==} + engines: {node: ^16.20 || ^18.18 || >= 20.17} + + '@stoplight/types@13.20.0': + resolution: {integrity: sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA==} + engines: {node: ^12.20 || >=14.13} + + '@stoplight/types@13.6.0': + resolution: {integrity: sha512-dzyuzvUjv3m1wmhPfq82lCVYGcXG0xUYgqnWfCq3PCVR4BKFhjdkHrnJ+jIDoMKvXb05AZP/ObQF6+NpDo29IQ==} + engines: {node: ^12.20 || >=14.13} + + '@stoplight/types@14.1.1': + resolution: {integrity: sha512-/kjtr+0t0tjKr+heVfviO9FrU/uGLc+QNX3fHJc19xsCNYqU7lVhaXxDmEID9BZTjG+/r9pK9xP/xU02XGg65g==} + engines: {node: ^12.20 || >=14.13} + + '@stoplight/yaml-ast-parser@0.0.50': + resolution: {integrity: sha512-Pb6M8TDO9DtSVla9yXSTAxmo9GVEouq5P40DWXdOie69bXogZTkgvopCq+yEvTMA0F6PEvdJmbtTV3ccIp11VQ==} + + '@stoplight/yaml@4.3.0': + resolution: {integrity: sha512-JZlVFE6/dYpP9tQmV0/ADfn32L9uFarHWxfcRhReKUnljz1ZiUM5zpX+PH8h5CJs6lao3TuFqnPm9IJJCEkE2w==} + engines: {node: '>=10.8'} + + '@szmarczak/http-timer@5.0.1': + resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} + engines: {node: '>=14.16'} + + '@tootallnate/quickjs-emscripten@0.23.0': + resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + + '@tybys/wasm-util@0.9.0': + resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + + '@types/better-sqlite3@7.6.13': + resolution: {integrity: sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==} + + '@types/body-parser@1.19.6': + resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} + + '@types/chai@5.2.2': + resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/cors@2.8.18': + resolution: {integrity: sha512-nX3d0sxJW41CqQvfOzVG1NCTXfFDrDWIghCZncpHeWlVFd81zxB/DLhg7avFg6eHLCRX7ckBmoIIcqa++upvJA==} + + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + + '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} '@types/diff-match-patch@1.0.36': @@ -2464,6 +2888,9 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + '@types/katex@0.16.7': resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} @@ -2488,6 +2915,9 @@ packages: '@types/node@22.15.19': resolution: {integrity: sha512-3vMNr4TzNQyjHcRZadojpRaD9Ofr6LsonZAoQ+HMUa/9ORTPoxVIw0e0mpqWpdjj8xybyCM+oKOUH2vwFu/oEw==} + '@types/node@24.6.1': + resolution: {integrity: sha512-ljvjjs3DNXummeIaooB4cLBKg2U6SPI6Hjra/9rRIy7CpM0HpLtG9HptkMKAb4HYWy5S7HUvJEuWgr/y0U8SHw==} + '@types/pg@8.11.6': resolution: {integrity: sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==} @@ -2500,8 +2930,8 @@ packages: '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - '@types/react@19.1.4': - resolution: {integrity: sha512-EB1yiiYdvySuIITtD5lhW4yPyJ31RkJkkDw794LaQYrxCSaQV/47y5o1FMC4zF9ZyjUjzJMZwbovEnT5yHTW6g==} + '@types/react@19.1.16': + resolution: {integrity: sha512-WBM/nDbEZmDUORKnh5i1bTnAz6vTohUf9b8esSMu+b24+srbaxa04UbJgWx78CVfNXA20sNu0odEIluZDFdCog==} '@types/send@0.17.5': resolution: {integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==} @@ -2518,18 +2948,9 @@ packages: '@types/urijs@1.19.25': resolution: {integrity: sha512-XOfUup9r3Y06nFAZh3WvO0rBU4OtlfPB/vgxpjg+NRdGU6CN6djdc6OEiH+PcqHCY6eFLo9Ista73uarf4gnBg==} - '@types/uuid@8.3.4': - resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} - '@types/varint@6.0.3': resolution: {integrity: sha512-DHukoGWdJ2aYkveZJTB2rN2lp6m7APzVsoJQ7j/qy1fQxyamJTPD5xQzCMoJ2Qtgn0mE3wWeNOpbTyBFvF+dyA==} - '@types/ws@7.4.7': - resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} - - '@types/ws@8.18.1': - resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} @@ -2731,6 +3152,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + address@1.2.2: resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} engines: {node: '>= 10.0.0'} @@ -2739,10 +3165,6 @@ packages: resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} engines: {node: '>= 14'} - agentkeepalive@4.6.0: - resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} - engines: {node: '>= 8.0.0'} - aggregate-error@4.0.1: resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==} engines: {node: '>=12'} @@ -2837,6 +3259,10 @@ packages: array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + array-includes@3.1.9: + resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} + engines: {node: '>= 0.4'} + array-iterate@2.0.1: resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} @@ -2847,6 +3273,18 @@ packages: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} + array.prototype.findlastindex@1.2.6: + resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} + arraybuffer.prototype.slice@1.0.4: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} @@ -2924,9 +3362,6 @@ packages: bare-events: optional: true - base-x@3.0.11: - resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==} - base-x@5.0.1: resolution: {integrity: sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==} @@ -2952,13 +3387,6 @@ packages: better-sqlite3@11.10.0: resolution: {integrity: sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ==} - bigint-buffer@1.1.5: - resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} - engines: {node: '>= 10.0.0'} - - bignumber.js@9.3.1: - resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} - binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} @@ -2978,9 +3406,6 @@ packages: bl@5.1.0: resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} - bn.js@5.2.2: - resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==} - body-parser@1.20.3: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -2989,9 +3414,6 @@ packages: resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} engines: {node: '>=18'} - borsh@0.7.0: - resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} - brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -3002,9 +3424,6 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - bs58@4.0.1: - resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} - bs58@6.0.0: resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} @@ -3075,6 +3494,10 @@ packages: resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -3170,14 +3593,14 @@ packages: comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - commander@12.1.0: - resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} - engines: {node: '>=18'} - commander@13.1.0: resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} engines: {node: '>=18'} + commander@14.0.1: + resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==} + engines: {node: '>=20'} + commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -3373,10 +3796,6 @@ packages: resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} engines: {node: '>= 14'} - delay@5.0.0: - resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} - engines: {node: '>=10'} - delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -3413,6 +3832,10 @@ packages: resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} engines: {node: '>=8'} + detect-libc@2.1.1: + resolution: {integrity: sha512-ecqj/sy1jcK1uWrwpR67UhYrIFQ+5WlGxth34WquCbamhFA6hkkwiu37o6J5xCHdo1oixJRfVRw+ywV+Hq/0Aw==} + engines: {node: '>=8'} + detect-newline@4.0.1: resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3461,6 +3884,10 @@ packages: resolution: {integrity: sha512-BDeBd8najI4/lS00HSKpdFia+OvUMytaVjfzR9n5Lq8MlZRSvtbI+uLtx1+XmQFls5wFU9dssccTmQQ6nfpjdg==} engines: {node: '>=6'} + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dotenv-cli@8.0.0: resolution: {integrity: sha512-aLqYbK7xKOiTMIRf1lDPbI+Y+Ip/wo5k3eyp6ePysVaSqbyxjyK3dK35BTxG+rmd7djf5q2UPs4noPNH+cj0Qw==} hasBin: true @@ -3642,6 +4069,10 @@ packages: resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} engines: {node: '>= 0.4'} + es-abstract@1.24.0: + resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} + engines: {node: '>= 0.4'} + es-aggregate-error@1.0.13: resolution: {integrity: sha512-KkzhUUuD2CUMqEc8JEqsXEMDHzDPE8RCjZeUBitsnB1eNcAJWQPiciKsMXe3Yytj4Flw1XLl46Qcf9OxvZha7A==} engines: {node: '>= 0.4'} @@ -3665,16 +4096,14 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} + es-shim-unscopables@1.1.0: + resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} + engines: {node: '>= 0.4'} + es-to-primitive@1.3.0: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - es6-promise@4.2.8: - resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} - - es6-promisify@5.0.0: - resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} - esast-util-from-estree@2.0.0: resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} @@ -3738,32 +4167,63 @@ packages: eslint-plugin-import-x: optional: true + eslint-module-utils@2.12.1: + resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + eslint-plugin-import-x@4.12.2: resolution: {integrity: sha512-0jVUgJQipbs0yUfLe7LwYD6p8rIGqCysWZdyJFgkPzDyJgiKpuCaXlywKUAWgJ6u1nLpfrdt21B60OUkupyBrQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - eslint-plugin-turbo@2.5.3: - resolution: {integrity: sha512-DlXZd+LgpDlxH/6IsiAXLhy82x0jeJDm0XBEqP6Le08uy0HBQkjCUt7SmXNp8esAtX9RYe6oDClbNbmI1jtK5g==} + eslint-plugin-import@2.32.0: + resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==} + engines: {node: '>=4'} peerDependencies: - eslint: '>6.6.0' + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-turbo@2.5.3: + resolution: {integrity: sha512-DlXZd+LgpDlxH/6IsiAXLhy82x0jeJDm0XBEqP6Le08uy0HBQkjCUt7SmXNp8esAtX9RYe6oDClbNbmI1jtK5g==} + peerDependencies: + eslint: '>6.6.0' turbo: '>2.0.0' - eslint-scope@8.3.0: - resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-visitor-keys@4.2.0: - resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.27.0: - resolution: {integrity: sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==} + eslint@9.36.0: + resolution: {integrity: sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -3776,6 +4236,10 @@ packages: resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} @@ -3860,10 +4324,6 @@ packages: engines: {node: '>= 10.17.0'} hasBin: true - eyes@0.1.8: - resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} - engines: {node: '> 0.1.90'} - fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -3887,9 +4347,6 @@ packages: fast-memoize@2.5.2: resolution: {integrity: sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==} - fast-stable-stringify@1.0.0: - resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} - fast-uri@3.0.6: resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} @@ -4066,6 +4523,12 @@ packages: resolution: {integrity: sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==} engines: {node: '>= 14'} + gill@0.12.0: + resolution: {integrity: sha512-+8I9Uk5fKfSgoFMPNu17Hm7cW8ymnhnPbPfJr0E4ShJeHtn342TxlUHhGibirj/1IIfDmotaQv6KHaSEz5OImw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5' + git-hooks-list@4.1.1: resolution: {integrity: sha512-cmP497iLq54AZnv4YRAEMnEyQ1eIn4tGKbmswqwmFV4GBnAqE8NLtWxxdXa++AalfgL5EBH4IxTPyquEuGY/jA==} @@ -4248,9 +4711,6 @@ packages: resolution: {integrity: sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg==} hasBin: true - humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -4428,6 +4888,10 @@ packages: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + is-number-object@1.1.1: resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} engines: {node: '>= 0.4'} @@ -4506,25 +4970,19 @@ packages: resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} engines: {node: '>=16'} - isomorphic-ws@4.0.1: - resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} - peerDependencies: - ws: '*' - isows@1.0.7: resolution: {integrity: sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==} peerDependencies: ws: '*' - jayson@4.2.0: - resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==} - engines: {node: '>=8'} - hasBin: true - jiti@2.4.2: resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + hasBin: true + jose@6.0.11: resolution: {integrity: sha512-QxG7EaliDARm1O1S8BGakqncGT9s25bKL1WSf6/oa17Tkqwi8D2ZNglqCF+DsYF88/rV66Q/Q2mFAy697E1DUg==} @@ -4572,8 +5030,9 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true jsonc-parser@2.2.1: resolution: {integrity: sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==} @@ -4631,68 +5090,68 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lightningcss-darwin-arm64@1.29.3: - resolution: {integrity: sha512-fb7raKO3pXtlNbQbiMeEu8RbBVHnpyqAoxTyTRMEWFQWmscGC2wZxoHzZ+YKAepUuKT9uIW5vL2QbFivTgprZg==} + lightningcss-darwin-arm64@1.30.1: + resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] - lightningcss-darwin-x64@1.29.3: - resolution: {integrity: sha512-KF2XZ4ZdmDGGtEYmx5wpzn6u8vg7AdBHaEOvDKu8GOs7xDL/vcU2vMKtTeNe1d4dogkDdi3B9zC77jkatWBwEQ==} + lightningcss-darwin-x64@1.30.1: + resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] - lightningcss-freebsd-x64@1.29.3: - resolution: {integrity: sha512-VUWeVf+V1UM54jv9M4wen9vMlIAyT69Krl9XjI8SsRxz4tdNV/7QEPlW6JASev/pYdiynUCW0pwaFquDRYdxMw==} + lightningcss-freebsd-x64@1.30.1: + resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] - lightningcss-linux-arm-gnueabihf@1.29.3: - resolution: {integrity: sha512-UhgZ/XVNfXQVEJrMIWeK1Laj8KbhjbIz7F4znUk7G4zeGw7TRoJxhb66uWrEsonn1+O45w//0i0Fu0wIovYdYg==} + lightningcss-linux-arm-gnueabihf@1.30.1: + resolution: {integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] - lightningcss-linux-arm64-gnu@1.29.3: - resolution: {integrity: sha512-Pqau7jtgJNmQ/esugfmAT1aCFy/Gxc92FOxI+3n+LbMHBheBnk41xHDhc0HeYlx9G0xP5tK4t0Koy3QGGNqypw==} + lightningcss-linux-arm64-gnu@1.30.1: + resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - lightningcss-linux-arm64-musl@1.29.3: - resolution: {integrity: sha512-dxakOk66pf7KLS7VRYFO7B8WOJLecE5OPL2YOk52eriFd/yeyxt2Km5H0BjLfElokIaR+qWi33gB8MQLrdAY3A==} + lightningcss-linux-arm64-musl@1.30.1: + resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - lightningcss-linux-x64-gnu@1.29.3: - resolution: {integrity: sha512-ySZTNCpbfbK8rqpKJeJR2S0g/8UqqV3QnzcuWvpI60LWxnFN91nxpSSwCbzfOXkzKfar9j5eOuOplf+klKtINg==} + lightningcss-linux-x64-gnu@1.30.1: + resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - lightningcss-linux-x64-musl@1.29.3: - resolution: {integrity: sha512-3pVZhIzW09nzi10usAXfIGTTSTYQ141dk88vGFNCgawIzayiIzZQxEcxVtIkdvlEq2YuFsL9Wcj/h61JHHzuFQ==} + lightningcss-linux-x64-musl@1.30.1: + resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - lightningcss-win32-arm64-msvc@1.29.3: - resolution: {integrity: sha512-VRnkAvtIkeWuoBJeGOTrZxsNp4HogXtcaaLm8agmbYtLDOhQdpgxW6NjZZjDXbvGF+eOehGulXZ3C1TiwHY4QQ==} + lightningcss-win32-arm64-msvc@1.30.1: + resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] - lightningcss-win32-x64-msvc@1.29.3: - resolution: {integrity: sha512-IszwRPu2cPnDQsZpd7/EAr0x2W7jkaWqQ1SwCVIZ/tSbZVXPLt6k8s6FkcyBjViCzvB5CW0We0QbbP7zp2aBjQ==} + lightningcss-win32-x64-msvc@1.30.1: + resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] - lightningcss@1.29.3: - resolution: {integrity: sha512-GlOJwTIP6TMIlrTFsxTerwC0W6OpQpCGuX1ECRLBUVRh6fpJH3xTqjCjRgQHTb4ZXexH9rtHou1Lf03GKzmhhQ==} + lightningcss@1.30.1: + resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==} engines: {node: '>= 12.0.0'} lines-and-columns@1.2.4: @@ -4725,10 +5184,6 @@ packages: longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - loupe@3.1.3: resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} @@ -5141,6 +5596,18 @@ packages: resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} + engines: {node: '>= 0.4'} + obuf@1.1.2: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} @@ -5426,8 +5893,8 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - prettier@3.5.3: - resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} + prettier@3.6.2: + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} engines: {node: '>=14'} hasBin: true @@ -5507,13 +5974,13 @@ packages: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true - react-dom@18.3.1: - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + react-dom@19.1.1: + resolution: {integrity: sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==} peerDependencies: - react: ^18.3.1 + react: ^19.1.1 - react@19.1.0: - resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} + react@19.1.1: + resolution: {integrity: sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==} engines: {node: '>=0.10.0'} read-yaml-file@1.1.0: @@ -5680,9 +6147,6 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - rpc-websockets@9.2.0: - resolution: {integrity: sha512-DS/XHdPxplQTtNRKiBCRWGBJfjOk56W7fyFUpiYi9fSTWTzoEMbUkn3J4gB0IMniIEVeAGR1/rzFQogzD5MxvQ==} - run-async@3.0.0: resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} engines: {node: '>=0.12.0'} @@ -5721,8 +6185,8 @@ packages: sax@1.4.1: resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} - scheduler@0.23.2: - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + scheduler@0.26.0: + resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} section-matter@1.0.0: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} @@ -5731,6 +6195,10 @@ packages: secure-json-parse@2.7.0: resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + semver@7.7.1: resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} engines: {node: '>=10'} @@ -5922,11 +6390,9 @@ packages: resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - stream-chain@2.2.5: - resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==} - - stream-json@1.9.1: - resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==} + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} streamx@2.22.0: resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} @@ -5990,10 +6456,6 @@ packages: style-to-object@1.0.8: resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==} - superstruct@2.0.2: - resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} - engines: {node: '>=14.0.0'} - supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -6036,12 +6498,14 @@ packages: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} + terser@5.44.0: + resolution: {integrity: sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==} + engines: {node: '>=10'} + hasBin: true + text-decoder@1.2.3: resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} - text-encoding-utf-8@1.0.2: - resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} - throttleit@2.1.0: resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==} engines: {node: '>=18'} @@ -6118,6 +6582,9 @@ packages: typescript: optional: true + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + tsdown@0.11.12: resolution: {integrity: sha512-rPFmP79Tx+KO8s68OsF5q0sDNjZ2gA98AFf0vrtbaySIzilSGBtkIVhLPfwC/QBnvySyMcEtliteGYzDHQtZAw==} engines: {node: '>=18.0.0'} @@ -6228,8 +6695,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - typescript@5.8.3: - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} hasBin: true @@ -6252,6 +6719,12 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@7.13.0: + resolution: {integrity: sha512-Ov2Rr9Sx+fRgagJ5AX0qvItZG/JKKoBRAVITs1zk7IqZGTJUwgUr7qoYBpWwakpWilTZFM98rG/AFRocu10iIQ==} + + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -6351,10 +6824,6 @@ packages: resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} hasBin: true - uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - valibot@1.1.0: resolution: {integrity: sha512-Nk8lX30Qhu+9txPYTwM0cFlWLdPFsFr6LblzqIySfbZph9+BFsAHsNvHOymEviUepeIW6KFHzpX8TKhbptBXXw==} peerDependencies: @@ -6550,18 +7019,6 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@7.5.10: - resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - ws@8.17.1: resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} engines: {node: '>=10.0.0'} @@ -6706,12 +7163,12 @@ snapshots: dependencies: json-schema: 0.4.0 - '@ai-sdk/react@1.2.12(react@19.1.0)(zod@3.25.4)': + '@ai-sdk/react@1.2.12(react@19.1.1)(zod@3.25.4)': dependencies: '@ai-sdk/provider-utils': 2.2.8(zod@3.25.4) '@ai-sdk/ui-utils': 1.2.11(zod@3.25.4) - react: 19.1.0 - swr: 2.3.3(react@19.1.0) + react: 19.1.1 + swr: 2.3.3(react@19.1.1) throttleit: 2.1.0 optionalDependencies: zod: 3.25.4 @@ -6723,11 +7180,11 @@ snapshots: zod: 3.25.4 zod-to-json-schema: 3.24.5(zod@3.25.4) - '@ai-sdk/valibot@0.1.28(@valibot/to-json-schema@1.0.0(valibot@1.1.0(typescript@5.8.3)))(react@19.1.0)(valibot@1.1.0(typescript@5.8.3))(zod@3.25.4)': + '@ai-sdk/valibot@0.1.28(@valibot/to-json-schema@1.0.0(valibot@1.1.0(typescript@5.9.3)))(react@19.1.1)(valibot@1.1.0(typescript@5.9.3))(zod@3.25.4)': dependencies: - '@valibot/to-json-schema': 1.0.0(valibot@1.1.0(typescript@5.8.3)) - ai: 4.3.16(react@19.1.0)(zod@3.25.4) - valibot: 1.1.0(typescript@5.8.3) + '@valibot/to-json-schema': 1.0.0(valibot@1.1.0(typescript@5.9.3)) + ai: 4.3.16(react@19.1.1)(zod@3.25.4) + valibot: 1.1.0(typescript@5.9.3) transitivePeerDependencies: - react - zod @@ -7150,12 +7607,12 @@ snapshots: '@cspell/url': 9.0.1 import-meta-resolve: 4.1.0 - '@cspell/eslint-plugin@9.0.1(eslint@9.27.0(jiti@2.4.2))': + '@cspell/eslint-plugin@9.0.1(eslint@9.36.0(jiti@2.6.1))': dependencies: '@cspell/cspell-types': 9.0.1 '@cspell/url': 9.0.1 cspell-lib: 9.0.1 - eslint: 9.27.0(jiti@2.4.2) + eslint: 9.36.0(jiti@2.6.1) synckit: 0.11.4 '@cspell/filetypes@9.0.1': {} @@ -7333,14 +7790,14 @@ snapshots: '@esbuild/win32-x64@0.25.2': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.27.0(jiti@2.4.2))': + '@eslint-community/eslint-utils@4.9.0(eslint@9.36.0(jiti@2.6.1))': dependencies: - eslint: 9.27.0(jiti@2.4.2) + eslint: 9.36.0(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.20.0': + '@eslint/config-array@0.21.0': dependencies: '@eslint/object-schema': 2.1.6 debug: 4.4.1 @@ -7348,7 +7805,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.2.1': {} + '@eslint/config-helpers@0.3.1': {} '@eslint/core@0.10.0': dependencies: @@ -7362,7 +7819,7 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/core@0.14.0': + '@eslint/core@0.15.2': dependencies: '@types/json-schema': 7.0.15 @@ -7380,7 +7837,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.27.0': {} + '@eslint/js@9.36.0': {} '@eslint/json@0.12.0': dependencies: @@ -7408,19 +7865,19 @@ snapshots: '@eslint/core': 0.13.0 levn: 0.4.1 - '@eslint/plugin-kit@0.3.1': + '@eslint/plugin-kit@0.3.5': dependencies: - '@eslint/core': 0.14.0 + '@eslint/core': 0.15.2 levn: 0.4.1 '@hono/node-server@1.14.2(hono@4.7.10)': dependencies: hono: 4.7.10 - '@hono/valibot-validator@0.5.2(hono@4.7.10)(valibot@1.1.0(typescript@5.8.3))': + '@hono/valibot-validator@0.5.2(hono@4.7.10)(valibot@1.1.0(typescript@5.9.3))': dependencies: hono: 4.7.10 - valibot: 1.1.0(typescript@5.8.3) + valibot: 1.1.0(typescript@5.9.3) '@humanfs/core@0.19.1': {} @@ -7522,6 +7979,16 @@ snapshots: optionalDependencies: '@types/node': 22.15.19 + '@inquirer/checkbox@4.1.6(@types/node@24.6.1)': + dependencies: + '@inquirer/core': 10.1.11(@types/node@24.6.1) + '@inquirer/figures': 1.0.11 + '@inquirer/type': 3.0.6(@types/node@24.6.1) + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 24.6.1 + '@inquirer/confirm@5.1.10(@types/node@22.15.19)': dependencies: '@inquirer/core': 10.1.11(@types/node@22.15.19) @@ -7529,6 +7996,13 @@ snapshots: optionalDependencies: '@types/node': 22.15.19 + '@inquirer/confirm@5.1.10(@types/node@24.6.1)': + dependencies: + '@inquirer/core': 10.1.11(@types/node@24.6.1) + '@inquirer/type': 3.0.6(@types/node@24.6.1) + optionalDependencies: + '@types/node': 24.6.1 + '@inquirer/core@10.1.11(@types/node@22.15.19)': dependencies: '@inquirer/figures': 1.0.11 @@ -7542,6 +8016,19 @@ snapshots: optionalDependencies: '@types/node': 22.15.19 + '@inquirer/core@10.1.11(@types/node@24.6.1)': + dependencies: + '@inquirer/figures': 1.0.11 + '@inquirer/type': 3.0.6(@types/node@24.6.1) + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 24.6.1 + '@inquirer/editor@4.2.11(@types/node@22.15.19)': dependencies: '@inquirer/core': 10.1.11(@types/node@22.15.19) @@ -7550,6 +8037,14 @@ snapshots: optionalDependencies: '@types/node': 22.15.19 + '@inquirer/editor@4.2.11(@types/node@24.6.1)': + dependencies: + '@inquirer/core': 10.1.11(@types/node@24.6.1) + '@inquirer/type': 3.0.6(@types/node@24.6.1) + external-editor: 3.1.0 + optionalDependencies: + '@types/node': 24.6.1 + '@inquirer/expand@4.0.13(@types/node@22.15.19)': dependencies: '@inquirer/core': 10.1.11(@types/node@22.15.19) @@ -7558,6 +8053,14 @@ snapshots: optionalDependencies: '@types/node': 22.15.19 + '@inquirer/expand@4.0.13(@types/node@24.6.1)': + dependencies: + '@inquirer/core': 10.1.11(@types/node@24.6.1) + '@inquirer/type': 3.0.6(@types/node@24.6.1) + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 24.6.1 + '@inquirer/figures@1.0.11': {} '@inquirer/input@4.1.10(@types/node@22.15.19)': @@ -7567,6 +8070,13 @@ snapshots: optionalDependencies: '@types/node': 22.15.19 + '@inquirer/input@4.1.10(@types/node@24.6.1)': + dependencies: + '@inquirer/core': 10.1.11(@types/node@24.6.1) + '@inquirer/type': 3.0.6(@types/node@24.6.1) + optionalDependencies: + '@types/node': 24.6.1 + '@inquirer/number@3.0.13(@types/node@22.15.19)': dependencies: '@inquirer/core': 10.1.11(@types/node@22.15.19) @@ -7574,6 +8084,13 @@ snapshots: optionalDependencies: '@types/node': 22.15.19 + '@inquirer/number@3.0.13(@types/node@24.6.1)': + dependencies: + '@inquirer/core': 10.1.11(@types/node@24.6.1) + '@inquirer/type': 3.0.6(@types/node@24.6.1) + optionalDependencies: + '@types/node': 24.6.1 + '@inquirer/password@4.0.13(@types/node@22.15.19)': dependencies: '@inquirer/core': 10.1.11(@types/node@22.15.19) @@ -7582,6 +8099,14 @@ snapshots: optionalDependencies: '@types/node': 22.15.19 + '@inquirer/password@4.0.13(@types/node@24.6.1)': + dependencies: + '@inquirer/core': 10.1.11(@types/node@24.6.1) + '@inquirer/type': 3.0.6(@types/node@24.6.1) + ansi-escapes: 4.3.2 + optionalDependencies: + '@types/node': 24.6.1 + '@inquirer/prompts@7.5.1(@types/node@22.15.19)': dependencies: '@inquirer/checkbox': 4.1.6(@types/node@22.15.19) @@ -7597,6 +8122,21 @@ snapshots: optionalDependencies: '@types/node': 22.15.19 + '@inquirer/prompts@7.5.1(@types/node@24.6.1)': + dependencies: + '@inquirer/checkbox': 4.1.6(@types/node@24.6.1) + '@inquirer/confirm': 5.1.10(@types/node@24.6.1) + '@inquirer/editor': 4.2.11(@types/node@24.6.1) + '@inquirer/expand': 4.0.13(@types/node@24.6.1) + '@inquirer/input': 4.1.10(@types/node@24.6.1) + '@inquirer/number': 3.0.13(@types/node@24.6.1) + '@inquirer/password': 4.0.13(@types/node@24.6.1) + '@inquirer/rawlist': 4.1.1(@types/node@24.6.1) + '@inquirer/search': 3.0.13(@types/node@24.6.1) + '@inquirer/select': 4.2.1(@types/node@24.6.1) + optionalDependencies: + '@types/node': 24.6.1 + '@inquirer/rawlist@4.1.1(@types/node@22.15.19)': dependencies: '@inquirer/core': 10.1.11(@types/node@22.15.19) @@ -7605,6 +8145,14 @@ snapshots: optionalDependencies: '@types/node': 22.15.19 + '@inquirer/rawlist@4.1.1(@types/node@24.6.1)': + dependencies: + '@inquirer/core': 10.1.11(@types/node@24.6.1) + '@inquirer/type': 3.0.6(@types/node@24.6.1) + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 24.6.1 + '@inquirer/search@3.0.13(@types/node@22.15.19)': dependencies: '@inquirer/core': 10.1.11(@types/node@22.15.19) @@ -7614,6 +8162,15 @@ snapshots: optionalDependencies: '@types/node': 22.15.19 + '@inquirer/search@3.0.13(@types/node@24.6.1)': + dependencies: + '@inquirer/core': 10.1.11(@types/node@24.6.1) + '@inquirer/figures': 1.0.11 + '@inquirer/type': 3.0.6(@types/node@24.6.1) + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 24.6.1 + '@inquirer/select@4.2.1(@types/node@22.15.19)': dependencies: '@inquirer/core': 10.1.11(@types/node@22.15.19) @@ -7624,10 +8181,30 @@ snapshots: optionalDependencies: '@types/node': 22.15.19 + '@inquirer/select@4.2.1(@types/node@24.6.1)': + dependencies: + '@inquirer/core': 10.1.11(@types/node@24.6.1) + '@inquirer/figures': 1.0.11 + '@inquirer/type': 3.0.6(@types/node@24.6.1) + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 24.6.1 + '@inquirer/type@3.0.6(@types/node@22.15.19)': optionalDependencies: '@types/node': 22.15.19 + '@inquirer/type@3.0.6(@types/node@24.6.1)': + optionalDependencies: + '@types/node': 24.6.1 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + optional: true + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 @@ -7638,13 +8215,28 @@ snapshots: '@jridgewell/set-array@1.2.1': {} + '@jridgewell/source-map@0.3.11': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + optional: true + '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/sourcemap-codec@1.5.5': + optional: true + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + optional: true + '@jsep-plugin/assignment@1.3.0(jsep@1.4.0)': dependencies: jsep: 1.4.0 @@ -7675,7 +8267,7 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 - '@mdx-js/mdx@3.1.0(acorn@8.14.1)': + '@mdx-js/mdx@3.1.0(acorn@8.15.0)': dependencies: '@types/estree': 1.0.7 '@types/estree-jsx': 1.0.5 @@ -7689,7 +8281,7 @@ snapshots: hast-util-to-jsx-runtime: 2.3.6 markdown-extensions: 2.0.0 recma-build-jsx: 1.0.0 - recma-jsx: 1.0.0(acorn@8.14.1) + recma-jsx: 1.0.0(acorn@8.15.0) recma-stringify: 1.0.0 rehype-recma: 1.0.0 remark-mdx: 3.1.0 @@ -7705,24 +8297,24 @@ snapshots: - acorn - supports-color - '@mdx-js/react@3.1.0(@types/react@19.1.4)(react@19.1.0)': + '@mdx-js/react@3.1.0(@types/react@19.1.16)(react@19.1.1)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 19.1.4 - react: 19.1.0 + '@types/react': 19.1.16 + react: 19.1.1 - '@mintlify/cli@4.0.536(@types/node@22.15.19)(@types/react@19.1.4)(bufferutil@4.0.9)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@mintlify/cli@4.0.536(@types/node@24.6.1)(@types/react@19.1.16)(bufferutil@4.0.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.3)(utf-8-validate@5.0.10)': dependencies: - '@mintlify/common': 1.0.380(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0) - '@mintlify/link-rot': 3.0.494(@types/react@19.1.4)(bufferutil@4.0.9)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@mintlify/common': 1.0.380(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@mintlify/link-rot': 3.0.494(@types/react@19.1.16)(bufferutil@4.0.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.3)(utf-8-validate@5.0.10) '@mintlify/models': 0.0.193 - '@mintlify/prebuild': 1.0.491(@types/react@19.1.4)(bufferutil@4.0.9)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@mintlify/previewing': 4.0.527(@types/react@19.1.4)(bufferutil@4.0.9)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@mintlify/prebuild': 1.0.491(@types/react@19.1.16)(bufferutil@4.0.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@mintlify/previewing': 4.0.527(@types/react@19.1.16)(bufferutil@4.0.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.3)(utf-8-validate@5.0.10) '@mintlify/validation': 0.1.367 chalk: 5.4.1 detect-port: 1.6.1 fs-extra: 11.3.0 - inquirer: 12.6.1(@types/node@22.15.19) + inquirer: 12.6.1(@types/node@24.6.1) js-yaml: 4.1.0 ora: 6.3.1 yargs: 17.7.2 @@ -7739,15 +8331,15 @@ snapshots: - typescript - utf-8-validate - '@mintlify/common@1.0.380(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)': + '@mintlify/common@1.0.380(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@asyncapi/parser': 3.4.0 - '@mintlify/mdx': 1.0.1(@types/react@19.1.4)(acorn@8.14.1)(react-dom@18.3.1(react@19.1.0))(react@19.1.0) + '@mintlify/mdx': 1.0.1(@types/react@19.1.16)(acorn@8.15.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@mintlify/models': 0.0.193 '@mintlify/openapi-parser': 0.0.7 '@mintlify/validation': 0.1.367 '@sindresorhus/slugify': 2.2.1 - acorn: 8.14.1 + acorn: 8.15.0 estree-util-to-js: 2.0.0 estree-walker: 3.0.3 gray-matter: 4.0.3 @@ -7785,10 +8377,10 @@ snapshots: - react-dom - supports-color - '@mintlify/link-rot@3.0.494(@types/react@19.1.4)(bufferutil@4.0.9)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@mintlify/link-rot@3.0.494(@types/react@19.1.16)(bufferutil@4.0.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.3)(utf-8-validate@5.0.10)': dependencies: - '@mintlify/common': 1.0.380(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0) - '@mintlify/prebuild': 1.0.491(@types/react@19.1.4)(bufferutil@4.0.9)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@mintlify/common': 1.0.380(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@mintlify/prebuild': 1.0.491(@types/react@19.1.16)(bufferutil@4.0.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.3)(utf-8-validate@5.0.10) fs-extra: 11.3.0 is-absolute-url: 4.0.1 unist-util-visit: 4.1.2 @@ -7804,14 +8396,14 @@ snapshots: - typescript - utf-8-validate - '@mintlify/mdx@1.0.1(@types/react@19.1.4)(acorn@8.14.1)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)': + '@mintlify/mdx@1.0.1(@types/react@19.1.16)(acorn@8.15.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@types/hast': 3.0.4 '@types/unist': 3.0.3 hast-util-to-string: 3.0.1 - next-mdx-remote-client: 1.1.1(@types/react@19.1.4)(acorn@8.14.1)(react-dom@18.3.1(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 18.3.1(react@19.1.0) + next-mdx-remote-client: 1.1.1(@types/react@19.1.16)(acorn@8.15.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) refractor: 4.9.0 rehype-katex: 7.0.1 remark-gfm: 4.0.1 @@ -7840,14 +8432,14 @@ snapshots: leven: 4.0.0 yaml: 2.8.0 - '@mintlify/prebuild@1.0.491(@types/react@19.1.4)(bufferutil@4.0.9)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@mintlify/prebuild@1.0.491(@types/react@19.1.16)(bufferutil@4.0.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.3)(utf-8-validate@5.0.10)': dependencies: - '@mintlify/common': 1.0.380(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0) + '@mintlify/common': 1.0.380(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@mintlify/openapi-parser': 0.0.7 - '@mintlify/scraping': 4.0.236(@types/react@19.1.4)(bufferutil@4.0.9)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@mintlify/scraping': 4.0.236(@types/react@19.1.16)(bufferutil@4.0.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.3)(utf-8-validate@5.0.10) '@mintlify/validation': 0.1.367 axios: 1.9.0 - chalk: 5.4.1 + chalk: 5.6.2 favicons: 7.2.0 fs-extra: 11.3.0 gray-matter: 4.0.3 @@ -7868,13 +8460,13 @@ snapshots: - typescript - utf-8-validate - '@mintlify/previewing@4.0.527(@types/react@19.1.4)(bufferutil@4.0.9)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@mintlify/previewing@4.0.527(@types/react@19.1.16)(bufferutil@4.0.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.3)(utf-8-validate@5.0.10)': dependencies: - '@mintlify/common': 1.0.380(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0) - '@mintlify/prebuild': 1.0.491(@types/react@19.1.4)(bufferutil@4.0.9)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@mintlify/common': 1.0.380(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@mintlify/prebuild': 1.0.491(@types/react@19.1.16)(bufferutil@4.0.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.3)(utf-8-validate@5.0.10) '@mintlify/validation': 0.1.367 better-opn: 3.0.2 - chalk: 5.4.1 + chalk: 5.6.2 chokidar: 3.6.0 express: 4.21.2 fs-extra: 11.3.0 @@ -7902,16 +8494,16 @@ snapshots: - typescript - utf-8-validate - '@mintlify/scraping@4.0.236(@types/react@19.1.4)(bufferutil@4.0.9)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@mintlify/scraping@4.0.236(@types/react@19.1.16)(bufferutil@4.0.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.3)(utf-8-validate@5.0.10)': dependencies: - '@mintlify/common': 1.0.380(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0) + '@mintlify/common': 1.0.380(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@mintlify/openapi-parser': 0.0.7 fs-extra: 11.3.0 hast-util-to-mdast: 10.1.2 js-yaml: 4.1.0 mdast-util-mdx-jsx: 3.2.0 neotraverse: 0.6.18 - puppeteer: 22.15.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + puppeteer: 22.15.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) rehype-parse: 9.0.1 remark-gfm: 4.0.1 remark-mdx: 3.1.0 @@ -8117,6 +8709,9 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.39.0': optional: true + '@rtsao/scc@1.1.0': + optional: true + '@scure/base@1.2.4': {} '@scure/bip32@1.6.2': @@ -8143,159 +8738,771 @@ snapshots: '@socket.io/component-emitter@3.1.2': {} - '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@solana-program/address-lookup-table@0.7.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': dependencies: - '@solana/buffer-layout': 4.0.1 - '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) - bigint-buffer: 1.1.5 - bignumber.js: 9.3.1 + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(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.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': + dependencies: + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + + '@solana-program/system@0.7.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': + dependencies: + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + + '@solana-program/system@0.9.0(@solana/kit@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': + dependencies: + '@solana/kit': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(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.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))': + dependencies: + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/sysvars': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + + '@solana-program/token@0.6.0(@solana/kit@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': + dependencies: + '@solana/kit': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + + '@solana/accounts@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec': 2.3.0(typescript@5.9.3) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - - bufferutil - - encoding - - typescript - - utf-8-validate + - fastestsmallesttextencoderdecoder - '@solana/buffer-layout@4.0.1': + '@solana/accounts@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - buffer: 6.0.3 + '@solana/addresses': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 4.0.0(typescript@5.9.3) + '@solana/codecs-strings': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 4.0.0(typescript@5.9.3) + '@solana/rpc-spec': 4.0.0(typescript@5.9.3) + '@solana/rpc-types': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/addresses@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/assertions': 2.3.0(typescript@5.9.3) + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/nominal-types': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/addresses@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/assertions': 4.0.0(typescript@5.9.3) + '@solana/codecs-core': 4.0.0(typescript@5.9.3) + '@solana/codecs-strings': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 4.0.0(typescript@5.9.3) + '@solana/nominal-types': 4.0.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@solana/codecs-core@2.0.0-rc.1(typescript@5.8.3)': + '@solana/assertions@2.3.0(typescript@5.9.3)': dependencies: - '@solana/errors': 2.0.0-rc.1(typescript@5.8.3) - typescript: 5.8.3 + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 - '@solana/codecs-core@2.1.1(typescript@5.8.3)': + '@solana/assertions@4.0.0(typescript@5.9.3)': dependencies: - '@solana/errors': 2.1.1(typescript@5.8.3) - typescript: 5.8.3 + '@solana/errors': 4.0.0(typescript@5.9.3) + typescript: 5.9.3 - '@solana/codecs-data-structures@2.0.0-rc.1(typescript@5.8.3)': + '@solana/codecs-core@2.1.1(typescript@5.9.3)': dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.8.3) - '@solana/errors': 2.0.0-rc.1(typescript@5.8.3) - typescript: 5.8.3 + '@solana/errors': 2.1.1(typescript@5.9.3) + typescript: 5.9.3 - '@solana/codecs-numbers@2.0.0-rc.1(typescript@5.8.3)': + '@solana/codecs-core@2.3.0(typescript@5.9.3)': dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) - '@solana/errors': 2.0.0-rc.1(typescript@5.8.3) - typescript: 5.8.3 + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 - '@solana/codecs-numbers@2.1.1(typescript@5.8.3)': + '@solana/codecs-core@4.0.0(typescript@5.9.3)': dependencies: - '@solana/codecs-core': 2.1.1(typescript@5.8.3) - '@solana/errors': 2.1.1(typescript@5.8.3) - typescript: 5.8.3 + '@solana/errors': 4.0.0(typescript@5.9.3) + typescript: 5.9.3 - '@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + '@solana/codecs-data-structures@2.3.0(typescript@5.9.3)': dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.8.3) - '@solana/errors': 2.0.0-rc.1(typescript@5.8.3) + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/codecs-data-structures@4.0.0(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 4.0.0(typescript@5.9.3) + '@solana/codecs-numbers': 4.0.0(typescript@5.9.3) + '@solana/errors': 4.0.0(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/codecs-numbers@2.1.1(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.1.1(typescript@5.9.3) + '@solana/errors': 2.1.1(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/codecs-numbers@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/codecs-numbers@4.0.0(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 4.0.0(typescript@5.9.3) + '@solana/errors': 4.0.0(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/codecs-strings@2.1.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.1.1(typescript@5.9.3) + '@solana/codecs-numbers': 2.1.1(typescript@5.9.3) + '@solana/errors': 2.1.1(typescript@5.9.3) fastestsmallesttextencoderdecoder: 1.0.22 - typescript: 5.8.3 + typescript: 5.9.3 - '@solana/codecs-strings@2.1.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + '@solana/codecs-strings@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@solana/codecs-core': 2.1.1(typescript@5.8.3) - '@solana/codecs-numbers': 2.1.1(typescript@5.8.3) - '@solana/errors': 2.1.1(typescript@5.8.3) + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) fastestsmallesttextencoderdecoder: 1.0.22 - typescript: 5.8.3 + typescript: 5.9.3 - '@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + '@solana/codecs-strings@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) - '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@5.8.3) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.8.3) - '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) - '@solana/options': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) - typescript: 5.8.3 + '@solana/codecs-core': 4.0.0(typescript@5.9.3) + '@solana/codecs-numbers': 4.0.0(typescript@5.9.3) + '@solana/errors': 4.0.0(typescript@5.9.3) + fastestsmallesttextencoderdecoder: 1.0.22 + typescript: 5.9.3 + + '@solana/codecs@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-data-structures': 2.3.0(typescript@5.9.3) + '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/options': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/errors@2.0.0-rc.1(typescript@5.8.3)': + '@solana/codecs@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - chalk: 5.4.1 - commander: 12.1.0 - typescript: 5.8.3 + '@solana/codecs-core': 4.0.0(typescript@5.9.3) + '@solana/codecs-data-structures': 4.0.0(typescript@5.9.3) + '@solana/codecs-numbers': 4.0.0(typescript@5.9.3) + '@solana/codecs-strings': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/options': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder - '@solana/errors@2.1.1(typescript@5.8.3)': + '@solana/errors@2.1.1(typescript@5.9.3)': dependencies: chalk: 5.4.1 commander: 13.1.0 - typescript: 5.8.3 + typescript: 5.9.3 + + '@solana/errors@2.3.0(typescript@5.9.3)': + dependencies: + chalk: 5.6.2 + commander: 14.0.1 + typescript: 5.9.3 + + '@solana/errors@4.0.0(typescript@5.9.3)': + dependencies: + chalk: 5.6.2 + commander: 14.0.1 + typescript: 5.9.3 + + '@solana/fast-stable-stringify@2.3.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@solana/fast-stable-stringify@4.0.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 - '@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + '@solana/functional@2.3.0(typescript@5.9.3)': dependencies: - '@solana/codecs-core': 2.0.0-rc.1(typescript@5.8.3) - '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@5.8.3) - '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.8.3) - '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) - '@solana/errors': 2.0.0-rc.1(typescript@5.8.3) - typescript: 5.8.3 + typescript: 5.9.3 + + '@solana/functional@4.0.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@solana/instruction-plans@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/errors': 4.0.0(typescript@5.9.3) + '@solana/instructions': 4.0.0(typescript@5.9.3) + '@solana/promises': 4.0.0(typescript@5.9.3) + '@solana/transaction-messages': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/spl-memo@0.2.5(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))': + '@solana/instructions@2.3.0(typescript@5.9.3)': dependencies: - '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) - buffer: 6.0.3 + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/instructions@4.0.0(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 4.0.0(typescript@5.9.3) + '@solana/errors': 4.0.0(typescript@5.9.3) + typescript: 5.9.3 - '@solana/spl-token-group@0.0.7(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + '@solana/keys@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) - '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@solana/assertions': 2.3.0(typescript@5.9.3) + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/nominal-types': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - - typescript - '@solana/spl-token-metadata@0.1.6(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + '@solana/keys@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) - '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@solana/assertions': 4.0.0(typescript@5.9.3) + '@solana/codecs-core': 4.0.0(typescript@5.9.3) + '@solana/codecs-strings': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 4.0.0(typescript@5.9.3) + '@solana/nominal-types': 4.0.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - fastestsmallesttextencoderdecoder - - typescript - '@solana/spl-token@0.4.14(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@solana/accounts': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/functional': 2.3.0(typescript@5.9.3) + '@solana/instructions': 2.3.0(typescript@5.9.3) + '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/programs': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-parsed-types': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3) + '@solana/rpc-subscriptions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/signers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/sysvars': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - ws + + '@solana/kit@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@solana/accounts': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/addresses': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 4.0.0(typescript@5.9.3) + '@solana/functional': 4.0.0(typescript@5.9.3) + '@solana/instruction-plans': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/instructions': 4.0.0(typescript@5.9.3) + '@solana/keys': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/programs': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-parsed-types': 4.0.0(typescript@5.9.3) + '@solana/rpc-spec-types': 4.0.0(typescript@5.9.3) + '@solana/rpc-subscriptions': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/rpc-types': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/signers': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/sysvars': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-confirmation': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/transaction-messages': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - ws + + '@solana/nominal-types@2.3.0(typescript@5.9.3)': dependencies: - '@solana/buffer-layout': 4.0.1 - '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@solana/spl-token-group': 0.0.7(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) - '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) - '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) - buffer: 6.0.3 + typescript: 5.9.3 + + '@solana/nominal-types@4.0.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@solana/options@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-data-structures': 2.3.0(typescript@5.9.3) + '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - - bufferutil - - encoding - fastestsmallesttextencoderdecoder - - typescript - - utf-8-validate - '@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@solana/options@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: - '@babel/runtime': 7.27.1 - '@noble/curves': 1.9.1 - '@noble/hashes': 1.8.0 - '@solana/buffer-layout': 4.0.1 - '@solana/codecs-numbers': 2.1.1(typescript@5.8.3) - agentkeepalive: 4.6.0 - bn.js: 5.2.2 - borsh: 0.7.0 - bs58: 4.0.1 - buffer: 6.0.3 - fast-stable-stringify: 1.0.0 - jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) - node-fetch: 2.7.0 - rpc-websockets: 9.2.0 - superstruct: 2.0.2 + '@solana/codecs-core': 4.0.0(typescript@5.9.3) + '@solana/codecs-data-structures': 4.0.0(typescript@5.9.3) + '@solana/codecs-numbers': 4.0.0(typescript@5.9.3) + '@solana/codecs-strings': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 4.0.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - - bufferutil - - encoding - - typescript - - utf-8-validate + - fastestsmallesttextencoderdecoder + + '@solana/programs@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/programs@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 4.0.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/promises@2.3.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@solana/promises@4.0.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@solana/rpc-api@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-parsed-types': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec': 2.3.0(typescript@5.9.3) + '@solana/rpc-transformers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/rpc-api@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 4.0.0(typescript@5.9.3) + '@solana/codecs-strings': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 4.0.0(typescript@5.9.3) + '@solana/keys': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-parsed-types': 4.0.0(typescript@5.9.3) + '@solana/rpc-spec': 4.0.0(typescript@5.9.3) + '@solana/rpc-transformers': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-types': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/rpc-parsed-types@2.3.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@solana/rpc-parsed-types@4.0.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@solana/rpc-spec-types@2.3.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@solana/rpc-spec-types@4.0.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@solana/rpc-spec@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/rpc-spec@4.0.0(typescript@5.9.3)': + dependencies: + '@solana/errors': 4.0.0(typescript@5.9.3) + '@solana/rpc-spec-types': 4.0.0(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/rpc-subscriptions-api@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.9.3) + '@solana/rpc-transformers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/rpc-subscriptions-api@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/keys': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-subscriptions-spec': 4.0.0(typescript@5.9.3) + '@solana/rpc-transformers': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-types': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/rpc-subscriptions-channel-websocket@2.3.0(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/functional': 2.3.0(typescript@5.9.3) + '@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.9.3) + '@solana/subscribable': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) + + '@solana/rpc-subscriptions-channel-websocket@4.0.0(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@solana/errors': 4.0.0(typescript@5.9.3) + '@solana/functional': 4.0.0(typescript@5.9.3) + '@solana/rpc-subscriptions-spec': 4.0.0(typescript@5.9.3) + '@solana/subscribable': 4.0.0(typescript@5.9.3) + typescript: 5.9.3 + ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) + + '@solana/rpc-subscriptions-spec@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/promises': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3) + '@solana/subscribable': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/rpc-subscriptions-spec@4.0.0(typescript@5.9.3)': + dependencies: + '@solana/errors': 4.0.0(typescript@5.9.3) + '@solana/promises': 4.0.0(typescript@5.9.3) + '@solana/rpc-spec-types': 4.0.0(typescript@5.9.3) + '@solana/subscribable': 4.0.0(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/rpc-subscriptions@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/fast-stable-stringify': 2.3.0(typescript@5.9.3) + '@solana/functional': 2.3.0(typescript@5.9.3) + '@solana/promises': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3) + '@solana/rpc-subscriptions-api': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-subscriptions-channel-websocket': 2.3.0(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.9.3) + '@solana/rpc-transformers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/subscribable': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - ws + + '@solana/rpc-subscriptions@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@solana/errors': 4.0.0(typescript@5.9.3) + '@solana/fast-stable-stringify': 4.0.0(typescript@5.9.3) + '@solana/functional': 4.0.0(typescript@5.9.3) + '@solana/promises': 4.0.0(typescript@5.9.3) + '@solana/rpc-spec-types': 4.0.0(typescript@5.9.3) + '@solana/rpc-subscriptions-api': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-subscriptions-channel-websocket': 4.0.0(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/rpc-subscriptions-spec': 4.0.0(typescript@5.9.3) + '@solana/rpc-transformers': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-types': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/subscribable': 4.0.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - ws + + '@solana/rpc-transformers@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/functional': 2.3.0(typescript@5.9.3) + '@solana/nominal-types': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/rpc-transformers@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/errors': 4.0.0(typescript@5.9.3) + '@solana/functional': 4.0.0(typescript@5.9.3) + '@solana/nominal-types': 4.0.0(typescript@5.9.3) + '@solana/rpc-spec-types': 4.0.0(typescript@5.9.3) + '@solana/rpc-types': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/rpc-transport-http@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + undici-types: 7.16.0 + + '@solana/rpc-transport-http@4.0.0(typescript@5.9.3)': + dependencies: + '@solana/errors': 4.0.0(typescript@5.9.3) + '@solana/rpc-spec': 4.0.0(typescript@5.9.3) + '@solana/rpc-spec-types': 4.0.0(typescript@5.9.3) + typescript: 5.9.3 + undici-types: 7.16.0 + + '@solana/rpc-types@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/nominal-types': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/rpc-types@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 4.0.0(typescript@5.9.3) + '@solana/codecs-numbers': 4.0.0(typescript@5.9.3) + '@solana/codecs-strings': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 4.0.0(typescript@5.9.3) + '@solana/nominal-types': 4.0.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/rpc@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/fast-stable-stringify': 2.3.0(typescript@5.9.3) + '@solana/functional': 2.3.0(typescript@5.9.3) + '@solana/rpc-api': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-spec': 2.3.0(typescript@5.9.3) + '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3) + '@solana/rpc-transformers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-transport-http': 2.3.0(typescript@5.9.3) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/rpc@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/errors': 4.0.0(typescript@5.9.3) + '@solana/fast-stable-stringify': 4.0.0(typescript@5.9.3) + '@solana/functional': 4.0.0(typescript@5.9.3) + '@solana/rpc-api': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-spec': 4.0.0(typescript@5.9.3) + '@solana/rpc-spec-types': 4.0.0(typescript@5.9.3) + '@solana/rpc-transformers': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-transport-http': 4.0.0(typescript@5.9.3) + '@solana/rpc-types': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/signers@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/instructions': 2.3.0(typescript@5.9.3) + '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/nominal-types': 2.3.0(typescript@5.9.3) + '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/signers@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 4.0.0(typescript@5.9.3) + '@solana/errors': 4.0.0(typescript@5.9.3) + '@solana/instructions': 4.0.0(typescript@5.9.3) + '@solana/keys': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/nominal-types': 4.0.0(typescript@5.9.3) + '@solana/transaction-messages': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/subscribable@2.3.0(typescript@5.9.3)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/subscribable@4.0.0(typescript@5.9.3)': + dependencies: + '@solana/errors': 4.0.0(typescript@5.9.3) + typescript: 5.9.3 + + '@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/accounts': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/sysvars@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/accounts': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 4.0.0(typescript@5.9.3) + '@solana/rpc-types': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/transaction-confirmation@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/promises': 2.3.0(typescript@5.9.3) + '@solana/rpc': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-subscriptions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - ws + + '@solana/transaction-confirmation@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@solana/addresses': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-strings': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 4.0.0(typescript@5.9.3) + '@solana/keys': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/promises': 4.0.0(typescript@5.9.3) + '@solana/rpc': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/rpc-subscriptions': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/rpc-types': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transactions': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - ws + + '@solana/transaction-messages@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-data-structures': 2.3.0(typescript@5.9.3) + '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/functional': 2.3.0(typescript@5.9.3) + '@solana/instructions': 2.3.0(typescript@5.9.3) + '@solana/nominal-types': 2.3.0(typescript@5.9.3) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/transaction-messages@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 4.0.0(typescript@5.9.3) + '@solana/codecs-data-structures': 4.0.0(typescript@5.9.3) + '@solana/codecs-numbers': 4.0.0(typescript@5.9.3) + '@solana/errors': 4.0.0(typescript@5.9.3) + '@solana/functional': 4.0.0(typescript@5.9.3) + '@solana/instructions': 4.0.0(typescript@5.9.3) + '@solana/nominal-types': 4.0.0(typescript@5.9.3) + '@solana/rpc-types': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/transactions@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 2.3.0(typescript@5.9.3) + '@solana/codecs-data-structures': 2.3.0(typescript@5.9.3) + '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 2.3.0(typescript@5.9.3) + '@solana/functional': 2.3.0(typescript@5.9.3) + '@solana/instructions': 2.3.0(typescript@5.9.3) + '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/nominal-types': 2.3.0(typescript@5.9.3) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/transactions@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': + dependencies: + '@solana/addresses': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/codecs-core': 4.0.0(typescript@5.9.3) + '@solana/codecs-data-structures': 4.0.0(typescript@5.9.3) + '@solana/codecs-numbers': 4.0.0(typescript@5.9.3) + '@solana/codecs-strings': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/errors': 4.0.0(typescript@5.9.3) + '@solana/functional': 4.0.0(typescript@5.9.3) + '@solana/instructions': 4.0.0(typescript@5.9.3) + '@solana/keys': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/nominal-types': 4.0.0(typescript@5.9.3) + '@solana/rpc-types': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/transaction-messages': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder '@standard-schema/spec@1.0.0': {} @@ -8442,10 +9649,6 @@ snapshots: '@stoplight/yaml-ast-parser': 0.0.50 tslib: 2.8.1 - '@swc/helpers@0.5.17': - dependencies: - tslib: 2.8.1 - '@szmarczak/http-timer@5.0.1': dependencies: defer-to-connect: 2.0.1 @@ -8525,6 +9728,9 @@ snapshots: '@types/json-schema@7.0.15': {} + '@types/json5@0.0.29': + optional: true + '@types/katex@0.16.7': {} '@types/mdast@4.0.4': @@ -8547,6 +9753,11 @@ snapshots: dependencies: undici-types: 6.21.0 + '@types/node@24.6.1': + dependencies: + undici-types: 7.13.0 + optional: true + '@types/pg@8.11.6': dependencies: '@types/node': 22.15.19 @@ -8560,7 +9771,7 @@ snapshots: '@types/range-parser@1.2.7': {} - '@types/react@19.1.4': + '@types/react@19.1.16': dependencies: csstype: 3.1.3 @@ -8581,51 +9792,41 @@ snapshots: '@types/urijs@1.19.25': {} - '@types/uuid@8.3.4': {} - '@types/varint@6.0.3': dependencies: '@types/node': 22.15.19 - '@types/ws@7.4.7': - dependencies: - '@types/node': 22.15.19 - - '@types/ws@8.18.1': - dependencies: - '@types/node': 22.15.19 - '@types/yauzl@2.10.3': dependencies: '@types/node': 22.15.19 optional: true - '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.32.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/type-utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.32.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.32.1 - eslint: 9.27.0(jiti@2.4.2) + eslint: 9.36.0(jiti@2.6.1) graphemer: 1.4.0 ignore: 7.0.4 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/parser@8.32.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.32.1 '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.32.1 debug: 4.4.1 - eslint: 9.27.0(jiti@2.4.2) - typescript: 5.8.3 + eslint: 9.36.0(jiti@2.6.1) + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -8634,20 +9835,20 @@ snapshots: '@typescript-eslint/types': 8.32.1 '@typescript-eslint/visitor-keys': 8.32.1 - '@typescript-eslint/type-utils@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.32.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.1 - eslint: 9.27.0(jiti@2.4.2) - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + eslint: 9.36.0(jiti@2.6.1) + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color '@typescript-eslint/types@8.32.1': {} - '@typescript-eslint/typescript-estree@8.32.1(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.32.1(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.32.1 '@typescript-eslint/visitor-keys': 8.32.1 @@ -8656,26 +9857,26 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.1 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/utils@8.32.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.32.1 '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - eslint: 9.27.0(jiti@2.4.2) - typescript: 5.8.3 + '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.9.3) + eslint: 9.36.0(jiti@2.6.1) + typescript: 5.9.3 transitivePeerDependencies: - supports-color '@typescript-eslint/visitor-keys@8.32.1': dependencies: '@typescript-eslint/types': 8.32.1 - eslint-visitor-keys: 4.2.0 + eslint-visitor-keys: 4.2.1 '@ungap/structured-clone@1.3.0': {} @@ -8732,9 +9933,9 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.7.2': optional: true - '@valibot/to-json-schema@1.0.0(valibot@1.1.0(typescript@5.8.3))': + '@valibot/to-json-schema@1.0.0(valibot@1.1.0(typescript@5.9.3))': dependencies: - valibot: 1.1.0(typescript@5.8.3) + valibot: 1.1.0(typescript@5.9.3) '@vitest/expect@3.2.4': dependencies: @@ -8744,13 +9945,21 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@6.2.5(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0))': + '@vitest/mocker@3.2.4(vite@6.2.5(@types/node@22.15.19)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0))': + dependencies: + '@vitest/spy': 3.2.4 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + vite: 6.2.5(@types/node@22.15.19)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) + + '@vitest/mocker@3.2.4(vite@6.2.5(@types/node@24.6.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.2.5(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + vite: 6.2.5(@types/node@24.6.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) '@vitest/pretty-format@3.2.4': dependencies: @@ -8778,9 +9987,9 @@ snapshots: loupe: 3.2.0 tinyrainbow: 2.0.0 - abitype@1.0.8(typescript@5.8.3)(zod@3.25.4): + abitype@1.0.8(typescript@5.9.3)(zod@3.25.4): optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.3 zod: 3.25.4 abort-controller@3.0.0: @@ -8796,32 +10005,34 @@ snapshots: dependencies: acorn: 8.14.1 + acorn-jsx@5.3.2(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + acorn@8.14.1: {} + acorn@8.15.0: {} + address@1.2.2: {} agent-base@7.1.3: {} - agentkeepalive@4.6.0: - dependencies: - humanize-ms: 1.2.1 - aggregate-error@4.0.1: dependencies: clean-stack: 4.2.0 indent-string: 5.0.0 - ai@4.3.16(react@19.1.0)(zod@3.25.4): + ai@4.3.16(react@19.1.1)(zod@3.25.4): dependencies: '@ai-sdk/provider': 1.1.3 '@ai-sdk/provider-utils': 2.2.8(zod@3.25.4) - '@ai-sdk/react': 1.2.12(react@19.1.0)(zod@3.25.4) + '@ai-sdk/react': 1.2.12(react@19.1.1)(zod@3.25.4) '@ai-sdk/ui-utils': 1.2.11(zod@3.25.4) '@opentelemetry/api': 1.9.0 jsondiffpatch: 0.6.0 zod: 3.25.4 optionalDependencies: - react: 19.1.0 + react: 19.1.1 ajv-draft-04@1.0.0(ajv@8.17.1): optionalDependencies: @@ -8889,12 +10100,51 @@ snapshots: array-flatten@1.1.1: {} + array-includes@3.1.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + is-string: 1.1.1 + math-intrinsics: 1.1.0 + optional: true + array-iterate@2.0.1: {} array-timsort@1.0.3: {} array-union@2.1.0: {} + array.prototype.findlastindex@1.2.6: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 + optional: true + + array.prototype.flat@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-shim-unscopables: 1.1.0 + optional: true + + array.prototype.flatmap@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-shim-unscopables: 1.1.0 + optional: true + arraybuffer.prototype.slice@1.0.4: dependencies: array-buffer-byte-length: 1.0.2 @@ -8967,10 +10217,6 @@ snapshots: bare-events: 2.5.4 optional: true - base-x@3.0.11: - dependencies: - safe-buffer: 5.2.1 - base-x@5.0.1: {} base64-js@1.5.1: {} @@ -8992,12 +10238,6 @@ snapshots: bindings: 1.5.0 prebuild-install: 7.1.3 - bigint-buffer@1.1.5: - dependencies: - bindings: 1.5.0 - - bignumber.js@9.3.1: {} - binary-extensions@2.3.0: {} bindings@1.5.0: @@ -9023,8 +10263,6 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - bn.js@5.2.2: {} - body-parser@1.20.3: dependencies: bytes: 3.1.2 @@ -9056,12 +10294,6 @@ snapshots: transitivePeerDependencies: - supports-color - borsh@0.7.0: - dependencies: - bn.js: 5.2.2 - bs58: 4.0.1 - text-encoding-utf-8: 1.0.2 - brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -9075,10 +10307,6 @@ snapshots: dependencies: fill-range: 7.1.1 - bs58@4.0.1: - dependencies: - base-x: 3.0.11 - bs58@6.0.0: dependencies: base-x: 5.0.1 @@ -9156,6 +10384,8 @@ snapshots: chalk@5.4.1: {} + chalk@5.6.2: {} + character-entities-html4@2.1.0: {} character-entities-legacy@3.0.0: {} @@ -9246,11 +10476,12 @@ snapshots: comma-separated-tokens@2.0.3: {} - commander@12.1.0: {} - commander@13.1.0: {} - commander@2.20.3: {} + commander@14.0.1: {} + + commander@2.20.3: + optional: true commander@8.3.0: {} @@ -9285,14 +10516,14 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 - cosmiconfig@9.0.0(typescript@5.8.3): + cosmiconfig@9.0.0(typescript@5.9.3): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.3 cross-spawn@7.0.6: dependencies: @@ -9447,8 +10678,6 @@ snapshots: escodegen: 2.1.0 esprima: 4.0.1 - delay@5.0.0: {} - delayed-stream@1.0.0: {} depd@2.0.0: {} @@ -9467,6 +10696,9 @@ snapshots: detect-libc@2.0.4: {} + detect-libc@2.1.1: + optional: true + detect-newline@4.0.1: {} detect-port@1.6.1: @@ -9482,10 +10714,10 @@ snapshots: devtools-protocol@0.0.1312386: {} - did-jwks@0.3.0(typescript@5.8.3)(zod@3.25.4): + did-jwks@0.3.0(typescript@5.9.3)(zod@3.25.4): dependencies: - valibot: 1.1.0(typescript@5.8.3) - web-identity-schemas: 0.1.6(valibot@1.1.0(typescript@5.8.3))(zod@3.25.4) + valibot: 1.1.0(typescript@5.9.3) + web-identity-schemas: 0.1.6(valibot@1.1.0(typescript@5.9.3))(zod@3.25.4) transitivePeerDependencies: - typescript - zod @@ -9525,6 +10757,11 @@ snapshots: dependencies: dns-packet: 5.6.1 + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + optional: true + dotenv-cli@8.0.0: dependencies: cross-spawn: 7.0.6 @@ -9671,6 +10908,64 @@ snapshots: unbox-primitive: 1.1.0 which-typed-array: 1.1.19 + es-abstract@1.24.0: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-negative-zero: 2.0.3 + is-regex: 1.2.1 + is-set: 2.0.3 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.19 + optional: true + es-aggregate-error@1.0.13: dependencies: define-data-property: 1.1.4 @@ -9699,18 +10994,17 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 + es-shim-unscopables@1.1.0: + dependencies: + hasown: 2.0.2 + optional: true + es-to-primitive@1.3.0: dependencies: is-callable: 1.2.7 is-date-object: 1.1.0 is-symbol: 1.1.1 - es6-promise@4.2.8: {} - - es6-promisify@5.0.0: - dependencies: - es6-promise: 4.2.8 - esast-util-from-estree@2.0.0: dependencies: '@types/estree-jsx': 1.0.5 @@ -9721,7 +11015,7 @@ snapshots: esast-util-from-js@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 - acorn: 8.14.1 + acorn: 8.15.0 esast-util-from-estree: 2.0.0 vfile-message: 4.0.2 @@ -9801,9 +11095,9 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-prettier@10.1.5(eslint@9.27.0(jiti@2.4.2)): + eslint-config-prettier@10.1.5(eslint@9.36.0(jiti@2.6.1)): dependencies: - eslint: 9.27.0(jiti@2.4.2) + eslint: 9.36.0(jiti@2.6.1) eslint-import-resolver-node@0.3.9: dependencies: @@ -9813,26 +11107,39 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@4.3.5(eslint-plugin-import-x@4.12.2(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2)): + eslint-import-resolver-typescript@4.3.5(eslint-plugin-import-x@4.12.2(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import@2.32.0)(eslint@9.36.0(jiti@2.6.1)): dependencies: debug: 4.4.1 - eslint: 9.27.0(jiti@2.4.2) + eslint: 9.36.0(jiti@2.6.1) get-tsconfig: 4.10.0 is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.13 unrs-resolver: 1.7.2 optionalDependencies: - eslint-plugin-import-x: 4.12.2(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.32.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.3.5)(eslint@9.36.0(jiti@2.6.1)) + eslint-plugin-import-x: 4.12.2(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.32.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.3.5)(eslint@9.36.0(jiti@2.6.1)): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 8.32.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.36.0(jiti@2.6.1) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 4.3.5(eslint-plugin-import-x@4.12.2(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint-plugin-import@2.32.0)(eslint@9.36.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color + optional: true - eslint-plugin-import-x@4.12.2(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3): + eslint-plugin-import-x@4.12.2(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) comment-parser: 1.4.1 debug: 4.4.1 - eslint: 9.27.0(jiti@2.4.2) + eslint: 9.36.0(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 get-tsconfig: 4.10.0 is-glob: 4.0.3 @@ -9845,31 +11152,61 @@ snapshots: - supports-color - typescript - eslint-plugin-turbo@2.5.3(eslint@9.27.0(jiti@2.4.2))(turbo@2.5.3): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.32.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.3.5)(eslint@9.36.0(jiti@2.6.1)): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.9 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 9.36.0(jiti@2.6.1) + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.32.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.3.5)(eslint@9.36.0(jiti@2.6.1)) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.32.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + optional: true + + eslint-plugin-turbo@2.5.3(eslint@9.36.0(jiti@2.6.1))(turbo@2.5.3): dependencies: dotenv: 16.0.3 - eslint: 9.27.0(jiti@2.4.2) + eslint: 9.36.0(jiti@2.6.1) turbo: 2.5.3 - eslint-scope@8.3.0: + eslint-scope@8.4.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@4.2.0: {} + eslint-visitor-keys@4.2.1: {} - eslint@9.27.0(jiti@2.4.2): + eslint@9.36.0(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.20.0 - '@eslint/config-helpers': 0.2.1 - '@eslint/core': 0.14.0 + '@eslint/config-array': 0.21.0 + '@eslint/config-helpers': 0.3.1 + '@eslint/core': 0.15.2 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.27.0 - '@eslint/plugin-kit': 0.3.1 + '@eslint/js': 9.36.0 + '@eslint/plugin-kit': 0.3.5 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.2 @@ -9880,9 +11217,9 @@ snapshots: cross-spawn: 7.0.6 debug: 4.4.1 escape-string-regexp: 4.0.0 - eslint-scope: 8.3.0 - eslint-visitor-keys: 4.2.0 - espree: 10.3.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -9898,7 +11235,7 @@ snapshots: natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 2.4.2 + jiti: 2.6.1 transitivePeerDependencies: - supports-color @@ -9906,7 +11243,13 @@ snapshots: dependencies: acorn: 8.14.1 acorn-jsx: 5.3.2(acorn@8.14.1) - eslint-visitor-keys: 4.2.0 + eslint-visitor-keys: 4.2.1 + + espree@10.4.0: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 esprima@4.0.1: {} @@ -10025,8 +11368,6 @@ snapshots: transitivePeerDependencies: - supports-color - eyes@0.1.8: {} - fast-deep-equal@3.1.3: {} fast-equals@5.2.2: {} @@ -10047,8 +11388,6 @@ snapshots: fast-memoize@2.5.2: {} - fast-stable-stringify@1.0.0: {} - fast-uri@3.0.6: {} fastestsmallesttextencoderdecoder@1.0.22: {} @@ -10239,6 +11578,22 @@ snapshots: transitivePeerDependencies: - supports-color + gill@0.12.0(@solana/sysvars@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + '@solana-program/address-lookup-table': 0.7.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(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.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@solana-program/system': 0.7.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(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.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)) + '@solana/assertions': 2.3.0(typescript@5.9.3) + '@solana/codecs': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(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.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + typescript: 5.9.3 + transitivePeerDependencies: + - '@solana/sysvars' + - fastestsmallesttextencoderdecoder + - ws + git-hooks-list@4.1.1: {} github-from-package@0.0.0: {} @@ -10552,10 +11907,6 @@ snapshots: human-id@4.1.1: {} - humanize-ms@1.2.1: - dependencies: - ms: 2.1.3 - iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -10591,17 +11942,17 @@ snapshots: inline-style-parser@0.2.4: {} - inquirer@12.6.1(@types/node@22.15.19): + inquirer@12.6.1(@types/node@24.6.1): dependencies: - '@inquirer/core': 10.1.11(@types/node@22.15.19) - '@inquirer/prompts': 7.5.1(@types/node@22.15.19) - '@inquirer/type': 3.0.6(@types/node@22.15.19) + '@inquirer/core': 10.1.11(@types/node@24.6.1) + '@inquirer/prompts': 7.5.1(@types/node@24.6.1) + '@inquirer/type': 3.0.6(@types/node@24.6.1) ansi-escapes: 4.3.2 mute-stream: 2.0.0 run-async: 3.0.0 rxjs: 7.8.2 optionalDependencies: - '@types/node': 22.15.19 + '@types/node': 24.6.1 internal-slot@1.1.0: dependencies: @@ -10714,6 +12065,9 @@ snapshots: is-map@2.0.3: {} + is-negative-zero@2.0.3: + optional: true + is-number-object@1.1.1: dependencies: call-bound: 1.0.4 @@ -10788,34 +12142,15 @@ snapshots: isexe@3.1.1: optional: true - isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)): - dependencies: - ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) - isows@1.0.7(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) - jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): - dependencies: - '@types/connect': 3.4.38 - '@types/node': 12.20.55 - '@types/ws': 7.4.7 - commander: 2.20.3 - delay: 5.0.0 - es6-promisify: 5.0.0 - eyes: 0.1.8 - isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - json-stringify-safe: 5.0.1 - stream-json: 1.9.1 - uuid: 8.3.2 - ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) - transitivePeerDependencies: - - bufferutil - - utf-8-validate - jiti@2.4.2: {} + jiti@2.6.1: + optional: true + jose@6.0.11: {} js-tokens@4.0.0: {} @@ -10849,7 +12184,10 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} - json-stringify-safe@5.0.1: {} + json5@1.0.2: + dependencies: + minimist: 1.2.8 + optional: true jsonc-parser@2.2.1: {} @@ -10877,9 +12215,9 @@ snapshots: jsonpointer@5.0.1: {} - jwks-did-resolver@0.3.0(typescript@5.8.3)(zod@3.25.4): + jwks-did-resolver@0.3.0(typescript@5.9.3)(zod@3.25.4): dependencies: - did-jwks: 0.3.0(typescript@5.8.3)(zod@3.25.4) + did-jwks: 0.3.0(typescript@5.9.3)(zod@3.25.4) transitivePeerDependencies: - typescript - zod @@ -10914,50 +12252,50 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lightningcss-darwin-arm64@1.29.3: + lightningcss-darwin-arm64@1.30.1: optional: true - lightningcss-darwin-x64@1.29.3: + lightningcss-darwin-x64@1.30.1: optional: true - lightningcss-freebsd-x64@1.29.3: + lightningcss-freebsd-x64@1.30.1: optional: true - lightningcss-linux-arm-gnueabihf@1.29.3: + lightningcss-linux-arm-gnueabihf@1.30.1: optional: true - lightningcss-linux-arm64-gnu@1.29.3: + lightningcss-linux-arm64-gnu@1.30.1: optional: true - lightningcss-linux-arm64-musl@1.29.3: + lightningcss-linux-arm64-musl@1.30.1: optional: true - lightningcss-linux-x64-gnu@1.29.3: + lightningcss-linux-x64-gnu@1.30.1: optional: true - lightningcss-linux-x64-musl@1.29.3: + lightningcss-linux-x64-musl@1.30.1: optional: true - lightningcss-win32-arm64-msvc@1.29.3: + lightningcss-win32-arm64-msvc@1.30.1: optional: true - lightningcss-win32-x64-msvc@1.29.3: + lightningcss-win32-x64-msvc@1.30.1: optional: true - lightningcss@1.29.3: + lightningcss@1.30.1: dependencies: - detect-libc: 2.0.4 + detect-libc: 2.1.1 optionalDependencies: - lightningcss-darwin-arm64: 1.29.3 - lightningcss-darwin-x64: 1.29.3 - lightningcss-freebsd-x64: 1.29.3 - lightningcss-linux-arm-gnueabihf: 1.29.3 - lightningcss-linux-arm64-gnu: 1.29.3 - lightningcss-linux-arm64-musl: 1.29.3 - lightningcss-linux-x64-gnu: 1.29.3 - lightningcss-linux-x64-musl: 1.29.3 - lightningcss-win32-arm64-msvc: 1.29.3 - lightningcss-win32-x64-msvc: 1.29.3 + lightningcss-darwin-arm64: 1.30.1 + lightningcss-darwin-x64: 1.30.1 + lightningcss-freebsd-x64: 1.30.1 + lightningcss-linux-arm-gnueabihf: 1.30.1 + lightningcss-linux-arm64-gnu: 1.30.1 + lightningcss-linux-arm64-musl: 1.30.1 + lightningcss-linux-x64-gnu: 1.30.1 + lightningcss-linux-x64-musl: 1.30.1 + lightningcss-win32-arm64-msvc: 1.30.1 + lightningcss-win32-x64-msvc: 1.30.1 optional: true lines-and-columns@1.2.4: {} @@ -10980,15 +12318,11 @@ snapshots: log-symbols@5.1.0: dependencies: - chalk: 5.4.1 + chalk: 5.6.2 is-unicode-supported: 1.3.0 longest-streak@3.1.0: {} - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - loupe@3.1.3: {} loupe@3.2.0: {} @@ -11341,8 +12675,8 @@ snapshots: micromark-extension-mdxjs@3.0.0: dependencies: - acorn: 8.14.1 - acorn-jsx: 5.3.2(acorn@8.14.1) + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) micromark-extension-mdx-expression: 3.0.1 micromark-extension-mdx-jsx: 3.0.2 micromark-extension-mdx-md: 2.0.0 @@ -11536,9 +12870,9 @@ snapshots: minipass: 3.3.6 yallist: 4.0.0 - mintlify@4.0.538(@types/node@22.15.19)(@types/react@19.1.4)(bufferutil@4.0.9)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10): + mintlify@4.0.538(@types/node@24.6.1)(@types/react@19.1.16)(bufferutil@4.0.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.3)(utf-8-validate@5.0.10): dependencies: - '@mintlify/cli': 4.0.536(@types/node@22.15.19)(@types/react@19.1.4)(bufferutil@4.0.9)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@mintlify/cli': 4.0.536(@types/node@24.6.1)(@types/react@19.1.16)(bufferutil@4.0.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.3)(utf-8-validate@5.0.10) transitivePeerDependencies: - '@types/node' - '@types/react' @@ -11588,13 +12922,13 @@ snapshots: netmask@2.0.2: {} - next-mdx-remote-client@1.1.1(@types/react@19.1.4)(acorn@8.14.1)(react-dom@18.3.1(react@19.1.0))(react@19.1.0): + next-mdx-remote-client@1.1.1(@types/react@19.1.16)(acorn@8.15.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: '@babel/code-frame': 7.27.1 - '@mdx-js/mdx': 3.1.0(acorn@8.14.1) - '@mdx-js/react': 3.1.0(@types/react@19.1.4)(react@19.1.0) - react: 19.1.0 - react-dom: 18.3.1(react@19.1.0) + '@mdx-js/mdx': 3.1.0(acorn@8.15.0) + '@mdx-js/react': 3.1.0(@types/react@19.1.16)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) remark-mdx-remove-esm: 1.1.0 serialize-error: 12.0.0 vfile: 6.0.3 @@ -11652,6 +12986,29 @@ snapshots: has-symbols: 1.1.0 object-keys: 1.1.1 + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + optional: true + + object.groupby@1.0.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + optional: true + + object.values@1.2.1: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + optional: true + obuf@1.1.2: optional: true @@ -11686,7 +13043,7 @@ snapshots: ora@6.3.1: dependencies: - chalk: 5.4.1 + chalk: 5.6.2 cli-cursor: 4.0.0 cli-spinners: 2.9.2 is-interactive: 2.0.0 @@ -11706,17 +13063,17 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 - ox@0.6.9(typescript@5.8.3)(zod@3.25.4): + ox@0.6.9(typescript@5.9.3)(zod@3.25.4): dependencies: '@adraffy/ens-normalize': 1.11.0 '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 '@scure/bip32': 1.6.2 '@scure/bip39': 1.5.4 - abitype: 1.0.8(typescript@5.8.3)(zod@3.25.4) + abitype: 1.0.8(typescript@5.9.3)(zod@3.25.4) eventemitter3: 5.0.1 optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.3 transitivePeerDependencies: - zod @@ -11960,16 +13317,16 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-packagejson@2.5.14(prettier@3.5.3): + prettier-plugin-packagejson@2.5.14(prettier@3.6.2): dependencies: sort-package-json: 3.2.1 synckit: 0.11.6 optionalDependencies: - prettier: 3.5.3 + prettier: 3.6.2 prettier@2.8.8: {} - prettier@3.5.3: {} + prettier@3.6.2: {} progress@2.0.3: {} @@ -12023,10 +13380,10 @@ snapshots: - supports-color - utf-8-validate - puppeteer@22.15.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10): + puppeteer@22.15.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10): dependencies: '@puppeteer/browsers': 2.3.0 - cosmiconfig: 9.0.0(typescript@5.8.3) + cosmiconfig: 9.0.0(typescript@5.9.3) devtools-protocol: 0.0.1312386 puppeteer-core: 22.15.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: @@ -12073,13 +13430,12 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - react-dom@18.3.1(react@19.1.0): + react-dom@19.1.1(react@19.1.1): dependencies: - loose-envify: 1.4.0 - react: 19.1.0 - scheduler: 0.23.2 + react: 19.1.1 + scheduler: 0.26.0 - react@19.1.0: {} + react@19.1.1: {} read-yaml-file@1.1.0: dependencies: @@ -12106,9 +13462,9 @@ snapshots: estree-util-build-jsx: 3.0.1 vfile: 6.0.3 - recma-jsx@1.0.0(acorn@8.14.1): + recma-jsx@1.0.0(acorn@8.15.0): dependencies: - acorn-jsx: 5.3.2(acorn@8.14.1) + acorn-jsx: 5.3.2(acorn@8.15.0) estree-util-to-js: 2.0.0 recma-parse: 1.0.0 recma-stringify: 1.0.0 @@ -12325,7 +13681,7 @@ snapshots: reusify@1.1.0: {} - rolldown-plugin-dts@0.13.3(rolldown@1.0.0-beta.9)(typescript@5.8.3): + rolldown-plugin-dts@0.13.3(rolldown@1.0.0-beta.9)(typescript@5.9.3): dependencies: '@babel/generator': 7.27.1 '@babel/parser': 7.27.2 @@ -12337,7 +13693,7 @@ snapshots: get-tsconfig: 4.10.0 rolldown: 1.0.0-beta.9 optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.3 transitivePeerDependencies: - oxc-resolver - supports-color @@ -12387,19 +13743,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.39.0 fsevents: 2.3.3 - rpc-websockets@9.2.0: - dependencies: - '@swc/helpers': 0.5.17 - '@types/uuid': 8.3.4 - '@types/ws': 8.18.1 - buffer: 6.0.3 - eventemitter3: 5.0.1 - uuid: 8.3.2 - ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) - optionalDependencies: - bufferutil: 4.0.9 - utf-8-validate: 5.0.10 - run-async@3.0.0: {} run-parallel@1.2.0: @@ -12439,9 +13782,7 @@ snapshots: sax@1.4.1: {} - scheduler@0.23.2: - dependencies: - loose-envify: 1.4.0 + scheduler@0.26.0: {} section-matter@1.0.0: dependencies: @@ -12450,6 +13791,9 @@ snapshots: secure-json-parse@2.7.0: {} + semver@6.3.1: + optional: true + semver@7.7.1: {} semver@7.7.2: {} @@ -12682,12 +14026,12 @@ snapshots: stackback@0.0.2: {} - standard-parse@0.3.0(valibot@1.1.0(typescript@5.8.3))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0))(zod@3.25.4): + standard-parse@0.3.0(valibot@1.1.0(typescript@5.9.3))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.6.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0))(zod@3.25.4): dependencies: '@standard-schema/spec': 1.0.0 optionalDependencies: - valibot: 1.1.0(typescript@5.8.3) - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + valibot: 1.1.0(typescript@5.9.3) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.6.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) zod: 3.25.4 statuses@2.0.1: {} @@ -12698,11 +14042,11 @@ snapshots: dependencies: bl: 5.1.0 - stream-chain@2.2.5: {} - - stream-json@1.9.1: + stop-iteration-iterator@1.1.0: dependencies: - stream-chain: 2.2.5 + es-errors: 1.3.0 + internal-slot: 1.1.0 + optional: true streamx@2.22.0: dependencies: @@ -12783,19 +14127,17 @@ snapshots: dependencies: inline-style-parser: 0.2.4 - superstruct@2.0.2: {} - supports-color@7.2.0: dependencies: has-flag: 4.0.0 supports-preserve-symlinks-flag@1.0.0: {} - swr@2.3.3(react@19.1.0): + swr@2.3.3(react@19.1.1): dependencies: dequal: 2.0.3 - react: 19.1.0 - use-sync-external-store: 1.5.0(react@19.1.0) + react: 19.1.1 + use-sync-external-store: 1.5.0(react@19.1.1) synckit@0.11.4: dependencies: @@ -12848,12 +14190,18 @@ snapshots: term-size@2.2.1: {} + terser@5.44.0: + dependencies: + '@jridgewell/source-map': 0.3.11 + acorn: 8.15.0 + commander: 2.20.3 + source-map-support: 0.5.21 + optional: true + text-decoder@1.2.3: dependencies: b4a: 1.6.7 - text-encoding-utf-8@1.0.2: {} - throttleit@2.1.0: {} through@2.3.8: {} @@ -12898,15 +14246,23 @@ snapshots: trough@2.2.0: {} - ts-api-utils@2.1.0(typescript@5.8.3): + ts-api-utils@2.1.0(typescript@5.9.3): dependencies: - typescript: 5.8.3 + typescript: 5.9.3 - tsconfck@3.1.5(typescript@5.8.3): + tsconfck@3.1.5(typescript@5.9.3): optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.3 + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + optional: true - tsdown@0.11.12(typescript@5.8.3): + tsdown@0.11.12(typescript@5.9.3): dependencies: ansis: 4.0.0 cac: 6.7.14 @@ -12916,13 +14272,13 @@ snapshots: empathic: 1.1.0 hookable: 5.5.3 rolldown: 1.0.0-beta.9 - rolldown-plugin-dts: 0.13.3(rolldown@1.0.0-beta.9)(typescript@5.8.3) + rolldown-plugin-dts: 0.13.3(rolldown@1.0.0-beta.9)(typescript@5.9.3) semver: 7.7.2 tinyexec: 1.0.1 tinyglobby: 0.2.13 unconfig: 7.3.2 optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.3 transitivePeerDependencies: - '@oxc-project/runtime' - oxc-resolver @@ -13023,17 +14379,17 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3): + typescript-eslint@8.32.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.27.0(jiti@2.4.2) - typescript: 5.8.3 + '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.32.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.36.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.36.0(jiti@2.6.1) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - typescript@5.8.3: {} + typescript@5.9.3: {} uint8arrays@3.1.1: dependencies: @@ -13064,6 +14420,11 @@ snapshots: undici-types@6.21.0: {} + undici-types@7.13.0: + optional: true + + undici-types@7.16.0: {} + unified@11.0.5: dependencies: '@types/unist': 3.0.3 @@ -13185,9 +14546,9 @@ snapshots: urlpattern-polyfill@10.0.0: {} - use-sync-external-store@1.5.0(react@19.1.0): + use-sync-external-store@1.5.0(react@19.1.1): dependencies: - react: 19.1.0 + react: 19.1.1 utf-8-validate@5.0.10: dependencies: @@ -13202,11 +14563,9 @@ snapshots: uuid@11.1.0: {} - uuid@8.3.2: {} - - valibot@1.1.0(typescript@5.8.3): + valibot@1.1.0(typescript@5.9.3): optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.3 varint@6.0.0: {} @@ -13232,30 +14591,51 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - viem@2.29.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.4): + viem@2.29.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.4): dependencies: '@noble/curves': 1.8.2 '@noble/hashes': 1.7.2 '@scure/bip32': 1.6.2 '@scure/bip39': 1.5.4 - abitype: 1.0.8(typescript@5.8.3)(zod@3.25.4) + abitype: 1.0.8(typescript@5.9.3)(zod@3.25.4) isows: 1.0.7(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - ox: 0.6.9(typescript@5.8.3)(zod@3.25.4) + ox: 0.6.9(typescript@5.9.3)(zod@3.25.4) ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.3 transitivePeerDependencies: - bufferutil - utf-8-validate - zod - vite-node@3.2.4(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0): + vite-node@3.2.4(@types/node@22.15.19)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0): + dependencies: + cac: 6.7.14 + debug: 4.4.1 + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: 6.2.5(@types/node@22.15.19)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vite-node@3.2.4(@types/node@24.6.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.2.5(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + vite: 6.2.5(@types/node@24.6.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) transitivePeerDependencies: - '@types/node' - jiti @@ -13270,18 +14650,18 @@ snapshots: - tsx - yaml - vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0)): + vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@6.2.5(@types/node@22.15.19)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0)): dependencies: debug: 4.4.0 globrex: 0.1.2 - tsconfck: 3.1.5(typescript@5.8.3) + tsconfck: 3.1.5(typescript@5.9.3) optionalDependencies: - vite: 6.2.5(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + vite: 6.2.5(@types/node@22.15.19)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) transitivePeerDependencies: - supports-color - typescript - vite@6.2.5(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0): + vite@6.2.5(@types/node@22.15.19)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0): dependencies: esbuild: 0.25.2 postcss: 8.5.3 @@ -13289,16 +14669,31 @@ snapshots: optionalDependencies: '@types/node': 22.15.19 fsevents: 2.3.3 - jiti: 2.4.2 - lightningcss: 1.29.3 + jiti: 2.6.1 + lightningcss: 1.30.1 + terser: 5.44.0 + tsx: 4.20.3 + yaml: 2.8.0 + + vite@6.2.5(@types/node@24.6.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0): + dependencies: + esbuild: 0.25.2 + postcss: 8.5.3 + rollup: 4.39.0 + optionalDependencies: + '@types/node': 24.6.1 + fsevents: 2.3.3 + jiti: 2.6.1 + lightningcss: 1.30.1 + terser: 5.44.0 tsx: 4.20.3 yaml: 2.8.0 - vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@6.2.5(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0)) + '@vitest/mocker': 3.2.4(vite@6.2.5(@types/node@22.15.19)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -13316,8 +14711,8 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 6.2.5(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) - vite-node: 3.2.4(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + vite: 6.2.5(@types/node@22.15.19)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) + vite-node: 3.2.4(@types/node@22.15.19)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 @@ -13336,6 +14731,48 @@ snapshots: - tsx - yaml + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.6.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0): + dependencies: + '@types/chai': 5.2.2 + '@vitest/expect': 3.2.4 + '@vitest/mocker': 3.2.4(vite@6.2.5(@types/node@24.6.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0)) + '@vitest/pretty-format': 3.2.4 + '@vitest/runner': 3.2.4 + '@vitest/snapshot': 3.2.4 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.2.0 + debug: 4.4.1 + expect-type: 1.2.1 + magic-string: 0.30.17 + pathe: 2.0.3 + picomatch: 4.0.2 + std-env: 3.9.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.14 + tinypool: 1.1.1 + tinyrainbow: 2.0.0 + vite: 6.2.5(@types/node@24.6.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) + vite-node: 3.2.4(@types/node@24.6.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/debug': 4.1.12 + '@types/node': 24.6.1 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + vscode-languageserver-textdocument@1.0.12: {} vscode-uri@3.1.0: {} @@ -13344,9 +14781,9 @@ snapshots: dependencies: defaults: 1.0.4 - web-identity-schemas@0.1.6(valibot@1.1.0(typescript@5.8.3))(zod@3.25.4): + web-identity-schemas@0.1.6(valibot@1.1.0(typescript@5.9.3))(zod@3.25.4): optionalDependencies: - valibot: 1.1.0(typescript@5.8.3) + valibot: 1.1.0(typescript@5.9.3) zod: 3.25.4 web-namespaces@2.0.1: {} @@ -13435,11 +14872,6 @@ snapshots: wrappy@1.0.2: {} - ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10): - optionalDependencies: - bufferutil: 4.0.9 - utf-8-validate: 5.0.10 - ws@8.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): optionalDependencies: bufferutil: 4.0.9 From 1d7ff40980cfd28917fe55ddd3560de3170faceb Mon Sep 17 00:00:00 2001 From: Jonas Hahn Date: Tue, 14 Oct 2025 10:58:29 +0200 Subject: [PATCH 6/8] Code review - Verify Issues key to be a signer --- demos/payments/src/index.ts | 3 +- demos/payments/src/receipt-service.ts | 43 ++++++++++++++++--- demos/payments/src/server.ts | 10 ----- demos/payments/src/utils/ensure-balances.ts | 27 +++++++++--- .../payments/src/utils/ensure-private-keys.ts | 2 +- 5 files changed, 59 insertions(+), 26 deletions(-) diff --git a/demos/payments/src/index.ts b/demos/payments/src/index.ts index 9248b87..6986a1d 100644 --- a/demos/payments/src/index.ts +++ b/demos/payments/src/index.ts @@ -483,6 +483,7 @@ async function performSolanaPayment( .digest("hex") const memoInstruction = { programAddress: address("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"), + accounts: [], data: new TextEncoder().encode(expectedMemo) } @@ -569,7 +570,7 @@ async function performSolanaPayment( const signedTx = await signTransactionMessageWithSigners(txMessage) const wireTx = getBase64EncodedWireTransaction(signedTx) const base58Signature = await rpc - .sendTransaction(wireTx, { encoding: "base64", skipPreflight: true }) + .sendTransaction(wireTx, { encoding: "base64" }) .send() const signature = base58Signature log(colors.dim("View on Solana Explorer:")) diff --git a/demos/payments/src/receipt-service.ts b/demos/payments/src/receipt-service.ts index a47a97b..e273052 100644 --- a/demos/payments/src/receipt-service.ts +++ b/demos/payments/src/receipt-service.ts @@ -8,11 +8,9 @@ import { logJson, successMessage } from "@repo/cli-tools" +import { createSolanaRpc, signature as toSignature } from "@solana/kit" import { - createSolanaRpc, - signature as toSignature -} from "@solana/kit" -import { + addressFromDidPkhUri, createPaymentReceipt, getDidResolver, isDidPkhUri, @@ -260,7 +258,7 @@ type GetTransactionResult = Awaited> const MEMO_PROGRAM_ID = "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr" async function verifySolanaPayment( - _issuer: string, + issuer: string, paymentDetails: v.InferOutput, paymentOption: v.InferOutput ) { @@ -274,8 +272,8 @@ async function verifySolanaPayment( // Poll for the transaction to appear; RPC may not have it immediately after send let tx: GetTransactionResult | null = null - const maxAttempts = 10 - const delayMs = 1000 + const maxAttempts = 20 + const delayMs = 1500 for (let i = 0; i < maxAttempts; i++) { tx = await getTransaction(rpc, toSignature(signature)) @@ -287,6 +285,37 @@ async function verifySolanaPayment( throw new HTTPException(400, { message: "Invalid transaction" }) } + // Ensure the JWT issuer DID matches a signer of the transaction (typically the fee payer) + let issuerAddress: string + try { + issuerAddress = addressFromDidPkhUri(issuer) + } catch { + throw new HTTPException(400, { message: "Invalid issuer DID" }) + } + const signerPubkeys = new Set() + + // jsonParsed format exposes accountKeys with `pubkey` and `signer` flags + type ParsedAccountKey = Readonly<{ + pubkey: string | { toBase58(): string } + signer?: boolean + }> + type MessageWithAccountKeys = Readonly<{ + accountKeys?: readonly ParsedAccountKey[] + }> + + const msg = tx.transaction.message as unknown as MessageWithAccountKeys + for (const k of msg.accountKeys ?? []) { + if (k.signer) { + const pub = typeof k.pubkey === "string" ? k.pubkey : k.pubkey.toBase58() + if (pub) signerPubkeys.add(pub) + } + } + + if (!signerPubkeys.has(issuerAddress)) { + log(errorMessage("Issuer DID did not sign the transaction")) + throw new HTTPException(400, { message: "Invalid payer DID" }) + } + // Verify Memo binds to the Payment Request const expectedMemo = createHash("sha256") .update(paymentDetails.paymentRequestToken) diff --git a/demos/payments/src/server.ts b/demos/payments/src/server.ts index 580f126..b48934c 100644 --- a/demos/payments/src/server.ts +++ b/demos/payments/src/server.ts @@ -16,16 +16,6 @@ import { getKeypairInfo } from "./utils/keypair-info" import type { PaymentRequestInit } from "agentcommercekit" import type { Env, TypedResponse } from "hono" -function isSolanaKeysResult( - v: unknown -): v is { publicKey: string; secretKeyJson: string } { - return ( - !!v && - typeof (v as { publicKey?: unknown }).publicKey === "string" && - typeof (v as { secretKeyJson?: unknown }).secretKeyJson === "string" - ) -} - const app = new Hono() app.use(logger()) diff --git a/demos/payments/src/utils/ensure-balances.ts b/demos/payments/src/utils/ensure-balances.ts index 4a9460d..ff838f5 100644 --- a/demos/payments/src/utils/ensure-balances.ts +++ b/demos/payments/src/utils/ensure-balances.ts @@ -1,3 +1,4 @@ +// cspell:ignore lamports import { waitForEnter } from "@repo/cli-tools" import { createSolanaRpc, address as solAddress } from "@solana/kit" import { createPublicClient, erc20Abi, http } from "viem" @@ -48,10 +49,16 @@ export async function ensureNonZeroBalances( export async function ensureSolanaSolBalance(address: string) { const rpc = createSolanaRpc(solana.rpcUrl) const pubkey = solAddress(address) - let { value: lamports } = await rpc - .getBalance(pubkey, { commitment: solana.commitment }) - .send() - + let lamports = 0n + try { + ;({ value: lamports } = await rpc + .getBalance(pubkey, { commitment: solana.commitment }) + .send()) + } catch (error) { + console.error("Failed to fetch balance:", error) + console.log("Will retry after next attempt...") + lamports = 0n + } while (lamports === BigInt(0)) { console.log("We need to fund this Solana address with devnet SOL:", address) console.log("Faucet: https://faucet.solana.com/") @@ -62,9 +69,15 @@ export async function ensureSolanaSolBalance(address: string) { console.log("Once funded, press enter to check balance again") await waitForEnter() console.log("Attempting to fetch SOL balance... " + pubkey) - ;({ value: lamports } = await rpc - .getBalance(pubkey, { commitment: solana.commitment }) - .send()) + try { + ;({ value: lamports } = await rpc + .getBalance(pubkey, { commitment: solana.commitment }) + .send()) + } catch (error) { + console.error("Failed to fetch balance:", error) + console.log("Will retry after next attempt...") + continue + } console.log("SOL balance fetched (lamports):", lamports) } diff --git a/demos/payments/src/utils/ensure-private-keys.ts b/demos/payments/src/utils/ensure-private-keys.ts index 81836e9..3d00834 100644 --- a/demos/payments/src/utils/ensure-private-keys.ts +++ b/demos/payments/src/utils/ensure-private-keys.ts @@ -36,7 +36,7 @@ export async function ensureSolanaKeys( if (!privateKeyBase64) throw new Error("Failed to get private key bytes") const privateKeyBytes = new Uint8Array( - Buffer.from(privateKeyBase64, "base64") + Buffer.from(privateKeyBase64, "base64url") ) // Export raw 32-byte public key from SPKI (last 32 bytes of the DER-encoded key) const publicKeySpki = await crypto.subtle.exportKey("spki", kp.publicKey) From 3d4fcbcc0db90099ca1fede4d41f53a65e34fc8a Mon Sep 17 00:00:00 2001 From: Jonas Hahn Date: Wed, 15 Oct 2025 11:54:56 +0200 Subject: [PATCH 7/8] Remove Memo instruction - I think the Memo is probably not necessary when we check the JWT signature in the receipt. Will make it easier for agents to use. --- demos/payments/src/index.ts | 12 ----- demos/payments/src/receipt-service.ts | 68 +-------------------------- docs/ack-pay/receipt-verification.mdx | 1 - docs/demos/demo-payments.mdx | 5 +- 4 files changed, 3 insertions(+), 83 deletions(-) diff --git a/demos/payments/src/index.ts b/demos/payments/src/index.ts index 6986a1d..4c6acf8 100644 --- a/demos/payments/src/index.ts +++ b/demos/payments/src/index.ts @@ -1,4 +1,3 @@ -import { createHash } from "node:crypto" import { colors, demoFooter, @@ -477,16 +476,6 @@ async function performSolanaPayment( const recipient = address(paymentOption.recipient) - // Bind tx to the payment request using a Memo (replay mitigation) - const expectedMemo = createHash("sha256") - .update(paymentRequestToken) - .digest("hex") - const memoInstruction = { - programAddress: address("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"), - accounts: [], - data: new TextEncoder().encode(expectedMemo) - } - const [senderAta] = await findAssociatedTokenPda({ mint: mint, owner: payerSigner.address, @@ -558,7 +547,6 @@ async function performSolanaPayment( (m) => appendTransactionMessageInstructions( [ - memoInstruction, ...(maybeCreateRecipientAtaInstruction ? [maybeCreateRecipientAtaInstruction] : []), diff --git a/demos/payments/src/receipt-service.ts b/demos/payments/src/receipt-service.ts index e273052..7c821e6 100644 --- a/demos/payments/src/receipt-service.ts +++ b/demos/payments/src/receipt-service.ts @@ -1,4 +1,3 @@ -import { createHash } from "node:crypto" import { serve } from "@hono/node-server" import { logger } from "@repo/api-utils/middleware/logger" import { @@ -20,7 +19,6 @@ import { verifyPaymentRequestToken } from "agentcommercekit" import { caip2ChainIdSchema } from "agentcommercekit/schemas/valibot" -import bs58 from "bs58" import { Hono } from "hono" import { env } from "hono/adapter" import { HTTPException } from "hono/http-exception" @@ -31,7 +29,6 @@ import { chainId, publicClient, solana, usdcAddress } from "./constants" import { asAddress } from "./utils/as-address" import { getKeypairInfo } from "./utils/keypair-info" import type { Rpc, Signature } from "@solana/kit" -// Types narrowed inline to avoid @solana/web3.js dependency import type { paymentOptionSchema } from "agentcommercekit/schemas/valibot" import type { GetTransactionApi } from "gill" import type { Env } from "hono" @@ -255,8 +252,6 @@ function getTransaction(rpc: Rpc, signature: Signature) { type GetTransactionResult = Awaited> -const MEMO_PROGRAM_ID = "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr" - async function verifySolanaPayment( issuer: string, paymentDetails: v.InferOutput, @@ -316,18 +311,6 @@ async function verifySolanaPayment( throw new HTTPException(400, { message: "Invalid payer DID" }) } - // Verify Memo binds to the Payment Request - const expectedMemo = createHash("sha256") - .update(paymentDetails.paymentRequestToken) - .digest("hex") - .toLowerCase() - - const memos = extractMemosFromParsedTx(tx).map((m) => m.trim().toLowerCase()) - if (!memos.includes(expectedMemo)) { - log(errorMessage("Payment memo missing or invalid")) - throw new HTTPException(400, { message: "Invalid memo" }) - } - // Validate postTokenBalances reflect the transfer to recipient for the mint const mint = solana.usdcMint const recipient = @@ -364,6 +347,7 @@ async function verifySolanaPayment( if (typeof v === "bigint") return v return 0n } + const preAmount = toBigInt(preBal?.uiTokenAmount.amount ?? "0") const postAmount = toBigInt(postBal.uiTokenAmount.amount) const delta = postAmount - preAmount @@ -373,56 +357,6 @@ async function verifySolanaPayment( } } -function extractMemosFromParsedTx(txParsed: GetTransactionResult): string[] { - const memos: string[] = [] - - if (txParsed === null) return memos - - const scan = (ix: unknown) => { - if (typeof ix !== "object" || ix === null) return - - // Parsed memo - if ( - "program" in ix && - (ix as { program?: unknown }).program === "spl-memo" - ) { - const parsed = (ix as { parsed?: unknown }).parsed - if (typeof parsed === "string") { - memos.push(parsed) - return - } - const info = (parsed as { info?: { memo?: string } } | undefined)?.info - if (info?.memo) memos.push(String(info.memo)) - return - } - - // Partially decoded memo: data is base-58 - if ("programId" in ix) { - const pidField = ( - ix as { - programId: string | { toBase58(): string } - } - ).programId - const pid = typeof pidField === "string" ? pidField : pidField.toBase58() - const data = (ix as { data?: unknown }).data - if (pid === MEMO_PROGRAM_ID && typeof data === "string") { - try { - const raw = bs58.decode(data) - memos.push(Buffer.from(raw).toString("utf8")) - } catch { - // ignore malformed memo data - } - } - } - } - - for (const ix of txParsed.transaction.message.instructions) scan(ix) - for (const inner of txParsed.meta?.innerInstructions ?? []) { - for (const ix of inner.instructions) scan(ix) - } - return memos -} - serve({ port: 4568, fetch: app.fetch diff --git a/docs/ack-pay/receipt-verification.mdx b/docs/ack-pay/receipt-verification.mdx index 24d8472..c70f455 100644 --- a/docs/ack-pay/receipt-verification.mdx +++ b/docs/ack-pay/receipt-verification.mdx @@ -109,7 +109,6 @@ and proceed with service delivery. When verifying an on-chain payment on Solana, in addition to the general VC checks, a Receipt Service (or Server) typically performs these steps against the submitted transaction signature: - Fetch the parsed transaction (e.g., `getParsedTransaction`) with an appropriate commitment (e.g., `confirmed` in development, `finalized` in production). -- Extract Memo instructions and confirm a memo equals `sha256(paymentRequestToken)` to bind the payment to the specific request (replay protection). - Confirm the token mint matches the expected USDC mint for the environment. - Confirm the credited recipient is the expected address (e.g., canonical associated token account for recipient+mint). - Compute the delta in recipient `postTokenBalances - preTokenBalances` and verify it equals the required `amount` with matching `decimals`. diff --git a/docs/demos/demo-payments.mdx b/docs/demos/demo-payments.mdx index 5a17c46..62b0c01 100644 --- a/docs/demos/demo-payments.mdx +++ b/docs/demos/demo-payments.mdx @@ -67,9 +67,8 @@ Client requests access to a protected resource. Server responds with an HTTP `40 via a Payment Service. This demo also supports an on-chain payment on **Solana devnet** using SPL‑USDC. -In that path, the Client transfers USDC directly to the Server’s Solana address -and includes a Memo bound to the signed Payment Request for replay protection. The -Receipt Service verifies the memo, mint, recipient and exact amount before issuing +In that path, the Client transfers USDC directly to the Server’s Solana address. The +Receipt Service verifies the mint, recipient and exact amount before issuing a receipt. From 6a6ae283f0bd7a5f095dafa1a0def8cb857aad9b Mon Sep 17 00:00:00 2001 From: Matt Venables Date: Sat, 14 Feb 2026 10:30:18 -0500 Subject: [PATCH 8/8] refactor: clean up Solana payment integration Address review feedback and improve project conformance: - Remove gill, bs58, @solana/keys, @solana/addresses dependencies - Use ACK's generateKeypair and bytesToBase58 for Solana key generation - Replace hardcoded chain ID with solana.chainId constant - Extract helpers: networkLabel, executePayment, fetchBalance, extractSignerPubkeys, fetchTransaction - Replace console.log/console.error with log() from cli-tools - Remove unnecessary comments and unused catch parameters - Add lamports to cspell config - Clean up docs: placeholder address, remove chain-specific sections --- cspell.config.yaml | 5 + demos/payments/package.json | 14 +- demos/payments/src/constants.ts | 7 +- demos/payments/src/index.ts | 499 +++++++------ demos/payments/src/receipt-service.ts | 334 ++++----- demos/payments/src/server.ts | 102 +-- demos/payments/src/utils/ensure-balances.ts | 115 ++- .../payments/src/utils/ensure-private-keys.ts | 66 +- docs/ack-pay/payment-request-payload.mdx | 4 +- docs/ack-pay/receipt-verification.mdx | 14 +- docs/ack-pay/summary.mdx | 2 +- docs/demos/demo-payments.mdx | 14 +- docs/demos/demos.mdx | 2 +- package.json | 4 +- pnpm-lock.yaml | 661 ------------------ 15 files changed, 614 insertions(+), 1229 deletions(-) diff --git a/cspell.config.yaml b/cspell.config.yaml index 061432c..9508727 100644 --- a/cspell.config.yaml +++ b/cspell.config.yaml @@ -2,13 +2,18 @@ language: en words: - agentcommercekit - bitstring + - blockhash - caip - dbname + - devnet - healthcheck - keypair + - lamports - multibase + - multicall - multicodec - multikey + - pubkeys - secp256 - skyfire - solana diff --git a/demos/payments/package.json b/demos/payments/package.json index 2cb246c..9c70640 100644 --- a/demos/payments/package.json +++ b/demos/payments/package.json @@ -4,16 +4,16 @@ "private": true, "homepage": "https://github.com/agentcommercekit/ack#readme", "bugs": "https://github.com/agentcommercekit/ack/issues", - "license": "MIT", - "author": { - "name": "Catena Labs", - "url": "https://catenalabs.com" - }, "repository": { "type": "git", "url": "git+https://github.com/agentcommercekit/ack.git", "directory": "demos/payments" }, + "license": "MIT", + "author": { + "name": "Catena Labs", + "url": "https://catenalabs.com" + }, "type": "module", "main": "./src/index.ts", "scripts": { @@ -31,12 +31,8 @@ "@repo/cli-tools": "workspace:*", "@solana-program/system": "^0.9.0", "@solana-program/token": "^0.6.0", - "@solana/addresses": "^4.0.0", - "@solana/keys": "^4.0.0", "@solana/kit": "^4.0.0", "agentcommercekit": "workspace:*", - "bs58": "^6.0.0", - "gill": "^0.12.0", "hono": "catalog:", "valibot": "catalog:", "viem": "catalog:" diff --git a/demos/payments/src/constants.ts b/demos/payments/src/constants.ts index e540896..073cdf0 100644 --- a/demos/payments/src/constants.ts +++ b/demos/payments/src/constants.ts @@ -27,16 +27,11 @@ export const publicClient = createPublicClient({ transport: http(), }) -// Solana configuration for demo (devnet) export const solana = { - // CAIP-2 chain id for Solana devnet chainId: caip2ChainIds.solanaDevnet, - // Example RPC; users can override via environment if desired rpcUrl: process.env.SOLANA_RPC_URL ?? "https://api.devnet.solana.com", - // Example USDC devnet mint; replace if you prefer a different SPL mint usdcMint: process.env.SOLANA_USDC_MINT ?? "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU", - // Commitment to use for verification - commitment: "confirmed" as const + commitment: "confirmed" as const, } diff --git a/demos/payments/src/index.ts b/demos/payments/src/index.ts index beb946f..f234847 100644 --- a/demos/payments/src/index.ts +++ b/demos/payments/src/index.ts @@ -11,7 +11,13 @@ import { successMessage, waitForEnter, wordWrap, -} from "@repo/cli-tools"; +} from "@repo/cli-tools" +import { + findAssociatedTokenPda, + getCreateAssociatedTokenInstructionAsync, + getTransferCheckedInstruction, + TOKEN_PROGRAM_ADDRESS, +} from "@solana-program/token" import { address, appendTransactionMessageInstructions, @@ -23,13 +29,7 @@ import { setTransactionMessageFeePayerSigner, setTransactionMessageLifetimeUsingBlockhash, signTransactionMessageWithSigners, -} from "@solana/kit"; -import { - TOKEN_PROGRAM_ADDRESS, - findAssociatedTokenPda, - getCreateAssociatedTokenInstructionAsync, - getTransferCheckedInstruction, -} from "@solana-program/token"; +} from "@solana/kit" import { addressFromDidPkhUri, createDidPkhUri, @@ -44,27 +44,42 @@ import { type PaymentReceiptCredential, type PaymentRequest, type Verifiable, -} from "agentcommercekit"; -import { jwtStringSchema, paymentRequestSchema } from "agentcommercekit/schemas/valibot"; -import * as v from "valibot"; -import { isAddress } from "viem"; -import { chain, chainId, publicClient, SERVER_URL, solana, usdcAddress } from "./constants"; -import { ensureNonZeroBalances, ensureSolanaSolBalance } from "./utils/ensure-balances"; -import { ensurePrivateKey, ensureSolanaKeys } from "./utils/ensure-private-keys"; -import { getKeypairInfo, type KeypairInfo } from "./utils/keypair-info"; -import { transferUsdc } from "./utils/usdc-contract"; -import "./server"; -import "./receipt-service"; -import "./payment-service"; +} from "agentcommercekit" +import { + jwtStringSchema, + paymentRequestSchema, +} from "agentcommercekit/schemas/valibot" +import * as v from "valibot" +import { isAddress } from "viem" +import { + chain, + chainId, + publicClient, + SERVER_URL, + solana, + usdcAddress, +} from "./constants" +import { + ensureNonZeroBalances, + ensureSolanaSolBalance, +} from "./utils/ensure-balances" +import { ensurePrivateKey, ensureSolanaKeys } from "./utils/ensure-private-keys" +import { getKeypairInfo, type KeypairInfo } from "./utils/keypair-info" +import { transferUsdc } from "./utils/usdc-contract" +import "./server" +import "./receipt-service" +import "./payment-service" /** * Example showcasing payments using the ACK-Pay protocol. */ async function main() { - console.clear(); - log(demoHeader("ACK-Pay"), { wrap: false }); + console.clear() + log(demoHeader("ACK-Pay"), { wrap: false }) log( - colors.bold(colors.magenta("\n✨ === Agent-Native Payments Protocol Demo === ✨")), + colors.bold( + colors.magenta("\n✨ === Agent-Native Payments Protocol Demo === ✨"), + ), colors.cyan(` This demo will guide you through a typical payment flow between a Client and a Server. ACK-Pay enables secure, verifiable, and interoperable financial transactions among autonomous agents, services, and human participants. You can find more information at ${link("https://www.agentcommercekit.com")}. @@ -77,25 +92,26 @@ The demo involves the following key components from the ACK-Pay protocol:`), 3. ${colors.bold("Payment Service:")} An intermediary that handles compliant payment execution. In this demo, the payment service is used for Credit Card payments, and is bypassed for on-chain payments using a crypto wallet and the Base Sepolia network to transfer USDC. In a full ACK-Pay deployment, a dedicated Payment Service offers more features like payment method abstraction (e.g., paying with different currencies or even credit cards), currency conversion, and enhanced compliance. 4. ${colors.bold("Receipt Service:")} A service that verifies the payment and issues a cryptographically verifiable receipt (as a Verifiable Credential). `), - ); + ) - await waitForEnter("Press Enter to embark on the ACK-Pay journey..."); + await waitForEnter("Press Enter to embark on the ACK-Pay journey...") log(` Before we begin, we need to make sure all entities have public/private key pairs to sign messages. These can be defined as Environment variables or in your local .env file. If they are not present, we will generate new ones for you.\n ${colors.dim("Checking for existing keys ...")} -`); +`) - const [clientPrivateKeyHex, serverPrivateKeyHex, ..._rest] = await Promise.all([ - ensurePrivateKey("CLIENT_PRIVATE_KEY_HEX"), - ensurePrivateKey("SERVER_PRIVATE_KEY_HEX"), - ensurePrivateKey("RECEIPT_SERVICE_PRIVATE_KEY_HEX"), - ensurePrivateKey("PAYMENT_SERVICE_PRIVATE_KEY_HEX"), - ]); + const [clientPrivateKeyHex, serverPrivateKeyHex, ..._rest] = + await Promise.all([ + ensurePrivateKey("CLIENT_PRIVATE_KEY_HEX"), + ensurePrivateKey("SERVER_PRIVATE_KEY_HEX"), + ensurePrivateKey("RECEIPT_SERVICE_PRIVATE_KEY_HEX"), + ensurePrivateKey("PAYMENT_SERVICE_PRIVATE_KEY_HEX"), + ]) - const clientKeypairInfo = await getKeypairInfo(clientPrivateKeyHex); - const serverKeypairInfo = await getKeypairInfo(serverPrivateKeyHex); + const clientKeypairInfo = await getKeypairInfo(clientPrivateKeyHex) + const serverKeypairInfo = await getKeypairInfo(serverPrivateKeyHex) log( ` @@ -105,26 +121,26 @@ ${colors.bold("Client:")} ${colors.dim(clientKeypairInfo.publicKeyHex)} ${colors.bold("Server:")} ${colors.dim(serverKeypairInfo.publicKeyHex)} `, { wrap: false }, - ); + ) - log(sectionHeader("🚪 Client Requests Protected Resource")); + log(sectionHeader("🚪 Client Requests Protected Resource")) log( colors.dim( `${colors.bold("Client Agent 👤 -> Server Agent 🖥️")} The Client attempts to access a protected resource on the Server. Since no valid payment receipt is presented, the Server will respond with an HTTP 402 'Payment Required' status. This response includes a cryptographically signed Payment Request (as a JWT), specifying the required amount, currency, and recipient for the payment.`, ), - ); + ) - await waitForEnter("Press Enter to make the request..."); + await waitForEnter("Press Enter to make the request...") - log(colors.dim("📡 Initiating GET request to the Server Agent...")); + log(colors.dim("📡 Initiating GET request to the Server Agent...")) const response1 = await fetch(SERVER_URL, { method: "GET", - }); + }) if (response1.status !== 402) { - throw new Error("Server did not respond with 402"); + throw new Error("Server did not respond with 402") } const { paymentRequestToken, paymentRequest } = v.parse( @@ -133,104 +149,108 @@ The Client attempts to access a protected resource on the Server. Since no valid paymentRequest: paymentRequestSchema, }), await response1.json(), - ); + ) // This demo uses JWT strings for the payment request token, but this is not a requirement of the protocol. if (!isJwtString(paymentRequestToken)) { - throw new Error(errorMessage("Invalid payment request token")); + throw new Error(errorMessage("Invalid payment request token")) } - log(successMessage("Successfully received 402 Payment Required response from Server Agent. 🛑")); - log(colors.bold("\n📜 Payment Request Details (from Server Agent):")); - logJson(paymentRequest as Record, colors.dim); + log( + successMessage( + "Successfully received 402 Payment Required response from Server Agent. 🛑", + ), + ) + log(colors.bold("\n📜 Payment Request Details (from Server Agent):")) + logJson(paymentRequest as Record, colors.dim) log( colors.magenta( wordWrap( "\n💡 The 'paymentRequestToken' is a JWT signed by the Server, ensuring the integrity and authenticity of the payment request. The Client will include this token when requesting a receipt, along with the payment option id and metadata.", ), ), - ); + ) + + const paymentOptions = paymentRequest.paymentOptions + + function networkLabel(network: string | undefined): string { + if (network === "stripe") return "Stripe" + if (network?.startsWith("solana:")) return "Solana" + return "Base Sepolia" + } - const paymentOptions = paymentRequest.paymentOptions; const selectedPaymentOptionId = await select({ message: "Select which payment option to use", choices: paymentOptions.map((option) => ({ - name: - option.network === "stripe" - ? "Stripe" - : option.network?.startsWith("solana:") - ? "Solana" - : "Base Sepolia", + name: networkLabel(option.network), value: option.id, - description: `Pay on ${ - option.network === "stripe" - ? "Stripe" - : option.network?.startsWith("solana:") - ? "Solana" - : "Base Sepolia" - } using ${option.currency}`, + description: `Pay on ${networkLabel(option.network)} using ${option.currency}`, })), - }); + }) const selectedPaymentOption = paymentOptions.find( (option) => option.id === selectedPaymentOptionId, - ); + ) if (!selectedPaymentOption) { - throw new Error(errorMessage("Invalid payment option")); + throw new Error(errorMessage("Invalid payment option")) } - let receipt: string; - let details: Verifiable; - - if (selectedPaymentOption.network === "stripe") { - const paymentResult = await performStripePayment( - clientKeypairInfo, - selectedPaymentOption, - paymentRequestToken, - ); - receipt = paymentResult.receipt; - details = paymentResult.details; - } else if ( - typeof selectedPaymentOption.network === "string" && - selectedPaymentOption.network.startsWith("solana:") - ) { - const paymentResult = await performSolanaPayment( - clientKeypairInfo, - selectedPaymentOption, - paymentRequestToken, - ); - receipt = paymentResult.receipt; - details = paymentResult.details; - } else if (selectedPaymentOption.network === chainId) { - const paymentResult = await performOnChainPayment( - clientKeypairInfo, - selectedPaymentOption, - paymentRequestToken, - ); - receipt = paymentResult.receipt; - details = paymentResult.details; - } else { - throw new Error(errorMessage("Invalid payment option")); + function executePayment( + option: PaymentRequest["paymentOptions"][number], + ): Promise<{ + receipt: string + details: Verifiable + }> { + if (option.network === "stripe") { + return performStripePayment( + clientKeypairInfo, + option, + paymentRequestToken, + ) + } + if (option.network?.startsWith("solana:")) { + return performSolanaPayment( + clientKeypairInfo, + option, + paymentRequestToken, + ) + } + if (option.network === chainId) { + return performOnChainPayment( + clientKeypairInfo, + option, + paymentRequestToken, + ) + } + throw new Error(errorMessage("Invalid payment option")) } + const { receipt, details } = await executePayment(selectedPaymentOption) + log( successMessage( "Verifiable Payment Receipt (VC) issued successfully by the Receipt Service! 🎉", ), colors.bold("📄 Receipt Details (Verifiable Credential):"), - ); - const resolver = getDidResolver(); + ) + const resolver = getDidResolver() const parsedDetails = - typeof details === "string" ? await parseJwtCredential(details, resolver) : details; - logJson(parsedDetails, colors.dim); + typeof details === "string" + ? await parseJwtCredential(details, resolver) + : details + logJson(parsedDetails, colors.dim) log( colors.magenta( "💡 This receipt is a Verifiable Credential (VC) in JWT format. It's cryptographically signed by the Receipt Service, making it tamper-proof and independently verifiable. It links the original payment request from the Server to the confirmed on-chain transaction and the Client's identity.", ), - ); + ) - log(sectionHeader("✅ Access Protected Resource with Receipt (Client Agent -> Server Agent)")); + log( + sectionHeader( + "✅ Access Protected Resource with Receipt (Client Agent -> Server Agent)", + ), + ) log( colors.dim( `${colors.bold("Client Agent 👤 -> Server Agent 🖥️")} @@ -243,26 +263,32 @@ ${colors.bold("The Server Agent then performs its own verifications:")} If the receipt is valid, the Server grants access to the protected resource.`, ), - ); + ) - await waitForEnter("Press Enter to present the receipt to the Server and access the resource..."); + await waitForEnter( + "Press Enter to present the receipt to the Server and access the resource...", + ) - log(colors.dim("🔐 Making authenticated GET request to the Server Agent with the receipt...")); + log( + colors.dim( + "🔐 Making authenticated GET request to the Server Agent with the receipt...", + ), + ) const response3 = await fetch(SERVER_URL, { method: "GET", headers: { Authorization: `Bearer ${receipt}`, }, - }); + }) if (response3.status !== 200) { - throw new Error(errorMessage("Server did not respond with 200")); + throw new Error(errorMessage("Server did not respond with 200")) } - const result = (await response3.json()) as Record; - log(colors.bold("🚪 Server Response (Protected Resource):")); - logJson(result, colors.dim); + const result = (await response3.json()) as Record + log(colors.bold("🚪 Server Response (Protected Resource):")) + logJson(result, colors.dim) log( successMessage("Access granted to protected resource! 🔓"), colors.bold(colors.magenta("\n🎉 === ACK-Pay Demo Complete === 🎉\n")), @@ -274,7 +300,7 @@ If the receipt is valid, the Server grants access to the protected resource.`, ), demoFooter("Thank You!"), { wrap: false }, - ); + ) } async function performOnChainPayment( @@ -282,67 +308,84 @@ async function performOnChainPayment( paymentOption: PaymentRequest["paymentOptions"][number], paymentRequestToken: JwtString, ) { - const receiptServiceUrl = paymentOption.receiptService; + const receiptServiceUrl = paymentOption.receiptService if (!receiptServiceUrl) { - throw new Error(errorMessage("Receipt service URL is required")); + throw new Error(errorMessage("Receipt service URL is required")) } - log(colors.dim("🔍 Checking client wallet balances...")); - await ensureNonZeroBalances(chain, client.crypto.address, usdcAddress); + log(colors.dim("🔍 Checking client wallet balances...")) + await ensureNonZeroBalances(chain, client.crypto.address, usdcAddress) log( successMessage( "Balances verified! Client has sufficient ETH for gas and USDC for payment. ✅\n\n", ), - ); + ) - log(sectionHeader("💸 Execute Payment (Client Agent -> Payment Service / Blockchain)")); + log( + sectionHeader( + "💸 Execute Payment (Client Agent -> Payment Service / Blockchain)", + ), + ) log( colors.dim( `${colors.bold("Client Agent 👤 -> Blockchain 🔗 (acting as Payment Service)")} The Client Agent now uses the details from the Payment Request to make the payment. In this demo, the Client transfers the specified amount of USDC to the Server's address on the Base Sepolia testnet. The resulting transaction hash serves as a preliminary proof of payment. This interaction implicitly uses the blockchain as a Settlement Network and the wallet interaction as a form of Payment Service.`, ), - ); + ) - await waitForEnter("Press Enter to proceed with the on-chain USDC payment..."); + await waitForEnter("Press Enter to proceed with the on-chain USDC payment...") const payToAddress = isDidPkhUri(paymentOption.recipient) ? addressFromDidPkhUri(paymentOption.recipient) - : paymentOption.recipient; + : paymentOption.recipient if (!isAddress(payToAddress)) { - throw new Error(errorMessage(`Invalid recipient address: ${payToAddress}`)); + throw new Error(errorMessage(`Invalid recipient address: ${payToAddress}`)) } if (paymentOption.currency !== "USDC") { - throw new Error(errorMessage(`Unsupported currency: ${paymentOption.currency}`)); + throw new Error( + errorMessage(`Unsupported currency: ${paymentOption.currency}`), + ) } - log(colors.dim("Initiating USDC transfer...")); + log(colors.dim("Initiating USDC transfer...")) const hash = await transferUsdc( client.crypto.account, payToAddress, BigInt(paymentOption.amount), - ); + ) - log(successMessage("Payment transaction submitted to the blockchain. 🚀"), "Transaction hash:"); - log(colors.cyan(hash), { wrap: false }); - log(colors.dim("View on BaseScan:")); + log( + successMessage("Payment transaction submitted to the blockchain. 🚀"), + "Transaction hash:", + ) + log(colors.cyan(hash), { wrap: false }) + log(colors.dim("View on BaseScan:")) log(link(`https://sepolia.basescan.org/tx/${hash}`), { wrap: false, - }); + }) log( colors.magenta( "💡 This transaction is now being processed by the Base Sepolia network. We need to wait for it to be confirmed (included in a block) before we can reliably use it as proof of payment.", ), - ); + ) - log(colors.dim("⏳ Waiting for transaction confirmation (this might take a moment)...")); - await publicClient.waitForTransactionReceipt({ hash: hash as `0x${string}` }); - log(successMessage("Transaction confirmed on the blockchain! ✅\n\n")); + log( + colors.dim( + "⏳ Waiting for transaction confirmation (this might take a moment)...", + ), + ) + await publicClient.waitForTransactionReceipt({ hash: hash as `0x${string}` }) + log(successMessage("Transaction confirmed on the blockchain! ✅\n\n")) - log(sectionHeader("🧾 Obtain Verifiable Receipt (Client Agent -> Receipt Service)")); + log( + sectionHeader( + "🧾 Obtain Verifiable Receipt (Client Agent -> Receipt Service)", + ), + ) log( colors.dim( `${colors.bold("Client Agent 👤 -> Receipt Service 🧾")} @@ -356,11 +399,13 @@ ${colors.bold("The Receipt Service then performs several crucial verifications:" If all checks pass, the Receipt Service issues a Verifiable Credential (VC) serving as the payment receipt.`, ), - ); + ) - await waitForEnter("Press Enter to request the verifiable receipt..."); + await waitForEnter("Press Enter to request the verifiable receipt...") - log(colors.dim("✍️ Creating a signed payload (JWT) for the Receipt Service...")); + log( + colors.dim("✍️ Creating a signed payload (JWT) for the Receipt Service..."), + ) const payload = { paymentRequestToken, @@ -370,27 +415,27 @@ If all checks pass, the Receipt Service issues a Verifiable Credential (VC) serv network: chainId, // eip155:84532 }, payerDid: client.did, - }; + } const signedPayload = await createJwt(payload, { issuer: client.did, signer: client.jwtSigner, - }); + }) - log(colors.dim("Submitting to receipt service...")); + log(colors.dim("Submitting to receipt service...")) const response2 = await fetch(receiptServiceUrl, { method: "POST", body: JSON.stringify({ payload: signedPayload, }), - }); + }) const { receipt, details } = (await response2.json()) as { - receipt: string; - details: Verifiable; - }; + receipt: string + details: Verifiable + } - return { receipt, details }; + return { receipt, details } } async function performSolanaPayment( @@ -398,63 +443,65 @@ async function performSolanaPayment( paymentOption: PaymentRequest["paymentOptions"][number], paymentRequestToken: JwtString, ) { - const receiptServiceUrl = paymentOption.receiptService; + const receiptServiceUrl = paymentOption.receiptService if (!receiptServiceUrl) { - throw new Error(errorMessage("Receipt service URL is required")); + throw new Error(errorMessage("Receipt service URL is required")) } - log(sectionHeader("💸 Execute Payment (Client Agent -> Solana / SPL Token)")); + log(sectionHeader("💸 Execute Payment (Client Agent -> Solana / SPL Token)")) - const rpc = createSolanaRpc(solana.rpcUrl); + const rpc = createSolanaRpc(solana.rpcUrl) const clientSolKeys = await ensureSolanaKeys( "SOLANA_CLIENT_PUBLIC_KEY", "SOLANA_CLIENT_SECRET_KEY_JSON", - ); - const keyBytes = new Uint8Array(JSON.parse(clientSolKeys.secretKeyJson) as number[]); - const payerSigner = await createKeyPairSignerFromBytes(keyBytes); + ) + const keyBytes = new Uint8Array( + JSON.parse(clientSolKeys.secretKeyJson) as number[], + ) + const payerSigner = await createKeyPairSignerFromBytes(keyBytes) - const mint = address(solana.usdcMint); + const mint = address(solana.usdcMint) // Ensure payer has SOL for fees - await ensureSolanaSolBalance(clientSolKeys.publicKey); + await ensureSolanaSolBalance(clientSolKeys.publicKey) - const recipient = address(paymentOption.recipient); + const recipient = address(paymentOption.recipient) const [senderAta] = await findAssociatedTokenPda({ - mint: mint, + mint, owner: payerSigner.address, tokenProgram: TOKEN_PROGRAM_ADDRESS, - }); + }) const [recipientAta] = await findAssociatedTokenPda({ - mint: mint, + mint, owner: recipient, tokenProgram: TOKEN_PROGRAM_ADDRESS, - }); + }) // Ensure sender has USDC balance; if not, prompt Circle faucet - let tokenBal: { amount: string }; + let tokenBal: { amount: string } try { - ({ value: tokenBal } = await rpc + ;({ value: tokenBal } = await rpc .getTokenAccountBalance(senderAta, { commitment: solana.commitment }) - .send()); - } catch (e: unknown) { - tokenBal = { amount: "0" }; + .send()) + } catch { + tokenBal = { amount: "0" } } while (tokenBal.amount === "0") { log( colors.dim( "USDC balance is 0. Please request devnet USDC from Circle's faucet, then press Enter to retry.", ), - ); - log(colors.dim(`Send USDC to your wallet: ${clientSolKeys.publicKey}`)); - log(colors.cyan("https://faucet.circle.com/")); - await waitForEnter("Press Enter after funding USDC..."); + ) + log(colors.dim(`Send USDC to your wallet: ${clientSolKeys.publicKey}`)) + log(colors.cyan("https://faucet.circle.com/")) + await waitForEnter("Press Enter after funding USDC...") try { - ({ value: tokenBal } = await rpc + ;({ value: tokenBal } = await rpc .getTokenAccountBalance(senderAta, { commitment: solana.commitment }) - .send()); - } catch (e: unknown) { - tokenBal = { amount: "0" }; + .send()) + } catch { + tokenBal = { amount: "0" } } } const { value: recipientAtaInfo } = await rpc @@ -462,18 +509,18 @@ async function performSolanaPayment( commitment: solana.commitment, encoding: "base64", }) - .send(); + .send() const maybeCreateRecipientAtaInstruction = !recipientAtaInfo ? await getCreateAssociatedTokenInstructionAsync({ payer: payerSigner, owner: recipient, - mint: mint, + mint, ata: recipientAta, tokenProgram: TOKEN_PROGRAM_ADDRESS, }) - : undefined; + : undefined - const amount = BigInt(paymentOption.amount); + const amount = BigInt(paymentOption.amount) const transferIx = getTransferCheckedInstruction({ source: senderAta, destination: recipientAta, @@ -481,9 +528,9 @@ async function performSolanaPayment( authority: payerSigner.address, amount, decimals: paymentOption.decimals, - }); + }) - const { value: latestBlockhash } = await rpc.getLatestBlockhash().send(); + const { value: latestBlockhash } = await rpc.getLatestBlockhash().send() const txMessage = pipe( createTransactionMessage({ version: 0 }), (m) => setTransactionMessageFeePayerSigner(payerSigner, m), @@ -491,29 +538,31 @@ async function performSolanaPayment( (m) => appendTransactionMessageInstructions( [ - ...(maybeCreateRecipientAtaInstruction ? [maybeCreateRecipientAtaInstruction] : []), + ...(maybeCreateRecipientAtaInstruction + ? [maybeCreateRecipientAtaInstruction] + : []), transferIx, ], m, ), - ); - const signedTx = await signTransactionMessageWithSigners(txMessage); - const wireTx = getBase64EncodedWireTransaction(signedTx); - const base58Signature = await rpc.sendTransaction(wireTx, { encoding: "base64" }).send(); - const signature = base58Signature; - log(colors.dim("View on Solana Explorer:")); + ) + const signedTx = await signTransactionMessageWithSigners(txMessage) + const wireTx = getBase64EncodedWireTransaction(signedTx) + const signature = await rpc + .sendTransaction(wireTx, { encoding: "base64" }) + .send() + log(colors.dim("View on Solana Explorer:")) log(link(`https://explorer.solana.com/tx/${signature}?cluster=devnet`), { wrap: false, - }); + }) - // Request receipt from receipt-service - // Sign with the actual Solana payer (Ed25519) and bind payerDid to Solana did:pkh - // Build an ACK signer from the same Ed25519 seed used for the Solana payer + // Build an ACK Ed25519 signer from the Solana payer seed to sign the receipt request const ackEd25519Keypair = await generateKeypair( "Ed25519", new Uint8Array(Array.from(keyBytes).slice(0, 32)), - ); - const ackEd25519JwtSigner = createJwtSigner(ackEd25519Keypair); + ) + const ackEd25519JwtSigner = createJwtSigner(ackEd25519Keypair) + const payerDid = createDidPkhUri(solana.chainId, clientSolKeys.publicKey) const payload = { paymentRequestToken, paymentOptionId: paymentOption.id, @@ -521,27 +570,27 @@ async function performSolanaPayment( network: solana.chainId, txHash: signature, }, - payerDid: createDidPkhUri(solana.chainId, clientSolKeys.publicKey), - }; + payerDid, + } const signedPayload = await createJwt( payload, { - issuer: createDidPkhUri(solana.chainId, clientSolKeys.publicKey), + issuer: payerDid, signer: ackEd25519JwtSigner, }, { alg: "EdDSA" }, - ); + ) const response = await fetch(receiptServiceUrl, { method: "POST", body: JSON.stringify({ payload: signedPayload }), - }); + }) const { receipt, details } = (await response.json()) as { - receipt: string; - details: Verifiable; - }; + receipt: string + details: Verifiable + } - return { receipt, details }; + return { receipt, details } } async function performStripePayment( @@ -549,12 +598,16 @@ async function performStripePayment( paymentOption: PaymentRequest["paymentOptions"][number], paymentRequestToken: JwtString, ) { - const paymentServiceUrl = paymentOption.paymentService; + const paymentServiceUrl = paymentOption.paymentService if (!paymentServiceUrl) { - throw new Error(errorMessage("Payment service URL is required")); + throw new Error(errorMessage("Payment service URL is required")) } - log(sectionHeader("💸 Execute Payment (Client Agent -> Payment Service / Stripe)")); + log( + sectionHeader( + "💸 Execute Payment (Client Agent -> Payment Service / Stripe)", + ), + ) log( colors.dim( `${colors.bold("Client Agent 👤 -> Payment Service 💳 -> Stripe")} @@ -564,11 +617,11 @@ The Client Agent now uses the details from the Payment Request to initiate a Str This flow is simulated in this example. `, ), - ); + ) - await waitForEnter("Press Enter to initiate the Stripe payment..."); + await waitForEnter("Press Enter to initiate the Stripe payment...") - log(colors.dim("Initiating Stripe payment flow...")); + log(colors.dim("Initiating Stripe payment flow...")) // Step 1: Get the Stripe payment URL from the payment service const response1 = await fetch(paymentServiceUrl, { @@ -577,35 +630,37 @@ This flow is simulated in this example. paymentOptionId: paymentOption.id, paymentRequestToken, }), - }); + }) if (!response1.ok) { - throw new Error(errorMessage("Failed to get Stripe payment URL")); + throw new Error(errorMessage("Failed to get Stripe payment URL")) } - const { paymentUrl } = (await response1.json()) as { paymentUrl: string }; + const { paymentUrl } = (await response1.json()) as { paymentUrl: string } log( successMessage("Stripe payment URL generated successfully! 🚀"), colors.dim("\nSample Stripe payment URL:"), colors.cyan(paymentUrl), { wrap: false }, - ); + ) log( colors.magenta( "\n💡 In a real implementation, this would open in a browser for the agent or user to complete the payment.", ), - ); + ) // Extract the return_to URL from the payment URL - const returnToUrl = new URL(paymentUrl).searchParams.get("return_to"); + const returnToUrl = new URL(paymentUrl).searchParams.get("return_to") if (!returnToUrl) { - throw new Error(errorMessage("Invalid payment URL - missing return_to parameter")); + throw new Error( + errorMessage("Invalid payment URL - missing return_to parameter"), + ) } - log(colors.dim("\n⏳ Simulating successful payment and callback...")); + log(colors.dim("\n⏳ Simulating successful payment and callback...")) - await waitForEnter("Press Enter to simulate payment completion..."); + await waitForEnter("Press Enter to simulate payment completion...") // Step 2: Simulate the callback from Stripe with payment confirmation const response2 = await fetch(returnToUrl, { @@ -617,22 +672,22 @@ This flow is simulated in this example. eventId: "evt_" + Math.random().toString(36).substring(7), // Simulated Stripe event ID }, }), - }); + }) if (!response2.ok) { - throw new Error(errorMessage("Failed to process payment callback")); + throw new Error(errorMessage("Failed to process payment callback")) } const { receipt, details } = (await response2.json()) as { - receipt: string; - details: Verifiable; - }; + receipt: string + details: Verifiable + } - return { receipt, details }; + return { receipt, details } } main() .catch(console.error) .finally(() => { - process.exit(0); - }); + process.exit(0) + }) diff --git a/demos/payments/src/receipt-service.ts b/demos/payments/src/receipt-service.ts index 2b9f4bc..caad4fd 100644 --- a/demos/payments/src/receipt-service.ts +++ b/demos/payments/src/receipt-service.ts @@ -1,7 +1,13 @@ -import { serve } from "@hono/node-server"; -import { logger } from "@repo/api-utils/middleware/logger"; -import { colors, errorMessage, log, logJson, successMessage } from "@repo/cli-tools"; -import { createSolanaRpc, signature as toSignature } from "@solana/kit"; +import { serve } from "@hono/node-server" +import { logger } from "@repo/api-utils/middleware/logger" +import { + colors, + errorMessage, + log, + logJson, + successMessage, +} from "@repo/cli-tools" +import { createSolanaRpc, signature as toSignature } from "@solana/kit" import { addressFromDidPkhUri, createPaymentReceipt, @@ -11,28 +17,30 @@ import { signCredential, verifyJwt, verifyPaymentRequestToken, -} from "agentcommercekit"; -import { caip2ChainIdSchema, type paymentOptionSchema } from "agentcommercekit/schemas/valibot"; -import { Hono, type Env } from "hono"; -import { env } from "hono/adapter"; -import { HTTPException } from "hono/http-exception"; -import * as v from "valibot"; -import { erc20Abi, isAddressEqual } from "viem"; -import { parseEventLogs } from "viem/utils"; -import { chainId, publicClient, solana, usdcAddress } from "./constants"; -import { asAddress } from "./utils/as-address"; -import { getKeypairInfo } from "./utils/keypair-info"; -import type { Rpc, Signature } from "@solana/kit"; -import type { GetTransactionApi } from "gill"; - -const app = new Hono(); -app.use(logger()); +} from "agentcommercekit" +import { + caip2ChainIdSchema, + type paymentOptionSchema, +} from "agentcommercekit/schemas/valibot" +import { Hono, type Env } from "hono" +import { env } from "hono/adapter" +import { HTTPException } from "hono/http-exception" +import * as v from "valibot" +import { erc20Abi, isAddressEqual } from "viem" +import { parseEventLogs } from "viem/utils" +import { chainId, publicClient, solana, usdcAddress } from "./constants" +import { asAddress } from "./utils/as-address" +import { getKeypairInfo } from "./utils/keypair-info" + +const app = new Hono() +app.use(logger()) const bodySchema = v.object({ payload: v.string(), -}); +}) const paymentDetailsSchema = v.object({ + paymentOptionId: v.string(), metadata: v.union([ v.object({ network: caip2ChainIdSchema, @@ -45,7 +53,7 @@ const paymentDetailsSchema = v.object({ ]), payerDid: v.string(), paymentRequestToken: v.string(), -}); +}) /** * POST / @@ -54,83 +62,91 @@ const paymentDetailsSchema = v.object({ * and creates a signed PaymentReceiptCredential. */ app.post("/", async (c) => { - const serverIdentity = await getKeypairInfo(env(c).RECEIPT_SERVICE_PRIVATE_KEY_HEX); - const didResolver = getDidResolver(); + const serverIdentity = await getKeypairInfo( + env(c).RECEIPT_SERVICE_PRIVATE_KEY_HEX, + ) + const didResolver = getDidResolver() - const { payload } = v.parse(bodySchema, await c.req.json()); + const { payload } = v.parse(bodySchema, await c.req.json()) - log(colors.bold("\nReceipt Service: Processing payment proof")); - log(colors.dim("Verifying JWT payload...")); + log(colors.bold("\nReceipt Service: Processing payment proof")) + log(colors.dim("Verifying JWT payload...")) const parsed = await verifyJwt(payload, { resolver: didResolver, policies: { aud: false, }, - }); + }) // This demo uses did:pkh for all issuers, so we add this check, however, this // is not a requirement of the protocol. if (!isDidPkhUri(parsed.issuer)) { - log(errorMessage("Invalid issuer, must be a did:pkh")); - return c.json({ error: "Invalid issuer, must be a did:pkh" }, 400); + log(errorMessage("Invalid issuer, must be a did:pkh")) + return c.json({ error: "Invalid issuer, must be a did:pkh" }, 400) } - const paymentDetails = v.parse(paymentDetailsSchema, parsed.payload); + const paymentDetails = v.parse(paymentDetailsSchema, parsed.payload) - log(colors.dim("Payment details:")); - logJson(paymentDetails, colors.cyan); + log(colors.dim("Payment details:")) + logJson(paymentDetails, colors.cyan) - log(colors.dim("Verifying payment request token...")); + log(colors.dim("Verifying payment request token...")) // Verify the payment request token is not expired, etc. - const { paymentRequest } = await verifyPaymentRequestToken(paymentDetails.paymentRequestToken, { - resolver: didResolver, - }); + const { paymentRequest } = await verifyPaymentRequestToken( + paymentDetails.paymentRequestToken, + { + resolver: didResolver, + }, + ) - // Load the payment option from the payment request matching our - // preferred network. const paymentOption = paymentRequest.paymentOptions.find( - (option) => option.network === paymentDetails.metadata.network, - ); + (option) => option.id === paymentDetails.paymentOptionId, + ) if (!paymentOption) { - log(errorMessage("Payment option not found")); - return c.json({ error: "Payment option not found" }, 400); + log(errorMessage("Payment option not found")) + return c.json({ error: "Payment option not found" }, 400) + } + + if (paymentOption.network !== paymentDetails.metadata.network) { + log(errorMessage("Payment option network mismatch")) + return c.json({ error: "Payment option network mismatch" }, 400) } if (paymentOption.network === "stripe") { - await verifyStripePayment(parsed.issuer, paymentDetails, paymentOption); + await verifyStripePayment(parsed.issuer, paymentDetails, paymentOption) } else if (paymentOption.network === chainId) { - await verifyOnChainPayment(parsed.issuer, paymentDetails, paymentOption); + await verifyOnChainPayment(parsed.issuer, paymentDetails, paymentOption) } else if (paymentOption.network === solana.chainId) { - await verifySolanaPayment(parsed.issuer, paymentDetails, paymentOption); + await verifySolanaPayment(parsed.issuer, paymentDetails, paymentOption) } else { - log(errorMessage("Invalid network")); + log(errorMessage("Invalid network")) throw new HTTPException(400, { message: "Invalid network", - }); + }) } - log(colors.dim("\nCreating payment receipt...")); + log(colors.dim("\nCreating payment receipt...")) const receipt = createPaymentReceipt({ paymentRequestToken: paymentDetails.paymentRequestToken, paymentOptionId: paymentOption.id, issuer: serverIdentity.did, payerDid: parsed.issuer, - }); + }) const jwt = await signCredential(receipt, { did: serverIdentity.did, signer: serverIdentity.jwtSigner, alg: "ES256K", - }); + }) - log(successMessage("Receipt created successfully")); + log(successMessage("Receipt created successfully")) return c.json({ receipt: jwt, details: await parseJwtCredential(jwt, didResolver), - }); -}); + }) +}) async function verifyStripePayment( _issuer: string, @@ -151,24 +167,24 @@ async function verifyOnChainPayment( paymentOption: v.InferOutput, ) { if (paymentDetails.metadata.network !== chainId) { - log(errorMessage("Invalid network")); + log(errorMessage("Invalid network")) throw new HTTPException(400, { message: "Invalid network", - }); + }) } - const senderAddress = asAddress(issuer); - const txHash = paymentDetails.metadata.txHash as `0x${string}`; + const senderAddress = asAddress(issuer) + const txHash = paymentDetails.metadata.txHash as `0x${string}` - log(colors.dim("Loading transaction details...")); + log(colors.dim("Loading transaction details...")) // load the contract transaction details for the hash // This method throws if the transaction is not found - const txReceipt = await publicClient.getTransactionReceipt({ hash: txHash }); + const txReceipt = await publicClient.getTransactionReceipt({ hash: txHash }) if (txReceipt.status !== "success") { - log(errorMessage(`Transaction failed: ${txHash}`)); + log(errorMessage(`Transaction failed: ${txHash}`)) throw new HTTPException(400, { message: `Transaction failed: ${txHash}`, - }); + }) } // Find the `Transfer` event from the transaction logs that is for the payment @@ -180,60 +196,102 @@ async function verifyOnChainPayment( args: { to: asAddress(paymentOption.recipient), }, - }); + }) // Find the Transfer event in the logs - const transferEvent = logs.find((log) => isAddressEqual(log.address, usdcAddress)); + const transferEvent = logs.find((log) => + isAddressEqual(log.address, usdcAddress), + ) if (!transferEvent) { - log(errorMessage("Transfer event not found in transaction logs")); + log(errorMessage("Transfer event not found in transaction logs")) throw new HTTPException(400, { message: "Transfer event not found in transaction logs", - }); + }) } - log(colors.dim("\nOn-chain transfer details:")); - log("From:", colors.cyan(transferEvent.args.from)); - log("To:", colors.cyan(transferEvent.args.to)); - log("Amount:", colors.cyan(transferEvent.args.value.toString())); - log("Currency:", colors.cyan("USDC")); + log(colors.dim("\nOn-chain transfer details:")) + log("From:", colors.cyan(transferEvent.args.from)) + log("To:", colors.cyan(transferEvent.args.to)) + log("Amount:", colors.cyan(transferEvent.args.value.toString())) + log("Currency:", colors.cyan("USDC")) - if (!isAddressEqual(transferEvent.args.to, asAddress(paymentOption.recipient))) { - log(errorMessage("Invalid recipient address")); + if ( + !isAddressEqual(transferEvent.args.to, asAddress(paymentOption.recipient)) + ) { + log(errorMessage("Invalid recipient address")) throw new HTTPException(400, { message: "Invalid recipient address", - }); + }) } if (transferEvent.args.value !== BigInt(paymentOption.amount)) { - log(errorMessage("Invalid amount")); + log(errorMessage("Invalid amount")) throw new HTTPException(400, { message: "Invalid amount", - }); + }) } if (!isAddressEqual(transferEvent.args.from, senderAddress)) { - log(errorMessage("Invalid sender address")); + log(errorMessage("Invalid sender address")) throw new HTTPException(400, { message: "Invalid sender address", - }); + }) } // Optional: // Additional checks, like checking txHash block number timestamp occurred after payment_request issued } -function getTransaction(rpc: Rpc, signature: Signature) { +async function fetchTransaction( + rpc: ReturnType, + txSignature: string, +) { return rpc - .getTransaction(signature, { + .getTransaction(toSignature(txSignature), { commitment: solana.commitment, encoding: "jsonParsed", maxSupportedTransactionVersion: 0 as const, }) - .send(); + .send() +} + +type SolanaTransaction = Awaited> + +type ParsedAccountKey = Readonly<{ + pubkey: string | { toBase58(): string } + signer?: boolean +}> + +type MessageWithAccountKeys = Readonly<{ + accountKeys?: readonly ParsedAccountKey[] +}> + +function extractSignerPubkeys(tx: NonNullable): Set { + const msg = tx.transaction.message as unknown as MessageWithAccountKeys + const signers = new Set() + for (const key of msg.accountKeys ?? []) { + if (key.signer) { + const pub = + typeof key.pubkey === "string" ? key.pubkey : key.pubkey.toBase58() + if (pub) signers.add(pub) + } + } + return signers +} + +type TokenBalance = { + mint: string + owner: string + uiTokenAmount: { amount: string; decimals: number } } -type GetTransactionResult = Awaited>; +function toBigInt(value: unknown): bigint { + if (typeof value === "string") return BigInt(value) + if (typeof value === "number") return BigInt(value) + if (typeof value === "bigint") return value + return 0n +} async function verifySolanaPayment( issuer: string, @@ -241,106 +299,70 @@ async function verifySolanaPayment( paymentOption: v.InferOutput, ) { if (paymentDetails.metadata.network !== solana.chainId) { - log(errorMessage("Invalid network")); - throw new HTTPException(400, { message: "Invalid network" }); + log(errorMessage("Invalid network")) + throw new HTTPException(400, { message: "Invalid network" }) } - const signature = paymentDetails.metadata.txHash; - const rpc = createSolanaRpc(solana.rpcUrl); - log(colors.dim("Loading Solana transaction details...")); - // Poll for the transaction to appear; RPC may not have it immediately after send + const signature = paymentDetails.metadata.txHash + const rpc = createSolanaRpc(solana.rpcUrl) + log(colors.dim("Loading Solana transaction details...")) - let tx: GetTransactionResult | null = null; - const maxAttempts = 20; - const delayMs = 1500; + let tx: SolanaTransaction | null = null + const maxAttempts = 20 + const delayMs = 1500 for (let i = 0; i < maxAttempts; i++) { - tx = await getTransaction(rpc, toSignature(signature)); - if (tx && !tx.meta?.err) break; - await new Promise((r) => setTimeout(r, delayMs)); + tx = await fetchTransaction(rpc, signature) + if (tx && !tx.meta?.err) break + await new Promise((r) => setTimeout(r, delayMs)) } if (!tx || tx.meta?.err) { - log(errorMessage("Solana transaction not found or failed")); - throw new HTTPException(400, { message: "Invalid transaction" }); + log(errorMessage("Solana transaction not found or failed")) + throw new HTTPException(400, { message: "Invalid transaction" }) } - // Ensure the JWT issuer DID matches a signer of the transaction (typically the fee payer) - let issuerAddress: string; + let issuerAddress: string try { - issuerAddress = addressFromDidPkhUri(issuer); + issuerAddress = addressFromDidPkhUri(issuer) } catch { - throw new HTTPException(400, { message: "Invalid issuer DID" }); - } - const signerPubkeys = new Set(); - - // jsonParsed format exposes accountKeys with `pubkey` and `signer` flags - type ParsedAccountKey = Readonly<{ - pubkey: string | { toBase58(): string }; - signer?: boolean; - }>; - type MessageWithAccountKeys = Readonly<{ - accountKeys?: readonly ParsedAccountKey[]; - }>; - - const msg = tx.transaction.message as unknown as MessageWithAccountKeys; - for (const k of msg.accountKeys ?? []) { - if (k.signer) { - const pub = typeof k.pubkey === "string" ? k.pubkey : k.pubkey.toBase58(); - if (pub) signerPubkeys.add(pub); - } + throw new HTTPException(400, { message: "Invalid issuer DID" }) } + const signerPubkeys = extractSignerPubkeys(tx) if (!signerPubkeys.has(issuerAddress)) { - log(errorMessage("Issuer DID did not sign the transaction")); - throw new HTTPException(400, { message: "Invalid payer DID" }); + log(errorMessage("Issuer DID did not sign the transaction")) + throw new HTTPException(400, { message: "Invalid payer DID" }) } - // Validate postTokenBalances reflect the transfer to recipient for the mint - const mint = solana.usdcMint; - const recipient = - typeof paymentOption.recipient === "string" - ? paymentOption.recipient - : String(paymentOption.recipient); - - const dec = paymentOption.decimals; - const expectedAmount = BigInt(paymentOption.amount); + const mint = solana.usdcMint + const recipient = paymentOption.recipient + const expectedDecimals = paymentOption.decimals + const expectedAmount = BigInt(paymentOption.amount) - type TokenBalance = { - mint: string; - owner: string; - uiTokenAmount: { amount: string; decimals: number }; - }; - const post = (tx.meta?.postTokenBalances ?? []) as unknown as TokenBalance[]; - const pre = (tx.meta?.preTokenBalances ?? []) as unknown as TokenBalance[]; + const post = (tx.meta?.postTokenBalances ?? []) as unknown as TokenBalance[] + const pre = (tx.meta?.preTokenBalances ?? []) as unknown as TokenBalance[] - const preBal = pre.find((b) => b.mint === mint && b.owner === recipient); - const postBal = post.find((b) => b.mint === mint && b.owner === recipient); + const preBal = pre.find((b) => b.mint === mint && b.owner === recipient) + const postBal = post.find((b) => b.mint === mint && b.owner === recipient) if (!postBal) { - log(errorMessage("Recipient post token balance not found")); - throw new HTTPException(400, { message: "Recipient not credited" }); + log(errorMessage("Recipient post token balance not found")) + throw new HTTPException(400, { message: "Recipient not credited" }) } - if (postBal.uiTokenAmount.decimals !== dec) { - log(errorMessage("Invalid token decimals")); - throw new HTTPException(400, { message: "Invalid token decimals" }); + if (postBal.uiTokenAmount.decimals !== expectedDecimals) { + log(errorMessage("Invalid token decimals")) + throw new HTTPException(400, { message: "Invalid token decimals" }) } - const toBigInt = (v: unknown): bigint => { - if (typeof v === "string") return BigInt(v); - if (typeof v === "number") return BigInt(v); - if (typeof v === "bigint") return v; - return 0n; - }; - - const preAmount = toBigInt(preBal?.uiTokenAmount.amount ?? "0"); - const postAmount = toBigInt(postBal.uiTokenAmount.amount); - const delta = postAmount - preAmount; + const preAmount = toBigInt(preBal?.uiTokenAmount.amount ?? "0") + const postAmount = toBigInt(postBal.uiTokenAmount.amount) + const delta = postAmount - preAmount if (delta !== expectedAmount) { - log(errorMessage("Invalid amount")); - throw new HTTPException(400, { message: "Invalid amount" }); + log(errorMessage("Invalid amount")) + throw new HTTPException(400, { message: "Invalid amount" }) } } serve({ port: 4568, fetch: app.fetch, -}); +}) diff --git a/demos/payments/src/server.ts b/demos/payments/src/server.ts index 744e362..359be59 100644 --- a/demos/payments/src/server.ts +++ b/demos/payments/src/server.ts @@ -1,63 +1,68 @@ -import { serve } from "@hono/node-server"; -import { logger } from "@repo/api-utils/middleware/logger"; -import { colors, errorMessage, log, successMessage } from "@repo/cli-tools"; +import { serve } from "@hono/node-server" +import { logger } from "@repo/api-utils/middleware/logger" +import { colors, errorMessage, log, successMessage } from "@repo/cli-tools" import { createSignedPaymentRequest, curveToJwtAlgorithm, getDidResolver, verifyPaymentReceipt, type PaymentRequestInit, -} from "agentcommercekit"; -import { Hono, type Env, type TypedResponse } from "hono"; -import { env } from "hono/adapter"; -import { HTTPException } from "hono/http-exception"; -import { chainId, PAYMENT_SERVICE_URL, RECEIPT_SERVICE_URL } from "./constants"; -import { ensureSolanaKeys } from "./utils/ensure-private-keys"; -import { getKeypairInfo } from "./utils/keypair-info"; +} from "agentcommercekit" +import { Hono, type Env, type TypedResponse } from "hono" +import { env } from "hono/adapter" +import { HTTPException } from "hono/http-exception" +import { + chainId, + PAYMENT_SERVICE_URL, + RECEIPT_SERVICE_URL, + solana, +} from "./constants" +import { ensureSolanaKeys } from "./utils/ensure-private-keys" +import { getKeypairInfo } from "./utils/keypair-info" -const app = new Hono(); -app.use(logger()); +const app = new Hono() +app.use(logger()) /** * Simple hono error handler */ app.onError((e, c) => { if (e instanceof HTTPException) { - return e.getResponse(); + return e.getResponse() } - console.error(colors.red("Error in server:"), e); - return c.json({ error: e.message }, 500); -}); + console.error(colors.red("Error in server:"), e) + return c.json({ error: e.message }, 500) +}) /** * Simple endpoint which is protected by a 402 payment required response */ app.get("/", async (c): Promise> => { - const serverIdentity = await getKeypairInfo(env(c).SERVER_PRIVATE_KEY_HEX); - const didResolver = getDidResolver(); + const serverIdentity = await getKeypairInfo(env(c).SERVER_PRIVATE_KEY_HEX) + const didResolver = getDidResolver() - // Ensure Solana server keys are present - const solanaKeys = await ensureSolanaKeys( + const { publicKey: solanaServerPublicKey } = await ensureSolanaKeys( "SOLANA_SERVER_PUBLIC_KEY", "SOLANA_SERVER_SECRET_KEY_JSON", - ); - const solanaServerPublicKey: string = solanaKeys.publicKey; + ) - const { did: receiptIssuerDid } = await getKeypairInfo(env(c).RECEIPT_SERVICE_PRIVATE_KEY_HEX); - const trustedReceiptIssuers: string[] = [receiptIssuerDid]; + const { did: receiptIssuerDid } = await getKeypairInfo( + env(c).RECEIPT_SERVICE_PRIVATE_KEY_HEX, + ) + const trustedReceiptIssuers: string[] = [receiptIssuerDid] - const authorizationHeader = c.req.header("Authorization"); - const receipt = authorizationHeader?.replace("Bearer ", ""); + const authorizationHeader = c.req.header("Authorization") + const receipt = authorizationHeader?.replace("Bearer ", "") - log(colors.bold("\nServer: Processing request")); - log(colors.dim("Checking for receipt in Authorization header...")); + log(colors.bold("\nServer: Processing request")) + log(colors.dim("Checking for receipt in Authorization header...")) /** * Check for Receipt in the Authorization header */ if (!receipt) { - log(colors.yellow("No receipt found, generating payment request...")); + log(colors.yellow("No receipt found, generating payment request...")) // Build a payment request with multiple options: USDC on Base Sepolia, Stripe, and Solana (devnet) const paymentRequestInit: PaymentRequestInit = { @@ -91,54 +96,57 @@ app.get("/", async (c): Promise> => { decimals: 6, currency: "USDC", recipient: solanaServerPublicKey, - network: "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", // devnet + network: solana.chainId, receiptService: RECEIPT_SERVICE_URL, }, ], - }; + } // Generate the ACK-Pay Payment Request, which is a signed JWT detailing what needs to be paid. - const paymentRequestBody = await createSignedPaymentRequest(paymentRequestInit, { - issuer: serverIdentity.did, - signer: serverIdentity.jwtSigner, - algorithm: curveToJwtAlgorithm(serverIdentity.keypair.curve), - }); + const paymentRequestBody = await createSignedPaymentRequest( + paymentRequestInit, + { + issuer: serverIdentity.did, + signer: serverIdentity.jwtSigner, + algorithm: curveToJwtAlgorithm(serverIdentity.keypair.curve), + }, + ) const res = new Response(JSON.stringify(paymentRequestBody), { status: 402, headers: { "Content-Type": "application/json", }, - }); + }) - log(successMessage("Payment request generated")); - throw new HTTPException(402, { res }); + log(successMessage("Payment request generated")) + throw new HTTPException(402, { res }) } try { - log(colors.dim("Verifying receipt credential...")); + log(colors.dim("Verifying receipt credential...")) // Verify the presented ACK Receipt (VC) to ensure it's authentic, trusted, and matches the payment requirements. await verifyPaymentReceipt(receipt, { resolver: didResolver, trustedReceiptIssuers, paymentRequestIssuer: serverIdentity.did, verifyPaymentRequestTokenJwt: true, - }); + }) } catch (e) { - console.log(errorMessage("Error verifying receipt"), e); + console.log(errorMessage("Error verifying receipt"), e) throw new HTTPException(400, { message: "Invalid receipt", - }); + }) } - log(successMessage("Receipt verified successfully")); + log(successMessage("Receipt verified successfully")) return c.json({ message: "Access granted", - }); -}); + }) +}) serve({ port: 4567, fetch: app.fetch, -}); +}) diff --git a/demos/payments/src/utils/ensure-balances.ts b/demos/payments/src/utils/ensure-balances.ts index 87668b4..06bf39e 100644 --- a/demos/payments/src/utils/ensure-balances.ts +++ b/demos/payments/src/utils/ensure-balances.ts @@ -1,9 +1,8 @@ -// cspell:ignore lamports -import { waitForEnter } from "@repo/cli-tools"; -import { createSolanaRpc, address as solAddress } from "@solana/kit"; -import { createPublicClient, erc20Abi, http, type Chain } from "viem"; -import { formatUnits } from "viem/utils"; -import { solana } from "@/constants"; +import { solana } from "@/constants" +import { colors, log, waitForEnter } from "@repo/cli-tools" +import { createSolanaRpc, address as solAddress } from "@solana/kit" +import { createPublicClient, erc20Abi, http, type Chain } from "viem" +import { formatUnits } from "viem/utils" /** * Ensure the client wallet has a non-zero balance of USDC and ETH @@ -13,86 +12,77 @@ export async function ensureNonZeroBalances( address: `0x${string}`, usdcAddress: `0x${string}`, ) { - // 2. Make sure the client wallet has been funded - let balanceUsdc = await getErc20Balance(chain, address, usdcAddress); - let balanceEth = await getEthBalance(chain, address); + let balanceUsdc = await getErc20Balance(chain, address, usdcAddress) + let balanceEth = await getEthBalance(chain, address) while (balanceUsdc.value === BigInt(0)) { - console.log("We need to fund this address with testnet USDC and testnet ETH:", address); - - console.log( + log( + "We need to fund this address with testnet USDC and testnet ETH:", + address, + ) + log( "You can get testnet tokens from the following faucets:", "ETH: https://docs.base.org/chain/network-faucets", "USDC: https://faucet.circle.com/", - ); - console.log("Once funded, press enter to check balance again"); - await waitForEnter(); - console.log("Attempting to fetch USDC balance..."); - balanceUsdc = await getErc20Balance(chain, address, usdcAddress); - console.log("USDC balance fetched:", balanceUsdc); - console.log("Attempting to fetch ETH balance..."); - balanceEth = await getEthBalance(chain, address); - console.log("ETH balance fetched:", balanceEth); + ) + log("Once funded, press enter to check balance again") + await waitForEnter() + log(colors.dim("Fetching balances...")) + balanceUsdc = await getErc20Balance(chain, address, usdcAddress) + balanceEth = await getEthBalance(chain, address) } - console.log("Client wallet balances:"); - console.log(" USDC: ", formatUnits(balanceUsdc.value, balanceUsdc.decimals)); - console.log(" ETH: ", formatUnits(balanceEth.value, balanceUsdc.decimals)); + log("Client wallet balances:") + log(" USDC: ", formatUnits(balanceUsdc.value, balanceUsdc.decimals)) + log(" ETH: ", formatUnits(balanceEth.value, balanceEth.decimals)) - return { balanceUsdc, balanceEth }; + return { balanceUsdc, balanceEth } } -export async function ensureSolanaSolBalance(address: string) { - const rpc = createSolanaRpc(solana.rpcUrl); - const pubkey = solAddress(address); - let lamports = 0n; - try { - ({ value: lamports } = await rpc.getBalance(pubkey, { commitment: solana.commitment }).send()); - } catch (error) { - console.error("Failed to fetch balance:", error); - console.log("Will retry after next attempt..."); - lamports = 0n; - } - while (lamports === BigInt(0)) { - console.log("We need to fund this Solana address with devnet SOL:", address); - console.log("Faucet: https://faucet.solana.com/"); - const prefilled = `https://faucet.solana.com/?walletAddress=${encodeURIComponent( - address, - )}&amount=0.5`; - console.log("Prefilled faucet (0.5 SOL):", prefilled); - console.log("Once funded, press enter to check balance again"); - await waitForEnter(); - console.log("Attempting to fetch SOL balance... " + pubkey); +export async function ensureSolanaSolBalance(address: string): Promise { + const rpc = createSolanaRpc(solana.rpcUrl) + const pubkey = solAddress(address) + + async function fetchBalance(): Promise { try { - ({ value: lamports } = await rpc + const balance = await rpc .getBalance(pubkey, { commitment: solana.commitment }) - .send()); - } catch (error) { - console.error("Failed to fetch balance:", error); - console.log("Will retry after next attempt..."); - continue; + .send() + return balance.value + } catch { + return 0n } - console.log("SOL balance fetched (lamports):", lamports); } - console.log("Client Solana SOL balance (lamports):", lamports); - return lamports; + let lamports = await fetchBalance() + + while (lamports === 0n) { + log("We need to fund this Solana address with devnet SOL:", address) + log("Faucet: https://faucet.solana.com/") + log("Once funded, press enter to check balance again") + await waitForEnter() + log(colors.dim("Fetching SOL balance...")) + lamports = await fetchBalance() + } + + log(colors.dim(`SOL balance (lamports): ${lamports}`)) + return lamports } async function getEthBalance(chain: Chain, address: `0x${string}`) { const publicClient = createPublicClient({ chain, transport: http(), - }); + }) const balance = await publicClient.getBalance({ address, - }); + }) return { value: balance, decimals: 18, - }; + } } async function getErc20Balance( @@ -103,9 +93,8 @@ async function getErc20Balance( const publicClient = createPublicClient({ chain, transport: http(), - }); + }) - // eslint-disable-next-line @cspell/spellchecker const [balance, decimals] = await publicClient.multicall({ contracts: [ { @@ -120,14 +109,14 @@ async function getErc20Balance( functionName: "decimals", }, ], - }); + }) if (balance.status !== "success" || decimals.status !== "success") { - throw new Error("Failed to fetch token data"); + throw new Error("Failed to fetch token data") } return { value: balance.result, decimals: decimals.result, - }; + } } diff --git a/demos/payments/src/utils/ensure-private-keys.ts b/demos/payments/src/utils/ensure-private-keys.ts index 4db54bf..9d473c7 100644 --- a/demos/payments/src/utils/ensure-private-keys.ts +++ b/demos/payments/src/utils/ensure-private-keys.ts @@ -1,49 +1,45 @@ -import { getAddressFromPublicKey } from "@solana/addresses"; -import { envFilePath } from "@/constants"; -import { colors, log, updateEnvFile } from "@repo/cli-tools"; -import { generatePrivateKeyHex } from "./keypair-info"; +import { envFilePath } from "@/constants" +import { colors, log, updateEnvFile } from "@repo/cli-tools" +import { bytesToBase58, generateKeypair } from "agentcommercekit" +import { generatePrivateKeyHex } from "./keypair-info" -export async function ensurePrivateKey(name: string) { - const privateKeyHex = process.env[name]; +export async function ensurePrivateKey(name: string): Promise { + const privateKeyHex = process.env[name] if (privateKeyHex) { - return privateKeyHex; + return privateKeyHex } - log(colors.dim(`Generating ${name}...`)); - const newPrivateKeyHex = generatePrivateKeyHex(); - await updateEnvFile({ [name]: newPrivateKeyHex }, envFilePath); - return newPrivateKeyHex; + log(colors.dim(`Generating ${name}...`)) + const newPrivateKeyHex = generatePrivateKeyHex() + await updateEnvFile({ [name]: newPrivateKeyHex }, envFilePath) + return newPrivateKeyHex } export async function ensureSolanaKeys( pubEnv: string, secretEnv: string, ): Promise<{ publicKey: string; secretKeyJson: string }> { - const existingPub = process.env[pubEnv]; - const existingSecret = process.env[secretEnv]; + const existingPub = process.env[pubEnv] + const existingSecret = process.env[secretEnv] if (existingPub && existingSecret) { - return { publicKey: existingPub, secretKeyJson: existingSecret }; + return { publicKey: existingPub, secretKeyJson: existingSecret } } - log(colors.dim(`Generating ${pubEnv}/${secretEnv}...`)); - const kp = await crypto.subtle.generateKey("Ed25519", true, ["sign", "verify"]); - - const privateKeyJwk = await crypto.subtle.exportKey("jwk", kp.privateKey); - const privateKeyBase64 = privateKeyJwk.d; - if (!privateKeyBase64) throw new Error("Failed to get private key bytes"); - - const privateKeyBytes = new Uint8Array(Buffer.from(privateKeyBase64, "base64url")); - // Export raw 32-byte public key from SPKI (last 32 bytes of the DER-encoded key) - const publicKeySpki = await crypto.subtle.exportKey("spki", kp.publicKey); - const publicKeyBytes = new Uint8Array(publicKeySpki).slice(-32); - // Concatenate 32-byte private key + 32-byte public key => 64-byte secret key - const secretKey64 = new Uint8Array(privateKeyBytes.length + publicKeyBytes.length); - secretKey64.set(privateKeyBytes, 0); - secretKey64.set(publicKeyBytes, privateKeyBytes.length); - const secretKeyJson = JSON.stringify(Array.from(secretKey64)); - - const publicKey = await getAddressFromPublicKey(kp.publicKey); - - await updateEnvFile({ [pubEnv]: publicKey, [secretEnv]: secretKeyJson }, envFilePath); - return { publicKey, secretKeyJson }; + log(colors.dim(`Generating ${pubEnv}/${secretEnv}...`)) + + const kp = await generateKeypair("Ed25519") + + // Solana expects a 64-byte secret key (32-byte private + 32-byte public) + const secretKey64 = new Uint8Array(kp.privateKey.length + kp.publicKey.length) + secretKey64.set(kp.privateKey, 0) + secretKey64.set(kp.publicKey, kp.privateKey.length) + const secretKeyJson = JSON.stringify(Array.from(secretKey64)) + + const publicKey = bytesToBase58(kp.publicKey) + + await updateEnvFile( + { [pubEnv]: publicKey, [secretEnv]: secretKeyJson }, + envFilePath, + ) + return { publicKey, secretKeyJson } } diff --git a/docs/ack-pay/payment-request-payload.mdx b/docs/ack-pay/payment-request-payload.mdx index 89ad2bb..9eebbce 100644 --- a/docs/ack-pay/payment-request-payload.mdx +++ b/docs/ack-pay/payment-request-payload.mdx @@ -54,7 +54,7 @@ Every Payment Request payload contains essential properties: "network": "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", "amount": 10000000, "decimals": 6, - "recipient": "9juQ8sLL5NfwT7UhWHqHQAg45JDNrm41SiCDdeTQbLsw", + "recipient": "ExAmPLeSoLaNaAddReSS111111111111111111111111", "receiptService": "https://receipts.example.com/solana" } // ... more options ... @@ -98,5 +98,3 @@ This abstraction provides key benefits: - **Client Flexibility:** The Client can pay using a method convenient for it, even if it differs from the Server's preferred settlement method. If fees are associated with bridging, FX conversions, or other transformations performed by the Payment Service, these should be communicated transparently to the Client during the payment negotiation or execution process. - -> Note: Solana networks use CAIP‑2 chain IDs (e.g., `solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1` for devnet). The `recipient` is the base58 wallet address receiving funds on that network. diff --git a/docs/ack-pay/receipt-verification.mdx b/docs/ack-pay/receipt-verification.mdx index c70f455..4437db8 100644 --- a/docs/ack-pay/receipt-verification.mdx +++ b/docs/ack-pay/receipt-verification.mdx @@ -20,7 +20,7 @@ _Example ACK Receipt Verifiable Credential:_ { "@context": [ "https://www.w3.org/2018/credentials/v1", - "https://agentcommerkit.org/contexts/payment/v1" // Example ACK context + "https://agentcommercekit.org/contexts/payment/v1" // Example ACK context ], "id": "urn:uuid:5c358383-1d93-4956-8d0c-6e41e4d29901", // Unique receipt ID "type": ["VerifiableCredential", "ACKPaymentReceipt"], @@ -103,15 +103,3 @@ When an ACK Receipt is presented by a Client Agent to a Server Agent (e.g., when If all these checks pass, the Server can confidently treat the payment as valid and proceed with service delivery. - -## On-Chain Verification Example: Solana (SPL‑USDC) - -When verifying an on-chain payment on Solana, in addition to the general VC checks, a Receipt Service (or Server) typically performs these steps against the submitted transaction signature: - -- Fetch the parsed transaction (e.g., `getParsedTransaction`) with an appropriate commitment (e.g., `confirmed` in development, `finalized` in production). -- Confirm the token mint matches the expected USDC mint for the environment. -- Confirm the credited recipient is the expected address (e.g., canonical associated token account for recipient+mint). -- Compute the delta in recipient `postTokenBalances - preTokenBalances` and verify it equals the required `amount` with matching `decimals`. -- Optionally validate payer/fee-payer, ensure `blockTime >= paymentRequest.iat`, and reject duplicate receipts for the same `jti` or signature (idempotency). - -These checks mirror what the demo implementation performs for Solana devnet and complement the general ACK Receipt verification process. diff --git a/docs/ack-pay/summary.mdx b/docs/ack-pay/summary.mdx index 2ff9381..7056203 100644 --- a/docs/ack-pay/summary.mdx +++ b/docs/ack-pay/summary.mdx @@ -5,6 +5,6 @@ description: "Summary of the ACK-Pay Payments Protocol." ACK-Pay provides a flexible and robust pattern framework for agentic financial transactions. By defining standard interactions and leveraging Verifiable Credentials for receipts, it enables secure, automated, and compliant payments across diverse systems. -Its support for both [server-initiated](/ack-pay/server-initiated-sequence) and [client-initiated](/ack-pay/client-initiated-sequence) flows, coupled with the abstraction provided by [Payment Services](/ack-pay/payment-service), allows integration with various settlement rails. These include traditional finance, card networks (potentially via APIs like Stripe, PayPal, Visa, Mastercard, etc.), and blockchain-based digital assets (including via protocols like x402). On-chain examples include **EVM** networks (e.g., Base Sepolia) and **Solana** (SPL‑USDC), where Clients can pay directly on-chain and obtain a verifiable receipt via a [Receipt Service](/ack-pay/components-roles#receipt-service). +Its support for both [server-initiated](/ack-pay/server-initiated-sequence) and [client-initiated](/ack-pay/client-initiated-sequence) flows, coupled with the abstraction provided by [Payment Services](/ack-pay/payment-service), allows integration with various settlement rails. These include traditional finance, card networks (potentially via APIs like Stripe, PayPal, Visa, Mastercard, etc.), and blockchain-based digital assets (including via protocols like x402). When combined with [ACK-ID](/ack-id/introduction), ACK-Pay creates a powerful foundation for trust and accountability when executing payments in the emerging agent economy. diff --git a/docs/demos/demo-payments.mdx b/docs/demos/demo-payments.mdx index 62b0c01..84097d8 100644 --- a/docs/demos/demo-payments.mdx +++ b/docs/demos/demo-payments.mdx @@ -62,15 +62,9 @@ Client requests access to a protected resource. Server responds with an HTTP `40 - Client performs an on-chain stablecoin (USDC) payment to the Server’s wallet - on Base Sepolia testnet. Alternatively, a credit card payment can be handled - via a Payment Service. - -This demo also supports an on-chain payment on **Solana devnet** using SPL‑USDC. -In that path, the Client transfers USDC directly to the Server’s Solana address. The -Receipt Service verifies the mint, recipient and exact amount before issuing -a receipt. - + Client performs an on-chain stablecoin (USDC) payment to the Server's wallet + on Base Sepolia testnet or Solana devnet. Alternatively, a credit card payment + can be handled via a Payment Service. @@ -93,6 +87,6 @@ a receipt. Explore comprehensive ACK-Pay functionalities and integrations in real-world applications involving diverse payment methods and Payment Service integrations: -- [View Payments Demo Source Code](https://github.com/agentcommercekit/ack/tree/main/demos//payments) +- [View Payments Demo Source Code](https://github.com/agentcommercekit/ack/tree/main/demos/payments) - [ACK Documentation](https://agentcommercekit.com) - [ACK-Pay Details](/ack-pay/introduction) diff --git a/docs/demos/demos.mdx b/docs/demos/demos.mdx index 3ef32d2..52e4ec9 100644 --- a/docs/demos/demos.mdx +++ b/docs/demos/demos.mdx @@ -33,7 +33,7 @@ Explore ACK-Pay with a demo of server requesting payment and a client agent comp - [Detailed Payments Demo Walkthrough](./demo-payments) -- [View Payments Demo Source Code](https://github.com/agentcommercekit/ack/tree/main/demos//payments) +- [View Payments Demo Source Code](https://github.com/agentcommercekit/ack/tree/main/demos/payments) ## End-to-End Demo diff --git a/package.json b/package.json index 4dd345c..e17c3ef 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "build": "turbo build", "check": "turbo check", "check:format": "prettier --check .", - "check:packages": "pnpx @manypkg/cli check", + "check:packages": "pnpm dlx @manypkg/cli check", "check:types": "turbo check:types", "clean": "turbo clean && git clean -xdf .turbo node_modules/.cache", "demo:e2e": "pnpm --filter ./demos/e2e demo", @@ -33,7 +33,7 @@ "lint": "turbo lint", "lint:fix": "turbo lint:fix", "nuke": "pnpm run clean && git clean -xdf demos/**/node_modules docs/**/node_modules examples/**/node_modules packages/**/node_modules tools/**/node_modules node_modules", - "outdated": "pnpx npm-check-updates --interactive --format group --workspaces", + "outdated": "pnpm dlx npm-check-updates --interactive --format group --workspaces", "publish:packages": "turbo build && changeset publish", "release": "./bin/release", "setup": "./bin/setup", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8e7d099..e6be073 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -215,24 +215,12 @@ importers: '@solana-program/token': specifier: ^0.6.0 version: 0.6.0(@solana/kit@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3)) - '@solana/addresses': - specifier: ^4.0.0 - version: 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/keys': - specifier: ^4.0.0 - version: 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/kit': specifier: ^4.0.0 version: 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3) agentcommercekit: specifier: workspace:* version: link:../../packages/agentcommercekit - bs58: - specifier: ^6.0.0 - version: 6.0.0 - gill: - specifier: ^0.12.0 - version: 0.12.0(@solana/sysvars@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3) hono: specifier: 'catalog:' version: 4.7.10 @@ -2589,67 +2577,28 @@ packages: '@socket.io/component-emitter@3.1.2': resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} - '@solana-program/address-lookup-table@0.7.0': - resolution: {integrity: sha512-dzCeIO5LtiK3bIg0AwO+TPeGURjSG2BKt0c4FRx7105AgLy7uzTktpUzUj6NXAK9SzbirI8HyvHUvw1uvL8O9A==} - peerDependencies: - '@solana/kit': ^2.1.0 - - '@solana-program/compute-budget@0.8.0': - resolution: {integrity: sha512-qPKxdxaEsFxebZ4K5RPuy7VQIm/tfJLa1+Nlt3KNA8EYQkz9Xm8htdoEaXVrer9kpgzzp9R3I3Bh6omwCM06tQ==} - peerDependencies: - '@solana/kit': ^2.1.0 - - '@solana-program/system@0.7.0': - resolution: {integrity: sha512-FKTBsKHpvHHNc1ATRm7SlC5nF/VdJtOSjldhcyfMN9R7xo712Mo2jHIzvBgn8zQO5Kg0DcWuKB7268Kv1ocicw==} - peerDependencies: - '@solana/kit': ^2.1.0 - '@solana-program/system@0.9.1': resolution: {integrity: sha512-2N30CgYJw0qX8jKU8vW808yLmx5oRoDSM+FC6tqhsLQiph7agK9eRXJlnrq6OUfTAZd5yCYQHQvGtx0S8I9SAA==} peerDependencies: '@solana/kit': ^5.0 - '@solana-program/token-2022@0.4.2': - resolution: {integrity: sha512-zIpR5t4s9qEU3hZKupzIBxJ6nUV5/UVyIT400tu9vT1HMs5JHxaTTsb5GUhYjiiTvNwU0MQavbwc4Dl29L0Xvw==} - peerDependencies: - '@solana/kit': ^2.1.0 - '@solana/sysvars': ^2.1.0 - '@solana-program/token@0.6.0': resolution: {integrity: sha512-omkZh4Tt9rre4wzWHNOhOEHyenXQku3xyc/UrKvShexA/Qlhza67q7uRwmwEDUs4QqoDBidSZPooOmepnA/jig==} peerDependencies: '@solana/kit': ^3.0 - '@solana/accounts@2.3.0': - resolution: {integrity: sha512-QgQTj404Z6PXNOyzaOpSzjgMOuGwG8vC66jSDB+3zHaRcEPRVRd2sVSrd1U6sHtnV3aiaS6YyDuPQMheg4K2jw==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/accounts@4.0.0': resolution: {integrity: sha512-fxTtTk7PCJrigdzqhkc0eZYACVZpONKJZy4MkGvZzx5tCC7rUeDJvzau3IYACUCRaaAGPpkINHwYtp8weKsn8w==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/addresses@2.3.0': - resolution: {integrity: sha512-ypTNkY2ZaRFpHLnHAgaW8a83N0/WoqdFvCqf4CQmnMdFsZSdC7qOwcbd7YzdaQn9dy+P2hybewzB+KP7LutxGA==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/addresses@4.0.0': resolution: {integrity: sha512-1OS4nU0HFZxHRxgUb6A72Qg0QbIz6Vu2AbB0j/YSxN4EI+S2BftA83Y6uXhTFDQjKuA+MtHjxe6edB3cs1Pqxw==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/assertions@2.3.0': - resolution: {integrity: sha512-Ekoet3khNg3XFLN7MIz8W31wPQISpKUGDGTylLptI+JjCDWx3PIa88xjEMqFo02WJ8sBj2NLV64Xg1sBcsHjZQ==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/assertions@4.0.0': resolution: {integrity: sha512-QwtImPVM5JLEWOFpvHh+eKdvmxdNP6PW8FkmFFEVYR6VFDaZD/hbmSJlwt5p3L69sVmxJA0ughYgD/kkHM7fbg==} engines: {node: '>=20.18.0'} @@ -2662,24 +2611,12 @@ packages: peerDependencies: typescript: '>=5.3.3' - '@solana/codecs-core@2.3.0': - resolution: {integrity: sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/codecs-core@4.0.0': resolution: {integrity: sha512-28kNUsyIlhU3MO3/7ZLDqeJf2YAm32B4tnTjl5A9HrbBqsTZ+upT/RzxZGP1MMm7jnPuIKCMwmTpsyqyR6IUpw==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/codecs-data-structures@2.3.0': - resolution: {integrity: sha512-qvU5LE5DqEdYMYgELRHv+HMOx73sSoV1ZZkwIrclwUmwTbTaH8QAJURBj0RhQ/zCne7VuLLOZFFGv6jGigWhSw==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/codecs-data-structures@4.0.0': resolution: {integrity: sha512-pvh+Oxz6UIbWxcgwvVwMJIV4nvZn3EHL5ZvCIPClE5Ep8K5sJ8RoRvOohqLcIv9LYn/EZNoXpCodREX/OYpsGw==} engines: {node: '>=20.18.0'} @@ -2692,12 +2629,6 @@ packages: peerDependencies: typescript: '>=5.3.3' - '@solana/codecs-numbers@2.3.0': - resolution: {integrity: sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/codecs-numbers@4.0.0': resolution: {integrity: sha512-z9zpjtcwzqT9rbkKVZpkWB5/0V7+6YRKs6BccHkGJlaDx8Pe/+XOvPi2rEdXPqrPd9QWb5Xp1iBfcgaDMyiOiA==} engines: {node: '>=20.18.0'} @@ -2711,13 +2642,6 @@ packages: fastestsmallesttextencoderdecoder: ^1.0.22 typescript: '>=5.3.3' - '@solana/codecs-strings@2.3.0': - resolution: {integrity: sha512-y5pSBYwzVziXu521hh+VxqUtp0hYGTl1eWGoc1W+8mdvBdC1kTqm/X7aYQw33J42hw03JjryvYOvmGgk3Qz/Ug==} - engines: {node: '>=20.18.0'} - peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 - typescript: '>=5.3.3' - '@solana/codecs-strings@4.0.0': resolution: {integrity: sha512-XvyD+sQ1zyA0amfxbpoFZsucLoe+yASQtDiLUGMDg5TZ82IHE3B7n82jE8d8cTAqi0HgqQiwU13snPhvg1O0Ow==} engines: {node: '>=20.18.0'} @@ -2725,12 +2649,6 @@ packages: fastestsmallesttextencoderdecoder: ^1.0.22 typescript: '>=5.3.3' - '@solana/codecs@2.3.0': - resolution: {integrity: sha512-JVqGPkzoeyU262hJGdH64kNLH0M+Oew2CIPOa/9tR3++q2pEd4jU2Rxdfye9sd0Ce3XJrR5AIa8ZfbyQXzjh+g==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/codecs@4.0.0': resolution: {integrity: sha512-qh+Le1u9QBDPubqUrFU5BGX3Kyj7x0viO6z2SUuM0CSqYUvwE7w724LXwDA9QoEL5JkED1rB3bQg4M0bDrABpA==} engines: {node: '>=20.18.0'} @@ -2744,13 +2662,6 @@ packages: peerDependencies: typescript: '>=5.3.3' - '@solana/errors@2.3.0': - resolution: {integrity: sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==} - engines: {node: '>=20.18.0'} - hasBin: true - peerDependencies: - typescript: '>=5.3.3' - '@solana/errors@4.0.0': resolution: {integrity: sha512-3YEtvcMvtcnTl4HahqLt0VnaGVf7vVWOnt6/uPky5e0qV6BlxDSbGkbBzttNjxLXHognV0AQi3pjvrtfUnZmbg==} engines: {node: '>=20.18.0'} @@ -2758,24 +2669,12 @@ packages: peerDependencies: typescript: '>=5.3.3' - '@solana/fast-stable-stringify@2.3.0': - resolution: {integrity: sha512-KfJPrMEieUg6D3hfQACoPy0ukrAV8Kio883llt/8chPEG3FVTX9z/Zuf4O01a15xZmBbmQ7toil2Dp0sxMJSxw==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/fast-stable-stringify@4.0.0': resolution: {integrity: sha512-sNJRi0RQ93vkGQ9VyFTSGm6mfKLk0FWOFpJLcqyP0BNUK1CugBaUMnxAmGqNaVSCktJagTSLqAMi9k1VSdh+Cg==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/functional@2.3.0': - resolution: {integrity: sha512-AgsPh3W3tE+nK3eEw/W9qiSfTGwLYEvl0rWaxHht/lRcuDVwfKRzeSa5G79eioWFFqr+pTtoCr3D3OLkwKz02Q==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/functional@4.0.0': resolution: {integrity: sha512-duprxASuT0VXlHj3bLBdy9+ZpqdmCZhzCUmTsXps4UlDKr9PxSCQIQ+NK6OPhtBWOh1sNEcT1f1nY/MVqF/KHg==} engines: {node: '>=20.18.0'} @@ -2788,157 +2687,78 @@ packages: peerDependencies: typescript: '>=5.3.3' - '@solana/instructions@2.3.0': - resolution: {integrity: sha512-PLMsmaIKu7hEAzyElrk2T7JJx4D+9eRwebhFZpy2PXziNSmFF929eRHKUsKqBFM3cYR1Yy3m6roBZfA+bGE/oQ==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/instructions@4.0.0': resolution: {integrity: sha512-/Lf3E+6mhe6EL7a3+9FY020yq71lVNgueplJGr221b4wP6ykwPVtoaAiNf+lIrRRYkW8DC81auhmjd2DYpND1w==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/keys@2.3.0': - resolution: {integrity: sha512-ZVVdga79pNH+2pVcm6fr2sWz9HTwfopDVhYb0Lh3dh+WBmJjwkabXEIHey2rUES7NjFa/G7sV8lrUn/v8LDCCQ==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/keys@4.0.0': resolution: {integrity: sha512-aPz+LF9QK3EHjuklYBnnalcLVHUNz5s4m4DXNVGAtjJD7Q9zEu2dBUm9mRKwlLbQibNOEGa1m86HCjcboqXdjg==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/kit@2.3.0': - resolution: {integrity: sha512-sb6PgwoW2LjE5oTFu4lhlS/cGt/NB3YrShEyx7JgWFWysfgLdJnhwWThgwy/4HjNsmtMrQGWVls0yVBHcMvlMQ==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/kit@4.0.0': resolution: {integrity: sha512-5c4qMRL+ciWewEtNZ2gX4wf4VpscZYXbWnU2kBiyQhWiqj8zzFIh6iCHbqMX/Myx3pOHfQs/m/iQCnQHPOag9Q==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/nominal-types@2.3.0': - resolution: {integrity: sha512-uKlMnlP4PWW5UTXlhKM8lcgIaNj8dvd8xO4Y9l+FVvh9RvW2TO0GwUO6JCo7JBzCB0PSqRJdWWaQ8pu1Ti/OkA==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/nominal-types@4.0.0': resolution: {integrity: sha512-zIjHZY+5uboigbzsNhHmF3AlP/xACYxbB0Cb1VAI9i+eFShMeu/3VIrj7x1vbq9hfQKGSFHNFGFqQTivdzpbLw==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/options@2.3.0': - resolution: {integrity: sha512-PPnnZBRCWWoZQ11exPxf//DRzN2C6AoFsDI/u2AsQfYih434/7Kp4XLpfOMT/XESi+gdBMFNNfbES5zg3wAIkw==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/options@4.0.0': resolution: {integrity: sha512-QTjBh24a34At66mGfs0lVF1voug1KnA13IZkvcVPr52zFb90+xYiqYeKiICTaf3HkoeoKG+TC2Q0K64+se0+CQ==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/programs@2.3.0': - resolution: {integrity: sha512-UXKujV71VCI5uPs+cFdwxybtHZAIZyQkqDiDnmK+DawtOO9mBn4Nimdb/6RjR2CXT78mzO9ZCZ3qfyX+ydcB7w==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/programs@4.0.0': resolution: {integrity: sha512-tJCNoKyDKfipGTsQtUO6R9EXk4l4ai+gYuD2R3NubJgMaLPBqIv3IMSCeDSvhuSCDuN2lQ1mLkQrDnE3lm0/iQ==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/promises@2.3.0': - resolution: {integrity: sha512-GjVgutZKXVuojd9rWy1PuLnfcRfqsaCm7InCiZc8bqmJpoghlyluweNc7ml9Y5yQn1P2IOyzh9+p/77vIyNybQ==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/promises@4.0.0': resolution: {integrity: sha512-zEh815+n2OrrQunZ6m1iuNcoZRc9YnQaTeivBSgl1SYfPaq/Qj/rRiK5DID25Njo4L44p5quu7aal3Bk/eR+tQ==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/rpc-api@2.3.0': - resolution: {integrity: sha512-UUdiRfWoyYhJL9PPvFeJr4aJ554ob2jXcpn4vKmRVn9ire0sCbpQKYx6K8eEKHZWXKrDW8IDspgTl0gT/aJWVg==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/rpc-api@4.0.0': resolution: {integrity: sha512-nfQkTJCIW3qzUDRrhvr9MBm9jKQ+dZn4ypK35UDPrV+QB5Gc9UmPJ6prvpPtDq8WoU7wqUzswKeY3k7qtgYjEg==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/rpc-parsed-types@2.3.0': - resolution: {integrity: sha512-B5pHzyEIbBJf9KHej+zdr5ZNAdSvu7WLU2lOUPh81KHdHQs6dEb310LGxcpCc7HVE8IEdO20AbckewDiAN6OCg==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/rpc-parsed-types@4.0.0': resolution: {integrity: sha512-aOjwJwen5D0aDXoSths+ekdBO4mu7nmM+yASqCVW2PLN6v7NZmRBzV1/PgMFjDTiymVQj25ipCUvL395s1wsKg==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/rpc-spec-types@2.3.0': - resolution: {integrity: sha512-xQsb65lahjr8Wc9dMtP7xa0ZmDS8dOE2ncYjlvfyw/h4mpdXTUdrSMi6RtFwX33/rGuztQ7Hwaid5xLNSLvsFQ==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/rpc-spec-types@4.0.0': resolution: {integrity: sha512-rpFMIaetpubeyDXIlxV08vtmiDt7ME9527kCI61slHj6O2rbj+7fABhmlN6J4YDCcL/kfnMCxZyNna94DovHZA==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/rpc-spec@2.3.0': - resolution: {integrity: sha512-fA2LMX4BMixCrNB2n6T83AvjZ3oUQTu7qyPLyt8gHQaoEAXs8k6GZmu6iYcr+FboQCjUmRPgMaABbcr9j2J9Sw==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/rpc-spec@4.0.0': resolution: {integrity: sha512-9PFTFWjdgA/KFG4rgzbgA7gm9+aRDwsRJgI1aP7n3dGsGzYUp8vNgRQBhogWscEOETkgZNlsi/artLxgvHEHEg==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/rpc-subscriptions-api@2.3.0': - resolution: {integrity: sha512-9mCjVbum2Hg9KGX3LKsrI5Xs0KX390lS+Z8qB80bxhar6MJPugqIPH8uRgLhCW9GN3JprAfjRNl7our8CPvsPQ==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/rpc-subscriptions-api@4.0.0': resolution: {integrity: sha512-6/MzQT9VkcD7Rh8ExoGdbERTSEubA5eI+Q0R9FRuujl/SIy2BsWaNxaBMuZS0DFmKbIHM+m1ptUFdjKAVjGQuw==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/rpc-subscriptions-channel-websocket@2.3.0': - resolution: {integrity: sha512-2oL6ceFwejIgeWzbNiUHI2tZZnaOxNTSerszcin7wYQwijxtpVgUHiuItM/Y70DQmH9sKhmikQp+dqeGalaJxw==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - ws: ^8.18.0 - '@solana/rpc-subscriptions-channel-websocket@4.0.0': resolution: {integrity: sha512-dc4cGfkQJEdkux/CXpItffuytnSU6wktReHEBL+2xaYmF+yGMBeBLzTvkCJ9BbGGfBMf06c5y5QH8X48W5CJdg==} engines: {node: '>=20.18.0'} @@ -2946,144 +2766,72 @@ packages: typescript: '>=5.3.3' ws: ^8.18.0 - '@solana/rpc-subscriptions-spec@2.3.0': - resolution: {integrity: sha512-rdmVcl4PvNKQeA2l8DorIeALCgJEMSu7U8AXJS1PICeb2lQuMeaR+6cs/iowjvIB0lMVjYN2sFf6Q3dJPu6wWg==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/rpc-subscriptions-spec@4.0.0': resolution: {integrity: sha512-2ROfFymoy/TjDAlEPpsmSQAr6LZwG4l/UIhkW7+/VraRu7QPAycuWfSopJnG8D7F3fksICFSeQNwwgBXTN1TWA==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/rpc-subscriptions@2.3.0': - resolution: {integrity: sha512-Uyr10nZKGVzvCOqwCZgwYrzuoDyUdwtgQRefh13pXIrdo4wYjVmoLykH49Omt6abwStB0a4UL5gX9V4mFdDJZg==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/rpc-subscriptions@4.0.0': resolution: {integrity: sha512-rM+R4Xpsym0tYF3sGAEpdY+D+c6fOMk/fhCEewR+veqdubRfvI5QEhq4kHs8qdKKuRbcpGmedPC306H+PQ6Hmg==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/rpc-transformers@2.3.0': - resolution: {integrity: sha512-UuHYK3XEpo9nMXdjyGKkPCOr7WsZsxs7zLYDO1A5ELH3P3JoehvrDegYRAGzBS2VKsfApZ86ZpJToP0K3PhmMA==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/rpc-transformers@4.0.0': resolution: {integrity: sha512-3B3C9zpqN2O76CJV9tethtybMFdT2ViN5b2u8sObftGNFqxPmjt7XmbOmPdn7zwLyRM5S2RuZShzfcVJpBf+yQ==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/rpc-transport-http@2.3.0': - resolution: {integrity: sha512-HFKydmxGw8nAF5N+S0NLnPBDCe5oMDtI2RAmW8DMqP4U3Zxt2XWhvV1SNkAldT5tF0U1vP+is6fHxyhk4xqEvg==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/rpc-transport-http@4.0.0': resolution: {integrity: sha512-RjXcQehF3wHm8eoIala+MrdmS3mDSPRl+xwEWzmA1QmBdQl44/XTNOdPJvNkqWXrzE+bAsZGfn0gVua/oCC+zQ==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/rpc-types@2.3.0': - resolution: {integrity: sha512-O09YX2hED2QUyGxrMOxQ9GzH1LlEwwZWu69QbL4oYmIf6P5dzEEHcqRY6L1LsDVqc/dzAdEs/E1FaPrcIaIIPw==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/rpc-types@4.0.0': resolution: {integrity: sha512-mY4W6DQVaLf3M8hSSzIEtaRsVgLg9zv5qdjjYvxkALw0fzjkLW55h3ctGbJ/k+dNpYm9gcKg7zatA7eBNnNmtQ==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/rpc@2.3.0': - resolution: {integrity: sha512-ZWN76iNQAOCpYC7yKfb3UNLIMZf603JckLKOOLTHuy9MZnTN8XV6uwvDFhf42XvhglgUjGCEnbUqWtxQ9pa/pQ==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/rpc@4.0.0': resolution: {integrity: sha512-KF91ghi7P48aeWd4eSY5Fly/ioYz9ww2loQd/YqV3eLQwo3/2HUWd6r6lpSHsLh/HUoUkm+EsYmVN8r/3mE5fg==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/signers@2.3.0': - resolution: {integrity: sha512-OSv6fGr/MFRx6J+ZChQMRqKNPGGmdjkqarKkRzkwmv7v8quWsIRnJT5EV8tBy3LI4DLO/A8vKiNSPzvm1TdaiQ==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/signers@4.0.0': resolution: {integrity: sha512-r3ZrltruadsQXmx3fsGOSqAZ3SsgD7zq/QB8sT6IOVcg11Pgdvx48/CEv7djdy44wF4HVpqNCZLfi12EhoaSXQ==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/subscribable@2.3.0': - resolution: {integrity: sha512-DkgohEDbMkdTWiKAoatY02Njr56WXx9e/dKKfmne8/Ad6/2llUIrax78nCdlvZW9quXMaXPTxZvdQqo9N669Og==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/subscribable@4.0.0': resolution: {integrity: sha512-lDI4HkDuGkmdnX7hSgvJsFFadkQxt0pLHIpZTxOt7/6KBDtNs63NTwJGd3d/EuA7ReXwYg5HDG0QtOm64divXQ==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/sysvars@2.3.0': - resolution: {integrity: sha512-LvjADZrpZ+CnhlHqfI5cmsRzX9Rpyb1Ox2dMHnbsRNzeKAMhu9w4ZBIaeTdO322zsTr509G1B+k2ABD3whvUBA==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/sysvars@4.0.0': resolution: {integrity: sha512-HUu2B8P7iRYWAt1KL/5a6nNTKp73y04cSxZ9PZf2Ap1/KE0/5D8WnkEfnurUQmU3zBner95d+szNOyWMNBOoTw==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/transaction-confirmation@2.3.0': - resolution: {integrity: sha512-UiEuiHCfAAZEKdfne/XljFNJbsKAe701UQHKXEInYzIgBjRbvaeYZlBmkkqtxwcasgBTOmEaEKT44J14N9VZDw==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/transaction-confirmation@4.0.0': resolution: {integrity: sha512-DTBIMB5/UCOpVyL5E0xwswtxs/PGeSD1VL5+C1UCPlggpZNIOlhZoaQqFO56wrJDFASzPMx+dakda5BUuhQkBg==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/transaction-messages@2.3.0': - resolution: {integrity: sha512-bgqvWuy3MqKS5JdNLH649q+ngiyOu5rGS3DizSnWwYUd76RxZl1kN6CoqHSrrMzFMvis6sck/yPGG3wqrMlAww==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/transaction-messages@4.0.0': resolution: {integrity: sha512-rQo0rRyvkrROFZHUT0uL3vqeBBtxTsNKDtx8pZo6BC3TgGA7V1MoSC3rVOLwYCK6rK5NJZiYNjmneHz/7hVpwQ==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' - '@solana/transactions@2.3.0': - resolution: {integrity: sha512-LnTvdi8QnrQtuEZor5Msje61sDpPstTVwKg4y81tNxDhiyomjuvnSNLAq6QsB9gIxUqbNzPZgOG9IU4I4/Uaug==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/transactions@4.0.0': resolution: {integrity: sha512-bmHIIVTQq+Wlqg4es91Ew4KSbOrvdfPsKg/pVha8ZR77huwvfqQMxRyYF4zMQ+Fm3QXGFKOU0RPVKKYic15jBw==} engines: {node: '>=20.18.0'} @@ -3731,9 +3479,6 @@ packages: bare-url@2.3.1: resolution: {integrity: sha512-v2yl0TnaZTdEnelkKtXZGnotiV6qATBlnNuUMrHl6v9Lmmrh9mw9RYyImPU7/4RahumSwQS1k2oKXcRfXcbjJw==} - base-x@5.0.1: - resolution: {integrity: sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==} - base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -3793,9 +3538,6 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - bs58@6.0.0: - resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} - buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} @@ -3971,10 +3713,6 @@ packages: resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==} engines: {node: '>=20'} - commander@14.0.3: - resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} - engines: {node: '>=20'} - commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} @@ -4902,12 +4640,6 @@ packages: resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} engines: {node: '>= 14'} - gill@0.12.0: - resolution: {integrity: sha512-+8I9Uk5fKfSgoFMPNu17Hm7cW8ymnhnPbPfJr0E4ShJeHtn342TxlUHhGibirj/1IIfDmotaQv6KHaSEz5OImw==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5' - git-hooks-list@4.1.1: resolution: {integrity: sha512-cmP497iLq54AZnv4YRAEMnEyQ1eIn4tGKbmswqwmFV4GBnAqE8NLtWxxdXa++AalfgL5EBH4IxTPyquEuGY/jA==} @@ -9531,43 +9263,14 @@ snapshots: '@socket.io/component-emitter@3.1.2': {} - '@solana-program/address-lookup-table@0.7.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3))': - dependencies: - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3) - - '@solana-program/compute-budget@0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3))': - dependencies: - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3) - - '@solana-program/system@0.7.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3))': - dependencies: - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3) - '@solana-program/system@0.9.1(@solana/kit@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3))': dependencies: '@solana/kit': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3) - '@solana-program/token-2022@0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3))(@solana/sysvars@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))': - dependencies: - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3) - '@solana/sysvars': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana-program/token@0.6.0(@solana/kit@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3))': dependencies: '@solana/kit': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3) - '@solana/accounts@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': - dependencies: - '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/codecs-core': 2.3.0(typescript@5.9.3) - '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/errors': 2.3.0(typescript@5.9.3) - '@solana/rpc-spec': 2.3.0(typescript@5.9.3) - '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/accounts@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: '@solana/addresses': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) @@ -9580,17 +9283,6 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/addresses@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': - dependencies: - '@solana/assertions': 2.3.0(typescript@5.9.3) - '@solana/codecs-core': 2.3.0(typescript@5.9.3) - '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/errors': 2.3.0(typescript@5.9.3) - '@solana/nominal-types': 2.3.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/addresses@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: '@solana/assertions': 4.0.0(typescript@5.9.3) @@ -9602,11 +9294,6 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/assertions@2.3.0(typescript@5.9.3)': - dependencies: - '@solana/errors': 2.3.0(typescript@5.9.3) - typescript: 5.9.3 - '@solana/assertions@4.0.0(typescript@5.9.3)': dependencies: '@solana/errors': 4.0.0(typescript@5.9.3) @@ -9617,23 +9304,11 @@ snapshots: '@solana/errors': 2.1.1(typescript@5.9.3) typescript: 5.9.3 - '@solana/codecs-core@2.3.0(typescript@5.9.3)': - dependencies: - '@solana/errors': 2.3.0(typescript@5.9.3) - typescript: 5.9.3 - '@solana/codecs-core@4.0.0(typescript@5.9.3)': dependencies: '@solana/errors': 4.0.0(typescript@5.9.3) typescript: 5.9.3 - '@solana/codecs-data-structures@2.3.0(typescript@5.9.3)': - dependencies: - '@solana/codecs-core': 2.3.0(typescript@5.9.3) - '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) - '@solana/errors': 2.3.0(typescript@5.9.3) - typescript: 5.9.3 - '@solana/codecs-data-structures@4.0.0(typescript@5.9.3)': dependencies: '@solana/codecs-core': 4.0.0(typescript@5.9.3) @@ -9647,12 +9322,6 @@ snapshots: '@solana/errors': 2.1.1(typescript@5.9.3) typescript: 5.9.3 - '@solana/codecs-numbers@2.3.0(typescript@5.9.3)': - dependencies: - '@solana/codecs-core': 2.3.0(typescript@5.9.3) - '@solana/errors': 2.3.0(typescript@5.9.3) - typescript: 5.9.3 - '@solana/codecs-numbers@4.0.0(typescript@5.9.3)': dependencies: '@solana/codecs-core': 4.0.0(typescript@5.9.3) @@ -9667,14 +9336,6 @@ snapshots: fastestsmallesttextencoderdecoder: 1.0.22 typescript: 5.9.3 - '@solana/codecs-strings@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': - dependencies: - '@solana/codecs-core': 2.3.0(typescript@5.9.3) - '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) - '@solana/errors': 2.3.0(typescript@5.9.3) - fastestsmallesttextencoderdecoder: 1.0.22 - typescript: 5.9.3 - '@solana/codecs-strings@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: '@solana/codecs-core': 4.0.0(typescript@5.9.3) @@ -9683,17 +9344,6 @@ snapshots: fastestsmallesttextencoderdecoder: 1.0.22 typescript: 5.9.3 - '@solana/codecs@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': - dependencies: - '@solana/codecs-core': 2.3.0(typescript@5.9.3) - '@solana/codecs-data-structures': 2.3.0(typescript@5.9.3) - '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) - '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/options': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/codecs@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: '@solana/codecs-core': 4.0.0(typescript@5.9.3) @@ -9711,30 +9361,16 @@ snapshots: commander: 13.1.0 typescript: 5.9.3 - '@solana/errors@2.3.0(typescript@5.9.3)': - dependencies: - chalk: 5.6.2 - commander: 14.0.3 - typescript: 5.9.3 - '@solana/errors@4.0.0(typescript@5.9.3)': dependencies: chalk: 5.6.2 commander: 14.0.1 typescript: 5.9.3 - '@solana/fast-stable-stringify@2.3.0(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - '@solana/fast-stable-stringify@4.0.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@solana/functional@2.3.0(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - '@solana/functional@4.0.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 @@ -9750,29 +9386,12 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/instructions@2.3.0(typescript@5.9.3)': - dependencies: - '@solana/codecs-core': 2.3.0(typescript@5.9.3) - '@solana/errors': 2.3.0(typescript@5.9.3) - typescript: 5.9.3 - '@solana/instructions@4.0.0(typescript@5.9.3)': dependencies: '@solana/codecs-core': 4.0.0(typescript@5.9.3) '@solana/errors': 4.0.0(typescript@5.9.3) typescript: 5.9.3 - '@solana/keys@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': - dependencies: - '@solana/assertions': 2.3.0(typescript@5.9.3) - '@solana/codecs-core': 2.3.0(typescript@5.9.3) - '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/errors': 2.3.0(typescript@5.9.3) - '@solana/nominal-types': 2.3.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/keys@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: '@solana/assertions': 4.0.0(typescript@5.9.3) @@ -9784,31 +9403,6 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3)': - dependencies: - '@solana/accounts': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/codecs': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/errors': 2.3.0(typescript@5.9.3) - '@solana/functional': 2.3.0(typescript@5.9.3) - '@solana/instructions': 2.3.0(typescript@5.9.3) - '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/programs': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/rpc': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/rpc-parsed-types': 2.3.0(typescript@5.9.3) - '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3) - '@solana/rpc-subscriptions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3) - '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/signers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/sysvars': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3) - '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - - ws - '@solana/kit@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3)': dependencies: '@solana/accounts': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) @@ -9835,25 +9429,10 @@ snapshots: - fastestsmallesttextencoderdecoder - ws - '@solana/nominal-types@2.3.0(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - '@solana/nominal-types@4.0.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@solana/options@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': - dependencies: - '@solana/codecs-core': 2.3.0(typescript@5.9.3) - '@solana/codecs-data-structures': 2.3.0(typescript@5.9.3) - '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) - '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/errors': 2.3.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/options@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: '@solana/codecs-core': 4.0.0(typescript@5.9.3) @@ -9865,14 +9444,6 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/programs@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': - dependencies: - '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/errors': 2.3.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/programs@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: '@solana/addresses': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) @@ -9881,31 +9452,10 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/promises@2.3.0(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - '@solana/promises@4.0.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@solana/rpc-api@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': - dependencies: - '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/codecs-core': 2.3.0(typescript@5.9.3) - '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/errors': 2.3.0(typescript@5.9.3) - '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/rpc-parsed-types': 2.3.0(typescript@5.9.3) - '@solana/rpc-spec': 2.3.0(typescript@5.9.3) - '@solana/rpc-transformers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/rpc-api@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: '@solana/addresses': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) @@ -9923,47 +9473,20 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/rpc-parsed-types@2.3.0(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - '@solana/rpc-parsed-types@4.0.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@solana/rpc-spec-types@2.3.0(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - '@solana/rpc-spec-types@4.0.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@solana/rpc-spec@2.3.0(typescript@5.9.3)': - dependencies: - '@solana/errors': 2.3.0(typescript@5.9.3) - '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3) - typescript: 5.9.3 - '@solana/rpc-spec@4.0.0(typescript@5.9.3)': dependencies: '@solana/errors': 4.0.0(typescript@5.9.3) '@solana/rpc-spec-types': 4.0.0(typescript@5.9.3) typescript: 5.9.3 - '@solana/rpc-subscriptions-api@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': - dependencies: - '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.9.3) - '@solana/rpc-transformers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/rpc-subscriptions-api@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: '@solana/addresses': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) @@ -9977,15 +9500,6 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/rpc-subscriptions-channel-websocket@2.3.0(typescript@5.9.3)(ws@8.18.3)': - dependencies: - '@solana/errors': 2.3.0(typescript@5.9.3) - '@solana/functional': 2.3.0(typescript@5.9.3) - '@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.9.3) - '@solana/subscribable': 2.3.0(typescript@5.9.3) - typescript: 5.9.3 - ws: 8.18.3 - '@solana/rpc-subscriptions-channel-websocket@4.0.0(typescript@5.9.3)(ws@8.18.3)': dependencies: '@solana/errors': 4.0.0(typescript@5.9.3) @@ -9995,14 +9509,6 @@ snapshots: typescript: 5.9.3 ws: 8.18.3 - '@solana/rpc-subscriptions-spec@2.3.0(typescript@5.9.3)': - dependencies: - '@solana/errors': 2.3.0(typescript@5.9.3) - '@solana/promises': 2.3.0(typescript@5.9.3) - '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3) - '@solana/subscribable': 2.3.0(typescript@5.9.3) - typescript: 5.9.3 - '@solana/rpc-subscriptions-spec@4.0.0(typescript@5.9.3)': dependencies: '@solana/errors': 4.0.0(typescript@5.9.3) @@ -10011,24 +9517,6 @@ snapshots: '@solana/subscribable': 4.0.0(typescript@5.9.3) typescript: 5.9.3 - '@solana/rpc-subscriptions@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3)': - dependencies: - '@solana/errors': 2.3.0(typescript@5.9.3) - '@solana/fast-stable-stringify': 2.3.0(typescript@5.9.3) - '@solana/functional': 2.3.0(typescript@5.9.3) - '@solana/promises': 2.3.0(typescript@5.9.3) - '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3) - '@solana/rpc-subscriptions-api': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/rpc-subscriptions-channel-websocket': 2.3.0(typescript@5.9.3)(ws@8.18.3) - '@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.9.3) - '@solana/rpc-transformers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/subscribable': 2.3.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - - ws - '@solana/rpc-subscriptions@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3)': dependencies: '@solana/errors': 4.0.0(typescript@5.9.3) @@ -10047,17 +9535,6 @@ snapshots: - fastestsmallesttextencoderdecoder - ws - '@solana/rpc-transformers@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': - dependencies: - '@solana/errors': 2.3.0(typescript@5.9.3) - '@solana/functional': 2.3.0(typescript@5.9.3) - '@solana/nominal-types': 2.3.0(typescript@5.9.3) - '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3) - '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/rpc-transformers@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: '@solana/errors': 4.0.0(typescript@5.9.3) @@ -10069,14 +9546,6 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/rpc-transport-http@2.3.0(typescript@5.9.3)': - dependencies: - '@solana/errors': 2.3.0(typescript@5.9.3) - '@solana/rpc-spec': 2.3.0(typescript@5.9.3) - '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3) - typescript: 5.9.3 - undici-types: 7.16.0 - '@solana/rpc-transport-http@4.0.0(typescript@5.9.3)': dependencies: '@solana/errors': 4.0.0(typescript@5.9.3) @@ -10085,18 +9554,6 @@ snapshots: typescript: 5.9.3 undici-types: 7.16.0 - '@solana/rpc-types@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': - dependencies: - '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/codecs-core': 2.3.0(typescript@5.9.3) - '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) - '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/errors': 2.3.0(typescript@5.9.3) - '@solana/nominal-types': 2.3.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/rpc-types@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: '@solana/addresses': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) @@ -10109,21 +9566,6 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/rpc@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': - dependencies: - '@solana/errors': 2.3.0(typescript@5.9.3) - '@solana/fast-stable-stringify': 2.3.0(typescript@5.9.3) - '@solana/functional': 2.3.0(typescript@5.9.3) - '@solana/rpc-api': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/rpc-spec': 2.3.0(typescript@5.9.3) - '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3) - '@solana/rpc-transformers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/rpc-transport-http': 2.3.0(typescript@5.9.3) - '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/rpc@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: '@solana/errors': 4.0.0(typescript@5.9.3) @@ -10139,20 +9581,6 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/signers@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': - dependencies: - '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/codecs-core': 2.3.0(typescript@5.9.3) - '@solana/errors': 2.3.0(typescript@5.9.3) - '@solana/instructions': 2.3.0(typescript@5.9.3) - '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/nominal-types': 2.3.0(typescript@5.9.3) - '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/signers@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: '@solana/addresses': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) @@ -10167,26 +9595,11 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/subscribable@2.3.0(typescript@5.9.3)': - dependencies: - '@solana/errors': 2.3.0(typescript@5.9.3) - typescript: 5.9.3 - '@solana/subscribable@4.0.0(typescript@5.9.3)': dependencies: '@solana/errors': 4.0.0(typescript@5.9.3) typescript: 5.9.3 - '@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': - dependencies: - '@solana/accounts': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/codecs': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/errors': 2.3.0(typescript@5.9.3) - '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/sysvars@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: '@solana/accounts': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) @@ -10197,23 +9610,6 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/transaction-confirmation@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3)': - dependencies: - '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/errors': 2.3.0(typescript@5.9.3) - '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/promises': 2.3.0(typescript@5.9.3) - '@solana/rpc': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/rpc-subscriptions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3) - '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - - ws - '@solana/transaction-confirmation@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3)': dependencies: '@solana/addresses': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) @@ -10231,21 +9627,6 @@ snapshots: - fastestsmallesttextencoderdecoder - ws - '@solana/transaction-messages@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': - dependencies: - '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/codecs-core': 2.3.0(typescript@5.9.3) - '@solana/codecs-data-structures': 2.3.0(typescript@5.9.3) - '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) - '@solana/errors': 2.3.0(typescript@5.9.3) - '@solana/functional': 2.3.0(typescript@5.9.3) - '@solana/instructions': 2.3.0(typescript@5.9.3) - '@solana/nominal-types': 2.3.0(typescript@5.9.3) - '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/transaction-messages@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: '@solana/addresses': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) @@ -10261,24 +9642,6 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/transactions@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': - dependencies: - '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/codecs-core': 2.3.0(typescript@5.9.3) - '@solana/codecs-data-structures': 2.3.0(typescript@5.9.3) - '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) - '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/errors': 2.3.0(typescript@5.9.3) - '@solana/functional': 2.3.0(typescript@5.9.3) - '@solana/instructions': 2.3.0(typescript@5.9.3) - '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/nominal-types': 2.3.0(typescript@5.9.3) - '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - '@solana/transactions@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: '@solana/addresses': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) @@ -10998,8 +10361,6 @@ snapshots: bare-path: 3.0.0 optional: true - base-x@5.0.1: {} - base64-js@1.5.1: {} base64id@2.0.0: {} @@ -11087,10 +10448,6 @@ snapshots: dependencies: fill-range: 7.1.1 - bs58@6.0.0: - dependencies: - base-x: 5.0.1 - buffer-crc32@0.2.13: {} buffer-from@1.1.2: {} @@ -11254,8 +10611,6 @@ snapshots: commander@14.0.1: {} - commander@14.0.3: {} - commander@4.1.1: {} commander@8.3.0: {} @@ -12262,22 +11617,6 @@ snapshots: transitivePeerDependencies: - supports-color - gill@0.12.0(@solana/sysvars@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3): - dependencies: - '@solana-program/address-lookup-table': 0.7.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3)) - '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3)) - '@solana-program/system': 0.7.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3)) - '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3))(@solana/sysvars@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)) - '@solana/assertions': 2.3.0(typescript@5.9.3) - '@solana/codecs': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3) - '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3) - typescript: 5.9.3 - transitivePeerDependencies: - - '@solana/sysvars' - - fastestsmallesttextencoderdecoder - - ws - git-hooks-list@4.1.1: {} github-from-package@0.0.0: