{"version":3,"sources":["../src/chains/solana/SolanaRelayer.ts","../src/chains/solana/constants.ts","../src/chains/solana/TollClient.ts","../src/chains/solana/spl.ts","../src/chains/solana/CavosSolana.ts"],"names":["detail","PublicKey","Buffer","Connection","TransactionInstruction"],"mappings":"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","file":"chunk-ICMZOVJ3.mjs","sourcesContent":["import {\n  Connection,\n  PublicKey,\n} from \"@solana/web3.js\";\nimport type { SolanaNetwork } from \"./constants\";\n\nexport interface SolanaRelayerOptions {\n  baseUrl: string;\n  appId: string;\n  environment?: \"development\" | \"production\";\n  network: SolanaNetwork;\n  connection: Connection;\n}\n\n/**\n * Client for the Cavos Solana sponsoring relayer. The user signs; the relayer\n * co-signs as fee payer. Native system accounts only.\n */\nexport class SolanaRelayer {\n  private feePayer?: PublicKey;\n\n  constructor(private readonly opts: SolanaRelayerOptions) {}\n\n  async getFeePayer(): Promise<PublicKey> {\n    if (this.feePayer) return this.feePayer;\n    const res = await fetch(`${this.opts.baseUrl}/api/solana/relay?network=${this.opts.network}`);\n    if (!res.ok) throw new Error(`kit/solana: relayer fee-payer lookup failed (${res.status})`);\n    const { fee_payer } = (await res.json()) as { fee_payer: string };\n    this.feePayer = new PublicKey(fee_payer);\n    return this.feePayer;\n  }\n\n  async sendSigned(serialized: Uint8Array): Promise<string> {\n    const res = await fetch(`${this.opts.baseUrl}/api/solana/relay`, {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\" },\n      body: JSON.stringify({\n        app_id: this.opts.appId,\n        ...(this.opts.environment ? { environment: this.opts.environment } : {}),\n        network: this.opts.network,\n        kind: \"native\",\n        transaction: Buffer.from(serialized).toString(\"base64\"),\n      }),\n    });\n    if (!res.ok) {\n      const detail = await res.text().catch(() => \"\");\n      throw new Error(`kit/solana: native relay failed (${res.status}) ${detail}`);\n    }\n    const { signature } = (await res.json()) as { signature: string };\n    return signature;\n  }\n}\n","export const SOLANA_NETWORKS = {\n  \"solana-devnet\": \"https://api.devnet.solana.com\",\n  \"solana-mainnet\": \"https://api.mainnet-beta.solana.com\",\n  \"solana-localnet\": \"http://127.0.0.1:8899\",\n} as const;\n\nexport type SolanaNetwork = keyof typeof SOLANA_NETWORKS;\n","import { PublicKey } from \"@solana/web3.js\";\n\nexport interface TollQuote {\n  /** Opaque sealed payload; submit it back unchanged. */\n  quote: string;\n  feePayer: PublicKey;\n  treasury: PublicKey;\n  mint: PublicKey;\n  /** Base units of `mint` the user owes. */\n  amount: bigint;\n  decimals: number;\n  expiresAt: number;\n}\n\n/** The hosted service. An integrator running their own points `baseUrl` at it. */\nexport const TOLL_URL = \"https://toll.cavos.xyz\";\n\nexport interface TollClientOptions {\n  baseUrl?: string;\n}\n\nexport interface QuoteRequest {\n  mint: string;\n  /** Instructions the transaction will carry, the payment included. */\n  instructions: number;\n  computeUnits?: number;\n  microLamportsPerUnit?: number;\n  fundedTokenAccounts?: number;\n}\n\n/**\n * Client for Toll, which pays a transaction's SOL fee and takes settlement in\n * the token the user already holds.\n *\n * Toll is the fee payer, never a custodian: it co-signs a transaction the user\n * signed and cannot alter its instructions.\n */\nexport class TollClient {\n  private readonly baseUrl: string;\n\n  constructor(opts: TollClientOptions = {}) {\n    this.baseUrl = opts.baseUrl ?? TOLL_URL;\n  }\n\n  async quote(req: QuoteRequest): Promise<TollQuote> {\n    const res = await fetch(`${this.baseUrl}/v1/quote`, {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\" },\n      body: JSON.stringify({\n        fee_mint: req.mint,\n        instructions: req.instructions,\n        ...(req.computeUnits ? { compute_units: req.computeUnits } : {}),\n        ...(req.microLamportsPerUnit\n          ? { micro_lamports_per_unit: req.microLamportsPerUnit }\n          : {}),\n        ...(req.fundedTokenAccounts\n          ? { funded_token_accounts: req.fundedTokenAccounts }\n          : {}),\n      }),\n    });\n    if (!res.ok) throw new Error(`kit/solana: toll quote failed (${res.status}) ${await detail(res)}`);\n    const body = (await res.json()) as {\n      quote: string;\n      fee_payer: string;\n      treasury: string;\n      mint: string;\n      amount: number;\n      decimals: number;\n      expires_at: number;\n    };\n    return {\n      quote: body.quote,\n      feePayer: new PublicKey(body.fee_payer),\n      treasury: new PublicKey(body.treasury),\n      mint: new PublicKey(body.mint),\n      amount: BigInt(body.amount),\n      decimals: body.decimals,\n      expiresAt: body.expires_at,\n    };\n  }\n\n  async submit(quote: string, serialized: Uint8Array): Promise<string> {\n    const res = await fetch(`${this.baseUrl}/v1/submit`, {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\" },\n      body: JSON.stringify({\n        quote,\n        transaction: Buffer.from(serialized).toString(\"base64\"),\n      }),\n    });\n    if (!res.ok) throw new Error(`kit/solana: toll submit failed (${res.status}) ${await detail(res)}`);\n    const { signature } = (await res.json()) as { signature: string };\n    return signature;\n  }\n}\n\nasync function detail(res: Response): Promise<string> {\n  try {\n    const body = (await res.json()) as { error?: string };\n    return body.error ?? \"\";\n  } catch {\n    return \"\";\n  }\n}\n","import { Buffer } from \"buffer\";\nimport { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\n\nexport const TOKEN_PROGRAM_ID = new PublicKey(\"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\");\nexport const ASSOCIATED_TOKEN_PROGRAM_ID = new PublicKey(\n  \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\",\n);\n\n/** The canonical token account for `owner` and `mint`. */\nexport function associatedTokenAddress(mint: PublicKey, owner: PublicKey): PublicKey {\n  return PublicKey.findProgramAddressSync(\n    [owner.toBytes(), TOKEN_PROGRAM_ID.toBytes(), mint.toBytes()],\n    ASSOCIATED_TOKEN_PROGRAM_ID,\n  )[0];\n}\n\nconst TRANSFER_CHECKED = 12;\n\n/**\n * `TransferChecked`, not the bare `Transfer`: it names the mint and decimals in\n * the instruction, so the receiver can tell a real token from a look-alike\n * without reading the source account. Toll requires it for exactly that reason.\n *\n * Accounts are `[source, mint, destination, authority]`.\n */\nexport function transferCheckedInstruction(params: {\n  source: PublicKey;\n  mint: PublicKey;\n  destination: PublicKey;\n  authority: PublicKey;\n  amount: bigint;\n  decimals: number;\n}): TransactionInstruction {\n  // Written byte by byte rather than with `writeBigUInt64LE`: the global\n  // `Buffer` a bundler hands the browser is often a thin shim without the\n  // BigInt methods, and this needs no more than shifts.\n  const data = Buffer.alloc(10);\n  data[0] = TRANSFER_CHECKED;\n  let amount = params.amount;\n  for (let i = 0; i < 8; i++) {\n    data[1 + i] = Number(amount & 0xffn);\n    amount >>= 8n;\n  }\n  data[9] = params.decimals;\n  return new TransactionInstruction({\n    programId: TOKEN_PROGRAM_ID,\n    keys: [\n      { pubkey: params.source, isSigner: false, isWritable: true },\n      { pubkey: params.mint, isSigner: false, isWritable: false },\n      { pubkey: params.destination, isSigner: false, isWritable: true },\n      { pubkey: params.authority, isSigner: true, isWritable: false },\n    ],\n    data,\n  });\n}\n","import {\n  Connection,\n  PublicKey,\n  SystemProgram,\n  Transaction,\n  TransactionInstruction,\n} from \"@solana/web3.js\";\nimport type { AuthProvider, Identity } from \"../../auth/AuthProvider\";\nimport type { WalletRegistry } from \"../../registry/WalletRegistry\";\nimport { InMemoryWalletRegistry } from \"../../registry/WalletRegistry\";\nimport { HttpWalletRegistry } from \"../../registry/HttpWalletRegistry\";\nimport { SolanaRelayer } from \"./SolanaRelayer\";\nimport { SOLANA_NETWORKS, type SolanaNetwork } from \"./constants\";\nimport type { PasskeyPrfProvider } from \"../../signer/PasskeyProvider\";\nimport { resolveFeeMode, type SolanaExecuteOptions } from \"../../chains/ChainAdapter\";\nimport { utf8ToBytes } from \"../../crypto/encoding\";\nimport type { MessageSignature, SolanaSignedTransaction } from \"../../signing\";\nimport type { SocialRecoveryClient } from \"../../recovery/SocialRecoveryClient\";\nimport type { SocialRecoveryCredential } from \"../../recovery/SocialRecoveryCredential\";\nimport type { DeviceFactor, EnclaveDekPort, WrapStore } from \"../../secret/DeviceSecret\";\nimport type { Ed25519Seed } from \"../../secret/dek\";\nimport type { Ed25519SpendSigner } from \"../../signer/Ed25519SpendSigner\";\nimport { resolveNativeSolana } from \"./nativeConnect\";\nimport { TollClient } from \"./TollClient\";\nimport { associatedTokenAddress, transferCheckedInstruction } from \"./spl\";\nimport { passkeyRestoreInput } from \"../../secret/nativeAccount\";\nimport { connectThroughVault, vaultConnectParams, type VaultClient } from \"../../vault/VaultClient\";\n\nexport interface InstructionAccount {\n  pubkey: string;\n  isSigner: boolean;\n  isWritable: boolean;\n}\n\nexport interface InstructionData {\n  programId: string;\n  accounts: InstructionAccount[];\n  data: Uint8Array;\n}\n\nexport interface ConnectSolanaOptions {\n  network: SolanaNetwork;\n  auth?: AuthProvider;\n  identity?: Identity;\n  appSalt: string;\n  appId?: string;\n  environment?: \"development\" | \"production\";\n  backendUrl?: string;\n  registry?: WalletRegistry;\n  rpcUrl?: string;\n  relayer?: SolanaRelayer;\n  /** Pays fees in a token the user already holds. See `fee: { token }`. */\n  toll?: TollClient;\n  credential?: SocialRecoveryCredential;\n  socialRecovery?: SocialRecoveryClient;\n  recovery?: EnclaveDekPort;\n  factor?: DeviceFactor;\n  wrapStore?: WrapStore;\n  importSpend?: (seed: Ed25519Seed, keyId: string) => Promise<Ed25519SpendSigner>;\n  passkey?: PasskeyPrfProvider;\n  /** Keep the key in the Cavos vault instead of this page's storage. */\n  vault?: VaultClient;\n}\n\nexport type ConnectStatus = \"undeployed\" | \"ready\" | \"needs-device-approval\";\n\n/** @deprecated Native Solana restores via connect, not backup add_signer. */\nexport type RecoverSolanaOptions = ConnectSolanaOptions;\n\n/**\n * Native Ed25519 system account. The address is HKDF of the MasterDEK.\n * There is no device-account program and no second on-chain spender.\n */\nexport class CavosSolana {\n  readonly chain = \"solana\" as const;\n  readonly identity: Identity;\n  readonly address: string;\n  readonly connection: Connection;\n  isNewAccount = false;\n  onAuthorizationNeeded?: () => Promise<void>;\n  private statusValue: ConnectStatus;\n  private readonly relayer?: SolanaRelayer;\n  private readonly toll?: TollClient;\n  private readonly spend?: Ed25519SpendSigner;\n  private readonly passkeyRestore: boolean;\n  private readonly statusListeners = new Set<() => void>();\n\n  /**\n   * An object, not positions: this list grows with every capability, and each\n   * time it grew positionally something downstream silently read the wrong\n   * argument.\n   */\n  private constructor(init: {\n    identity: Identity;\n    address: string;\n    status: ConnectStatus;\n    connection: Connection;\n    relayer?: SolanaRelayer;\n    toll?: TollClient;\n    spend?: Ed25519SpendSigner;\n    restoredWithPasskey?: boolean;\n  }) {\n    this.identity = init.identity;\n    this.address = init.address;\n    this.statusValue = init.status;\n    this.connection = init.connection;\n    this.relayer = init.relayer;\n    this.toll = init.toll;\n    this.spend = init.spend;\n    this.passkeyRestore = init.restoredWithPasskey ?? false;\n  }\n\n  get status(): ConnectStatus {\n    return this.statusValue;\n  }\n\n  onStatusChange(listener: () => void): () => void {\n    this.statusListeners.add(listener);\n    return () => {\n      this.statusListeners.delete(listener);\n    };\n  }\n\n  private setStatus(next: ConnectStatus): void {\n    if (this.statusValue === next) return;\n    this.statusValue = next;\n    for (const listener of this.statusListeners) {\n      try {\n        listener();\n      } catch {\n        /* a bad listener must not break the wallet */\n      }\n    }\n  }\n\n  /**\n   * Always true. A native Ed25519 system account is not deployed — its address\n   * IS its public key, so it exists the moment it is derived. Kept because the\n   * shared wallet shape exposes it.\n   */\n  get isDeployed(): boolean {\n    return true;\n  }\n\n  static async connect(opts: ConnectSolanaOptions): Promise<CavosSolana> {\n    const identity = opts.identity ?? (await opts.auth?.authenticate());\n    if (!identity) throw new Error(\"kit/solana: connect requires `identity` or `auth`\");\n\n    if (opts.network === \"solana-mainnet\" && !opts.rpcUrl) {\n      console.warn(\n        \"[cavos] Using the public mainnet-beta RPC. Pass `rpcUrl` with your own \" +\n          \"provider (Helius/Triton/QuickNode) for production — the public endpoint is rate-limited.\",\n      );\n    }\n    const connection = new Connection(opts.rpcUrl ?? SOLANA_NETWORKS[opts.network], \"confirmed\");\n    const backendUrl = opts.backendUrl ?? \"https://cavos.xyz\";\n    const registry =\n      opts.registry ??\n      (opts.appId\n        ? new HttpWalletRegistry({\n            baseUrl: backendUrl,\n            appId: opts.appId,\n            network: opts.network,\n            environment: opts.environment,\n            authToken: () => opts.auth?.getAuthToken?.() ?? null,\n          })\n        : defaultRegistry);\n    const relayer =\n      opts.relayer ??\n      (opts.appId\n        ? new SolanaRelayer({\n            baseUrl: backendUrl,\n            appId: opts.appId,\n            network: opts.network,\n            connection,\n            environment: opts.environment,\n          })\n        : undefined);\n\n    const native = opts.vault\n      ? await connectThroughVault(\"solana\", identity, opts.appSalt, () =>\n          opts.vault!.connectSolana(vaultConnectParams({ ...opts, identity })),\n        )\n      : await resolveNativeSolana({\n          identity,\n          appSalt: opts.appSalt,\n          registry,\n          credential: opts.credential,\n          socialRecovery: opts.socialRecovery,\n          recovery: opts.recovery,\n          factor: opts.factor,\n          store: opts.wrapStore,\n          importSpend: opts.importSpend,\n          ...passkeyRestoreInput({\n            passkey: opts.passkey,\n            appId: opts.appId,\n            backendUrl,\n            environment: opts.environment,\n            authToken: () => opts.auth?.getAuthToken?.() ?? null,\n          }),\n        });\n\n    void registry;\n    const wallet = new CavosSolana({\n      identity,\n      address: native.address,\n      status: native.spend ? \"ready\" : \"needs-device-approval\",\n      connection,\n      relayer,\n      toll: opts.toll,\n      spend: native.spend ?? undefined,\n      // In the vault, `passkey` only lets it ask; whether one holds the key is its answer.\n      restoredWithPasskey: \"passkey\" in native ? native.passkey === true : Boolean(opts.passkey),\n    });\n    wallet.isNewAccount = native.isNewAccount;\n    return wallet;\n  }\n\n  async hasPasskey(): Promise<boolean> {\n    return this.passkeyRestore;\n  }\n\n  /**\n   * Ready means one thing here: this device holds the spend key. There is no\n   * on-chain signer set to wait for, so this resolves off-chain and never\n   * flips back to false once the key is in hand.\n   */\n  async isReady(): Promise<boolean> {\n    if (!this.spend) return false;\n    this.setStatus(\"ready\");\n    return true;\n  }\n\n  async execute(amount: bigint, destination: string, opts?: SolanaExecuteOptions): Promise<string> {\n    const from = new PublicKey(this.address);\n    const to = new PublicKey(destination);\n    const ix = SystemProgram.transfer({\n      fromPubkey: from,\n      toPubkey: to,\n      lamports: amount,\n    });\n    return this.sendNative([ix], opts);\n  }\n\n  async executeInstructions(instructions: InstructionData[], opts?: SolanaExecuteOptions): Promise<string> {\n    const ixs = instructions.map(\n      (instruction) =>\n        new TransactionInstruction({\n          programId: new PublicKey(instruction.programId),\n          keys: instruction.accounts.map((account) => ({\n            pubkey: new PublicKey(account.pubkey),\n            isSigner: account.isSigner,\n            isWritable: account.isWritable,\n          })),\n          data: Buffer.from(instruction.data),\n        }),\n    );\n    return this.sendNative(ixs, opts);\n  }\n\n  async signMessage(message: string | Uint8Array): Promise<MessageSignature> {\n    const spend = this.requireSpend();\n    const msgBytes = typeof message === \"string\" ? utf8ToBytes(message) : message;\n    const signature = await spend.signMessage(msgBytes);\n    return { signature, publicKey: spend.address(), curve: \"ed25519\" };\n  }\n\n  /**\n   * Sign a transfer without submitting it. The account signs as its own fee\n   * payer, matching the default `execute()` route — web3.js cannot compile a\n   * message at all without a fee payer set.\n   */\n  async signTransaction(amount: bigint, destination: string): Promise<SolanaSignedTransaction> {\n    const spend = this.requireSpend();\n    const self = new PublicKey(this.address);\n    const ix = SystemProgram.transfer({\n      fromPubkey: self,\n      toPubkey: new PublicKey(destination),\n      lamports: amount,\n    });\n    const { blockhash } = await this.connection.getLatestBlockhash(\"confirmed\");\n    const tx = new Transaction();\n    tx.feePayer = self;\n    tx.recentBlockhash = blockhash;\n    tx.add(ix);\n    const message = tx.serializeMessage();\n    const signature = await spend.signTransaction(message);\n    return { chain: \"solana\", message, signature, publicKey: spend.publicKeyRaw() };\n  }\n\n  private requireSpend(): Ed25519SpendSigner {\n    if (!this.spend) throw new Error(\"kit/solana: this wallet has no native spend key\");\n    return this.spend;\n  }\n\n  /**\n   * Three ways to pay, and the account signs its own transaction in all of them:\n   *\n   *   - `'self'` (default) → the account pays from its own SOL. It is a native\n   *     Ed25519 system account, so it is signer and fee payer at once.\n   *   - `'sponsored'`      → the Cavos relayer is fee payer and submits.\n   *   - `{ token }`        → Toll is fee payer and settles in that token, paid\n   *     from the account's own token balance in the same transaction.\n   */\n  private async sendNative(ixs: TransactionInstruction[], opts?: SolanaExecuteOptions): Promise<string> {\n    const spend = this.requireSpend();\n    const mode = resolveFeeMode(opts, \"self\");\n    const self = new PublicKey(this.address);\n\n    if (typeof mode === \"object\") {\n      return this.sendViaToll(ixs, mode.token, self, spend);\n    }\n    if (mode === \"sponsored\" && !this.relayer) {\n      throw new Error(\"kit/solana: cannot sponsor — no relayer configured (set `appId`, or pass `relayer`)\");\n    }\n\n    const payer = mode === \"sponsored\" ? await this.relayer!.getFeePayer() : self;\n    const { blockhash, lastValidBlockHeight } = await this.connection.getLatestBlockhash(\"confirmed\");\n    const tx = new Transaction();\n    tx.feePayer = payer;\n    tx.recentBlockhash = blockhash;\n    tx.add(...ixs);\n    const signature = await spend.signTransaction(tx.serializeMessage());\n    tx.addSignature(self, Buffer.from(signature));\n\n    if (mode === \"sponsored\") {\n      return this.relayer!.sendSigned(tx.serialize({ requireAllSignatures: false, verifySignatures: false }));\n    }\n    // Self-funded: the account is the only signer AND the fee payer, so the\n    // transaction is already complete — send it straight to the RPC.\n    const raw = tx.serialize({ requireAllSignatures: true, verifySignatures: false });\n    const txid = await this.connection.sendRawTransaction(raw, {\n      preflightCommitment: \"confirmed\",\n    });\n    await this.connection.confirmTransaction({ signature: txid, blockhash, lastValidBlockHeight }, \"confirmed\");\n    return txid;\n  }\n\n  /**\n   * Quote first, because the amount owed has to be inside the message the user\n   * signs — settling the fee and doing the thing are one transaction, so either\n   * both happen or neither does.\n   */\n  private async sendViaToll(\n    ixs: TransactionInstruction[],\n    token: string,\n    self: PublicKey,\n    spend: Ed25519SpendSigner,\n  ): Promise<string> {\n    const toll = this.toll ?? new TollClient();\n    const quote = await toll.quote({ mint: token, instructions: ixs.length + 1 });\n    const payment = transferCheckedInstruction({\n      source: associatedTokenAddress(quote.mint, self),\n      mint: quote.mint,\n      destination: quote.treasury,\n      authority: self,\n      amount: quote.amount,\n      decimals: quote.decimals,\n    });\n\n    const { blockhash } = await this.connection.getLatestBlockhash(\"confirmed\");\n    const tx = new Transaction();\n    tx.feePayer = quote.feePayer;\n    tx.recentBlockhash = blockhash;\n    tx.add(payment, ...ixs);\n    const signature = await spend.signTransaction(tx.serializeMessage());\n    tx.addSignature(self, Buffer.from(signature));\n\n    return toll.submit(\n      quote.quote,\n      tx.serialize({ requireAllSignatures: false, verifySignatures: false }),\n    );\n  }\n}\n\nconst defaultRegistry = new InMemoryWalletRegistry();\n"]}