{"version":3,"sources":["../../src/vault/network.ts","../../src/vault/policy.ts","../../src/vault/parseStarknet.ts","../../src/vault/ledger.ts","../../src/vault/ui.ts","../../src/vault/review.ts","../../src/vault/modal.ts","../../src/vault/parseSolana.ts","../../src/vault/parseStellar.ts","../../src/vault/limits.ts","../../src/vault/host.ts","../../src/vault/confirm.ts"],"names":["stellarHash","recentBlockhash","address","run","native","xdr","details","VersionedMessage"],"mappings":"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","file":"index.mjs","sourcesContent":["import { hash as stellarHash, Networks } from \"@stellar/stellar-sdk\";\nimport { shortString } from \"starknet\";\n\n/**\n * The network a signature is actually for, read from what is signed. The app\n * also says which network it connected to, but the app is what the vault\n * does not trust: Solana and Stellar keys sign the same way on every network.\n */\n\nconst STELLAR: Record<string, string> = {\n  [Networks.PUBLIC]: \"Stellar Mainnet\",\n  [Networks.TESTNET]: \"Stellar Testnet\",\n  [Networks.FUTURENET]: \"Stellar Futurenet\",\n};\n\nexport function stellarNetworkName(passphrase: string): string {\n  const name = STELLAR[passphrase];\n  if (!name) throw new Error(\"kit/vault: unknown Stellar network\");\n  return name;\n}\n\n/** Soroban auth preimages carry the network as `sha256(passphrase)`. */\nexport function stellarNetworkNameFromId(networkId: Uint8Array): string {\n  const id = Buffer.from(networkId).toString(\"hex\");\n  for (const passphrase of Object.keys(STELLAR)) {\n    if (stellarHash(Buffer.from(passphrase)).toString(\"hex\") === id) return STELLAR[passphrase];\n  }\n  throw new Error(\"kit/vault: unknown Stellar network\");\n}\n\nconst STARKNET: Record<string, string> = {\n  SN_MAIN: \"Starknet Mainnet\",\n  SN_SEPOLIA: \"Starknet Sepolia\",\n};\n\nexport function starknetNetworkName(chainId: unknown): string {\n  const raw = String(chainId ?? \"\");\n  const decoded = /^0x[0-9a-f]+$/i.test(raw) ? shortString.decodeShortString(raw) : raw;\n  const name = STARKNET[decoded];\n  if (!name) throw new Error(\"kit/vault: unknown Starknet network\");\n  return name;\n}\n\nconst SOLANA_RPC: [string, string][] = [\n  [\"Solana Mainnet\", \"https://api.mainnet-beta.solana.com\"],\n  [\"Solana Devnet\", \"https://api.devnet.solana.com\"],\n];\n\n/**\n * A Solana message names no network, only a recent blockhash, so ask each\n * network whether it knows that blockhash. Only used when asking the user.\n */\nexport async function solanaNetworkName(recentBlockhash: string, fetchImpl: typeof fetch = fetch): Promise<string> {\n  for (const [name, url] of SOLANA_RPC) {\n    try {\n      const res = await fetchImpl(url, {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json\" },\n        body: JSON.stringify({ jsonrpc: \"2.0\", id: 1, method: \"isBlockhashValid\", params: [recentBlockhash, { commitment: \"processed\" }] }),\n      });\n      const body = (await res.json()) as { result?: { value?: boolean } };\n      if (body.result?.value === true) return name;\n    } catch {\n      // Try the next network.\n    }\n  }\n  return \"Solana, network not confirmed\";\n}\n","import type { VaultLimit, VaultPolicy } from \"./limits\";\n\nexport interface Spend {\n  asset: string;\n  /** Base units: lamports, stroops, or the token's smallest unit. */\n  amount: bigint;\n  decimals: number;\n}\n\n/** What the user reads when the vault asks: sends get their own layout, everything else a line of text. */\nexport type Line =\n  | { kind: \"send\"; amount: string; asset: string; to: string }\n  | { kind: \"action\"; text: string; target?: string };\n\nexport interface ParsedTx {\n  spends: Spend[];\n  lines: Line[];\n  /** Signer changes, unknown programs: never inside a limit, so the app's over-limit rule decides. */\n  flagged: boolean;\n}\n\nexport type Decision = \"sign\" | \"confirm\" | \"block\";\n\nexport function emptyParsed(): ParsedTx {\n  return { spends: [], lines: [], flagged: false };\n}\n\nexport function flag(tx: ParsedTx, text: string, target?: string): void {\n  tx.flagged = true;\n  tx.lines.push({ kind: \"action\", text, ...(target ? { target } : {}) });\n}\n\nexport function totals(spends: Spend[]): Map<string, { amount: bigint; decimals: number }> {\n  const out = new Map<string, { amount: bigint; decimals: number }>();\n  for (const { asset, amount, decimals } of spends) {\n    out.set(asset, { amount: (out.get(asset)?.amount ?? 0n) + amount, decimals });\n  }\n  return out;\n}\n\nexport function evaluate(tx: ParsedTx, spentToday: ReadonlyMap<string, bigint>, policy: VaultPolicy): Decision {\n  if (!tx.flagged && withinLimits(tx, spentToday, policy.limits)) return \"sign\";\n  return policy.overLimit === \"ask\" ? \"confirm\" : policy.overLimit;\n}\n\nfunction withinLimits(tx: ParsedTx, spentToday: ReadonlyMap<string, bigint>, limits: VaultLimit[]): boolean {\n  for (const [asset, { amount, decimals }] of totals(tx.spends)) {\n    const limit = limits.find((entry) => entry.asset === asset);\n    if (!limit) return false;\n    if (amount > parseUnits(limit.perTx, decimals)) return false;\n    if ((spentToday.get(asset) ?? 0n) + amount > parseUnits(limit.perDay, decimals)) return false;\n  }\n  return true;\n}\n\n/** \"0.5\" at 9 decimals is 500000000n. Extra digits are dropped, which only ever lowers a limit. */\nexport function parseUnits(amount: string, decimals: number): bigint {\n  const [whole, fraction = \"\"] = amount.trim().split(\".\");\n  return BigInt(whole || \"0\") * 10n ** BigInt(decimals) + BigInt(fraction.padEnd(decimals, \"0\").slice(0, decimals) || \"0\");\n}\n\nexport function formatUnits(amount: bigint, decimals: number): string {\n  const base = 10n ** BigInt(decimals);\n  const whole = amount / base;\n  const fraction = (amount % base).toString().padStart(decimals, \"0\").replace(/0+$/, \"\");\n  return fraction ? `${whole}.${fraction}` : whole.toString();\n}\n\nexport function short(address: string): string {\n  return address.length > 12 ? `${address.slice(0, 4)}…${address.slice(-4)}` : address;\n}\n","import { hash, type TypedData } from \"starknet\";\nimport { emptyParsed, flag, formatUnits, type ParsedTx } from \"./policy\";\n\nexport interface StarknetCall {\n  to: string;\n  selector: string;\n  calldata: string[];\n}\n\n/** Mainnet and Sepolia share the ETH and STRK addresses. */\nconst TOKENS = new Map<bigint, { symbol: string; decimals: number }>([\n  [BigInt(\"0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7\"), { symbol: \"ETH\", decimals: 18 }],\n  [BigInt(\"0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d\"), { symbol: \"STRK\", decimals: 18 }],\n  [BigInt(\"0x033068f6539f8e6e6b131e6b2b814e6c34a5224bc66947c47dab9dfee93b35fb\"), { symbol: \"USDC\", decimals: 6 }],\n  [BigInt(\"0x053c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8\"), { symbol: \"USDC\", decimals: 6 }],\n]);\n\nexport function knownStarknetToken(address: string): { symbol: string; decimals: number } | undefined {\n  return TOKENS.get(BigInt(address));\n}\n\nconst TRANSFER = BigInt(hash.getSelectorFromName(\"transfer\"));\nconst APPROVALS = new Set([\"approve\", \"increase_allowance\", \"increaseAllowance\"].map((name) => BigInt(hash.getSelectorFromName(name))));\n\nexport function selectorOf(entrypoint: string): string {\n  return /^0x[0-9a-f]+$/i.test(entrypoint) ? entrypoint : hash.getSelectorFromName(entrypoint);\n}\n\n/**\n * Only transfers of known tokens become spends. Calls into the account itself\n * change who controls it, so they, like everything else, are never within a limit.\n */\nexport function parseStarknetCalls(calls: StarknetCall[], account: string): ParsedTx {\n  const tx = emptyParsed();\n  const self = BigInt(account);\n  for (const call of calls) {\n    const to = BigInt(call.to);\n    const selector = BigInt(call.selector);\n    const token = TOKENS.get(to);\n    if (to === self) {\n      flag(tx, \"Change this account's signers or settings\");\n    } else if (token && selector === TRANSFER && call.calldata.length >= 3) {\n      const [recipient, low, high] = call.calldata;\n      const amount = BigInt(low) + (BigInt(high) << 128n);\n      tx.spends.push({ asset: token.symbol, amount, decimals: token.decimals });\n      tx.lines.push({ kind: \"send\", amount: formatUnits(amount, token.decimals), asset: token.symbol, to: hex(recipient) });\n    } else if (APPROVALS.has(selector)) {\n      flag(tx, `Let another address spend your ${token?.symbol ?? \"tokens\"}`, call.calldata[0] ? hex(call.calldata[0]) : undefined);\n    } else {\n      flag(tx, \"Call a contract\", hex(call.to));\n    }\n  }\n  return tx;\n}\n\nexport interface StarknetPrivacyOperation {\n  kind: \"deposit\" | \"transfer\" | \"withdraw\";\n  token: string;\n  amount: bigint;\n  /** The pool for a deposit, the receiver otherwise. */\n  to: string;\n}\n\n/**\n * What the user reads before a private operation moves their funds. The\n * spend counts against the daily limit like a public transfer; an unknown\n * token is never inside a limit.\n */\nexport function parseStarknetPrivacy(op: StarknetPrivacyOperation): ParsedTx {\n  const tx = emptyParsed();\n  const token = knownStarknetToken(op.token);\n  const to = hex(op.to);\n  if (token) {\n    tx.spends.push({ asset: token.symbol, amount: op.amount, decimals: token.decimals });\n    tx.lines.push({ kind: \"send\", amount: formatUnits(op.amount, token.decimals), asset: token.symbol, to });\n  } else {\n    tx.flagged = true;\n    tx.lines.push({ kind: \"send\", amount: `${op.amount} (base units)`, asset: `unknown token ${hex(op.token)}`, to });\n  }\n  tx.lines.push({ kind: \"action\", text: PRIVATE_NOTES[op.kind] });\n  return tx;\n}\n\nconst PRIVATE_NOTES = {\n  deposit: \"Private: moves the funds into your private balance in the privacy pool\",\n  transfer: \"Private: the amount and the receiver are hidden on-chain\",\n  withdraw: \"Private: takes the funds out of your private balance to a public address\",\n} as const;\n\n/** Sponsored transactions are signed as a SNIP-9 OutsideExecution, which carries the calls. */\nexport function parseStarknetTypedData(typedData: TypedData, account: string): ParsedTx {\n  const message = typedData.message as Record<string, unknown>;\n  const calls = (message.Calls ?? message.calls) as Record<string, unknown>[] | undefined;\n  if (typedData.primaryType !== \"OutsideExecution\" || !Array.isArray(calls)) {\n    const tx = emptyParsed();\n    flag(tx, \"Sign a typed message\");\n    return tx;\n  }\n  return parseStarknetCalls(\n    calls.map((call) => ({\n      to: String(call.To ?? call.to),\n      selector: String(call.Selector ?? call.selector),\n      calldata: ((call.Calldata ?? call.calldata) as unknown[]).map(String),\n    })),\n    account,\n  );\n}\n\n/** Fee estimates are signed with a query version, which the network refuses to execute. */\nexport function isQueryVersion(version: unknown): boolean {\n  try {\n    return BigInt(version as string | number | bigint) >= 1n << 128n;\n  } catch {\n    return false;\n  }\n}\n\nfunction hex(value: string): string {\n  return `0x${BigInt(value).toString(16).padStart(64, \"0\")}`;\n}\n","import type { Spend } from \"./policy\";\n\nexport interface SpendLedger {\n  spentToday(userId: string, asset: string): Promise<bigint>;\n  record(userId: string, spends: Spend[]): Promise<void>;\n}\n\nconst IDB_NAME = \"cavos-vault\";\nconst IDB_STORE = \"spent\";\n\nfunction dayKey(userId: string, asset: string, now: Date): string {\n  return `${userId}:${asset}:${now.toISOString().slice(0, 10)}`;\n}\n\nexport function memoryLedger(now: () => Date = () => new Date()): SpendLedger {\n  const spent = new Map<string, bigint>();\n  return {\n    async spentToday(userId, asset) {\n      return spent.get(dayKey(userId, asset, now())) ?? 0n;\n    },\n    async record(userId, spends) {\n      for (const { asset, amount } of spends) {\n        const key = dayKey(userId, asset, now());\n        spent.set(key, (spent.get(key) ?? 0n) + amount);\n      }\n    },\n  };\n}\n\nexport function idbLedger(): SpendLedger {\n  if (typeof indexedDB === \"undefined\") return memoryLedger();\n  return {\n    async spentToday(userId, asset) {\n      const raw = await run<string | undefined>(\"readonly\", (s) => s.get(dayKey(userId, asset, new Date())));\n      return raw ? BigInt(raw) : 0n;\n    },\n    async record(userId, spends) {\n      for (const { asset, amount } of spends) await add(dayKey(userId, asset, new Date()), amount);\n    },\n  };\n}\n\n/** Read and write in one transaction, so two records cannot both start from the same total. */\nfunction add(key: string, amount: bigint): Promise<void> {\n  return new Promise((resolve, reject) => {\n    const open = indexedDB.open(IDB_NAME, 1);\n    open.onupgradeneeded = () => open.result.createObjectStore(IDB_STORE);\n    open.onerror = () => reject(open.error);\n    open.onsuccess = () => {\n      const db = open.result;\n      const tx = db.transaction(IDB_STORE, \"readwrite\");\n      const store = tx.objectStore(IDB_STORE);\n      const read = store.get(key);\n      read.onsuccess = () => {\n        const current = read.result ? BigInt(read.result as string) : 0n;\n        store.put((current + amount).toString(), key);\n      };\n      tx.oncomplete = () => {\n        db.close();\n        resolve();\n      };\n      tx.onerror = () => {\n        db.close();\n        reject(tx.error);\n      };\n    };\n  });\n}\n\nfunction run<T>(mode: IDBTransactionMode, op: (store: IDBObjectStore) => IDBRequest): Promise<T> {\n  return new Promise((resolve, reject) => {\n    const open = indexedDB.open(IDB_NAME, 1);\n    open.onupgradeneeded = () => open.result.createObjectStore(IDB_STORE);\n    open.onerror = () => reject(open.error);\n    open.onsuccess = () => {\n      const db = open.result;\n      const req = op(db.transaction(IDB_STORE, mode).objectStore(IDB_STORE));\n      req.onsuccess = () => {\n        db.close();\n        resolve(req.result as T);\n      };\n      req.onerror = () => {\n        db.close();\n        reject(req.error);\n      };\n    };\n  });\n}\n","/**\n * Plain DOM, styled through CSSOM only: the vault pages run under a CSP with no\n * style sources, which blocks <style> tags and pseudo-classes but not\n * `element.style`, so hover, press and focus are wired with events.\n */\n\nconst INDIGO = \"#402AFF\";\nconst WHITE = \"#FFFFFF\";\nconst SOFT = \"rgba(255, 255, 255, 0.74)\";\nconst HAIRLINE = \"rgba(255, 255, 255, 0.16)\";\nconst WELL = \"rgba(255, 255, 255, 0.08)\";\nconst SCRIM = \"rgba(12, 8, 38, 0.56)\";\nconst MONO = '\"Geist Mono\", ui-monospace, \"SF Mono\", Menlo, monospace';\nconst FONT = '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif';\nconst EASE_OUT = \"cubic-bezier(0.23, 1, 0.32, 1)\";\nconst EASE_DRAWER = \"cubic-bezier(0.32, 0.72, 0, 1)\";\n\ntype Style = Partial<CSSStyleDeclaration>;\n\nexport function el<K extends keyof HTMLElementTagNameMap>(\n  tag: K,\n  style: Style = {},\n  text?: string,\n): HTMLElementTagNameMap[K] {\n  const node = document.createElement(tag);\n  Object.assign(node.style, style);\n  if (text !== undefined) node.textContent = text;\n  return node;\n}\n\nconst media = (query: string) => typeof window !== \"undefined\" && window.matchMedia(query).matches;\nconst isMobile = () => media(\"(max-width: 640px)\");\nconst reducedMotion = () => media(\"(prefers-reduced-motion: reduce)\");\nconst canHover = () => media(\"(hover: hover) and (pointer: fine)\");\n\nexport type ButtonKind = \"primary\" | \"secondary\" | \"quiet\";\n\nconst BUTTON: Record<ButtonKind, { rest: Style; hover: string }> = {\n  primary: { rest: { background: WHITE, color: INDIGO, border: \"1px solid transparent\", fontWeight: \"600\" }, hover: \"#EEEBFF\" },\n  secondary: { rest: { background: \"transparent\", color: WHITE, border: \"1px solid rgba(255,255,255,0.32)\", fontWeight: \"500\" }, hover: WELL },\n  quiet: { rest: { background: \"transparent\", color: SOFT, border: \"1px solid transparent\", fontWeight: \"500\" }, hover: WELL },\n};\n\nexport function button(label: string, kind: ButtonKind): HTMLButtonElement {\n  const { rest, hover } = BUTTON[kind];\n  const node = el(\"button\", {\n    position: \"relative\",\n    overflow: \"hidden\",\n    width: \"100%\",\n    minHeight: \"46px\",\n    padding: \"11px 16px\",\n    borderRadius: \"10px\",\n    fontFamily: \"inherit\",\n    fontSize: \"15px\",\n    letterSpacing: \"-0.01em\",\n    cursor: \"pointer\",\n    outline: \"none\",\n    transition: `transform 120ms ${EASE_OUT}, background-color 150ms ease, opacity 150ms ease, box-shadow 150ms ease`,\n    ...rest,\n  }, label);\n  node.type = \"button\";\n  const resting = () => (node.dataset.rest ?? rest.background ?? \"transparent\") as string;\n  node.addEventListener(\"pointerenter\", () => {\n    if (canHover() && !node.disabled) node.style.background = hover;\n  });\n  node.addEventListener(\"pointerleave\", () => {\n    node.style.background = resting();\n    node.style.transform = \"\";\n  });\n  node.addEventListener(\"pointerdown\", () => {\n    if (!node.disabled) node.style.transform = \"scale(0.97)\";\n  });\n  node.addEventListener(\"pointerup\", () => (node.style.transform = \"\"));\n  node.addEventListener(\"focus\", () => {\n    if (node.matches(\":focus-visible\")) node.style.boxShadow = `0 0 0 2px ${INDIGO}, 0 0 0 4px ${WHITE}`;\n  });\n  node.addEventListener(\"blur\", () => (node.style.boxShadow = \"\"));\n  return node;\n}\n\nexport function setEnabled(node: HTMLButtonElement, enabled: boolean): void {\n  node.disabled = !enabled;\n  node.style.opacity = enabled ? \"1\" : \"0.5\";\n  node.style.cursor = enabled ? \"pointer\" : \"default\";\n}\n\nexport interface Armable {\n  node: HTMLButtonElement;\n  /** Fill the button over `ms`, then enable it. */\n  arm(ms: number): void;\n  disarm(): void;\n}\n\n/**\n * A primary button that fills in before it can be pressed. The fill is a white\n * copy of the button revealed with clip-path, so the label turns indigo exactly\n * where the fill has reached.\n */\nexport function armableButton(label: string): Armable {\n  const node = button(\"\", \"primary\");\n  const unarmed = \"rgba(255,255,255,0.18)\";\n  node.dataset.rest = unarmed;\n  Object.assign(node.style, { background: unarmed, color: WHITE });\n  node.setAttribute(\"aria-label\", label);\n\n  const layer = (color: string, background: string) =>\n    el(\"span\", {\n      position: \"absolute\",\n      inset: \"0\",\n      display: \"flex\",\n      alignItems: \"center\",\n      justifyContent: \"center\",\n      color,\n      background,\n      pointerEvents: \"none\",\n    }, label);\n  const base = layer(WHITE, \"transparent\");\n  const fill = layer(INDIGO, WHITE);\n  fill.setAttribute(\"aria-hidden\", \"true\");\n  base.setAttribute(\"aria-hidden\", \"true\");\n  node.append(base, fill);\n\n  let sweep: Animation | undefined;\n  const disarm = () => {\n    sweep?.cancel();\n    fill.style.clipPath = \"inset(0 100% 0 0)\";\n    node.dataset.rest = unarmed;\n    node.style.background = unarmed;\n    node.disabled = true;\n    node.style.cursor = \"default\";\n  };\n  disarm();\n  return {\n    node,\n    disarm,\n    arm(ms) {\n      disarm();\n      sweep = fill.animate([{ clipPath: \"inset(0 100% 0 0)\" }, { clipPath: \"inset(0 0% 0 0)\" }], {\n        duration: reducedMotion() ? 1 : ms,\n        easing: \"linear\",\n      });\n      sweep.onfinish = () => {\n        fill.style.clipPath = \"inset(0 0 0 0)\";\n        node.dataset.rest = WHITE;\n        node.style.background = WHITE;\n        node.disabled = false;\n        node.style.cursor = \"pointer\";\n      };\n    },\n  };\n}\n\nexport function mark(size = 20): SVGSVGElement {\n  const ns = \"http://www.w3.org/2000/svg\";\n  const svg = document.createElementNS(ns, \"svg\");\n  svg.setAttribute(\"width\", String(size));\n  svg.setAttribute(\"height\", String((size * 82) / 66));\n  svg.setAttribute(\"viewBox\", \"0 0 66 82\");\n  svg.setAttribute(\"fill\", WHITE);\n  svg.setAttribute(\"aria-hidden\", \"true\");\n  const g = document.createElementNS(ns, \"g\");\n  g.setAttribute(\"transform\", \"translate(0,82) scale(0.1,-0.1)\");\n  const path = document.createElementNS(ns, \"path\");\n  path.setAttribute(\n    \"d\",\n    \"M148 630 l-148 -185 68 -3 c193 -9 236 39 230 264 l-3 108 -147 -184z M360 705 c1 -225 37 -269 217 -263 l83 3 -136 170 c-74 94 -142 177 -150 185 -12 12 -14 0 -14 -95z M125 223 c69 -87 136 -171 150 -188 l26 -30 -4 135 c-6 212 -29 240 -201 240 l-96 0 125 -157z M433 364 c-53 -26 -67 -70 -71 -224 -3 -118 -2 -133 11 -120 8 8 76 93 151 188 l136 172 -97 0 c-68 0 -108 -5 -130 -16z\",\n  );\n  g.append(path);\n  svg.append(g);\n  return svg;\n}\n\nexport interface Sheet {\n  root: HTMLDivElement;\n  card: HTMLDivElement;\n  title: HTMLHeadingElement;\n  body: HTMLDivElement;\n  actions: HTMLDivElement;\n  close(): Promise<void>;\n}\n\nlet sheets = 0;\n\n/**\n * The Cavos card: an indigo panel over a scrim, centred on desktop and a\n * bottom sheet on phones. `overlay: false` fills the page (the pop-up window).\n */\nexport function sheet(options: { overlay: boolean }): Sheet {\n  const mobile = options.overlay && isMobile();\n  const id = `cavos-sheet-${++sheets}`;\n  const root = el(\"div\", {\n    position: \"fixed\",\n    inset: \"0\",\n    display: \"flex\",\n    alignItems: mobile ? \"flex-end\" : \"center\",\n    justifyContent: \"center\",\n    padding: options.overlay && !mobile ? \"16px\" : \"0\",\n    fontFamily: FONT,\n    color: WHITE,\n    background: options.overlay ? SCRIM : INDIGO,\n  });\n  root.style.setProperty(\"-webkit-font-smoothing\", \"antialiased\");\n\n  const card = el(\"div\", {\n    width: \"100%\",\n    maxWidth: options.overlay && !mobile ? \"392px\" : \"100%\",\n    maxHeight: \"100%\",\n    overflowY: \"auto\",\n    boxSizing: \"border-box\",\n    padding: mobile ? \"24px 20px calc(20px + env(safe-area-inset-bottom))\" : \"28px\",\n    borderRadius: mobile ? \"20px 20px 0 0\" : options.overlay ? \"18px\" : \"0\",\n    // A faint light from the top right, as on the Cavos demo; flat indigo reads as a sticker.\n    background: `radial-gradient(420px 220px at 88% -12%, rgba(255,255,255,0.16), transparent 62%), ${INDIGO}`,\n    boxShadow: options.overlay\n      ? \"inset 0 1px 0 rgba(255,255,255,0.18), 0 32px 80px rgba(16, 8, 72, 0.5), 0 0 0 1px rgba(255,255,255,0.06)\"\n      : \"none\",\n    ...(options.overlay ? {} : { minHeight: \"100%\", display: \"flex\", flexDirection: \"column\", justifyContent: \"center\" }),\n  });\n  card.tabIndex = -1;\n  card.style.outline = \"none\";\n  card.setAttribute(\"role\", \"dialog\");\n  card.setAttribute(\"aria-modal\", \"true\");\n  card.setAttribute(\"aria-labelledby\", `${id}-title`);\n  card.setAttribute(\"aria-describedby\", `${id}-body`);\n\n  const inner = el(\"div\", { width: \"100%\", maxWidth: \"392px\", margin: \"0 auto\" });\n  const header = el(\"div\", { display: \"flex\", alignItems: \"center\", gap: \"8px\", marginBottom: \"28px\" });\n  header.append(mark(18));\n\n  const title = el(\"h1\", {\n    margin: \"0 0 8px\",\n    fontSize: \"22px\",\n    lineHeight: \"1.2\",\n    fontWeight: \"600\",\n    letterSpacing: \"-0.022em\",\n    color: WHITE,\n  });\n  title.style.setProperty(\"text-wrap\", \"balance\");\n  title.id = `${id}-title`;\n  const body = el(\"div\", { fontSize: \"15px\", lineHeight: \"1.5\", color: SOFT, letterSpacing: \"-0.006em\" });\n  body.id = `${id}-body`;\n  const actions = el(\"div\", { display: \"flex\", flexDirection: \"column\", gap: \"8px\", marginTop: \"28px\" });\n  inner.append(header, title, body, actions);\n  card.append(inner);\n  root.append(card);\n  document.body.append(root);\n  // Focus the dialog, not a button, so Enter never approves by accident.\n  card.focus({ preventScroll: true });\n\n  const still = reducedMotion();\n  const enter: Keyframe[] = still\n    ? [{ opacity: 0 }, { opacity: 1 }]\n    : mobile\n      ? [{ transform: \"translateY(100%)\" }, { transform: \"translateY(0)\" }]\n      : [{ opacity: 0, transform: \"translateY(10px) scale(0.97)\" }, { opacity: 1, transform: \"none\" }];\n  if (options.overlay) root.animate([{ opacity: 0 }, { opacity: 1 }], { duration: 200, easing: \"ease-out\" });\n  card.animate(enter, { duration: still ? 150 : mobile ? 420 : 260, easing: mobile ? EASE_DRAWER : EASE_OUT });\n\n  return {\n    root,\n    card,\n    title,\n    body,\n    actions,\n    async close() {\n      // Leave the way it came, faster than it arrived.\n      const duration = still ? 120 : mobile ? 240 : 160;\n      card.animate([...enter].reverse(), { duration, easing: \"cubic-bezier(0.4, 0, 1, 1)\", fill: \"forwards\" });\n      await root.animate([{ opacity: 1 }, { opacity: 0 }], { duration: duration + 10, easing: \"ease-in\", fill: \"forwards\" }).finished;\n      root.remove();\n    },\n  };\n}\n\n/** The amount, large, as the thing being approved. */\nexport function amountHero(amount: string, asset: string): HTMLDivElement {\n  const wrap = el(\"div\", { margin: \"0 0 24px\" });\n  const figure = el(\"div\", {\n    display: \"flex\",\n    alignItems: \"baseline\",\n    gap: \"8px\",\n    flexWrap: \"wrap\",\n    fontSize: \"44px\",\n    lineHeight: \"1.05\",\n    fontWeight: \"600\",\n    letterSpacing: \"-0.035em\",\n    fontVariantNumeric: \"tabular-nums\",\n  });\n  figure.append(el(\"span\", { color: WHITE }, amount), el(\"span\", { color: SOFT, fontSize: \"28px\", letterSpacing: \"-0.02em\" }, asset));\n  wrap.append(figure);\n  return wrap;\n}\n\nexport interface Detail {\n  label: string;\n  value: string;\n  /** Shown on hover and selectable in full, when `value` is shortened. */\n  full?: string;\n  mono?: boolean;\n}\n\n/** Label and value pairs separated by hairlines, no box. */\nexport function details(rows: Detail[]): HTMLDListElement {\n  const list = el(\"dl\", { margin: \"0\" });\n  for (const row of rows) {\n    const line = el(\"div\", {\n      display: \"flex\",\n      justifyContent: \"space-between\",\n      alignItems: \"baseline\",\n      gap: \"16px\",\n      padding: \"12px 0\",\n      borderTop: `1px solid ${HAIRLINE}`,\n    });\n    const value = el(\"dd\", {\n      margin: \"0\",\n      fontSize: row.mono ? \"13px\" : \"14px\",\n      fontFamily: row.mono ? MONO : \"inherit\",\n      fontWeight: \"500\",\n      color: WHITE,\n      textAlign: \"right\",\n      minWidth: \"0\",\n      overflowWrap: \"anywhere\",\n      userSelect: \"all\",\n    }, row.value);\n    if (row.full) value.title = row.full;\n    line.append(el(\"dt\", { fontSize: \"14px\", color: SOFT, flexShrink: \"0\" }, row.label), value);\n    list.append(line);\n  }\n  return list;\n}\n\nexport function shortAddress(address: string): string {\n  return address.length > 16 ? `${address.slice(0, 6)}…${address.slice(-6)}` : address;\n}\n\n/** For screens whose headline is the amount: the h1 stays for screen readers but reads as a label. */\nexport function quietTitle(title: HTMLElement): void {\n  Object.assign(title.style, { fontSize: \"14px\", fontWeight: \"500\", letterSpacing: \"0\", color: SOFT, margin: \"0 0 6px\" });\n}\n\nexport function caption(text: string): HTMLParagraphElement {\n  const node = el(\"p\", { margin: \"16px 0 0\", fontSize: \"13px\", lineHeight: \"1.45\", color: SOFT }, text);\n  node.style.setProperty(\"text-wrap\", \"pretty\");\n  return node;\n}\n","import type { Line } from \"./policy\";\nimport { amountHero, caption, details, el, quietTitle, shortAddress, type Detail, type Sheet } from \"./ui\";\n\n/** What the user is asked to approve, the same in the vault frame and in the Cavos window. */\nexport function renderReview(view: Sheet, lines: Line[], network: string, app: string): void {\n  const context: Detail[] = [\n    { label: \"App\", value: app },\n    { label: \"Network\", value: network },\n  ];\n  const [first] = lines;\n  if (lines.length === 1 && first.kind === \"send\") {\n    view.title.textContent = \"Send\";\n    quietTitle(view.title);\n    view.body.append(\n      amountHero(first.amount, first.asset),\n      details([{ label: \"To\", value: shortAddress(first.to), full: first.to, mono: true }, ...context]),\n    );\n  } else {\n    view.title.textContent = \"Approve this transaction\";\n    view.body.append(el(\"div\", { height: \"16px\" }), details([...lines.map(lineDetail), ...context]));\n  }\n  view.body.append(caption(\"Cavos signs small amounts on its own. This one needs you.\"));\n}\n\nfunction lineDetail(line: Line): Detail {\n  if (line.kind === \"send\") {\n    return { label: `Send ${line.amount} ${line.asset}`, value: shortAddress(line.to), full: line.to, mono: true };\n  }\n  return line.target\n    ? { label: line.text, value: shortAddress(line.target), full: line.target, mono: true }\n    : { label: line.text, value: \"\" };\n}\n\nexport function hostOf(origin: string): string {\n  try {\n    return new URL(origin).host;\n  } catch {\n    return origin;\n  }\n}\n\n/** Intersection Observer v2 can tell whether the page covers or fades the frame. */\nexport function canTrackVisibility(): boolean {\n  return typeof IntersectionObserverEntry !== \"undefined\" && \"isVisible\" in IntersectionObserverEntry.prototype;\n}\n","import { PasskeyPrf } from \"../chains/stellar/PasskeyPrf\";\nimport type { PasskeyPrfProvider } from \"../signer/PasskeyProvider\";\nimport { POPUP_READY, POPUP_RESULT, type PopupIntent, type PopupResult } from \"./protocol\";\nimport type { Line } from \"./policy\";\nimport { canTrackVisibility, hostOf, renderReview } from \"./review\";\nimport { armableButton, button, el, setEnabled, sheet, type Armable, type Sheet } from \"./ui\";\n\n/** Approve fills in over this long once the modal is seen, so a click aimed at something else cannot land on it. */\nconst ARM_MS = 700;\n\ntype Secret = { secret: Uint8Array; credentialId?: Uint8Array };\n\n/** The vault's own UI, drawn inside its iframe over the embedding app. */\nexport class VaultModal {\n  private queue: Promise<unknown> = Promise.resolve();\n\n  constructor(\n    private readonly origin: string,\n    private readonly confirmUrl: string,\n    private readonly setVisible: (visible: boolean) => void,\n  ) {}\n\n  review(lines: Line[], network: string): Promise<boolean> {\n    return this.serial(() => this.showReview(lines, network));\n  }\n\n  passkey(user: { userId: string; userName: string }): PasskeyPrfProvider {\n    return {\n      enroll: async () => {\n        const { secret, credentialId } = await this.serial(() => this.showPasskey(user, { create: true }));\n        if (!credentialId) throw new Error(\"kit/vault: the new passkey has no credential id\");\n        return { credentialId, secret };\n      },\n      getSecret: async (credentialId) =>\n        (await this.serial(() => this.showPasskey(user, { create: false, credentialId }))).secret,\n    };\n  }\n\n  private serial<T>(show: () => Promise<T>): Promise<T> {\n    const run = this.queue.then(show);\n    this.queue = run.catch(() => undefined);\n    return run;\n  }\n\n  private async open(): Promise<Sheet> {\n    this.setVisible(true);\n    await viewportReady();\n    return sheet({ overlay: true });\n  }\n\n  private async dismiss(view: Sheet): Promise<void> {\n    await view.close();\n    this.setVisible(false);\n  }\n\n  private async showReview(lines: Line[], network: string): Promise<boolean> {\n    const view = await this.open();\n    renderReview(view, lines, network, hostOf(this.origin));\n    return new Promise((resolve) => {\n      const reject = button(\"Reject\", \"secondary\");\n      let settled = false;\n      let unguard = () => {};\n      const finish = async (approved: boolean) => {\n        if (settled) return;\n        settled = true;\n        unguard();\n        document.removeEventListener(\"keydown\", onKey);\n        await this.dismiss(view);\n        resolve(approved);\n      };\n      const onKey = (event: KeyboardEvent) => {\n        if (event.key === \"Escape\") void finish(false);\n      };\n      document.addEventListener(\"keydown\", onKey);\n      reject.onclick = () => void finish(false);\n\n      const approve = armableButton(\"Approve\");\n      view.actions.append(approve.node, reject);\n      approve.node.onclick = () => void finish(true);\n      // Where the browser can tell (Intersection Observer v2), Approve arms only\n      // while the page is not covering or fading the frame. Elsewhere (Safari)\n      // it cannot, and the arming delay is the only guard against a click aimed\n      // at something else.\n      if (canTrackVisibility()) unguard = guard(view.card, approve);\n      else approve.arm(ARM_MS);\n    });\n  }\n\n  /** `create` adds a passkey to a wallet; otherwise an existing passkey opens it on this device. */\n  private async showPasskey(\n    user: { userId: string; userName: string },\n    mode: { create: boolean; credentialId?: Uint8Array },\n  ): Promise<Secret> {\n    const { create: creating, credentialId } = mode;\n    const view = await this.open();\n    return new Promise((resolve, reject) => {\n      view.title.textContent = creating ? \"Add a passkey\" : \"Verify it's you\";\n      const message = el(\n        \"span\",\n        {},\n        creating\n          ? \"Your passkey will open this wallet on your other devices.\"\n          : \"Use your passkey to continue on this device.\",\n      );\n      view.body.append(message);\n\n      const passkeys = new PasskeyPrf({ rpName: \"Cavos\" });\n      const use = button(\"Use passkey\", \"primary\");\n      const create = button(\"Create passkey\", \"primary\");\n      const cancel = button(\"Cancel\", \"quiet\");\n      view.actions.append(creating ? create : use, cancel);\n\n      let settled = false;\n      const finish = async (result: Secret | Error) => {\n        if (settled) return;\n        settled = true;\n        await this.dismiss(view);\n        if (result instanceof Error) reject(result);\n        else resolve(result);\n      };\n      const attempt = async (run: () => Promise<Secret>) => {\n        [use, create].forEach((b) => setEnabled(b, false));\n        try {\n          await finish(await run());\n        } catch {\n          // Some browsers refuse passkeys inside a cross-site frame; a Cavos window always works.\n          message.textContent = \"Your browser needs a Cavos window to use your passkey.\";\n          const fallback = button(\"Continue in a Cavos window\", \"primary\");\n          fallback.onclick = () =>\n            this.popup({ kind: \"passkey\", ...user, create: creating, credentialId }).then(\n              (result) => finish(\"secret\" in result ? result : new Error(\"error\" in result ? result.error : \"kit/vault: cancelled\")),\n              (error: Error) => finish(error),\n            );\n          view.actions.replaceChildren(fallback, cancel);\n          fallback.focus({ preventScroll: true });\n        }\n      };\n\n      use.onclick = () => attempt(async () => ({ secret: await passkeys.getSecret(credentialId), credentialId }));\n      create.onclick = () =>\n        attempt(async () => {\n          const enrolled = await passkeys.enroll(user);\n          const secret = enrolled.secret ?? (await passkeys.getSecret(enrolled.credentialId));\n          return { secret, credentialId: enrolled.credentialId };\n        });\n      cancel.onclick = () => void finish(new Error(\"kit/vault: cancelled\"));\n    });\n  }\n\n  private popup(intent: PopupIntent): Promise<PopupResult> {\n    return new Promise((resolve, reject) => {\n      const popup = window.open(this.confirmUrl, \"cavos-vault\", \"popup,width=420,height=560\");\n      if (!popup) {\n        reject(new Error(\"kit/vault: allow pop-ups for this site and try again\"));\n        return;\n      }\n      const timer = setInterval(() => {\n        if (popup.closed) done({ error: \"kit/vault: the Cavos window was closed\" });\n      }, 400);\n      const onMessage = (event: MessageEvent) => {\n        if (event.source !== popup || event.origin !== location.origin) return;\n        if (event.data?.type === POPUP_READY) popup.postMessage(intent, location.origin);\n        if (event.data?.type === POPUP_RESULT) done(event.data.result as PopupResult);\n      };\n      const done = (result: PopupResult) => {\n        clearInterval(timer);\n        window.removeEventListener(\"message\", onMessage);\n        resolve(result);\n      };\n      window.addEventListener(\"message\", onMessage);\n    });\n  }\n}\n\n/** The frame is display:none until the app reveals it, and a hidden frame has no width to lay out against. */\nfunction viewportReady(): Promise<void> {\n  return new Promise((resolve) => {\n    const check = () => (window.innerWidth > 0 ? resolve() : requestAnimationFrame(check));\n    check();\n  });\n}\n\n/**\n * Arms Approve only while the modal is actually on screen: covering or fading\n * the frame from the embedding page disarms it and the fill starts over.\n */\nfunction guard(target: Element, approve: Armable): () => void {\n  let visible = false;\n  const observer = new IntersectionObserver(\n    ([entry]) => {\n      const now = (entry as IntersectionObserverEntry & { isVisible?: boolean }).isVisible === true;\n      if (now === visible) return;\n      visible = now;\n      if (visible) approve.arm(ARM_MS);\n      else approve.disarm();\n    },\n    { threshold: [0], trackVisibility: true, delay: 100 } as IntersectionObserverInit,\n  );\n  observer.observe(target);\n  return () => observer.disconnect();\n}\n","import { SystemProgram, VersionedMessage, type MessageCompiledInstruction } from \"@solana/web3.js\";\nimport { emptyParsed, flag, formatUnits, short, type ParsedTx } from \"./policy\";\n\nconst SYSTEM_PROGRAM = SystemProgram.programId.toBase58();\nconst COMPUTE_BUDGET = \"ComputeBudget111111111111111111111111111111\";\nconst MEMO = \"MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr\";\nconst ASSOCIATED_TOKEN = \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\";\nconst TOKEN_PROGRAMS = new Set([\n  \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\",\n  \"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb\",\n]);\nconst TOKEN_SYMBOLS: Record<string, string> = {\n  EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v: \"USDC\",\n  \"4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU\": \"USDC\",\n};\nconst SYSTEM_TRANSFER = 2;\nconst TOKEN_TRANSFER_CHECKED = 12;\nconst SET_COMPUTE_UNIT_LIMIT = 2;\nconst SET_COMPUTE_UNIT_PRICE = 3;\nconst LAMPORTS_PER_SIGNATURE = 5_000n;\nconst DEFAULT_UNITS_PER_INSTRUCTION = 200_000n;\nconst MAX_UNITS = 1_400_000n;\n/** Rent-exempt minimum of a 165-byte token account; Token-2022 extensions can cost more. */\nconst TOKEN_ACCOUNT_RENT = 2_039_280n;\n\n/**\n * Only instructions that list the account can use its signature, and within\n * them only the roles below are understood. The account anywhere else, or any\n * program not listed here, is outside every limit.\n */\nexport function parseSolanaMessage(bytes: Uint8Array, account: string): ParsedTx {\n  const tx = emptyParsed();\n  let message: VersionedMessage;\n  try {\n    message = VersionedMessage.deserialize(bytes);\n  } catch {\n    flag(tx, \"Unreadable transaction\");\n    return tx;\n  }\n  const keys = message.staticAccountKeys.map((key) => key.toBase58());\n  const self = keys.indexOf(account);\n  if (self < 0) {\n    flag(tx, \"Transaction does not involve this account\");\n    return tx;\n  }\n\n  for (const ix of message.compiledInstructions) {\n    const program = keys[ix.programIdIndex];\n    const roles = ix.accountKeyIndexes.flatMap((index, position) => (index === self ? [position] : []));\n    if (program === COMPUTE_BUDGET || roles.length === 0 || program === MEMO) continue;\n    const accounts = ix.accountKeyIndexes.map((index) => keys[index]);\n\n    if (program === SYSTEM_PROGRAM && readU32(ix.data, 0) === SYSTEM_TRANSFER && ix.data.length >= 12) {\n      if (same(roles, [1])) continue;\n      if (!same(roles, [0])) {\n        flag(tx, \"Use this account in a system instruction\");\n        continue;\n      }\n      const lamports = readU64(ix.data, 4);\n      tx.spends.push({ asset: \"SOL\", amount: lamports, decimals: 9 });\n      tx.lines.push({ kind: \"send\", amount: formatUnits(lamports, 9), asset: \"SOL\", to: accounts[1] ?? \"unknown\" });\n    } else if (program && TOKEN_PROGRAMS.has(program) && ix.data[0] === TOKEN_TRANSFER_CHECKED && ix.data.length >= 10) {\n      const [, mint, destination] = accounts;\n      if (!same(roles, [3]) || !mint) {\n        flag(tx, \"Use this account in a token instruction\");\n        continue;\n      }\n      const amount = readU64(ix.data, 1);\n      tx.spends.push({ asset: mint, amount, decimals: ix.data[9] });\n      tx.lines.push({\n        kind: \"send\",\n        amount: formatUnits(amount, ix.data[9]),\n        asset: TOKEN_SYMBOLS[mint] ?? short(mint),\n        to: destination ?? \"unknown\",\n      });\n    } else if (program === ASSOCIATED_TOKEN && isAtaCreate(ix) && roles.every((role) => role === 0 || role === 2)) {\n      if (roles.includes(0)) {\n        tx.spends.push({ asset: \"SOL\", amount: TOKEN_ACCOUNT_RENT, decimals: 9 });\n        tx.lines.push({ kind: \"action\", text: `Open a token account (${formatUnits(TOKEN_ACCOUNT_RENT, 9)} SOL)` });\n      }\n    } else {\n      flag(tx, \"Call a program\", program);\n    }\n  }\n\n  if (self === 0) readFee(message, tx);\n  return tx;\n}\n\n/** The fee payer is the first key. Its fee is a spend like any other. */\nfunction readFee(message: VersionedMessage, tx: ParsedTx): void {\n  let price = 0n;\n  let limit: bigint | undefined;\n  let counted = 0n;\n  for (const ix of message.compiledInstructions) {\n    if (message.staticAccountKeys[ix.programIdIndex]?.toBase58() !== COMPUTE_BUDGET) {\n      counted += 1n;\n      continue;\n    }\n    if (ix.data[0] === SET_COMPUTE_UNIT_LIMIT && ix.data.length >= 5) limit = BigInt(readU32(ix.data, 1) ?? 0);\n    if (ix.data[0] === SET_COMPUTE_UNIT_PRICE && ix.data.length >= 9) price = readU64(ix.data, 1);\n  }\n  const defaultUnits = counted * DEFAULT_UNITS_PER_INSTRUCTION;\n  const units = limit ?? (defaultUnits < MAX_UNITS ? defaultUnits : MAX_UNITS);\n  const priority = (price * units + 999_999n) / 1_000_000n;\n  const fee = LAMPORTS_PER_SIGNATURE * BigInt(message.header.numRequiredSignatures) + priority;\n  tx.spends.push({ asset: \"SOL\", amount: fee, decimals: 9 });\n  if (priority > 0n) tx.lines.push({ kind: \"action\", text: `Network fee ${formatUnits(fee, 9)} SOL` });\n}\n\nfunction isAtaCreate(ix: MessageCompiledInstruction): boolean {\n  return ix.data.length === 0 || (ix.data.length === 1 && (ix.data[0] === 0 || ix.data[0] === 1));\n}\n\nfunction same(a: number[], b: number[]): boolean {\n  return a.length === b.length && a.every((value, index) => value === b[index]);\n}\n\nfunction readU32(data: Uint8Array, offset: number): number | undefined {\n  if (data.length < offset + 4) return undefined;\n  return new DataView(data.buffer, data.byteOffset, data.byteLength).getUint32(offset, true);\n}\n\nfunction readU64(data: Uint8Array, offset: number): bigint {\n  return new DataView(data.buffer, data.byteOffset, data.byteLength).getBigUint64(offset, true);\n}\n","import { Address, FeeBumpTransaction, TransactionBuilder, xdr, type Asset } from \"@stellar/stellar-sdk\";\nimport { emptyParsed, flag, parseUnits, type ParsedTx } from \"./policy\";\n\nconst QUIET_OPS = new Set([\"changeTrust\", \"manageData\", \"endSponsoringFutureReserves\", \"bumpSequence\"]);\n\nconst OP_LABELS: Record<string, string> = {\n  setOptions: \"Change the account's signers or thresholds\",\n  accountMerge: \"Close the account and move its balance\",\n  beginSponsoringFutureReserves: \"Pay reserves for another account\",\n};\n\n/** Only operations sourced from the account can use its signature. */\nexport function parseStellarTransaction(\n  envelope: string,\n  networkPassphrase: string,\n  account: string,\n): ParsedTx {\n  const parsed = emptyParsed();\n  let tx = TransactionBuilder.fromXDR(envelope, networkPassphrase);\n  if (tx instanceof FeeBumpTransaction) {\n    if (tx.feeSource === account) flag(parsed, \"Pay the network fee for another transaction\");\n    tx = tx.innerTransaction;\n  }\n\n  for (const op of tx.operations) {\n    if ((op.source ?? tx.source) !== account) continue;\n    switch (op.type) {\n      case \"payment\":\n        parsed.spends.push({ asset: assetId(op.asset), amount: stroops(op.amount), decimals: 7 });\n        parsed.lines.push({ kind: \"send\", amount: trimAmount(op.amount), asset: assetCode(op.asset), to: op.destination });\n        break;\n      case \"createAccount\":\n        parsed.spends.push({ asset: \"XLM\", amount: stroops(op.startingBalance), decimals: 7 });\n        parsed.lines.push({ kind: \"send\", amount: trimAmount(op.startingBalance), asset: \"XLM\", to: op.destination });\n        break;\n      case \"invokeHostFunction\":\n        readHostFunction(parsed, op.func);\n        break;\n      default:\n        if (!QUIET_OPS.has(op.type)) flag(parsed, OP_LABELS[op.type] ?? `Stellar operation ${op.type}`);\n    }\n  }\n  return parsed;\n}\n\nexport function parseStellarAuthEntry(preimageXdr: Uint8Array): ParsedTx {\n  const parsed = emptyParsed();\n  const preimage = xdr.HashIdPreimage.fromXDR(Buffer.from(preimageXdr));\n  if (preimage.switch() !== xdr.EnvelopeType.envelopeTypeSorobanAuthorization()) {\n    flag(parsed, \"Unknown authorization\");\n    return parsed;\n  }\n  readInvocation(parsed, preimage.sorobanAuthorization().invocation());\n  return parsed;\n}\n\nfunction readInvocation(parsed: ParsedTx, invocation: xdr.SorobanAuthorizedInvocation): void {\n  const fn = invocation.function();\n  if (fn.switch() === xdr.SorobanAuthorizedFunctionType.sorobanAuthorizedFunctionTypeContractFn()) {\n    const call = fn.contractFn();\n    readContractCall(parsed, call.contractAddress(), call.functionName().toString());\n  } else {\n    flag(parsed, \"Deploy a contract\");\n  }\n  for (const sub of invocation.subInvocations()) readInvocation(parsed, sub);\n}\n\nfunction readHostFunction(parsed: ParsedTx, func: xdr.HostFunction): void {\n  if (func.switch() !== xdr.HostFunctionType.hostFunctionTypeInvokeContract()) {\n    flag(parsed, \"Deploy or upload a contract\");\n    return;\n  }\n  const call = func.invokeContract();\n  readContractCall(parsed, call.contractAddress(), call.functionName().toString());\n}\n\nfunction readContractCall(parsed: ParsedTx, address: xdr.ScAddress, method: string): void {\n  flag(parsed, `Call ${method}`, Address.fromScAddress(address).toString());\n}\n\nfunction assetId(asset: Asset): string {\n  return asset.isNative() ? \"XLM\" : `${asset.getCode()}:${asset.getIssuer()}`;\n}\n\nfunction assetCode(asset: Asset): string {\n  return asset.isNative() ? \"XLM\" : asset.getCode();\n}\n\nfunction trimAmount(amount: string): string {\n  return amount.includes(\".\") ? amount.replace(/\\.?0+$/, \"\") : amount;\n}\n\nfunction stroops(amount: string): bigint {\n  return parseUnits(amount, 7);\n}\n","/** What happens to a transaction the limits do not cover. */\nexport type OverLimit = \"ask\" | \"block\" | \"sign\";\n\n/**\n * A cap for one asset, in whole units as a person writes them (\"0.5\").\n * `asset` is \"SOL\", \"XLM\", a Solana mint, a Stellar \"CODE:ISSUER\", or on\n * Starknet one of \"ETH\", \"STRK\", \"USDC\".\n */\nexport interface VaultLimit {\n  chain: \"solana\" | \"stellar\" | \"starknet\";\n  asset: string;\n  perTx: string;\n  perDay: string;\n}\n\n/** Set per app in the Cavos dashboard and read by the vault from Cavos, never from the app. */\nexport interface VaultPolicy {\n  overLimit: OverLimit;\n  limits: VaultLimit[];\n}\n\n/** Used when the app's policy cannot be read: nothing is signed without the user. */\nexport const STRICT_POLICY: VaultPolicy = { overLimit: \"ask\", limits: [] };\n","import type { ControlKey } from \"../chains/stellar/WebCryptoControlKey\";\nimport { STARKNET_NETWORKS, type StarknetNetwork } from \"../chains/starknet/constants\";\nimport { resolveNativeStarknet, type StarknetSpend } from \"../chains/starknet/nativeConnect\";\nimport { parseStarknetPrivacyConfig, type StarknetPrivacyConfig } from \"../chains/starknet/privacy/config\";\nimport type { PrivacySdk } from \"../chains/starknet/privacy/sdk\";\nimport { PrivacySession, type PrivacySessionDeps } from \"../chains/starknet/privacy/session\";\nimport { resolveNativeSolana } from \"../chains/solana/nativeConnect\";\nimport { resolveNativeStellar } from \"../chains/stellar/nativeConnect\";\nimport { DEFAULT_SOCIAL_RECOVERY_ATTESTATION } from \"../recovery/attestationDefaults\";\nimport { SocialRecoveryClient, type AttestationPolicy } from \"../recovery/SocialRecoveryClient\";\nimport { HttpWalletRegistry } from \"../registry/HttpWalletRegistry\";\nimport type { ResolveNativeInput } from \"../secret/nativeAccount\";\nimport { zeroize, type MasterDEK } from \"../secret/dek\";\nimport { readLocalDek, type LocalDekInput } from \"../secret/localDek\";\nimport { addPasskey } from \"../secret/PasskeyDekPort\";\nimport { HttpPasskeyWrapStore, type PasskeyWrapStore } from \"../registry/PasskeyWrapStore\";\nimport type { Ed25519SpendSigner } from \"../signer/Ed25519SpendSigner\";\nimport type { PasskeyPrfProvider } from \"../signer/PasskeyProvider\";\nimport { bigIntTo32Bytes } from \"../crypto/encoding\";\nimport { solanaNetworkName, starknetNetworkName, stellarNetworkName, stellarNetworkNameFromId } from \"./network\";\nimport { VersionedMessage } from \"@solana/web3.js\";\nimport { Signer, stark, type Signature } from \"starknet\";\nimport { xdr } from \"@stellar/stellar-sdk\";\nimport {\n  isQueryVersion,\n  parseStarknetCalls,\n  parseStarknetPrivacy,\n  parseStarknetTypedData,\n  selectorOf,\n  type StarknetPrivacyOperation,\n} from \"./parseStarknet\";\nimport { idbLedger, type SpendLedger } from \"./ledger\";\nimport { VaultModal } from \"./modal\";\nimport { parseSolanaMessage } from \"./parseSolana\";\nimport { parseStellarAuthEntry, parseStellarTransaction } from \"./parseStellar\";\nimport { STRICT_POLICY, type VaultPolicy } from \"./limits\";\nimport { evaluate, totals, type Line, type ParsedTx } from \"./policy\";\nimport {\n  VAULT_HELLO,\n  VAULT_READY,\n  type ConnectParams,\n  type ConnectResult,\n  type VaultMethod,\n  type VaultParams,\n  type VaultRequest,\n} from \"./protocol\";\n\ntype NativeBase = Omit<ResolveNativeInput, \"chain\" | \"importSpend\" | \"loadPersisted\">;\n\nexport interface VaultHandlerDeps {\n  appId: string;\n  backendUrl: string;\n  attestation?: AttestationPolicy;\n  policy: VaultPolicy;\n  ledger: SpendLedger;\n  confirm(lines: Line[], context: { network: string }): Promise<boolean>;\n  passkey(user: { userId: string; userName: string }): PasskeyPrfProvider;\n  passkeyWraps?: (auth: { environment?: \"development\" | \"production\"; authToken?: string | null }) => PasskeyWrapStore;\n  readDek?: (input: LocalDekInput) => Promise<MasterDEK>;\n  resolveSolana?: (input: NativeBase) => Promise<{ address: string; spend: Ed25519SpendSigner | null; isNewAccount: boolean }>;\n  resolveStellar?: (input: NativeBase) => Promise<{ address: string; control?: ControlKey; isNewAccount: boolean }>;\n  resolveStarknet?: (input: NativeBase) => Promise<{ address: string; spend: StarknetSpend | null; isNewAccount: boolean }>;\n  solanaNetwork?: (recentBlockhash: string) => Promise<string>;\n  /** Private transfer settings of the app for a network (\"sepolia\", \"mainnet\"), from the Cavos dashboard. Throws on an invalid one. */\n  privacy?: (network: string) => StarknetPrivacyConfig | undefined;\n  /** Loads the privacy SDK. Only a vault build that bundles it passes one. */\n  privacySdk?: () => Promise<PrivacySdk>;\n  privacyDeps?: PrivacySessionDeps;\n}\n\ninterface Account {\n  userId: string;\n  address: string;\n  network: string;\n  solana?: Ed25519SpendSigner;\n  stellar?: ControlKey;\n  starknet?: StarknetSpend;\n  privacy?: PrivacySession;\n  paymasterApiKey?: string;\n}\n\nexport function createVaultHandler(deps: VaultHandlerDeps): (request: VaultRequest) => Promise<unknown> {\n  const accounts = new Map<string, Account>();\n  const resolveSolana = deps.resolveSolana ?? resolveNativeSolana;\n  const resolveStellar = deps.resolveStellar ?? resolveNativeStellar;\n  const resolveStarknet = deps.resolveStarknet ?? resolveNativeStarknet;\n  const readDek = deps.readDek ?? readLocalDek;\n  const passkeyWraps =\n    deps.passkeyWraps ??\n    ((auth) =>\n      new HttpPasskeyWrapStore({\n        baseUrl: deps.backendUrl,\n        appId: deps.appId,\n        ...(auth.environment ? { environment: auth.environment } : {}),\n        authToken: () => auth.authToken ?? null,\n      }));\n  const solanaNetwork = deps.solanaNetwork ?? ((blockhash: string) => solanaNetworkName(blockhash));\n  // Every key, wrap and counter is filed under the app that embedded the vault,\n  // so a second app on the same site cannot reach them with its own policy.\n  const scope = deps.appId;\n  const queues = new Map<string, Promise<unknown>>();\n\n  async function connect(params: ConnectParams): Promise<ConnectResult> {\n    const handle = `${params.chain}:${params.userId}:${params.appSalt}`;\n    const wraps = params.recovery === \"passkey\" ? passkeyWraps(params) : undefined;\n    const input: NativeBase = {\n      identity: { userId: params.userId, ...(params.userName ? { email: params.userName } : {}) },\n      appSalt: params.appSalt,\n      keyScope: scope,\n      registry: new HttpWalletRegistry({\n        baseUrl: deps.backendUrl,\n        appId: deps.appId,\n        network: params.network,\n        ...(params.environment ? { environment: params.environment } : {}),\n        authToken: () => params.authToken ?? null,\n      }),\n      ...(params.credential ? { credential: params.credential } : {}),\n      ...(params.recovery === \"enclave\"\n        ? {\n            socialRecovery: new SocialRecoveryClient({\n              baseUrl: deps.backendUrl,\n              appId: deps.appId,\n              environment: params.environment,\n              attestation: deps.attestation ?? DEFAULT_SOCIAL_RECOVERY_ATTESTATION,\n            }),\n          }\n        : {}),\n      ...(wraps\n        ? {\n            passkey: deps.passkey({ userId: params.userId, userName: params.userName ?? params.userId }),\n            passkeyWraps: wraps,\n            appId: scope,\n          }\n        : {}),\n    };\n    // Read after connect, so a device that just restored from a passkey says so.\n    const hasPasskey = async () => {\n      if (!wraps) return false;\n      try {\n        return (await wraps.list(params.userId)).length > 0;\n      } catch {\n        return false;\n      }\n    };\n    if (params.chain === \"solana\") {\n      const native = await resolveSolana(input);\n      accounts.set(handle, { userId: params.userId, address: native.address, network: params.network, solana: native.spend ?? undefined });\n      return {\n        handle,\n        address: native.address,\n        publicKey: native.spend?.publicKeyRaw() ?? null,\n        isNewAccount: native.isNewAccount,\n        passkey: await hasPasskey(),\n      };\n    }\n    if (params.chain === \"starknet\") {\n      const native = await resolveStarknet(input);\n      accounts.set(handle, { userId: params.userId, address: native.address, network: params.network, starknet: native.spend ?? undefined });\n      return {\n        handle,\n        address: native.address,\n        publicKey: native.spend ? bigIntTo32Bytes(BigInt(native.spend.publicKey())) : null,\n        isNewAccount: native.isNewAccount,\n        passkey: await hasPasskey(),\n      };\n    }\n    const native = await resolveStellar(input);\n    accounts.set(handle, { userId: params.userId, address: native.address, network: params.network, stellar: native.control });\n    return {\n      handle,\n      address: native.address,\n      publicKey: native.control?.publicKeyRaw() ?? null,\n      isNewAccount: native.isNewAccount,\n      passkey: await hasPasskey(),\n    };\n  }\n\n  function account(handle: string): Account {\n    const found = accounts.get(handle);\n    if (!found) throw new Error(\"kit/vault: unknown account, connect first\");\n    return found;\n  }\n\n  /** One signature per user at a time: the daily total is read, checked and recorded as one step. */\n  function exclusive<T>(key: string, run: () => Promise<T>): Promise<T> {\n    const next = (queues.get(key) ?? Promise.resolve()).then(run, run);\n    queues.set(key, next.catch(() => undefined));\n    return next;\n  }\n\n  function authorizeAndSign<T>(\n    acct: Account,\n    parsed: ParsedTx,\n    network: () => Promise<string>,\n    sign: () => Promise<T>,\n  ): Promise<T> {\n    const ledgerKey = `${scope}|${acct.userId}`;\n    return exclusive(ledgerKey, async () => {\n      const spent = new Map<string, bigint>();\n      for (const asset of totals(parsed.spends).keys()) {\n        spent.set(asset, await deps.ledger.spentToday(ledgerKey, asset));\n      }\n      const decision = evaluate(parsed, spent, deps.policy);\n      if (decision === \"block\") throw new Error(\"kit/vault: this app's policy does not allow this transaction\");\n      if (decision === \"confirm\" && !(await deps.confirm(parsed.lines, { network: await network() }))) {\n        throw new Error(\"kit/vault: the user rejected this transaction\");\n      }\n      const signature = await sign();\n      // The daily limit caps what is signed without asking; what the user approved does not use it up.\n      if (decision === \"sign\") await deps.ledger.record(ledgerKey, parsed.spends);\n      return signature;\n    });\n  }\n\n  function privacySession(acct: Account, paymasterApiKey: string | undefined): { session: PrivacySession; config: StarknetPrivacyConfig; chainId: string } {\n    const spend = requireKey(acct.starknet);\n    const network = STARKNET_NETWORKS[acct.network as StarknetNetwork];\n    if (!network) throw new Error(\"kit/vault: private transfers are only available on Starknet\");\n    const config = deps.privacy?.(acct.network);\n    if (!config) {\n      throw new Error(`kit/vault: add private transfer settings for ${acct.network} to this app in the Cavos dashboard`);\n    }\n    if (paymasterApiKey !== undefined) acct.paymasterApiKey = paymasterApiKey;\n    acct.privacy ??= new PrivacySession({\n      config,\n      chainId: network.chainId,\n      rpcUrl: network.rpcUrl,\n      account: { address: acct.address, spend },\n      paymasterApiKey: () => {\n        if (!acct.paymasterApiKey) throw new Error(\"kit/vault: private transfers need the paymaster API key\");\n        return acct.paymasterApiKey;\n      },\n      loadSdk: deps.privacySdk ?? (() => Promise.reject(new Error(\"kit/vault: this vault build cannot run private transfers\"))),\n      ...(deps.privacyDeps ? { deps: deps.privacyDeps } : {}),\n    });\n    return { session: acct.privacy, config, chainId: network.chainId };\n  }\n\n  async function privacyOperation(\n    params: { handle: string; token: string; amount: string; paymasterApiKey: string; recipient?: string },\n    kind: StarknetPrivacyOperation[\"kind\"],\n    run: (session: PrivacySession, amount: bigint) => Promise<unknown>,\n  ): Promise<unknown> {\n    const acct = account(params.handle);\n    const { session, config, chainId } = privacySession(acct, params.paymasterApiKey);\n    const amount = baseUnits(params.amount);\n    const to = kind === \"deposit\" ? config.pool : params.recipient;\n    const parsed = parseStarknetPrivacy({ kind, token: address(params.token, \"token\"), amount, to: address(to, \"recipient\") });\n    const start = await authorizeAndSign(acct, parsed, async () => starknetNetworkName(chainId), async () => () => run(session, amount));\n    return start();\n  }\n\n  const methods: { [M in VaultMethod]: (params: VaultParams<M>) => Promise<unknown> } = {\n    connect,\n    async signSolanaTransaction({ handle, message }) {\n      const acct = account(handle);\n      const signer = requireKey(acct.solana);\n      const parsed = parseSolanaMessage(message, acct.address);\n      return authorizeAndSign(acct, parsed, () => solanaNetwork(recentBlockhash(message)), () =>\n        signer.signTransaction(message),\n      );\n    },\n    async signStellarTransaction({ handle, xdr, networkPassphrase }) {\n      const acct = account(handle);\n      const signer = requireKey(acct.stellar);\n      const network = stellarNetworkName(networkPassphrase);\n      const parsed = parseStellarTransaction(xdr, networkPassphrase, acct.address);\n      return authorizeAndSign(acct, parsed, async () => network, () => signer.signTransaction(xdr, networkPassphrase));\n    },\n    async signStellarAuthEntry({ handle, preimage }) {\n      const acct = account(handle);\n      const signer = requireKey(acct.stellar);\n      const parsed = parseStellarAuthEntry(preimage);\n      const network = stellarNetworkNameFromId(stellarAuthNetworkId(preimage));\n      return authorizeAndSign(acct, parsed, async () => network, () => signer.signAuthEntry(preimage));\n    },\n    async signMessage({ handle, message }) {\n      const acct = account(handle);\n      return requireKey(acct.solana ?? acct.stellar).signMessage(message);\n    },\n    async signStarknetTypedData({ handle, typedData, accountAddress }) {\n      const acct = account(handle);\n      const signer = new Signer(requireKey(acct.starknet).privateKey());\n      const network = starknetNetworkName(typedData.domain.chainId);\n      return authorizeAndSign(acct, parseStarknetTypedData(typedData, accountAddress), async () => network, async () =>\n        toFelts(await signer.signMessage(typedData, accountAddress)),\n      );\n    },\n    async signStarknetInvoke({ handle, calls, details }) {\n      const acct = account(handle);\n      const signer = new Signer(requireKey(acct.starknet).privateKey());\n      const sign = async () => toFelts(await signer.signTransaction(calls, details));\n      if (isQueryVersion(details.version)) return sign();\n      const network = starknetNetworkName(details.chainId);\n      const parsed = parseStarknetCalls(\n        calls.map((call) => ({\n          to: call.contractAddress,\n          selector: selectorOf(call.entrypoint),\n          calldata: ((call.calldata ?? []) as unknown[]).map(String),\n        })),\n        details.walletAddress,\n      );\n      return authorizeAndSign(acct, parsed, async () => network, sign);\n    },\n    async privacyStatus({ handle, token }) {\n      return privacySession(account(handle), undefined).session.status(token);\n    },\n    async privacyBalance({ handle, token }) {\n      return (await privacySession(account(handle), undefined).session.balance(token)).toString();\n    },\n    async privacyRegister({ handle, paymasterApiKey }) {\n      return privacySession(account(handle), paymasterApiKey).session.register();\n    },\n    async privacyDeposit(params) {\n      return privacyOperation(params, \"deposit\", (session, amount) => session.deposit(params.token, amount));\n    },\n    async privacyTransfer(params) {\n      return privacyOperation(params, \"transfer\", (session, amount) => session.transfer(params.token, params.recipient, amount));\n    },\n    async privacyWithdraw(params) {\n      return privacyOperation(params, \"withdraw\", (session, amount) => session.withdraw(params.token, params.recipient, amount));\n    },\n    async forget({ userId, appSalt }) {\n      // Only lets go of the unlocked keys. Deleting stored ones is not the app's\n      // call: without a recovery factor it would destroy the wallet.\n      for (const chain of [\"solana\", \"stellar\", \"starknet\"]) accounts.delete(`${chain}:${userId}:${appSalt}`);\n    },\n    async enrollPasskey({ userId, appSalt, userName, environment, authToken }) {\n      const chain = ([\"solana\", \"stellar\", \"starknet\"] as const).find((c) => accounts.get(`${c}:${userId}:${appSalt}`)?.address);\n      if (!chain) throw new Error(\"kit/vault: connect a wallet before adding a passkey\");\n      const { address } = accounts.get(`${chain}:${userId}:${appSalt}`)!;\n      const dek = await readDek({ chain, userId, appSalt, address, keyScope: scope });\n      const user = { userId, userName: userName ?? userId };\n      try {\n        await addPasskey({\n          passkey: deps.passkey(user),\n          wraps: passkeyWraps({ environment, authToken }),\n          owner: { appId: scope, userId },\n          dek,\n          user,\n        });\n      } finally {\n        zeroize(dek);\n      }\n    },\n  };\n\n  return (request) => (methods[request.method] as (params: unknown) => Promise<unknown>)(request.params);\n}\n\nfunction recentBlockhash(message: Uint8Array): string {\n  return VersionedMessage.deserialize(message).recentBlockhash;\n}\n\nfunction stellarAuthNetworkId(preimage: Uint8Array): Uint8Array {\n  return new Uint8Array(xdr.HashIdPreimage.fromXDR(Buffer.from(preimage)).sorobanAuthorization().networkId());\n}\n\nfunction baseUnits(value: unknown): bigint {\n  if (typeof value !== \"string\" || !/^\\d+$/.test(value) || BigInt(value) === 0n) {\n    throw new Error(\"kit/vault: amount must be a positive decimal string of base units\");\n  }\n  return BigInt(value);\n}\n\nfunction address(value: unknown, field: string): string {\n  if (typeof value !== \"string\" || !/^0x[0-9a-fA-F]{1,64}$/.test(value) || BigInt(value) === 0n) {\n    throw new Error(`kit/vault: ${field} must be a 0x-prefixed Starknet address`);\n  }\n  return value;\n}\n\nfunction toFelts(signature: Signature): string[] {\n  return stark.formatSignature(signature);\n}\n\nfunction requireKey<T>(key: T | undefined): T {\n  if (!key) throw new Error(\"kit/vault: this browser holds no key for the account\");\n  return key;\n}\n\nexport function serveVault(port: MessagePort, handle: (request: VaultRequest) => Promise<unknown>): void {\n  port.onmessage = async ({ data }: MessageEvent<VaultRequest>) => {\n    try {\n      port.postMessage({ id: data.id, ok: true, result: await handle(data) });\n    } catch (error) {\n      port.postMessage({ id: data.id, ok: false, error: error instanceof Error ? error.message : String(error) });\n    }\n  };\n}\n\nexport interface VaultHostOptions {\n  /** Cavos backend for the registry and the enclave. Never taken from the app. */\n  backendUrl: string;\n  attestation?: AttestationPolicy;\n  /** Defaults to `/vault/confirm` on this origin. */\n  confirmUrl?: string;\n  /** Defaults to `/api/vault/policy` on this origin. */\n  policyUrl?: string;\n  privacySdk?: () => Promise<PrivacySdk>;\n}\n\n/** Runs inside the vault iframe. One embedding app per iframe. */\nexport function startVaultHost(opts: VaultHostOptions): void {\n  const confirmUrl = opts.confirmUrl ?? `${location.origin}/vault/confirm`;\n  const policyUrl = opts.policyUrl ?? `${location.origin}/api/vault/policy`;\n  let claimed = false;\n\n  window.addEventListener(\"message\", async (event) => {\n    if (event.source !== window.parent || event.data?.type !== VAULT_HELLO || claimed) return;\n    const port = event.ports[0];\n    if (!port) return;\n    claimed = true;\n    const appId = String(event.data.appId ?? \"\");\n    const app = await loadApp(policyUrl, appId);\n    if (!originAllowed(app.origins, event.origin)) {\n      port.postMessage({\n        id: 0,\n        ok: false,\n        error: `kit/vault: add ${event.origin} to this app's allowed web origins in the Cavos dashboard`,\n      });\n      port.close();\n      return;\n    }\n\n    const modal = new VaultModal(event.origin, confirmUrl, (visible) =>\n      port.postMessage({ event: visible ? \"show\" : \"hide\" }),\n    );\n    const handle = createVaultHandler({\n      appId,\n      backendUrl: opts.backendUrl,\n      attestation: opts.attestation,\n      policy: app.policy,\n      privacy: app.privacy,\n      ...(opts.privacySdk ? { privacySdk: opts.privacySdk } : {}),\n      ledger: idbLedger(),\n      confirm: (lines, context) => modal.review(lines, context.network),\n      passkey: (user) => modal.passkey(user),\n    });\n    serveVault(port, handle);\n    port.postMessage({ id: 0, ok: true, result: null });\n  });\n\n  window.parent.postMessage({ type: VAULT_READY }, \"*\");\n}\n\ninterface AppSettings {\n  /** Null when the app registered none. */\n  origins: string[] | null;\n  policy: VaultPolicy;\n  privacy: (network: string) => StarknetPrivacyConfig | undefined;\n}\n\nconst NO_PRIVACY = () => undefined;\n\nasync function loadApp(policyUrl: string, appId: string): Promise<AppSettings> {\n  if (!appId) return { origins: [], policy: STRICT_POLICY, privacy: NO_PRIVACY };\n  try {\n    const res = await fetch(`${policyUrl}?app_id=${encodeURIComponent(appId)}`);\n    if (!res.ok) return { origins: [], policy: STRICT_POLICY, privacy: NO_PRIVACY };\n    const body = (await res.json()) as { origins?: string[] | null; policy?: VaultPolicy; privacy?: unknown };\n    return { origins: body.origins ?? null, policy: body.policy ?? STRICT_POLICY, privacy: privacySettings(body.privacy) };\n  } catch {\n    return { origins: [], policy: STRICT_POLICY, privacy: NO_PRIVACY };\n  }\n}\n\n/** The dashboard keys private transfer settings by Starknet network name. */\nfunction privacySettings(raw: unknown): (network: string) => StarknetPrivacyConfig | undefined {\n  const byNetwork = typeof raw === \"object\" && raw !== null ? (raw as Record<string, unknown>) : {};\n  return (network) => {\n    if (!Object.prototype.hasOwnProperty.call(byNetwork, network)) return undefined;\n    try {\n      return parseStarknetPrivacyConfig(byNetwork[network]);\n    } catch (error) {\n      throw new Error(`kit/vault: the private transfer settings for ${network} are invalid. ${error instanceof Error ? error.message : \"\"}`);\n    }\n  };\n}\n\n/** An app with no registered origins cannot embed the vault at all. */\nfunction originAllowed(origins: string[] | null, origin: string): boolean {\n  return origins !== null && origins.includes(origin);\n}\n","import { PasskeyPrf } from \"../chains/stellar/PasskeyPrf\";\nimport { POPUP_READY, POPUP_RESULT, type PopupIntent, type PopupResult } from \"./protocol\";\nimport { button, el, setEnabled, sheet, type Sheet } from \"./ui\";\n\nexport interface VaultConfirmOptions {\n  /** Name shown in the passkey prompt. */\n  rpName?: string;\n}\n\ntype Secret = Extract<PopupResult, { secret: Uint8Array }>;\ntype PasskeyIntent = Extract<PopupIntent, { kind: \"passkey\" }>;\n\n/** The Cavos window the vault iframe opens for passkeys some browsers refuse inside a frame. */\nexport function startVaultConfirm(opts: VaultConfirmOptions = {}): void {\n  document.body.style.margin = \"0\";\n  const opener = window.opener as Window | null;\n  if (!opener) {\n    const view = sheet({ overlay: false });\n    view.title.textContent = \"Nothing to do here\";\n    view.body.textContent = \"This window opens from an app when Cavos needs you.\";\n    return;\n  }\n\n  const send = (result: PopupResult) => {\n    opener.postMessage({ type: POPUP_RESULT, result }, location.origin);\n    window.close();\n  };\n\n  window.addEventListener(\"message\", (event: MessageEvent<PopupIntent>) => {\n    if (event.source !== opener || event.origin !== location.origin) return;\n    const intent = event.data;\n    if (intent?.kind === \"passkey\") showPasskey(sheet({ overlay: false }), intent, opts.rpName ?? \"Cavos\", send);\n  });\n  opener.postMessage({ type: POPUP_READY }, location.origin);\n}\n\nfunction showPasskey(view: Sheet, intent: PasskeyIntent, rpName: string, send: (result: PopupResult) => void): void {\n  const passkeys = new PasskeyPrf({ rpName });\n  view.title.textContent = intent.create ? \"Add a passkey\" : \"Verify it's you\";\n  const message = el(\"span\", {}, intent.create ? \"Create a passkey to continue.\" : \"Use your passkey to continue.\");\n  view.body.replaceChildren(message);\n\n  const use = button(\"Use passkey\", \"primary\");\n  const create = button(\"Create passkey\", \"primary\");\n  const busy = (on: boolean) => [use, create].forEach((b) => setEnabled(b, !on));\n  const attempt = async (run: () => Promise<Secret | null>) => {\n    busy(true);\n    try {\n      const result = await run();\n      if (result) send(result);\n    } catch (error) {\n      message.textContent = error instanceof Error ? error.message : \"The passkey did not respond.\";\n    }\n    busy(false);\n  };\n\n  use.onclick = () =>\n    attempt(async () => ({ secret: await passkeys.getSecret(intent.credentialId), credentialId: intent.credentialId }));\n  create.onclick = () =>\n    attempt(async () => {\n      const enrolled = await passkeys.enroll({ userId: intent.userId, userName: intent.userName });\n      if (enrolled.secret) return { secret: enrolled.secret, credentialId: enrolled.credentialId };\n      // Many authenticators create the credential without evaluating PRF.\n      message.textContent = \"Passkey created. Confirm it once more.\";\n      intent = { ...intent, credentialId: enrolled.credentialId };\n      view.actions.replaceChildren(use);\n      return null;\n    });\n  view.actions.replaceChildren(intent.create ? create : use);\n}\n"]}