{"version":3,"sources":["../src/chains/stellar/constants.ts","../src/chains/stellar/datamap.ts","../src/chains/stellar/StellarAdapter.ts","../src/chains/stellar/StellarRelayer.ts","../src/registry/AddressCache.ts","../src/registry/resolveAddress.ts","../src/chains/stellar/derivedSigner.ts","../src/chains/stellar/CavosStellar.ts"],"names":["tx","wallet","TransactionBuilder","Keypair"],"mappings":"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","file":"chunk-H2NKGPUW.mjs","sourcesContent":["/** Classic-Stellar (`G…`) network configuration.\n *\n * This is now THE Stellar implementation in the kit (the Soroban `C…`\n * device-account path was removed — `G…` classic multisig is the default). Classic\n * Stellar uses Horizon (not the Soroban RPC) to load account state and submit\n * transactions. */\n\nexport const STELLAR_NETWORKS = {\n  \"stellar-testnet\": {\n    passphrase: \"Test SDF Network ; September 2015\",\n  },\n  \"stellar-mainnet\": {\n    passphrase: \"Public Global Stellar Network ; September 2015\",\n  },\n} as const;\n\nexport type StellarNetwork = keyof typeof STELLAR_NETWORKS;\n\nexport const HORIZON_URL = {\n  \"stellar-testnet\": \"https://horizon-testnet.stellar.org\",\n  \"stellar-mainnet\": \"https://horizon.stellar.org\",\n} as const;\n\n/** Soroban RPC endpoints — used only for contract invocation (simulate, footprint,\n *  resource fees, submit). Classic account state/pay still goes through Horizon. */\nexport const SOROBAN_RPC_URL = {\n  \"stellar-testnet\": \"https://soroban-testnet.stellar.org\",\n  \"stellar-mainnet\": \"https://mainnet.sorobanrpc.com\",\n} as const;\n\n/** Relayer create still requires a `cv:` data entry. This is a version tag, not a secret. */\nexport const STELLAR_MODEL_DATA_KEY = \"cv:v\";\nexport const STELLAR_PASSKEY_DATA_KEY = \"cv:pk\";\n/** Public G address of the enclave-sealed social-recovery signer. */\nexport const STELLAR_SOCIAL_DATA_KEY = \"cv:sr\";\n\n/** Native XLM has 7 decimals (stroops). */\nexport const XLM_DECIMALS = 7;\n","import { chunkTo64, unchunk } from \"./envelope\";\n\n/**\n * On-chain layout of the control-key envelope in the account's classic\n * `MANAGE_DATA` entries. Stellar caps both the data-entry *key* and *value* at 64\n * bytes, so every logical blob is split into ≤64-byte chunks written under\n * ordered, indexed keys. Enumerating the account's data entries (returned whole\n * by Horizon) is enough to reconstruct the envelope — no separate index needed,\n * which keeps the account self-describing and backend-free.\n *\n * Keys (all under the `cv:` namespace):\n *   cv:ct/<i>        sealed control seed (DEK-encrypted)\n *   cv:wd:<slot>/<i> device ECIES DEK-wrap, one <slot> per device\n *   cv:wp/<i>        passkey-PRF DEK-wrap (recovery / new-device anchor)\n *   cv:wr/<i>        recovery-code DEK-wrap (optional)\n *   cv:v             single-byte envelope version\n */\n\nexport const CT_BASE = \"cv:ct\";\nexport const PASSKEY_BASE = \"cv:wp\";\nexport const RECOVERY_BASE = \"cv:wr\";\nexport const VERSION_KEY = \"cv:v\";\nexport const ENVELOPE_VERSION = 1;\n\n/** `cv:wd:<slot>` base key for a device envelope slot. */\nexport function deviceBase(slot: string): string {\n  return `cv:wd:${slot}`;\n}\n\n/** In-memory shape of the account's control-key envelope. */\nexport interface AccountEnvelope {\n  /** Sealed control seed (`sealControlSeed` output). */\n  ct: Uint8Array;\n  /** Per-device ECIES DEK-wraps, keyed by device slot id. */\n  deviceWraps: Record<string, Uint8Array>;\n  /** Passkey-PRF DEK-wrap, if a passkey factor is enrolled. */\n  passkeyWrap?: Uint8Array;\n  /** Recovery-code DEK-wrap, if the user set one up. */\n  recoveryWrap?: Uint8Array;\n}\n\n/** Serialize an envelope into `MANAGE_DATA` name→value entries (raw bytes). */\nexport function toDataEntries(env: AccountEnvelope): Record<string, Uint8Array> {\n  const out: Record<string, Uint8Array> = {};\n  writeChunked(out, CT_BASE, env.ct);\n  for (const [slot, blob] of Object.entries(env.deviceWraps)) {\n    writeChunked(out, deviceBase(slot), blob);\n  }\n  if (env.passkeyWrap) writeChunked(out, PASSKEY_BASE, env.passkeyWrap);\n  if (env.recoveryWrap) writeChunked(out, RECOVERY_BASE, env.recoveryWrap);\n  out[VERSION_KEY] = Uint8Array.of(ENVELOPE_VERSION);\n  return out;\n}\n\n/** Reconstruct an envelope from an account's data entries (name→bytes). */\nexport function fromDataEntries(entries: Record<string, Uint8Array>): AccountEnvelope {\n  const ct = readChunked(entries, CT_BASE);\n  if (!ct) throw new Error(\"kit/stellar: account has no control-seed ciphertext (cv:ct)\");\n\n  const deviceWraps: Record<string, Uint8Array> = {};\n  const seenSlots = new Set<string>();\n  for (const key of Object.keys(entries)) {\n    const m = key.match(/^cv:wd:([^/]+)\\/\\d+$/);\n    if (m) seenSlots.add(m[1]);\n  }\n  for (const slot of seenSlots) {\n    const blob = readChunked(entries, deviceBase(slot));\n    if (blob) deviceWraps[slot] = blob;\n  }\n\n  return {\n    ct,\n    deviceWraps,\n    passkeyWrap: readChunked(entries, PASSKEY_BASE),\n    recoveryWrap: readChunked(entries, RECOVERY_BASE),\n  };\n}\n\n/** Just the `MANAGE_DATA` entries for one device slot — used when re-wrapping the\n *  DEK for a newly approved device (a single classic tx, no full re-write). */\nexport function deviceWrapEntries(slot: string, blob: Uint8Array): Record<string, Uint8Array> {\n  const out: Record<string, Uint8Array> = {};\n  writeChunked(out, deviceBase(slot), blob);\n  return out;\n}\n\nfunction writeChunked(out: Record<string, Uint8Array>, base: string, blob: Uint8Array): void {\n  const chunks = chunkTo64(blob);\n  chunks.forEach((chunk, i) => {\n    out[`${base}/${i}`] = chunk;\n  });\n}\n\nfunction readChunked(entries: Record<string, Uint8Array>, base: string): Uint8Array | undefined {\n  const chunks: Uint8Array[] = [];\n  for (let i = 0; ; i++) {\n    const chunk = entries[`${base}/${i}`];\n    if (!chunk) break;\n    chunks.push(chunk);\n  }\n  return chunks.length ? unchunk(chunks) : undefined;\n}\n","import {\n  Account,\n  Asset,\n  BASE_FEE,\n  Config,\n  Contract,\n  Horizon,\n  Keypair,\n  Operation,\n  TransactionBuilder,\n  rpc,\n  scValToNative,\n  type Transaction,\n  type FeeBumpTransaction,\n  type xdr,\n} from \"@stellar/stellar-sdk\";\nimport { Buffer } from \"buffer\";\nimport { HORIZON_URL, SOROBAN_RPC_URL, STELLAR_NETWORKS, STELLAR_MODEL_DATA_KEY, type StellarNetwork } from \"./constants\";\nimport { toDataEntries, type AccountEnvelope } from \"./datamap\";\n\nexport interface StellarAdapterOptions {\n  network: StellarNetwork;\n  /** Horizon URL override (else the per-network default). */\n  horizonUrl?: string;\n  /** Soroban RPC URL override (else the per-network default). Only used for\n   *  contract invocation; classic account state/pay still goes through Horizon. */\n  rpcUrl?: string;\n  /** Per-request network timeout (ms) for Horizon/RPC calls. Without this the\n   *  Stellar SDK's axios client never aborts, so a slow/stalled Horizon hangs\n   *  `loadAccount` forever — which surfaces as the login stuck on \"Setting up\n   *  your account\". Defaults to 20s. */\n  requestTimeoutMs?: number;\n}\n\n/** How long a built transaction stays valid before it must be rebuilt. */\n/**\n * What a classic account must hold to exist: two entries at the 0.5 XLM base\n * reserve. Creating one below this is rejected by the network, so it is worth\n * saying so before spending a signature on it.\n */\nconst MIN_ACCOUNT_BALANCE = 10_000_000n;\n\nconst TX_TIMEOUT = 180;\n\n/**\n * A batch of `MANAGE_DATA` writes. A `null` value DELETES the entry (Stellar's\n * `manageData` with no value), which is how a revoked device's ECIES wrap is\n * erased — and which refunds the entry's reserve.\n */\nexport type DataEntryWrites = Record<string, Uint8Array | null>;\n\n/**\n * Swap the account's weight-1 signer. Used by device revocation: the tx is\n * signed by `oldControl` (still weight 1 when signatures are checked), and by\n * the time it has applied only `newControl` can sign. Rotating is what makes a\n * revocation real — a device that was evicted from the envelope may still have\n * cached the old control seed, so the old key must stop being a signer.\n */\nexport interface ControlRotation {\n  newControl?: string;\n  oldControl?: string;\n}\n\n/** Default per-request timeout for Horizon/RPC reads and submits. */\nconst DEFAULT_REQUEST_TIMEOUT_MS = 20_000;\n\n/**\n * Classic-Stellar (`G…`) multisig account adapter.\n *\n * Unlike the Soroban `StellarAdapter` (contract `C…` accounts authorized by a\n * `__check_auth` device signature) this operates on a *classic* account whose\n * signing is ordinary ed25519 multisig:\n *\n *   - the **master** key (deterministic from identity) names the `G…` address and\n *     is set to weight 0 at creation — powerless afterwards;\n *   - the **control** key (random, weight 1, thresholds 1) is the real signer,\n *     recovered by decrypting the on-chain envelope (see `envelope.ts`).\n *\n * The adapter builds/read classic transactions and account state via Horizon; it\n * never holds a secret — callers pass in the `Keypair`s to sign with. Gasless\n * submission is a fee-bump whose fee source is the relayer (Phase 3).\n */\nexport class StellarAdapter {\n  readonly chain = \"stellar\" as const;\n  readonly network: StellarNetwork;\n  readonly passphrase: string;\n  private readonly horizonUrl: string;\n  private readonly rpcUrl: string;\n  private readonly requestTimeoutMs: number;\n  private _server?: Horizon.Server;\n  private _rpc?: rpc.Server;\n\n  constructor(opts: StellarAdapterOptions) {\n    this.network = opts.network;\n    this.passphrase = STELLAR_NETWORKS[opts.network].passphrase;\n    this.horizonUrl = opts.horizonUrl ?? HORIZON_URL[opts.network];\n    this.rpcUrl = opts.rpcUrl ?? SOROBAN_RPC_URL[opts.network];\n    this.requestTimeoutMs = opts.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;\n    // Horizon's Server.Options has no per-instance `timeout`; the SDK exposes it\n    // only through the global Config. Without it, a stalled Horizon hangs\n    // `loadAccount` forever (login stuck on \"Setting up your account\").\n    if (this.requestTimeoutMs > 0) Config.setTimeout(this.requestTimeoutMs);\n  }\n\n  server(): Horizon.Server {\n    if (!this._server) {\n      this._server = new Horizon.Server(this.horizonUrl, {\n        allowHttp: this.horizonUrl.startsWith(\"http://\"),\n      });\n    }\n    return this._server;\n  }\n\n  /** Soroban RPC server (lazily created). Used for contract simulation + submit. */\n  rpc(): rpc.Server {\n    if (!this._rpc) {\n      this._rpc = new rpc.Server(this.rpcUrl, {\n        allowHttp: this.rpcUrl.startsWith(\"http://\"),\n        timeout: this.requestTimeoutMs,\n      });\n    }\n    return this._rpc;\n  }\n\n  /** Whether the classic account already exists on-chain. */\n  async isDeployed(address: string): Promise<boolean> {\n    try {\n      await this.server().loadAccount(address);\n      return true;\n    } catch (e) {\n      if (isNotFound(e)) return false;\n      throw e;\n    }\n  }\n\n  /** Read the account's `MANAGE_DATA` entries as raw bytes (name → value). */\n  async loadDataEntries(address: string): Promise<Record<string, Uint8Array>> {\n    const account = await this.server().loadAccount(address);\n    const out: Record<string, Uint8Array> = {};\n    for (const [name, b64] of Object.entries(account.data_attr ?? {})) {\n      out[name] = new Uint8Array(Buffer.from(b64 as string, \"base64\"));\n    }\n    return out;\n  }\n\n  /** Native XLM balance in stroops. Returns 0n if the account doesn't exist. */\n  async balance(address: string): Promise<bigint> {\n    try {\n      const account = await this.server().loadAccount(address);\n      const native = account.balances.find((b) => b.asset_type === \"native\");\n      return native ? toStroops(native.balance) : 0n;\n    } catch (e) {\n      if (isNotFound(e)) return 0n;\n      throw e;\n    }\n  }\n\n  async signerKeys(address: string): Promise<string[]> {\n    const account = await this.server().loadAccount(address);\n    return account.signers.map((s) => s.key);\n  }\n\n  /**\n   * Build the account-creation transaction (source = funder, the relayer or a\n   * self-funded keypair):\n   *   1. `createAccount` funds the `G…` address — which is the control key,\n   *   2. `manageData` writes the control-key envelope entries.\n   *\n   * The control key is the account's master key at weight 1, so there is no\n   * signer to add and no master to demote. The returned tx must be signed by\n   * BOTH the control keypair (for the account's own ops) and the funder.\n   */\n  async buildCreateTx(params: {\n    funder: string;\n    controlAddress: string;\n    envelope?: AccountEnvelope;\n    extraSigners?: string[];\n    /** Starting balance in stroops (must cover base reserve + entries). */\n    startingBalance: bigint;\n  }): Promise<Transaction> {\n    const funderAccount = await this.server().loadAccount(params.funder);\n    const builder = new TransactionBuilder(funderAccount, {\n      fee: BASE_FEE,\n      networkPassphrase: this.passphrase,\n    });\n\n    builder.addOperation(\n      Operation.createAccount({\n        destination: params.controlAddress,\n        startingBalance: fromStroops(params.startingBalance),\n      }),\n    );\n\n    for (const op of accountSetupOps(params.controlAddress, params.envelope, params.extraSigners)) {\n      builder.addOperation(op);\n    }\n\n    return builder.setTimeout(TX_TIMEOUT).build();\n  }\n\n  /**\n   * Build a **sponsored** account-creation transaction whose source is the\n   * relayer. Wraps the account setup in `beginSponsoringFutureReserves` /\n   * `endSponsoringFutureReserves`, so the relayer (not the user) pays every\n   * reserve — the account is created with a 0 starting balance and holds no\n   * locked XLM of the user's. Ops:\n   *   0. beginSponsoringFutureReserves(G)          source = relayer\n   *   1. createAccount(G, 0)                        source = relayer\n   *   2. manageData(cv:… envelope)                  source = G (control-signed)\n   *   3. endSponsoringFutureReserves()              source = G\n   *\n   * Signed by the control key (which IS G); the relayer co-signs (source + fee +\n   * sponsorship) before submitting.\n   */\n  async buildSponsoredCreateTx(params: {\n    relayer: string;\n    controlAddress: string;\n    envelope?: AccountEnvelope;\n    extraSigners?: string[];\n  }): Promise<Transaction> {\n    const relayerAccount = await this.server().loadAccount(params.relayer);\n    const builder = new TransactionBuilder(relayerAccount, {\n      fee: BASE_FEE,\n      networkPassphrase: this.passphrase,\n    });\n\n    builder.addOperation(\n      Operation.beginSponsoringFutureReserves({ sponsoredId: params.controlAddress, source: params.relayer }),\n    );\n    builder.addOperation(\n      Operation.createAccount({ destination: params.controlAddress, startingBalance: \"0\", source: params.relayer }),\n    );\n    for (const op of accountSetupOps(params.controlAddress, params.envelope, params.extraSigners)) {\n      builder.addOperation(op);\n    }\n    builder.addOperation(Operation.endSponsoringFutureReserves({ source: params.controlAddress }));\n\n    return builder.setTimeout(TX_TIMEOUT).build();\n  }\n\n  /**\n   * Build a classic native-XLM payment as an *inner* transaction whose source is\n   * the account itself (`G…`), signed by the control key. Wrap it in a fee-bump\n   * (see `wrapFeeBump`) so the relayer pays the fee — gasless.\n   */\n  async buildPaymentTx(params: {\n    from: string;\n    to: string;\n    /** Amount in stroops. */\n    amount: bigint;\n  }): Promise<Transaction> {\n    const source = await this.server().loadAccount(params.from);\n\n    // Stellar is unlike the other chains here: an account has to exist before it\n    // can hold anything, so paying an address that was never funded fails with\n    // `op_no_destination` rather than creating it. Sending to a new address is\n    // `createAccount`, and the caller should not have to know which.\n    const exists = await this.isDeployed(params.to);\n    if (!exists && params.amount < MIN_ACCOUNT_BALANCE) {\n      throw new Error(\n        `kit/stellar: ${params.to} does not exist yet, and creating it needs at least ` +\n          `${fromStroops(MIN_ACCOUNT_BALANCE)} XLM — ${fromStroops(params.amount)} would leave it below the reserve`,\n      );\n    }\n\n    return new TransactionBuilder(source, { fee: BASE_FEE, networkPassphrase: this.passphrase })\n      .addOperation(\n        exists\n          ? Operation.payment({\n              destination: params.to,\n              asset: Asset.native(),\n              amount: fromStroops(params.amount),\n            })\n          : Operation.createAccount({\n              destination: params.to,\n              startingBalance: fromStroops(params.amount),\n            }),\n      )\n      .setTimeout(TX_TIMEOUT)\n      .build();\n  }\n\n  /**\n   * Build a data-entry write (e.g. re-wrapping the DEK for a newly approved\n   * device) as an inner tx sourced by the account, signed by the control key.\n   */\n  async buildDataTx(params: {\n    account: string;\n    entries: DataEntryWrites;\n    /** Rotate the weight-1 signer in the same tx (device revocation). */\n    rotation?: ControlRotation;\n  }): Promise<Transaction> {\n    const source = await this.server().loadAccount(params.account);\n    const builder = new TransactionBuilder(source, { fee: BASE_FEE, networkPassphrase: this.passphrase });\n    for (const [name, value] of Object.entries(params.entries)) {\n      builder.addOperation(Operation.manageData({ name, value: value === null ? null : Buffer.from(value) }));\n    }\n    for (const op of rotationOps(params.rotation)) builder.addOperation(op);\n    return builder.setTimeout(TX_TIMEOUT).build();\n  }\n\n  /**\n   * Build a **sponsored** data-entry write whose source is the relayer, so the\n   * relayer (not the 0-balance account) pays the reserve of any NEW subentry.\n   * Adding a factor (passkey / recovery) or a device slot creates a data entry\n   * that needs ~0.5 XLM of reserve; a sponsored account holds no XLM, so — like\n   * account creation — the write must be wrapped in begin/endSponsoringFuture\n   * reserves with the relayer as sponsor. Ops:\n   *   0. beginSponsoringFutureReserves(account)   source = relayer\n   *   1..n. manageData(cv:…)                       source = account (control-signed)\n   *   last. endSponsoringFutureReserves()          source = account\n   *\n   * Signed by the control key (account ops) + the relayer (source + fee + sponsor).\n   */\n  async buildSponsoredDataTx(params: {\n    relayer: string;\n    account: string;\n    entries: DataEntryWrites;\n    /** Rotate the weight-1 signer in the same tx (device revocation). The new\n     *  signer is a subentry, so it is created inside the sponsorship window. */\n    rotation?: ControlRotation;\n    /** The relayer's current sequence, as reported BY the relayer. Prefer this\n     *  over reading it here: this Horizon may lag the one that will accept the\n     *  submission, and a stale sequence is rejected as `tx_bad_seq`. */\n    relayerSequence?: string;\n  }): Promise<Transaction> {\n    const relayerAccount =\n      params.relayerSequence !== undefined\n        ? new Account(params.relayer, params.relayerSequence)\n        : await this.server().loadAccount(params.relayer);\n    const builder = new TransactionBuilder(relayerAccount, {\n      fee: BASE_FEE,\n      networkPassphrase: this.passphrase,\n    });\n    builder.addOperation(\n      Operation.beginSponsoringFutureReserves({ sponsoredId: params.account, source: params.relayer }),\n    );\n    for (const [name, value] of Object.entries(params.entries)) {\n      builder.addOperation(\n        Operation.manageData({\n          name,\n          value: value === null ? null : Buffer.from(value),\n          source: params.account,\n        }),\n      );\n    }\n    for (const op of rotationOps(params.rotation, params.account)) builder.addOperation(op);\n    builder.addOperation(Operation.endSponsoringFutureReserves({ source: params.account }));\n    return builder.setTimeout(TX_TIMEOUT).build();\n  }\n\n  /**\n   * Build a `changeTrust` inner tx (account-sourced, control-signed) that opens a\n   * trustline to a classic asset like USDC — required before the account can hold\n   * or receive that token (e.g. to fund a Trustless Work escrow in USDC).\n   */\n  async buildChangeTrustTx(params: {\n    account: string;\n    asset: { code: string; issuer: string };\n    /** Trustline limit as a 7-dp string; omit for the SDK max. */\n    limit?: string;\n  }): Promise<Transaction> {\n    const source = await this.server().loadAccount(params.account);\n    return new TransactionBuilder(source, { fee: BASE_FEE, networkPassphrase: this.passphrase })\n      .addOperation(\n        Operation.changeTrust({\n          asset: new Asset(params.asset.code, params.asset.issuer),\n          limit: params.limit,\n        }),\n      )\n      .setTimeout(TX_TIMEOUT)\n      .build();\n  }\n\n  /**\n   * Build a **sponsored** `changeTrust`: a trustline adds a subentry (~0.5 XLM\n   * reserve), so a 0-balance sponsored account can't open one via a plain\n   * fee-bump. Wrap it in begin/endSponsoringFutureReserves with the relayer as\n   * sponsor + source, exactly like `buildSponsoredDataTx`. Signed by the control\n   * key (account op) + the relayer (source + fee + sponsor).\n   */\n  async buildSponsoredChangeTrustTx(params: {\n    relayer: string;\n    account: string;\n    asset: { code: string; issuer: string };\n    limit?: string;\n  }): Promise<Transaction> {\n    const relayerAccount = await this.server().loadAccount(params.relayer);\n    return new TransactionBuilder(relayerAccount, { fee: BASE_FEE, networkPassphrase: this.passphrase })\n      .addOperation(\n        Operation.beginSponsoringFutureReserves({ sponsoredId: params.account, source: params.relayer }),\n      )\n      .addOperation(\n        Operation.changeTrust({\n          asset: new Asset(params.asset.code, params.asset.issuer),\n          limit: params.limit,\n          source: params.account,\n        }),\n      )\n      .addOperation(Operation.endSponsoringFutureReserves({ source: params.account }))\n      .setTimeout(TX_TIMEOUT)\n      .build();\n  }\n\n  /** A classic token balance (e.g. USDC) in its native decimals as a string, or\n   *  \"0\" if the account holds no trustline to that asset. */\n  async tokenBalance(address: string, asset: { code: string; issuer: string }): Promise<string> {\n    try {\n      const account = await this.server().loadAccount(address);\n      const bal = account.balances.find(\n        (b) =>\n          (b.asset_type === \"credit_alphanum4\" || b.asset_type === \"credit_alphanum12\") &&\n          b.asset_code === asset.code &&\n          b.asset_issuer === asset.issuer,\n      );\n      return bal ? bal.balance : \"0\";\n    } catch (e) {\n      if (isNotFound(e)) return \"0\";\n      throw e;\n    }\n  }\n\n  /** Wrap a control-signed inner tx in a fee-bump whose fee source is `feeSource`\n   *  (the relayer). The inner tx pays nothing; the relayer pays all fees. */\n  wrapFeeBump(inner: Transaction, feeSource: string): FeeBumpTransaction {\n    return TransactionBuilder.buildFeeBumpTransaction(feeSource, BASE_FEE, inner, this.passphrase);\n  }\n\n  /** Submit a fully-signed classic transaction and return its hash. Throws with\n   *  the Horizon result codes on failure. */\n  async submit(tx: Transaction | FeeBumpTransaction): Promise<string> {\n    try {\n      const res = await this.server().submitTransaction(tx);\n      return res.hash;\n    } catch (e) {\n      throw new Error(`kit/stellar: submit failed: ${horizonError(e)}`);\n    }\n  }\n\n  /**\n   * Build a Soroban contract-invocation transaction, sourced by the user's `G…`,\n   * and run it through `prepareTransaction` (simulate → assemble footprint +\n   * resource fees + soroban auth entries). The returned tx is UNSIGNED and ready\n   * for the caller to (a) sign the auth entries whose credential address is the\n   * user, then (b) sign the tx envelope. See `CavosStellar.invokeContract`.\n   *\n   * `args` must already be `xdr.ScVal`s (use `nativeToScVal`/`Address.toScVal`).\n   */\n  async buildInvokeTx(params: {\n    from: string;\n    contractId: string;\n    method: string;\n    args: xdr.ScVal[];\n  }): Promise<Transaction> {\n    const source = await this.rpc().getAccount(params.from);\n    const contract = new Contract(params.contractId);\n    const tx = new TransactionBuilder(source, { fee: BASE_FEE, networkPassphrase: this.passphrase })\n      .addOperation(contract.call(params.method, ...params.args))\n      .setTimeout(TX_TIMEOUT)\n      .build();\n    return this.rpc().prepareTransaction(tx) as Promise<Transaction>;\n  }\n\n  /** Submit a fully-signed Soroban tx via the RPC and poll until it leaves\n   *  `PENDING`. Returns the tx hash on success; throws on failure. */\n  async submitSoroban(tx: Transaction | FeeBumpTransaction): Promise<string> {\n    const sent = await this.rpc().sendTransaction(tx);\n    if (sent.status === \"ERROR\") {\n      throw new Error(`kit/stellar: soroban send failed: ${JSON.stringify(sent.errorResult)}`);\n    }\n    for (let i = 0; i < 30; i++) {\n      const got = await this.rpc().getTransaction(sent.hash);\n      if (got.status === \"SUCCESS\") return sent.hash;\n      if (got.status === \"FAILED\") {\n        throw new Error(`kit/stellar: soroban tx failed: ${JSON.stringify(got.resultXdr)}`);\n      }\n      await new Promise((r) => setTimeout(r, 1000));\n    }\n    throw new Error(`kit/stellar: soroban tx ${sent.hash} not confirmed in time`);\n  }\n\n  /** The current ledger sequence — used to bound Soroban auth-entry validity. */\n  async latestLedger(): Promise<number> {\n    return (await this.rpc().getLatestLedger()).sequence;\n  }\n\n  /**\n   * Read-only contract call: simulate `method(args)` and return the decoded\n   * native result. No account, signing, or submission — for view functions like\n   * the escrow's `get_escrow`. `from` only sources the simulation (any funded or\n   * even the deployer address works).\n   */\n  async readContract(params: {\n    from: string;\n    contractId: string;\n    method: string;\n    args?: xdr.ScVal[];\n  }): Promise<unknown> {\n    const source = await this.rpc().getAccount(params.from);\n    const contract = new Contract(params.contractId);\n    const tx = new TransactionBuilder(source, { fee: BASE_FEE, networkPassphrase: this.passphrase })\n      .addOperation(contract.call(params.method, ...(params.args ?? [])))\n      .setTimeout(TX_TIMEOUT)\n      .build();\n    const sim = await this.rpc().simulateTransaction(tx);\n    if (rpc.Api.isSimulationError(sim)) {\n      throw new Error(`kit/stellar: read ${params.method} failed: ${sim.error}`);\n    }\n    const retval = sim.result?.retval;\n    return retval ? scValToNative(retval) : undefined;\n  }\n\n  /** Decode the return value of a submitted Soroban tx (e.g. the factory's\n   *  deployed escrow address). Polls until the tx is visible. */\n  async transactionResult(hash: string): Promise<unknown> {\n    for (let i = 0; i < 30; i++) {\n      const got = await this.rpc().getTransaction(hash);\n      if (got.status === \"SUCCESS\") {\n        const ret = (got as { returnValue?: xdr.ScVal }).returnValue;\n        return ret ? scValToNative(ret) : undefined;\n      }\n      if (got.status === \"FAILED\") throw new Error(`kit/stellar: tx ${hash} failed`);\n      await new Promise((r) => setTimeout(r, 1000));\n    }\n    throw new Error(`kit/stellar: tx ${hash} not visible in time`);\n  }\n\n  /** Build an `Account` handle for a known address + sequence (avoids a Horizon\n   *  round-trip when the caller already has the sequence). */\n  accountAt(address: string, sequence: string): Account {\n    return new Account(address, sequence);\n  }\n}\n\nfunction isNotFound(e: unknown): boolean {\n  const status = (e as { response?: { status?: number }; status?: number })?.response?.status ??\n    (e as { status?: number })?.status;\n  return status === 404;\n}\n\n/**\n * The two `setOptions` ops that swap the weight-1 control signer: add the new\n * key first, then drop the old one — never the reverse, which would momentarily\n * leave the account with no signer able to meet its thresholds. Stellar checks\n * the envelope's signatures against the signer set as it stands *before* the\n * operations apply, so the old key's signature still authorizes its own removal.\n */\nfunction rotationOps(rotation?: ControlRotation, source?: string) {\n  if (!rotation) return [];\n  const ops = [];\n  if (rotation.newControl) {\n    ops.push(\n      Operation.setOptions({\n        source,\n        signer: { ed25519PublicKey: rotation.newControl, weight: 1 },\n      }),\n    );\n  }\n  if (rotation.oldControl) {\n    ops.push(\n      rotation.oldControl === source\n        ? Operation.setOptions({ source, masterWeight: 0, lowThreshold: 1, medThreshold: 1, highThreshold: 1 })\n        : Operation.setOptions({\n            source,\n            signer: { ed25519PublicKey: rotation.oldControl, weight: 0 },\n          }),\n    );\n  }\n  return ops;\n}\n\nfunction accountSetupOps(\n  controlAddress: string,\n  envelope?: AccountEnvelope,\n  extraSigners?: string[],\n) {\n  const ops = [];\n  if (envelope) {\n    for (const [name, value] of Object.entries(toDataEntries(envelope))) {\n      ops.push(Operation.manageData({ name, value: Buffer.from(value), source: controlAddress }));\n    }\n  } else {\n    ops.push(\n      Operation.manageData({\n        name: STELLAR_MODEL_DATA_KEY,\n        value: Buffer.from(\"1\"),\n        source: controlAddress,\n      }),\n    );\n  }\n  for (const signer of extraSigners ?? []) {\n    ops.push(\n      Operation.setOptions({\n        source: controlAddress,\n        signer: { ed25519PublicKey: signer, weight: 1 },\n      }),\n    );\n  }\n  return ops;\n}\n\nfunction horizonError(e: unknown): string {\n  const codes = (e as { response?: { data?: { extras?: { result_codes?: unknown } } } })?.response?.data?.extras\n    ?.result_codes;\n  return codes ? JSON.stringify(codes) : String((e as Error)?.message ?? e);\n}\n\n/** 7-dp XLM string → stroops (integer). */\nfunction toStroops(amount: string): bigint {\n  const [whole, frac = \"\"] = amount.split(\".\");\n  const fracPadded = (frac + \"0000000\").slice(0, 7);\n  return BigInt(whole) * 10_000_000n + BigInt(fracPadded);\n}\n\n/** Stroops → 7-dp XLM string (the stellar-sdk amount format). */\nfunction fromStroops(stroops: bigint): string {\n  const neg = stroops < 0n;\n  const abs = neg ? -stroops : stroops;\n  const whole = abs / 10_000_000n;\n  const frac = (abs % 10_000_000n).toString().padStart(7, \"0\");\n  return `${neg ? \"-\" : \"\"}${whole}.${frac}`;\n}\n\n/** Sign helpers — the adapter never holds keys, so signing is done by callers,\n *  but these keep the (control/master) signing idiom in one place. */\nexport function signWith(tx: Transaction, ...keypairs: Keypair[]): Transaction {\n  tx.sign(...keypairs);\n  return tx;\n}\n","import type { StellarNetwork } from \"./constants\";\n\nexport interface StellarRelayerOptions {\n  /** Base URL of the Cavos backend exposing /api/stellar/relay. */\n  baseUrl: string;\n  /** Cavos App ID (authorizes the sponsored request). */\n  appId: string;\n  /** Optional Cavos console environment. Omitted means production. */\n  environment?: \"development\" | \"production\";\n  network: StellarNetwork;\n}\n\n/** What the transaction is, so the backend applies the right validation gate.\n *  - `create`         sponsored account creation (relayer = source + sponsor)\n *  - `fee-bump`       a control-signed payment wrapped in a relayer fee-bump\n *  - `sponsored-data` a control-signed data write (add factor/device slot) whose\n *                     new subentry reserves the relayer sponsors\n *  - `trustline`      a control-signed `changeTrust` whose new subentry reserve\n *                     the relayer sponsors\n *  - `soroban`        a control-signed Soroban contract invocation wrapped in a\n *                     relayer fee-bump (the relayer pays the resource + inclusion\n *                     fees; the account's control key signs the auth entries) */\nexport type StellarRelayKind =\n  | \"create\"\n  | \"fee-bump\"\n  | \"sponsored-data\"\n  | \"trustline\"\n  | \"soroban\";\n\n/**\n * Client for the classic-G sponsoring relayer. Unlike the Soroban relayer (which\n * is the tx *source*), the classic relayer plays two roles:\n *   - **create**: it is the tx source + fee payer AND sponsors the new account's\n *     reserves (`begin/endSponsoringFutureReserves`), so the user locks no XLM.\n *     The SDK sends a master-signed create tx; the relayer co-signs + submits.\n *   - **fee-bump**: the user's control-signed inner tx (source = their `G…`) is\n *     wrapped in a fee-bump whose fee source is the relayer. The relayer signs the\n *     outer envelope only — it pays the fee, never moves the user's funds.\n *\n * Either way the relayer is a fee payer / reserve sponsor, never a custodian.\n */\nexport class StellarRelayer {\n  private source?: string;\n\n  constructor(private readonly opts: StellarRelayerOptions) {}\n\n  /** The relayer's source/fee-payer/sponsor G-account (fetched + cached). */\n  async getSource(): Promise<string> {\n    if (this.source) return this.source;\n    this.source = (await this.fetchSourceAccount()).address;\n    return this.source;\n  }\n\n  /**\n   * The relayer account together with its CURRENT sequence number, straight from\n   * the server. Sponsored writes are sourced by the relayer, so building one\n   * needs its sequence — and reading that from this device's own Horizon is\n   * reading a stale view of an account the server owns, which the network then\n   * rejects as `tx_bad_seq`. The sequence is deliberately NOT cached.\n   *\n   * `sequence` is undefined on older backends, in which case the caller falls\n   * back to loading the account itself.\n   */\n  async fetchSourceAccount(): Promise<{ address: string; sequence?: string }> {\n    const qs = new URLSearchParams({\n      network: this.opts.network,\n      app_id: this.opts.appId,\n    });\n    if (this.opts.environment) qs.set('environment', this.opts.environment);\n    const res = await fetch(`${this.opts.baseUrl}/api/stellar/relay?${qs.toString()}`);\n    if (!res.ok) throw new Error(`kit/stellar: relayer source lookup failed (${res.status})`);\n    const { fee_payer, sequence } = (await res.json()) as { fee_payer: string; sequence?: string };\n    this.source = fee_payer;\n    return { address: fee_payer, ...(sequence ? { sequence } : {}) };\n  }\n\n  /** POST a (partially) signed transaction XDR for the relayer to co-sign + submit.\n   *  `kind` selects the validation gate. Returns the confirmed transaction hash. */\n  async submit(kind: StellarRelayKind, transactionXdr: string): Promise<string> {\n    const res = await fetch(`${this.opts.baseUrl}/api/stellar/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,\n        transaction: transactionXdr,\n      }),\n    });\n    if (!res.ok) {\n      const detail = await res.text().catch(() => \"\");\n      throw new Error(`kit/stellar: relay failed (${res.status}) ${detail}`);\n    }\n    const { hash } = (await res.json()) as { hash: string };\n    return hash;\n  }\n}\n","/**\n * Local cache of the address the registry returned for this user on this device.\n *\n * The address lives in the Cavos registry, but the spending key lives here. This\n * cache is what keeps those two facts independent: once a device knows its\n * address it can keep signing with Cavos unreachable. It is a convenience, never\n * an authority — a cache miss on a brand-new device means asking the registry,\n * not inventing an address.\n */\n\nconst DB_NAME = \"cavos-kit-addresses\";\nconst STORE = \"addresses\";\n\nexport interface AddressKey {\n  userId: string;\n  appId: string;\n  chain: string;\n  network: string;\n}\n\nfunction keyOf(k: AddressKey): string {\n  return `${k.userId}:${k.appId}:${k.chain}:${k.network}`;\n}\n\nfunction idbAvailable(): boolean {\n  return typeof indexedDB !== \"undefined\";\n}\n\nfunction openDb(): Promise<IDBDatabase> {\n  return new Promise((resolve, reject) => {\n    const req = indexedDB.open(DB_NAME, 1);\n    req.onupgradeneeded = () => req.result.createObjectStore(STORE);\n    req.onsuccess = () => resolve(req.result);\n    req.onerror = () => reject(req.error);\n  });\n}\n\nfunction tx<T>(mode: IDBTransactionMode, run: (store: IDBObjectStore) => IDBRequest<T>): Promise<T> {\n  return openDb().then(\n    (db) =>\n      new Promise<T>((resolve, reject) => {\n        const req = run(db.transaction(STORE, mode).objectStore(STORE));\n        req.onsuccess = () => resolve(req.result);\n        req.onerror = () => reject(req.error);\n      }),\n  );\n}\n\n/** The cached address, or null when this device has never resolved one. */\nexport async function readCachedAddress(key: AddressKey): Promise<string | null> {\n  if (!idbAvailable()) return null;\n  try {\n    const value = await tx<string | undefined>(\"readonly\", (s) => s.get(keyOf(key)));\n    return typeof value === \"string\" ? value : null;\n  } catch {\n    return null;\n  }\n}\n\n/** Remember the resolved address. Failures are ignored — this is a cache. */\nexport async function writeCachedAddress(key: AddressKey, address: string): Promise<void> {\n  if (!idbAvailable()) return;\n  try {\n    await tx(\"readwrite\", (s) => s.put(address, keyOf(key)));\n  } catch {\n    /* private mode, quota, no IDB — signing still works, lookups just repeat */\n  }\n}\n","import type { WalletRegistry } from \"./WalletRegistry\";\nimport type { DevicePublicKey } from \"../signer/DeviceSigner\";\nimport { readCachedAddress, writeCachedAddress, type AddressKey } from \"./AddressCache\";\n\nexport interface ResolvedAddress {\n  address: string;\n  /**\n   * True when the address came from the registry (or from another device that\n   * won the race), so this device is not necessarily an authorized signer yet.\n   * The chain is still the authority on that — connect verifies on-chain.\n   */\n  existing: boolean;\n}\n\nexport interface ResolveAddressParams {\n  key: AddressKey;\n  registry: WalletRegistry | null;\n  /** The device that would name the address if the user has none yet. */\n  initialSigner: DevicePublicKey;\n  /** Compute this device's candidate address. Called only on a registry miss. */\n  compute: () => string;\n}\n\n/**\n * cache -> registry -> claim. This is the whole identity model in one function.\n *\n * The address is named by the first device's key, so it cannot be re-derived\n * from a login: with a registry configured, a lookup or claim failure fails the\n * connect rather than silently minting a second wallet for the same user. The\n * cache is the one exception — a device that already knows its address keeps\n * working while Cavos is unreachable.\n *\n * With no registry (`appId` unset) the caller is in local/dev mode and the\n * computed address stands on its own.\n */\nexport async function resolveAddress(params: ResolveAddressParams): Promise<ResolvedAddress> {\n  const { key, registry, compute, initialSigner } = params;\n\n  if (!registry) return { address: compute(), existing: false };\n\n  const cached = await readCachedAddress(key);\n\n  let existing: string | null = null;\n  try {\n    existing = (await registry.lookup(key.userId))?.address ?? null;\n  } catch (e) {\n    // Offline with a known address: sign on. Offline without one: we cannot\n    // invent an address, because the user may already have one we can't see.\n    if (cached) return { address: cached, existing: true };\n    throw e;\n  }\n\n  if (existing) {\n    await writeCachedAddress(key, existing);\n    return { address: existing, existing: true };\n  }\n\n  const claimed = await registry.register({\n    userId: key.userId,\n    address: compute(),\n    initialSigner,\n  });\n  await writeCachedAddress(key, claimed.address);\n  return { address: claimed.address, existing: claimed.conflict };\n}\n","import { hkdf } from \"@noble/hashes/hkdf\";\nimport { pbkdf2 } from \"@noble/hashes/pbkdf2\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport { utf8ToBytes } from \"../../crypto/encoding\";\nimport { WebCryptoControlKey } from \"./WebCryptoControlKey\";\n\nconst PASSKEY_INFO = \"cavos-stellar-ed25519-passkey-v1\";\nconst RECOVERY_INFO = \"cavos-stellar-ed25519-recovery-v1\";\nconst RECOVERY_SALT = \"cavos-stellar-recovery-signer-v1\";\nconst RECOVERY_PBKDF2_ITERATIONS = 210_000;\n\nexport function passkeySignerSeed(prfOutput: Uint8Array): Uint8Array {\n  if (prfOutput.length < 32) throw new Error(\"kit/stellar: passkey PRF output too short\");\n  return hkdf(sha256, prfOutput, undefined, PASSKEY_INFO, 32);\n}\n\nexport function recoverySignerSeed(code: string): Uint8Array {\n  const normalised = code.trim().replace(/\\s+/g, \" \").toLowerCase();\n  if (!normalised) throw new Error(\"kit/stellar: recovery code is empty\");\n  const stretched = pbkdf2(sha256, utf8ToBytes(normalised), utf8ToBytes(RECOVERY_SALT), {\n    c: RECOVERY_PBKDF2_ITERATIONS,\n    dkLen: 32,\n  });\n  return hkdf(sha256, stretched, undefined, RECOVERY_INFO, 32);\n}\n\nexport async function importPasskeySigner(prfOutput: Uint8Array): Promise<WebCryptoControlKey> {\n  const seed = passkeySignerSeed(prfOutput);\n  try {\n    return await WebCryptoControlKey.importFromSeed(seed);\n  } finally {\n    seed.fill(0);\n  }\n}\n\nexport async function importRecoverySigner(code: string): Promise<WebCryptoControlKey> {\n  const seed = recoverySignerSeed(code);\n  try {\n    return await WebCryptoControlKey.importFromSeed(seed);\n  } finally {\n    seed.fill(0);\n  }\n}\n","import { Keypair, TransactionBuilder, authorizeEntry, nativeToScVal, xdr } from \"@stellar/stellar-sdk\";\nimport type { AuthProvider, Identity } from \"../../auth/AuthProvider\";\nimport {\n  StellarAdapter,\n  type ControlRotation,\n  type DataEntryWrites,\n} from \"./StellarAdapter\";\nimport { HttpWalletRegistry } from \"../../registry/HttpWalletRegistry\";\nimport { resolveAddress } from \"../../registry/resolveAddress\";\nimport type { DeviceUnwrapKey } from \"./DeviceUnwrapKey\";\nimport { StellarRelayer } from \"./StellarRelayer\";\nimport {\n  STELLAR_MODEL_DATA_KEY,\n  STELLAR_PASSKEY_DATA_KEY,\n  type StellarNetwork,\n} from \"./constants\";\nimport type { Transaction } from \"@stellar/stellar-sdk\";\nimport { utf8ToBytes } from \"../../crypto/encoding\";\nimport { resolveFeeMode, type ExecuteOptions } from \"../../chains/ChainAdapter\";\nimport type { SocialRecoveryClient } from \"../../recovery/SocialRecoveryClient\";\nimport type { SocialRecoveryCredential } from \"../../recovery/SocialRecoveryCredential\";\nimport type { DeviceFactor, EnclaveDekPort, WrapStore } from \"../../secret/DeviceSecret\";\nimport { InMemoryWalletRegistry, type WalletRegistry } from \"../../registry/WalletRegistry\";\nimport { resolveNativeStellar } from \"./nativeConnect\";\nimport { passkeyRestoreInput } from \"../../secret/nativeAccount\";\nimport { connectThroughVault, vaultConnectParams, type VaultClient } from \"../../vault/VaultClient\";\nimport type { MessageSignature, StellarSignedTransaction } from \"../../signing\";\nimport {\n  WebCryptoControlKey,\n  type ControlKey,\n  signTransactionWithControlKey,\n  createSorobanSigner,\n} from \"./WebCryptoControlKey\";\nimport type { PasskeyPrfProvider } from \"../../signer/PasskeyProvider\";\nimport { importPasskeySigner, importRecoverySigner } from \"./derivedSigner\";\n\n/** Default starting balance (stroops) for a new account: covers the 1 XLM base\n *  reserve + ~0.5 XLM per subentry (data entries + control signer) with headroom\n *  for fees and future factor entries. ~5 XLM, recoverable when merged.\n *  Sponsorship (Phase 3) will move this cost to the relayer. */\nconst DEFAULT_STARTING_BALANCE = 50_000_000n;\n\n/** How many ledgers a signed Soroban auth entry stays valid (~1h at 5s/ledger).\n *  Bounds replay of the authorization; the tx timeout is separate and shorter. */\nconst AUTH_VALIDITY_LEDGERS = 720;\n\nexport interface ConnectStellarOptions {\n  network: StellarNetwork;\n  /** Authenticated user (pass `identity` directly, or an `auth` provider). */\n  auth?: AuthProvider;\n  identity?: Identity;\n  appSalt: string;\n  /** This device's P-256 ECDH unwrap key (provisioned + persisted per device). */\n  deviceKey?: DeviceUnwrapKey;\n  /**\n   * Gasless sponsorship via the Cavos classic relayer. When set (or when `appId` +\n   * `backendUrl` are given) the relayer is the tx source + fee payer AND sponsors\n   * the account's reserves — the user locks no XLM and pays no fees.\n   */\n  relayer?: StellarRelayer;\n  /** Cavos App ID — enables the default relayer when no `relayer` is passed. */\n  appId?: string;\n  /** Cavos console environment. Defaults to production when omitted. */\n  environment?: \"development\" | \"production\";\n  /** Cavos backend base URL (default https://cavos.xyz). */\n  backendUrl?: string;\n  /**\n   * Self-funded funder + fee payer: creates + submits classic transactions\n   * directly (the account pays its own reserves + fees). The advanced /\n   * self-hosted fallback used when no relayer is configured.\n   */\n  sourceKeypair?: Keypair;\n  /** Horizon URL override. */\n  horizonUrl?: string;\n  /** Starting balance for a fresh account, in stroops. */\n  startingBalance?: bigint;\n  credential?: SocialRecoveryCredential;\n  socialRecovery?: SocialRecoveryClient;\n  recovery?: EnclaveDekPort;\n  factor?: DeviceFactor;\n  wrapStore?: WrapStore;\n  registry?: WalletRegistry;\n  passkey?: PasskeyPrfProvider;\n  /** Keep the key in the Cavos vault instead of this page's storage. */\n  vault?: VaultClient;\n}\n\n/**\n * Chain status for Stellar accounts.\n * - `undeployed`: Address derived but no on-chain account exists yet. First execute will create.\n * - `ready`: Account exists and this device can sign (control key unlocked).\n * - `needs-device-approval`: Account exists but this device is not yet authorized.\n */\nexport type StellarConnectStatus = \"undeployed\" | \"ready\" | \"needs-device-approval\";\n\n/** The local ed25519 signer recovered on this device. */\ninterface Unlocked {\n  control: ControlKey;\n}\n\n/**\n * High-level entry for the classic-Stellar (`G…`) multisig account — the classic\n * analogue of `CavosStellar` (Soroban). One `connect` derives the deterministic\n * `G…` address and on a known device unlocks the control key from the on-chain\n * envelope so `execute` signs silently.\n *\n * **Lazy deploy**: Connect NEVER creates the account. The first `execute` call\n * on an undeployed account creates the account + performs the operation.\n *\n * Multiple unlock **factors** all wrap the same DEK, so opening any one yields the\n * control key:\n *   - **device** (P-256 ECIES): silent daily signing, per-device, non-syncable;\n *   - **passkey** (WebAuthn PRF): synced anchor to approve a new device / recover;\n *   - **recovery code**: offline backup (optional).\n *\n * Self-custodial: the address is a pure function of identity and the control key\n * lives only in the account's own data entries. Creation needs neither an org API\n * key nor a relayer, and the optional relayer is only a fee payer + reserve sponsor\n * (never a custodian or identity authority), so a bad/absent relayer can cost fees\n * but can never move funds or squat an address. When an `appId` is provided we also\n * record the created address in the Cavos backend `wallets` table (best-effort) so\n * it counts toward billing — this is pure bookkeeping and never drives address\n * resolution, custody, or signing.\n */\nexport class CavosStellar {\n  // Discriminant for the `CavosWallet` union. Classic `G…` IS the Stellar chain\n  // now (the Soroban `C…` path was removed), so this is \"stellar\".\n  readonly chain = \"stellar\" as const;\n  isNewAccount = false;\n  /**\n   * Native MasterDEK wallet. A synced passkey unwraps the DEK onto this device;\n   * it is not added as a Horizon extra signer.\n   */\n  nativeDek = false;\n  /** Native accounts only: a passkey the user added can restore this account. */\n  passkeyRestore = false;\n  private statusValue: StellarConnectStatus;\n\n  /** Track whether account is created on-chain (for lazy deploy). */\n  private _isDeployed: boolean;\n  /** Pending passkey PRF output to include in first create. */\n  private _pendingPasskeyPrf: Uint8Array | null = null;\n  /**\n   * Asked for the passkey secret that wraps this account's DEK, while creating\n   * the account.\n   *\n   * The same shape as `Cavos.approverForDeploy`, and here it is not merely\n   * tidier: this secret opens the account, so it must never be written down.\n   * Deriving it from the passkey at the moment of the create is the only\n   * handling that leaves no copy behind.\n   */\n  passkeyFactorForCreate?: () => Promise<Uint8Array | null>;\n  /** Pending recovery code to include in first create. */\n  private _pendingRecoveryCode: string | null = null;\n  /** Starting balance for account creation. */\n  private readonly startingBalance: bigint;\n  /** Source keypair for self-funded creation. */\n  private readonly sourceKeypair?: Keypair;\n\n  private constructor(\n    readonly identity: Identity,\n    readonly address: string,\n    status: StellarConnectStatus,\n    readonly network: StellarNetwork,\n    private readonly adapter: StellarAdapter,\n    _deviceKey: DeviceUnwrapKey | undefined,\n    private control: ControlKey | undefined,\n    _dek: Uint8Array | undefined,\n    private readonly relayer: StellarRelayer | undefined,\n    opts: {\n      appId?: string;\n      appSalt: string;\n      backendUrl: string;\n      environment?: \"development\" | \"production\";\n      startingBalance: bigint;\n      sourceKeypair?: Keypair;\n    },\n  ) {\n    this.statusValue = status;\n    this._isDeployed = status !== \"undeployed\";\n    this.startingBalance = opts.startingBalance;\n    this.sourceKeypair = opts.sourceKeypair;\n  }\n\n  get status(): StellarConnectStatus {\n    return this.statusValue;\n  }\n\n  /** Whether this account is deployed/created on-chain. */\n  get isDeployed(): boolean {\n    return this._isDeployed;\n  }\n\n  static async connect(opts: ConnectStellarOptions): Promise<CavosStellar> {\n    const identity = opts.identity ?? (await opts.auth?.authenticate());\n    if (!identity) throw new Error(\"kit/stellar: connect requires `identity` or `auth`\");\n\n    const adapter = new StellarAdapter({ network: opts.network, horizonUrl: opts.horizonUrl });\n    const startingBalance = opts.startingBalance ?? DEFAULT_STARTING_BALANCE;\n\n    const backendUrl = opts.backendUrl ?? \"https://cavos.xyz\";\n    const relayer =\n      opts.relayer ??\n      (opts.appId\n        ? new StellarRelayer({ baseUrl: backendUrl, appId: opts.appId, network: opts.network, environment: opts.environment })\n        : undefined);\n\n    const buildOpts = {\n      appId: opts.appId,\n      appSalt: opts.appSalt,\n      backendUrl,\n      environment: opts.environment,\n      startingBalance,\n      sourceKeypair: opts.sourceKeypair,\n    };\n\n    const registry: WalletRegistry | null =\n      opts.registry ??\n      (opts.appId\n        ? new HttpWalletRegistry({\n            baseUrl: backendUrl,\n            appId: opts.appId,\n            network: opts.network,\n            ...(opts.environment ? { environment: opts.environment } : {}),\n            authToken: () => opts.auth?.getAuthToken?.() ?? null,\n          })\n        : null);\n\n    if (opts.vault || opts.recovery || opts.socialRecovery || opts.passkey) {\n      const native = opts.vault\n        ? await connectThroughVault(\"stellar\", identity, opts.appSalt, () =>\n            opts.vault!.connectStellar(vaultConnectParams({ ...opts, identity })),\n          )\n        : await resolveNativeStellar({\n            identity,\n            appSalt: opts.appSalt,\n            registry: registry ?? new InMemoryWalletRegistry(),\n            credential: opts.credential,\n            socialRecovery: opts.socialRecovery,\n            recovery: opts.recovery,\n            factor: opts.factor,\n            store: opts.wrapStore,\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      const deployed = await adapter.isDeployed(native.address);\n      const wallet = new CavosStellar(\n        identity,\n        native.address,\n        native.control ? (deployed ? \"ready\" : \"undeployed\") : \"needs-device-approval\",\n        opts.network,\n        adapter,\n        opts.deviceKey,\n        native.control,\n        undefined,\n        relayer,\n        buildOpts,\n      );\n      wallet.isNewAccount = native.isNewAccount;\n      wallet.nativeDek = true;\n      wallet.passkeyRestore = \"passkey\" in native && native.passkey === true;\n      return wallet;\n    }\n\n    // Grandfathered path. First device named a random G that cannot be sealed\n    // into the enclave after the fact. A new device still needs a passkey or\n    // recovery code for those accounts.\n    type FreshKey = { address: string; control: WebCryptoControlKey };\n    const candidate = await WebCryptoControlKey.create();\n    const generated: FreshKey = { address: candidate.publicAddress(), control: candidate };\n    const { address, existing } = await resolveAddress({\n      key: { userId: identity.userId, appId: opts.appId ?? \"local\", chain: \"stellar\", network: opts.network },\n      registry,\n      initialSigner: { x: 0n, y: 0n },\n      compute: () => generated.address,\n    });\n\n    const build = (\n      status: StellarConnectStatus,\n      unlocked?: Unlocked,\n    ): CavosStellar =>\n      new CavosStellar(\n        identity,\n        address,\n        status,\n        opts.network,\n        adapter,\n        opts.deviceKey,\n        unlocked?.control,\n        undefined,\n        relayer,\n        buildOpts,\n      );\n\n    // LAZY DEPLOY: Check if account exists but DO NOT create here.\n    // Account creation happens on first execute() call.\n    if (await adapter.isDeployed(address)) {\n      const unlocked = await unlockViaDevice(address);\n      return build(unlocked ? \"ready\" : \"needs-device-approval\", unlocked ?? undefined);\n    }\n\n    if (existing) {\n      const pending = await WebCryptoControlKey.load({ keyId: address });\n      if (!pending) return build(\"needs-device-approval\");\n      return build(\"undeployed\", { control: pending });\n    }\n\n    await generated.control.persist(address);\n    const wallet = build(\"undeployed\", { control: generated.control });\n    wallet.isNewAccount = false;\n    return wallet;\n  }\n\n\n  /**\n   * Listeners for status changes.\n   *\n   * The status moves when the first execute deploys the account, and it moves\n   * by mutating this object — so nothing holding a reference re-renders, and an\n   * effect keyed on the wallet never re-runs. That is how recovery enrolment\n   * came to be skipped entirely: the wallet turned ready and nobody was told.\n   */\n  private readonly statusListeners = new Set<() => void>();\n\n  /** Subscribe to status changes. Returns an unsubscribe. */\n  onStatusChange(listener: () => void): () => void {\n    this.statusListeners.add(listener);\n    return () => {\n      this.statusListeners.delete(listener);\n    };\n  }\n\n  private setStatus(next: StellarConnectStatus): 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 that just became usable */\n      }\n    }\n  }\n\n\n  /**\n   * Called when an action needs this device to hold the control key and it does\n   * not. The refusal lives here, where the action is, because integrators call\n   * `wallet.execute` directly — a wrapper in the React provider never sees it.\n   */\n  onAuthorizationNeeded?: () => Promise<void>;\n\n  /** Native XLM balance of the account, in stroops. */\n  async balance(): Promise<bigint> {\n    return this.adapter.balance(this.address);\n  }\n\n  /**\n   * True if the account has a passkey factor enrolled (`cv:wp`), so a new device\n   * can be approved with the passkey instead of a recovery code. Mirrors the\n   * other chains' `hasPasskey()` for the React provider.\n   *\n   * Returns true for undeployed accounts if a passkey is pending enrollment.\n   */\n  async hasPasskey(): Promise<boolean> {\n    if (this.nativeDek && this.passkeyRestore) return true;\n    if (this.statusValue === \"undeployed\") {\n      return this._pendingPasskeyPrf !== null;\n    }\n    try {\n      const entries = await this.adapter.loadDataEntries(this.address);\n      return STELLAR_PASSKEY_DATA_KEY in entries;\n    } catch {\n      return false;\n    }\n  }\n\n  /**\n   * Whether the control key is unlocked on this device (status ready). Classic\n   * approvals land synchronously via Horizon, so this reflects state immediately\n   * (no indexing delay to poll for).\n   *\n   * For undeployed accounts, returns false (not yet on-chain).\n   */\n  async isReady(): Promise<boolean> {\n    if (this.statusValue === \"undeployed\") {\n      return false;\n    }\n    return this.statusValue === \"ready\";\n  }\n\n  /**\n   * Move `amount` stroops of native XLM to `destination`, signed by the control\n   * key.\n   *\n   * **Lazy deploy**: If the account is undeployed, the first execute creates the\n   * account first (sponsored, 0 XLM cost), then performs the payment in a follow-up\n   * transaction. Native XLM cannot ride the create tx (the account needs to exist\n   * to send FROM it).\n   *\n   * Sponsored by default (the relayer fee-bumps and pays the fee); pass\n   * `{ sponsored: false }` to submit directly — the account pays its own (tiny)\n   * fee from its XLM balance. The control key signs identically in both modes;\n   * only the fee payer differs.\n   */\n  async execute(amount: bigint, destination: string, opts?: ExecuteOptions): Promise<string> {\n    // Handle lazy deploy: first execute on undeployed account\n    if (this.statusValue === \"undeployed\") {\n      return this._createAndExecute(amount, destination, opts);\n    }\n\n    // Authorization is part of the send, not a precondition that aborts it —\n    // the same shape as the first execute creating the account and paying in\n    // one go.\n    if (this.statusValue === \"needs-device-approval\" && this.onAuthorizationNeeded) {\n      await this.onAuthorizationNeeded();\n    }\n\n    const control = this.requireControl();\n    const inner = await this.adapter.buildPaymentTx({ from: this.address, to: destination, amount });\n    return this.submitInner(inner, control, opts);\n  }\n\n  /**\n   * Create the account first (sponsored), then perform the payment.\n   * Called by execute() when status is \"undeployed\".\n   */\n  private async _createAndExecute(\n    amount: bigint,\n    destination: string,\n    opts?: ExecuteOptions,\n  ): Promise<string> {\n    // Create the account first\n    const { control } = await this._createAccount();\n\n    // Now the account exists — perform the payment\n    const inner = await this.adapter.buildPaymentTx({ from: this.address, to: destination, amount });\n    return this.submitInner(inner, control, opts);\n  }\n\n  /**\n   * Create the Stellar account on-chain. Returns the control key and DEK.\n   * Uses the pre-generated control key from connect() if available, otherwise\n   * generates a new one.\n   *\n   * The control seed is loaded from pendingControl at the moment of creation,\n   * used only to write the encrypted cv:ct entry, then wiped immediately. The\n   * signing is done via the non-extractable WebCryptoControlKey, so the seed\n   * never sits in memory on the hot spend path.\n   */\n  private async _createAccount(): Promise<Unlocked> {\n    if (!this.relayer && !this.sourceKeypair) {\n      throw new Error(\"kit/stellar: a relayer (appId) or sourceKeypair is required to create the account\");\n    }\n\n    if (!this.control) {\n      throw new Error(\n        \"kit/stellar: the control key for this address is not held by this device — approve this device first\",\n      );\n    }\n\n    const control = this.control;\n    const controlAddress = control.publicAddress();\n    const extraSigners: string[] = [];\n    let passkeyEntry: Uint8Array | undefined;\n\n    if (!this.nativeDek) {\n      const passkeyPrf = this._pendingPasskeyPrf ?? (await this.passkeyFactorForCreate?.()) ?? null;\n      if (passkeyPrf) {\n        const passkey = await importPasskeySigner(passkeyPrf);\n        extraSigners.push(passkey.publicAddress());\n        passkeyEntry = utf8ToBytes(passkey.publicAddress());\n      }\n\n      if (this._pendingRecoveryCode) {\n        const recovery = await importRecoverySigner(this._pendingRecoveryCode);\n        extraSigners.push(recovery.publicAddress());\n      }\n    }\n\n    const alreadyExists = await this.adapter.isDeployed(this.address);\n\n    if (this.relayer) {\n      const relayerSource = await this.relayer.getSource();\n      if (alreadyExists) {\n        const entries: DataEntryWrites = { [STELLAR_MODEL_DATA_KEY]: utf8ToBytes(\"1\") };\n        if (passkeyEntry) entries[STELLAR_PASSKEY_DATA_KEY] = passkeyEntry;\n        const rotation = extraSigners[0] ? { newControl: extraSigners[0] } : undefined;\n        await this.submitDataWrite(entries, control, undefined, rotation);\n        for (const signer of extraSigners.slice(1)) {\n          await this.submitDataWrite({}, control, undefined, { newControl: signer });\n        }\n      } else {\n        const tx = await this.adapter.buildSponsoredCreateTx({\n          relayer: relayerSource,\n          controlAddress,\n          extraSigners,\n        });\n        await signTransactionWithControlKey(tx, control);\n        await this.relayer.submit(\"create\", tx.toXDR());\n        const afterCreate: DataEntryWrites = {};\n        if (passkeyEntry) afterCreate[STELLAR_PASSKEY_DATA_KEY] = passkeyEntry;\n        if (Object.keys(afterCreate).length > 0) {\n          await this.submitDataWrite(afterCreate, control);\n        }\n      }\n    } else {\n      const funder = this.sourceKeypair!;\n      if (alreadyExists) {\n        const entries: DataEntryWrites = { [STELLAR_MODEL_DATA_KEY]: utf8ToBytes(\"1\") };\n        if (passkeyEntry) entries[STELLAR_PASSKEY_DATA_KEY] = passkeyEntry;\n        await this.submitDataWrite(entries, control, { sponsored: false }, extraSigners[0] ? { newControl: extraSigners[0] } : undefined);\n      } else {\n        const tx = await this.adapter.buildCreateTx({\n          funder: funder.publicKey(),\n          controlAddress,\n          extraSigners,\n          startingBalance: this.startingBalance,\n        });\n        await signTransactionWithControlKey(tx, control);\n        tx.sign(funder);\n        await this.adapter.submit(tx);\n      }\n    }\n\n    this._isDeployed = true;\n    this.setStatus(\"ready\");\n    this.isNewAccount = true;\n    this.control = control;\n    this._pendingPasskeyPrf = null;\n    this._pendingRecoveryCode = null;\n\n    return { control };\n  }\n\n  /**\n   * Invoke a Soroban contract method, authorized by this account's control key.\n   *\n   * The full flow: build + simulate the invocation (footprint, resource fees, and\n   * the required `SorobanAuthorizationEntry`s come back from the RPC), then for\n   * every auth entry whose credential address is THIS account's `G…`, re-sign it\n   * with the control key (`authorizeEntry`). Finally sign the tx envelope and\n   * submit via the Soroban RPC (or, when sponsored, fee-bump through the relayer).\n   *\n   * This is what lets a Cavos account act as a `require_auth(role)` signer in\n   * contracts like Trustless Work's escrow (approve/release/dispute/…). `args`\n   * accepts native JS values (converted via `nativeToScVal`) or ready `xdr.ScVal`s.\n   */\n  async invokeContract(params: {\n    contractId: string;\n    method: string;\n    args?: (xdr.ScVal | unknown)[];\n    opts?: ExecuteOptions;\n  }): Promise<string> {\n    if (this.statusValue === \"undeployed\") {\n      throw new Error(\"kit/stellar: invokeContract requires a deployed account. Call execute() first to create the account.\");\n    }\n    const control = this.requireReadyControl();\n    const scArgs = (params.args ?? []).map((a) =>\n      a instanceof xdr.ScVal ? a : nativeToScVal(a),\n    );\n    const prepared = await this.adapter.buildInvokeTx({\n      from: this.address,\n      contractId: params.contractId,\n      method: params.method,\n      args: scArgs,\n    });\n    const signed = await this.signSorobanAuth(prepared, control);\n    return this.submitSoroban(signed, control, params.opts);\n  }\n\n  /**\n   * Open a trustline to a classic asset (e.g. USDC) so the account can hold /\n   * receive it — required before funding a Trustless Work escrow in USDC. A\n   * trustline creates a new subentry (reserve), so when sponsored the relayer\n   * pays it (begin/endSponsoringFutureReserves); `{ sponsored: false }` makes the\n   * account pay its own reserve. Returns the confirmed tx hash.\n   */\n  async addTrustline(\n    asset: { code: string; issuer: string },\n    opts?: ExecuteOptions & { limit?: string },\n  ): Promise<string> {\n    if (this.statusValue === \"undeployed\") {\n      throw new Error(\"kit/stellar: addTrustline requires a deployed account. Call execute() first to create the account.\");\n    }\n    const control = this.requireReadyControl();\n    const sponsored = resolveFeeMode(opts, 'sponsored') === 'sponsored';\n    if (sponsored && this.relayer) {\n      const relayerSource = await this.relayer.getSource();\n      const tx = await this.adapter.buildSponsoredChangeTrustTx({\n        relayer: relayerSource,\n        account: this.address,\n        asset,\n        limit: opts?.limit,\n      });\n      await signTransactionWithControlKey(tx, control);\n      return this.relayer.submit(\"trustline\", tx.toXDR());\n    }\n    const tx = await this.adapter.buildChangeTrustTx({ account: this.address, asset, limit: opts?.limit });\n    await signTransactionWithControlKey(tx, control);\n    return this.adapter.submit(tx);\n  }\n\n  /** This account's balance of a classic token (e.g. USDC) as a 7-dp string, or\n   *  \"0\" if no trustline exists. Read-only; needs no unlock. */\n  async tokenBalance(asset: { code: string; issuer: string }): Promise<string> {\n    return this.adapter.tokenBalance(this.address, asset);\n  }\n\n  /**\n   * Sign an externally-built transaction XDR with the control key and return the\n   * signed XDR (does NOT submit). This is the wallet-adapter seam: it mirrors a\n   * classic wallet's `signTransaction(unsignedXdr) → signedXdr`, so apps that\n   * build the tx server-side (e.g. Trustless Work's REST API returns an unsigned\n   * XDR) can use a Cavos account as a drop-in signer.\n   *\n   * Handles both auth models: for Soroban invocations whose auth entries name\n   * THIS account it re-signs those entries (`authorizeEntry`); for source-account\n   * auth (and classic txs) the control-key envelope signature is what satisfies\n   * the account. Entries authorizing other addresses are left untouched.\n   */\n  async signXdr(unsignedXdr: string): Promise<string> {\n    const control = this.requireControl();\n    const tx = TransactionBuilder.fromXDR(unsignedXdr, this.adapter.passphrase) as Transaction;\n    const withAuth = await this.signSorobanAuth(tx, control);\n    await signTransactionWithControlKey(withAuth, control);\n    return withAuth.toXDR();\n  }\n\n  /**\n   * Sign an arbitrary message off-chain with the control key. Nothing is\n   * submitted. Stellar's model differs from Starknet/Solana: the signing key is\n   * the ed25519 **control key** (not a P-256 device key), so `curve` is\n   * `\"ed25519\"` and `publicKey` is the control key's `G…` address.\n   *\n   * A verifier calls `Keypair.fromPublicKey(controlAddress).verify(messageBytes,\n   * signature)` — standard ed25519 math. The message is prefixed with the Cavos\n   * domain prefix (`\"Cavos Signed Message:\\n<len>\\n\"`) before signing.\n   */\n  async signMessage(message: string | Uint8Array): Promise<MessageSignature> {\n    const control = this.requireControl();\n    const msgBytes = typeof message === \"string\" ? utf8ToBytes(message) : message;\n    const sig = await control.signMessage(msgBytes);\n    return {\n      signature: sig,\n      publicKey: control.publicAddress(),\n      curve: \"ed25519\",\n    };\n  }\n\n  /**\n   * Build + sign a native XLM payment WITHOUT submitting it. Returns the signed\n   * inner Transaction as base64 XDR. A relayer can fee-bump it (the control\n   * signature stays valid through the fee-bump wrap); or the caller can submit\n   * it directly via Horizon.\n   *\n   * The signature binds to the account's sequence number and the tx has a 180s\n   * timeout, so it is single-use — submit (or fee-bump) promptly.\n   */\n  async signTransaction(amount: bigint, destination: string): Promise<StellarSignedTransaction> {\n    const control = this.requireControl();\n    const inner = await this.adapter.buildPaymentTx({ from: this.address, to: destination, amount });\n    await signTransactionWithControlKey(inner, control);\n    return { chain: \"stellar\", xdr: inner.toXDR() };\n  }\n\n  /**\n   * Enroll a passkey as an unlock factor: wrap the DEK under the passkey's PRF\n   * output and write the `cv:wp` entry. This is the synced anchor used to approve\n   * a new device or recover — it survives device loss. Idempotent-ish: writing it\n   * again just overwrites the wrap of the same DEK.\n   *\n   * **Undeployed accounts**: The passkey PRF output is stored pending and will be\n   * included in the first account creation. No on-chain write happens until execute().\n   */\n  async enrollPasskey(prfOutput: Uint8Array): Promise<string> {\n    if (this.nativeDek) return this.address; // PRF is the KDF; not a Horizon extra.\n    if (this.statusValue === \"undeployed\") {\n      this._pendingPasskeyPrf = prfOutput;\n      await this._createAccount();\n      this.setStatus(\"ready\");\n      return this.address;\n    }\n\n    const passkey = await importPasskeySigner(prfOutput);\n    const control = this.requireUnlocked().control;\n    return this.submitDataWrite(\n      { [STELLAR_PASSKEY_DATA_KEY]: utf8ToBytes(passkey.publicAddress()) },\n      control,\n      undefined,\n      { newControl: passkey.publicAddress() },\n    );\n  }\n\n  /**\n   * Set up a recovery code as an unlock factor: wrap the DEK under the code's KEK\n   * and write the `cv:wr` entry. Optional in v1 — the integrating app decides when\n   * to surface it. The code never leaves the device; only the wrap goes on-chain.\n   *\n   * **Undeployed accounts**: The recovery code is stored pending and will be\n   * included in the first account creation. No on-chain write happens until execute().\n   */\n  async setupRecovery(code: string): Promise<string> {\n    if (this.nativeDek) return this.address;\n    if (this.statusValue === \"undeployed\") {\n      this._pendingRecoveryCode = code;\n      return \"\";\n    }\n\n    const recovery = await importRecoverySigner(code);\n    return this.submitDataWrite({}, this.requireUnlocked().control, undefined, {\n      newControl: recovery.publicAddress(),\n    });\n  }\n\n  /**\n   * From a new browser/device (`needs-device-approval`), approve THIS device using\n   * the user's synced passkey. Reconstructs the passkey extra signer, then\n   * `setOptions` adds this device. Flips status to `ready`.\n   */\n  async approveThisDeviceWithPasskey(prfOutput: Uint8Array): Promise<string> {\n    if (this.nativeDek) {\n      throw new Error(\"kit/stellar: restore this device by connecting with your passkey\");\n    }\n    return this.addThisDeviceWith(await importPasskeySigner(prfOutput), \"passkey\");\n  }\n\n  /** Approve THIS device using the recovery code (same as the passkey path, for\n   *  the backup factor). */\n  async approveThisDeviceWithRecovery(code: string): Promise<string> {\n    if (this.nativeDek) {\n      throw new Error(\"kit/stellar: native accounts restore by connecting with the enclave or a passkey\");\n    }\n    return this.addThisDeviceWith(await importRecoverySigner(code), \"recovery code\");\n  }\n\n  /**\n   * Slot ids of every device currently able to unlock this account, newest-first\n   * order not guaranteed. This device's slot is `deviceKey.slotId()`. Feed these\n   * to `removeDevice` to build a device-management UI.\n   */\n  async listDevices(): Promise<string[]> {\n    return this.adapter.signerKeys(this.address);\n  }\n\n  async removeDevice(params: {\n    slotId: string;\n    passkeyPrfOutput?: Uint8Array;\n    recoveryCode?: string;\n    opts?: ExecuteOptions;\n  }): Promise<{ transactionHash: string; controlAddress: string; evictedSlots: string[] }> {\n    const control = this.requireUnlocked().control;\n    if (params.slotId === this.address || params.slotId === control.publicAddress()) {\n      throw new Error(\"kit/stellar: cannot revoke the signer you are using\");\n    }\n    const transactionHash = await this.submitDataWrite({}, control, params.opts, {\n      oldControl: params.slotId,\n    });\n    return {\n      transactionHash,\n      controlAddress: control.publicAddress(),\n      evictedSlots: [params.slotId],\n    };\n  }\n\n  /** The control key's public G address (the weight-1 real signer), for display. */\n  get controlAddress(): string | undefined {\n    return this.control?.publicAddress();\n  }\n\n  // --- internals ----------------------------------------------------------\n\n  private async addThisDeviceWith(factor: ControlKey, name: string): Promise<string> {\n    if (this.statusValue === \"ready\") {\n      throw new Error(\"kit/stellar: this device is already authorized\");\n    }\n    const device = await WebCryptoControlKey.create();\n    await device.persist(this.address);\n    try {\n      const hash = await this.submitDataWrite({}, factor, undefined, {\n        newControl: device.publicAddress(),\n      });\n      this.control = device;\n      this.setStatus(\"ready\");\n      return hash;\n    } catch {\n      throw new Error(`kit/stellar: could not add this device with the ${name} — wrong factor or not enrolled`);\n    }\n  }\n\n  /**\n   * Sign an inner (account-sourced) payment tx with the control key and submit it:\n   *   - sponsored (default) → with a relayer, wrap in a fee-bump (relayer pays\n   *     the fee) and POST; falls back to self-funded if no relayer;\n   *   - `{ sponsored: false }` → submit directly (the account pays its own fee).\n   * Payments add no subentries, so no reserve sponsorship is needed here.\n   */\n  /**\n   * Re-sign every Soroban auth entry whose credential address is this account\n   * with the control key, then re-assemble the tx. Entries authorizing OTHER\n   * addresses (e.g. a different escrow role) are left untouched — each party\n   * signs their own. Requires rebuilding the invoke op with the signed entries.\n   */\n  private async signSorobanAuth(prepared: Transaction, control: ControlKey): Promise<Transaction> {\n    // A Soroban invocation carries its auth entries on the (invokeHostFunction)\n    // operation. Scan every op so an externally-built XDR isn't assumed op-0.\n    const authOps = (prepared.operations as unknown as { auth?: xdr.SorobanAuthorizationEntry[] }[])\n      .filter((o) => Array.isArray(o.auth) && o.auth.length > 0) as {\n      auth: xdr.SorobanAuthorizationEntry[];\n    }[];\n    if (authOps.length === 0) return prepared;\n\n    const g = Keypair.fromPublicKey(this.address).xdrPublicKey();\n    const validUntil = (await this.adapter.latestLedger()) + AUTH_VALIDITY_LEDGERS;\n    const signer = createSorobanSigner(control);\n    for (const op of authOps) {\n      op.auth = await Promise.all(\n        op.auth.map(async (entry) => {\n          const creds = entry.credentials();\n          // Only address credentials that name THIS account need our signature;\n          // source-account creds and other addresses are left as-is.\n          if (creds.switch().name !== \"sorobanCredentialsAddress\") return entry;\n          const addr = creds.address().address();\n          if (addr.switch().name !== \"scAddressTypeAccount\") return entry;\n          if (addr.accountId().toXDR(\"base64\") !== g.toXDR(\"base64\")) return entry;\n          return authorizeEntry(entry, signer, validUntil, this.adapter.passphrase);\n        }),\n      );\n    }\n    return prepared;\n  }\n\n  /** Sign the tx envelope with the control key and submit the Soroban tx: sponsored\n   *  (default) → fee-bump through the relayer; else submit directly via the RPC. */\n  private async submitSoroban(\n    tx: Transaction,\n    control: ControlKey,\n    opts?: ExecuteOptions,\n  ): Promise<string> {\n    await signTransactionWithControlKey(tx, control);\n    const sponsored = resolveFeeMode(opts, 'sponsored') === 'sponsored';\n    if (sponsored && this.relayer) {\n      const feeSource = await this.relayer.getSource();\n      const bump = this.adapter.wrapFeeBump(tx, feeSource);\n      return this.relayer.submit(\"soroban\", bump.toXDR());\n    }\n    return this.adapter.submitSoroban(tx);\n  }\n\n  private async submitInner(\n    inner: Transaction,\n    control: ControlKey,\n    opts?: ExecuteOptions,\n  ): Promise<string> {\n    await signTransactionWithControlKey(inner, control);\n    const sponsored = resolveFeeMode(opts, 'sponsored') === 'sponsored';\n    if (sponsored && this.relayer) {\n      const feeSource = await this.relayer.getSource();\n      const bump = this.adapter.wrapFeeBump(inner, feeSource);\n      return this.relayer.submit(\"fee-bump\", bump.toXDR());\n    }\n    // Self-funded: submit the account-sourced inner tx directly; the account pays\n    // the (tiny) fee out of its own balance.\n    return this.adapter.submit(inner);\n  }\n\n  /**\n   * Write data entries (add a factor / device slot) — which create NEW subentries\n   * that each need ~0.5 XLM of reserve. A relayer-sponsored account holds no XLM,\n   * so the write must be sponsored by the relayer (source + sponsor), exactly like\n   * account creation — a plain fee-bump would fail with `op_low_reserve`.\n   *   - sponsored (default) → with a relayer, build a sponsored write (relayer\n   *     source + begin/end sponsoring), control-sign the account ops, relay\n   *     co-signs + submits; falls back to self-funded if no relayer;\n   *   - `{ sponsored: false }` → the account writes directly (it must hold its\n   *     own reserve for the new subentries).\n   */\n  private async submitDataWrite(\n    entries: DataEntryWrites,\n    control: ControlKey,\n    opts?: ExecuteOptions,\n    rotation?: ControlRotation,\n  ): Promise<string> {\n    const sponsored = resolveFeeMode(opts, 'sponsored') === 'sponsored';\n    if (sponsored && this.relayer) {\n      // The relayer account is the tx source, and EVERY sponsored write from\n      // every user of this app consumes one of its sequence numbers. Two writes\n      // landing in the same ledger therefore collide, and the loser is rejected\n      // with `tx_bad_seq`. Changing the sequence changes the tx hash, so the\n      // relay cannot fix it up for us — the control signature would no longer\n      // match — which means the retry has to rebuild and re-sign here.\n      let lastError: unknown;\n      for (let attempt = 0; attempt < 3; attempt++) {\n        const { address, sequence } = await this.relayer.fetchSourceAccount();\n        const tx = await this.adapter.buildSponsoredDataTx({\n          relayer: address,\n          account: this.address,\n          entries,\n          rotation,\n          ...(sequence !== undefined ? { relayerSequence: sequence } : {}),\n        });\n        await signTransactionWithControlKey(tx, control); // account-sourced manageData + endSponsoring\n        try {\n          return await this.relayer.submit(\"sponsored-data\", tx.toXDR());\n        } catch (e) {\n          lastError = e;\n          if (!isBadSequence(e)) throw e;\n          // Someone else took the sequence. Back off briefly — Stellar closes a\n          // ledger every ~5s, and retrying inside the same one just collides\n          // again — then rebuild against a fresh one.\n          await new Promise((resolve) => setTimeout(resolve, 1_500 * (attempt + 1)));\n        }\n      }\n      throw lastError;\n    }\n    const tx = await this.adapter.buildDataTx({ account: this.address, entries, rotation });\n    await signTransactionWithControlKey(tx, control);\n    return this.adapter.submit(tx);\n  }\n\n  /**\n   * Get the control key for signing operations. Works for both ready AND\n   * undeployed accounts (undeployed accounts have a pre-generated control key).\n   * Only throws for needs-device-approval status where no control key exists.\n   */\n  private requireControl(): ControlKey {\n    if (!this.control) {\n      throw new Error(\"kit/stellar: this device is not an authorized signer of the wallet\");\n    }\n    return this.control;\n  }\n\n  /**\n   * Get the control key, but only for on-chain operations that require ready status.\n   * Use requireControl() for off-chain signing that can work while undeployed.\n   */\n  private requireReadyControl(): ControlKey {\n    if (this.statusValue !== \"ready\" || !this.control) {\n      throw new Error(\"kit/stellar: this device is not an authorized signer of the wallet\");\n    }\n    return this.control;\n  }\n\n  private requireUnlocked(): Unlocked {\n    return { control: this.requireControl() };\n  }\n}\n\nasync function unlockViaDevice(address: string): Promise<Unlocked | null> {\n  const cached = await WebCryptoControlKey.load({ keyId: address });\n  return cached ? { control: cached } : null;\n}\n\n/**\n * Whether a relay rejection was a sequence-number collision. The relay returns\n * the network's `result_codes` in its error text, so match on the code rather\n * than on prose that may be reworded.\n */\nfunction isBadSequence(error: unknown): boolean {\n  const message = error instanceof Error ? error.message : String(error);\n  return message.includes(\"tx_bad_seq\");\n}\n"]}