{"version":3,"sources":["../src/chains/starknet/privacy/config.ts","../src/chains/starknet/nativeConnect.ts","../src/chains/starknet/viewingKey.ts","../src/chains/starknet/privacy/chain.ts","../src/chains/starknet/privacy/relay.ts","../src/chains/starknet/privacy/session.ts"],"names":["felt","address","num","shortString"],"mappings":"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","file":"chunk-ZA6VQUJ4.mjs","sourcesContent":["/** Who pays the privacy pool fee, and in what, as the paymaster spells it. */\nexport type PrivacyFeeMode =\n  | { mode: \"sponsored\"; pool_fee: { paid_by: \"user\"; token: string } }\n  | { mode: \"sponsored\"; pool_fee: { paid_by: \"sponsor\" } }\n  | { mode: \"default\"; gas_token: string };\n\nexport interface PrivacyRelayConfig {\n  /** Paymaster that submits private transactions, so the account never appears on-chain. */\n  url: string;\n  fee: PrivacyFeeMode;\n  /** Ceiling for a fee the relay asks for, in base units of the fee token. */\n  maxFee: string;\n  /** The only addresses a fee may be sent to. Also the only callers a signed relay call may name. */\n  allowedFeeRecipients: string[];\n}\n\n/**\n * Everything the page must not choose: the pool, the services that see the\n * viewing key, and who is paid. In a vault it comes from the app's Cavos\n * settings, keyed by network (\"sepolia\", \"mainnet\").\n */\nexport interface StarknetPrivacyConfig {\n  pool: string;\n  prover: string;\n  discovery: string;\n  /** Encrypt requests to the prover and discovery service so they cannot read the viewing key. Defaults to true. */\n  ohttp?: boolean;\n  /** Proofs need RPC spec 0.10.1 or newer. */\n  rpcUrl?: string;\n  relay: PrivacyRelayConfig;\n}\n\nconst TOP_KEYS = [\"pool\", \"prover\", \"discovery\", \"ohttp\", \"rpcUrl\", \"relay\"];\nconst RELAY_KEYS = [\"url\", \"fee\", \"maxFee\", \"allowedFeeRecipients\"];\nconst FELT_LIMIT = 1n << 252n;\n\n/** Strict: unknown fields, bad URLs and malformed addresses throw an error that names the field. */\nexport function parseStarknetPrivacyConfig(input: unknown): StarknetPrivacyConfig {\n  const config = record(input, \"privacy\");\n  onlyKeys(config, TOP_KEYS, \"privacy\");\n  const relay = record(config.relay, \"privacy.relay\");\n  onlyKeys(relay, RELAY_KEYS, \"privacy.relay\");\n  if (config.ohttp !== undefined && typeof config.ohttp !== \"boolean\") {\n    throw invalid(\"privacy.ohttp\", \"must be true or false\");\n  }\n  return {\n    pool: address(config.pool, \"privacy.pool\"),\n    prover: serviceUrl(config.prover, \"privacy.prover\"),\n    discovery: serviceUrl(config.discovery, \"privacy.discovery\"),\n    ...(config.ohttp !== undefined ? { ohttp: config.ohttp } : {}),\n    ...(config.rpcUrl !== undefined ? { rpcUrl: serviceUrl(config.rpcUrl, \"privacy.rpcUrl\") } : {}),\n    relay: {\n      url: serviceUrl(relay.url, \"privacy.relay.url\"),\n      fee: feeMode(relay.fee),\n      maxFee: baseUnits(relay.maxFee, \"privacy.relay.maxFee\"),\n      allowedFeeRecipients: recipients(relay.allowedFeeRecipients),\n    },\n  };\n}\n\nfunction feeMode(value: unknown): PrivacyFeeMode {\n  const fee = record(value, \"privacy.relay.fee\");\n  if (fee.mode === \"default\") {\n    onlyKeys(fee, [\"mode\", \"gas_token\"], \"privacy.relay.fee\");\n    return { mode: \"default\", gas_token: address(fee.gas_token, \"privacy.relay.fee.gas_token\") };\n  }\n  if (fee.mode === \"sponsored\") {\n    onlyKeys(fee, [\"mode\", \"pool_fee\"], \"privacy.relay.fee\");\n    const pool = record(fee.pool_fee, \"privacy.relay.fee.pool_fee\");\n    if (pool.paid_by === \"sponsor\") {\n      onlyKeys(pool, [\"paid_by\"], \"privacy.relay.fee.pool_fee\");\n      return { mode: \"sponsored\", pool_fee: { paid_by: \"sponsor\" } };\n    }\n    if (pool.paid_by === \"user\") {\n      onlyKeys(pool, [\"paid_by\", \"token\"], \"privacy.relay.fee.pool_fee\");\n      return {\n        mode: \"sponsored\",\n        pool_fee: { paid_by: \"user\", token: address(pool.token, \"privacy.relay.fee.pool_fee.token\") },\n      };\n    }\n    throw invalid(\"privacy.relay.fee.pool_fee.paid_by\", 'must be \"user\" or \"sponsor\"');\n  }\n  throw invalid(\"privacy.relay.fee.mode\", 'must be \"sponsored\" or \"default\"');\n}\n\nfunction recipients(value: unknown): string[] {\n  if (!Array.isArray(value) || value.length === 0) {\n    throw invalid(\"privacy.relay.allowedFeeRecipients\", \"must list at least one address, or no fee can ever be accepted\");\n  }\n  return value.map((entry, index) => address(entry, `privacy.relay.allowedFeeRecipients[${index}]`));\n}\n\nfunction baseUnits(value: unknown, path: string): string {\n  if (typeof value !== \"string\" || !/^\\d+$/.test(value)) {\n    throw invalid(path, \"must be a decimal string of base units, for example \\\"1000000\\\"\");\n  }\n  return BigInt(value).toString();\n}\n\nfunction address(value: unknown, path: string): string {\n  if (typeof value !== \"string\" || !/^0x[0-9a-fA-F]{1,64}$/.test(value)) {\n    throw invalid(path, \"must be a 0x-prefixed hex address\");\n  }\n  const felt = BigInt(value);\n  if (felt === 0n || felt >= FELT_LIMIT) throw invalid(path, \"is not a valid Starknet address\");\n  return `0x${felt.toString(16)}`;\n}\n\nfunction serviceUrl(value: unknown, path: string): string {\n  if (typeof value !== \"string\") throw invalid(path, \"must be a URL\");\n  let url: URL;\n  try {\n    url = new URL(value.trim());\n  } catch {\n    throw invalid(path, \"is not a valid URL\");\n  }\n  const loopback = url.hostname === \"localhost\" || url.hostname === \"127.0.0.1\" || url.hostname === \"[::1]\";\n  if (url.protocol !== \"https:\" && !(url.protocol === \"http:\" && loopback)) {\n    throw invalid(path, \"must use https (http is only accepted for localhost)\");\n  }\n  if (url.username || url.password) throw invalid(path, \"must not contain credentials\");\n  return url.toString().replace(/\\/+$/, \"\");\n}\n\nfunction record(value: unknown, path: string): Record<string, unknown> {\n  if (typeof value !== \"object\" || value === null || Array.isArray(value)) throw invalid(path, \"must be an object\");\n  return value as Record<string, unknown>;\n}\n\nfunction onlyKeys(value: Record<string, unknown>, allowed: string[], path: string): void {\n  for (const key of Object.keys(value)) {\n    if (!allowed.includes(key)) throw invalid(`${path}.${key}`, \"is not a known setting\");\n  }\n}\n\nfunction invalid(path: string, problem: string): Error {\n  return new Error(`kit/starknet: ${path} ${problem}`);\n}\n","import { resolveNative, type ResolveNativeInput } from \"../../secret/nativeAccount\";\nimport { zeroize, type Ed25519Seed } from \"../../secret/dek\";\nimport { deriveSeed, parseAppSalt } from \"../../secret/derive\";\nimport { deviceFactorFromUnwrapKey } from \"../../secret/factor\";\nimport { idbWrapStore } from \"../../secret/idbWrapStore\";\nimport { WebCryptoDeviceUnwrapKey } from \"../stellar/WebCryptoDeviceUnwrapKey\";\nimport { starkKeyFromSeed, starkPublicKey, starknetAddressFromPublicKey } from \"./keys\";\n\n/** The in-memory Stark key. WebCrypto cannot hold one, so it is re-derived from the DEK whenever it is needed. */\nexport interface StarknetSpend {\n  address(): string;\n  publicKey(): string;\n  privateKey(): string;\n}\n\nexport type ResolveNativeStarknetInput = Omit<ResolveNativeInput<StarknetSpend>, \"chain\">;\n\nexport async function resolveNativeStarknet(\n  input: ResolveNativeStarknetInput,\n): Promise<{ address: string; spend: StarknetSpend | null; isNewAccount: boolean }> {\n  return resolveNative<StarknetSpend>({\n    ...input,\n    chain: \"starknet\",\n    loadPersisted: input.loadPersisted ?? (() => loadPersistedStarknet(input)),\n    importSpend: input.importSpend ?? (async (seed) => starknetSpendFromSeed(seed)),\n  });\n}\n\nexport function starknetSpendFromSeed(seed: Ed25519Seed): StarknetSpend {\n  const privateKey = starkKeyFromSeed(seed);\n  const publicKey = starkPublicKey(privateKey);\n  const address = starknetAddressFromPublicKey(publicKey);\n  return { address: () => address, publicKey: () => publicKey, privateKey: () => privateKey };\n}\n\nasync function loadPersistedStarknet(input: ResolveNativeStarknetInput): Promise<StarknetSpend | null> {\n  const scoped = (id: string) => (input.keyScope ? `${input.keyScope}|${id}` : id);\n  const wrap = await (input.store ?? idbWrapStore(input.keyScope)).get(input.identity.userId);\n  if (!wrap) return null;\n  try {\n    const factor =\n      input.factor ??\n      (await WebCryptoDeviceUnwrapKey.load({ keyId: scoped(`${input.identity.userId}:${input.appSalt}`) }).then(\n        (key) => (key ? deviceFactorFromUnwrapKey(key) : null),\n      ));\n    if (!factor) return null;\n    const dek = await factor.unwrap(wrap);\n    const seed = deriveSeed(dek, \"starknet\", parseAppSalt(input.appSalt));\n    zeroize(dek);\n    try {\n      return starknetSpendFromSeed(seed);\n    } finally {\n      zeroize(seed);\n    }\n  } catch {\n    return null;\n  }\n}\n","import { hmac } from \"@noble/hashes/hmac\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport { ec, num } from \"starknet\";\nimport { bytesToBigInt, utf8ToBytes } from \"../../crypto/encoding\";\n\n/** The chain, account and STRK20 pool a viewing key is bound to (SNIP-44 `DerivationContext`, `key_index` 0). */\nexport interface ViewingKeyContext {\n  chainId: string;\n  accountAddress: string;\n  poolAddress: string;\n}\n\nconst ORDER = ec.starkCurve.CURVE.n;\nconst HALF_ORDER = ORDER / 2n;\nconst LIMIT = 2n ** 256n - (2n ** 256n % ORDER);\nconst DOMAIN = utf8ToBytes(\"STRK20_ACCOUNT_LEAF_V1\");\nconst CONTEXT_VERSION = 1n;\nconst KEY_INDEX = 0n;\n\n/**\n * STRK20 viewing key of a Stark account key, per SNIP-44 `account-leaf-v1`:\n * HMAC-SHA256 keyed by the private scalar, rejection-sampled into `[1, n/2)`.\n * The same key and context give the same viewing key on every device.\n *\n * The result is as sensitive as the private state it decrypts. It must never\n * leave the vault.\n */\nexport function deriveViewingKey(privateKey: string, context: ViewingKeyContext): string {\n  const scalar = BigInt(privateKey);\n  if (scalar < 1n || scalar >= ORDER) throw new Error(\"kit/starknet: the account key is not a Stark scalar\");\n  const key = i2osp(scalar, 32);\n  const contextBytes = concat(\n    i2osp(CONTEXT_VERSION, 4),\n    i2osp(BigInt(context.chainId), 32),\n    i2osp(BigInt(context.accountAddress), 32),\n    i2osp(BigInt(context.poolAddress), 32),\n    i2osp(KEY_INDEX, 16),\n  );\n  for (let counter = 0n; counter < 2n ** 32n; counter++) {\n    const candidate = bytesToBigInt(hmac(sha256, key, concat(DOMAIN, contextBytes, i2osp(counter, 4))));\n    if (candidate >= LIMIT) continue;\n    const reduced = candidate % ORDER;\n    if (reduced === 0n) continue;\n    const folded = reduced < ORDER - reduced ? reduced : ORDER - reduced;\n    if (folded < HALF_ORDER) return num.toHex(folded);\n  }\n  throw new Error(\"kit/starknet: viewing key derivation exhausted its counter\");\n}\n\n/** Public viewing key, the x-coordinate a STRK20 pool stores for a registered account. */\nexport function viewingPublicKey(viewingKey: string): string {\n  return ec.starkCurve.getStarkKey(viewingKey);\n}\n\nfunction i2osp(value: bigint, length: number): Uint8Array {\n  if (value < 0n || value >> BigInt(8 * length) !== 0n) {\n    throw new Error(`kit/starknet: value does not fit in ${length} bytes`);\n  }\n  const out = new Uint8Array(length);\n  let rest = value;\n  for (let i = length - 1; i >= 0; i--) {\n    out[i] = Number(rest & 0xffn);\n    rest >>= 8n;\n  }\n  return out;\n}\n\nfunction concat(...parts: Uint8Array[]): Uint8Array {\n  const out = new Uint8Array(parts.reduce((total, part) => total + part.length, 0));\n  let offset = 0;\n  for (const part of parts) {\n    out.set(part, offset);\n    offset += part.length;\n  }\n  return out;\n}\n","import { RpcProvider, num, shortString } from \"starknet\";\n\n/** How many blocks a proof's base block must trail the chain head. Matches the pool's acceptance window. */\nexport const PROOF_BASE_BLOCK_DEPTH = 10;\n\n/** The chain reads a private operation needs. */\nexport interface PrivacyChain {\n  blockNumber(): Promise<number>;\n  call(contract: string, entrypoint: string, calldata?: string[]): Promise<string[]>;\n  /** Block the transaction landed in, or -1 when it reverted. */\n  confirm(transactionHash: string, options: PollOptions): Promise<number>;\n}\n\nexport interface PollOptions {\n  pollIntervalMs: number;\n  timeoutMs: number;\n}\n\nexport const DEFAULT_POLL: PollOptions = { pollIntervalMs: 2_000, timeoutMs: 300_000 };\n\nexport function rpcChain(rpcUrl: string): PrivacyChain {\n  const provider = new RpcProvider({ nodeUrl: rpcUrl });\n  return {\n    blockNumber: () => provider.getBlockNumber(),\n    call: (contractAddress, entrypoint, calldata = []) => provider.callContract({ contractAddress, entrypoint, calldata }),\n    async confirm(transactionHash, { pollIntervalMs, timeoutMs }) {\n      const receipt = await provider.waitForTransaction(transactionHash, {\n        errorStates: [],\n        retryInterval: pollIntervalMs,\n        retries: Math.max(1, Math.ceil(timeoutMs / pollIntervalMs)),\n      });\n      const block = (receipt as unknown as { block_number?: number }).block_number;\n      const failed = (receipt as unknown as { isError(): boolean }).isError();\n      return failed || block === undefined ? -1 : block;\n    },\n  };\n}\n\n/**\n * Block to prove against: `depth` behind the head, and strictly past\n * `sinceBlock`, the block holding the state the proof must see.\n */\nexport async function provableBlock(\n  chain: PrivacyChain,\n  sinceBlock: number,\n  poll: PollOptions,\n  depth = PROOF_BASE_BLOCK_DEPTH,\n): Promise<number> {\n  const deadline = Date.now() + poll.timeoutMs;\n  for (;;) {\n    const head = await chain.blockNumber();\n    if (sinceBlock < head - depth) return head - depth;\n    if (Date.now() >= deadline) {\n      throw new Error(`kit/starknet: block ${sinceBlock} did not become ${depth} blocks old within ${poll.timeoutMs}ms`);\n    }\n    await new Promise((resolve) => setTimeout(resolve, poll.pollIntervalMs));\n  }\n}\n\nconst SNOS_TAG = BigInt(shortString.encodeShortString(\"VIRTUAL_SNOS0\"));\n\n/** The block a proof was made against, read from its proof facts. Undefined for a layout this does not know. */\nexport function proofBaseBlock(proofFacts: string[]): number | undefined {\n  const facts = proofFacts.map((fact) => num.toBigInt(fact));\n  const at = facts.indexOf(SNOS_TAG) + 1;\n  if (at === 0 || at >= facts.length) return undefined;\n  const block = Number(facts[at]);\n  return Number.isSafeInteger(block) && block > 0 ? block : undefined;\n}\n\n/** Refuses a proof the sequencer or the pool would reject, before the relay pays to submit it. */\nexport async function assertProofFresh(\n  chain: PrivacyChain,\n  pool: string,\n  proofFacts: string[],\n  depth = PROOF_BASE_BLOCK_DEPTH,\n): Promise<void> {\n  const base = proofBaseBlock(proofFacts);\n  if (base === undefined) return;\n  const [head, validity] = await Promise.all([chain.blockNumber(), proofValidityBlocks(chain, pool)]);\n  const age = head - base;\n  if (age < 0) throw new Error(`kit/starknet: the proof is for block ${base}, ahead of the head ${head}; the RPC node is behind the prover`);\n  if (age < depth) throw new Error(`kit/starknet: the proof is only ${age} blocks old and the pool needs ${depth}; prove again`);\n  if (validity !== undefined && age > validity) {\n    throw new Error(`kit/starknet: the proof is ${age} blocks old and the pool accepts ${validity}; prove again`);\n  }\n}\n\nasync function proofValidityBlocks(chain: PrivacyChain, pool: string): Promise<number | undefined> {\n  try {\n    const [value] = await chain.call(pool, \"get_proof_validity_blocks\");\n    const blocks = Number(num.toBigInt(value ?? \"\"));\n    return Number.isSafeInteger(blocks) && blocks > 0 ? blocks : undefined;\n  } catch {\n    return undefined;\n  }\n}\n","import { num, shortString, stark, type Signature, type TypedData } from \"starknet\";\nimport type { PrivacyFeeMode } from \"./config\";\n\nexport interface RelayCall {\n  to: string;\n  selector: string;\n  calldata: string[];\n}\n\nexport interface RelayInvoke {\n  userAddress: string;\n  calls: RelayCall[];\n  chainId: string;\n}\n\nexport interface FeeAction {\n  recipient: string;\n  token: string;\n  amount: bigint;\n}\n\nexport interface RelayQuote {\n  /** Null when the sponsor pays the pool fee: the proof must carry no fee withdrawal. */\n  feeAction: FeeAction | null;\n  typedData?: TypedData;\n  parameters: unknown;\n}\n\nexport interface RelayProof {\n  data: string;\n  proofFacts: string[];\n}\n\nexport interface RelayOptions {\n  url: string;\n  apiKey: () => string;\n  maxFee: bigint;\n  allowedFeeRecipients: string[];\n  /** The fee the pool itself publishes. A user-paid quote above it is refused. */\n  publishedFee: () => Promise<bigint>;\n  /** Token the published fee is denominated in; quotes in other tokens are bounded by `maxFee` alone. */\n  publishedFeeToken: string;\n  fetch?: typeof fetch;\n  timeoutMs?: number;\n}\n\nconst DEFAULT_TIMEOUT_MS = 120_000;\nconst SNIP9_DOMAIN = \"Account.execute_from_outside\";\nconst SNIP9_REVISIONS = [\n  { version: 1n, revision: 0n },\n  { version: 2n, revision: 1n },\n];\n\n/** Talks to the paymaster's private transaction endpoints and refuses anything that costs the user more than the app allowed. */\nexport class PrivacyRelay {\n  private readonly allowed: bigint[];\n\n  constructor(private readonly opts: RelayOptions) {\n    this.allowed = opts.allowedFeeRecipients.map((entry) => BigInt(entry));\n  }\n\n  async quote(pool: string, fee: PrivacyFeeMode, invoke?: RelayInvoke): Promise<RelayQuote> {\n    const apply_action = { pool_address: pool };\n    const result = await this.send<{\n      fee_action?: { type?: string; recipient?: string; token?: string; amount?: string };\n      typed_data?: TypedData;\n      parameters?: unknown;\n    }>(\"paymaster_buildTransaction\", {\n      transaction: invoke\n        ? { type: \"invoke_and_apply_action\", apply_action, invoke: { user_address: invoke.userAddress, calls: invoke.calls } }\n        : { type: \"apply_action\", apply_action },\n      parameters: { version: \"0x1\", fee_mode: fee },\n    });\n\n    const feeAction = await this.checkFee(result.fee_action, fee);\n    if (invoke) {\n      if (!result.typed_data) throw new Error(\"kit/starknet: the relay returned nothing to sign for the approval\");\n      this.checkTypedData(result.typed_data, invoke);\n    }\n    return {\n      feeAction,\n      ...(result.typed_data ? { typedData: result.typed_data } : {}),\n      parameters: result.parameters ?? { version: \"0x1\", fee_mode: fee },\n    };\n  }\n\n  async execute(\n    call: RelayCall,\n    proof: RelayProof,\n    parameters: unknown,\n    invoke?: { userAddress: string; typedData: TypedData; signature: Signature },\n  ): Promise<{ transactionHash: string }> {\n    const apply_action = { apply_actions_call: call, proof: proof.data, proof_facts: proof.proofFacts };\n    const result = await this.send<{ transaction_hash?: unknown }>(\"paymaster_executeTransaction\", {\n      transaction: invoke\n        ? {\n            type: \"invoke_and_apply_action\",\n            apply_action,\n            invoke: {\n              user_address: invoke.userAddress,\n              typed_data: invoke.typedData,\n              signature: stark.signatureToHexArray(invoke.signature),\n            },\n          }\n        : { type: \"apply_action\", apply_action },\n      parameters,\n    });\n    if (typeof result.transaction_hash !== \"string\" || !result.transaction_hash) {\n      throw new Error(\"kit/starknet: the relay returned no transaction hash; the transaction may still have been submitted\");\n    }\n    return { transactionHash: result.transaction_hash };\n  }\n\n  private async checkFee(\n    action: { type?: string; recipient?: string; token?: string; amount?: string } | undefined,\n    fee: PrivacyFeeMode,\n  ): Promise<FeeAction | null> {\n    if (!action) throw new Error(\"kit/starknet: the relay returned no fee action\");\n    const sponsored = fee.mode === \"sponsored\" && fee.pool_fee.paid_by === \"sponsor\";\n    if (action.type === \"none\") return null;\n    if (sponsored) throw new Error(\"kit/starknet: the relay asked for a fee although the sponsor pays it; nothing was withdrawn\");\n    if (action.type !== \"withdraw\") throw new Error(\"kit/starknet: the relay returned a fee action Cavos does not know\");\n\n    const recipient = felt(action.recipient);\n    const token = felt(action.token);\n    const amount = felt(action.amount);\n    if (recipient === undefined || token === undefined || amount === undefined) {\n      throw new Error(\"kit/starknet: the relay returned a malformed fee action\");\n    }\n    if (!this.allowed.includes(recipient)) {\n      throw new Error(`kit/starknet: the relay wants its fee sent to ${hex(recipient)}, which this app does not allow; nothing was withdrawn`);\n    }\n    const chosen = fee.mode === \"default\" ? fee.gas_token : fee.pool_fee.paid_by === \"user\" ? fee.pool_fee.token : undefined;\n    if (chosen !== undefined && BigInt(chosen) !== token) {\n      throw new Error(\"kit/starknet: the relay quoted its fee in a token the app did not choose; nothing was withdrawn\");\n    }\n    if (amount > this.opts.maxFee) {\n      throw new Error(`kit/starknet: the relay quoted a fee of ${amount}, above the ${this.opts.maxFee} this app allows; nothing was withdrawn`);\n    }\n    if (fee.mode === \"sponsored\" && token === BigInt(this.opts.publishedFeeToken)) {\n      const published = await this.opts.publishedFee();\n      if (amount > published) {\n        throw new Error(`kit/starknet: the relay quoted a pool fee of ${amount}, above the ${published} the pool publishes; nothing was withdrawn`);\n      }\n    }\n    return { recipient: hex(recipient), token: hex(token), amount };\n  }\n\n  private checkTypedData(typedData: TypedData, invoke: RelayInvoke): void {\n    const refuse = (why: string): never => {\n      throw new Error(`kit/starknet: the relay asked for a signature over something other than the requested approval (${why}); nothing was signed`);\n    };\n    if (typedData.primaryType !== \"OutsideExecution\") refuse(\"not an outside execution\");\n\n    const domain = (typedData.domain ?? {}) as Record<string, unknown>;\n    if (shortFelt(domain.chainId) !== shortFelt(invoke.chainId)) refuse(\"another chain\");\n    if (shortFelt(domain.name) !== shortFelt(SNIP9_DOMAIN)) refuse(\"another domain\");\n    const version = shortFelt(domain.version);\n    const revision = domain.revision === undefined ? 0n : shortFelt(domain.revision);\n    if (!SNIP9_REVISIONS.some((known) => known.version === version && known.revision === revision)) refuse(\"another domain version\");\n\n    const message = (typedData.message ?? {}) as Record<string, unknown>;\n    const caller = felt(message.Caller);\n    if (caller === undefined || !this.allowed.includes(caller)) refuse(\"the caller is not an address this app allows\");\n\n    const now = BigInt(Math.floor(Date.now() / 1000));\n    const before = felt(message[\"Execute Before\"]);\n    if (before === undefined || before <= now) refuse(\"it has expired or never expires\");\n    const after = felt(message[\"Execute After\"]);\n    if (after !== undefined && after > now) refuse(\"it is not valid yet\");\n\n    const calls = message.Calls;\n    if (!Array.isArray(calls) || calls.length !== invoke.calls.length) refuse(\"a different number of calls\");\n    invoke.calls.forEach((expected, index) => {\n      const actual = ((calls as unknown[])[index] ?? {}) as Record<string, unknown>;\n      if (felt(actual.To) !== felt(expected.to)) refuse(`call ${index} targets another contract`);\n      if (felt(actual.Selector) !== felt(expected.selector)) refuse(`call ${index} runs another entrypoint`);\n      const calldata = actual.Calldata;\n      if (!Array.isArray(calldata) || calldata.length !== expected.calldata.length) refuse(`call ${index} has other arguments`);\n      expected.calldata.forEach((value, position) => {\n        if (felt((calldata as unknown[])[position]) !== felt(value)) refuse(`call ${index} has other arguments`);\n      });\n    });\n  }\n\n  private async send<T>(method: string, params: unknown): Promise<T> {\n    const send = this.opts.fetch ?? globalThis.fetch;\n    const response = await send(this.opts.url, {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\", Accept: \"application/json\", \"x-paymaster-api-key\": this.opts.apiKey() },\n      body: JSON.stringify({ jsonrpc: \"2.0\", id: 1, method, params }),\n      signal: AbortSignal.timeout(this.opts.timeoutMs ?? DEFAULT_TIMEOUT_MS),\n    }).catch((error: unknown) => {\n      if ((error as { name?: string } | null)?.name === \"TimeoutError\") {\n        throw new Error(`kit/starknet: the relay did not answer ${method} in time`);\n      }\n      throw error;\n    });\n    const body = (await response.json().catch(() => undefined)) as\n      | { result?: T; error?: { code?: number; message?: string; data?: unknown } }\n      | undefined;\n    if (body?.error && typeof body.error.code === \"number\") {\n      const detail = typeof body.error.data === \"string\" ? `: ${body.error.data}` : \"\";\n      throw new Error(`kit/starknet: the relay rejected ${method} (code ${body.error.code}): ${body.error.message ?? \"no message\"}${detail}`);\n    }\n    if (!response.ok || body?.result === undefined) {\n      throw new Error(`kit/starknet: the relay returned no result for ${method} (HTTP ${response.status})`);\n    }\n    return body.result;\n  }\n}\n\nfunction felt(value: unknown): bigint | undefined {\n  if (typeof value !== \"string\" && typeof value !== \"number\" && typeof value !== \"bigint\") return undefined;\n  try {\n    return num.toBigInt(value);\n  } catch {\n    return undefined;\n  }\n}\n\nfunction shortFelt(value: unknown): bigint | undefined {\n  const parsed = felt(value);\n  if (parsed !== undefined) return parsed;\n  if (typeof value !== \"string\" || !value) return undefined;\n  try {\n    return BigInt(shortString.encodeShortString(value));\n  } catch {\n    return undefined;\n  }\n}\n\nfunction hex(value: bigint): string {\n  return `0x${value.toString(16)}`;\n}\n","import { CallData, Signer, hash, num, type Call, type TypedData } from \"starknet\";\nimport type {\n  PrivateTransfersBuilder,\n  ProofProviderConfig,\n  TokenOperationsBuilder,\n} from \"@starkware-libs/starknet-privacy-sdk\";\nimport { viewingPublicKey, deriveViewingKey } from \"../viewingKey\";\nimport {\n  DEFAULT_POLL,\n  PROOF_BASE_BLOCK_DEPTH,\n  assertProofFresh,\n  provableBlock,\n  rpcChain,\n  type PollOptions,\n  type PrivacyChain,\n} from \"./chain\";\nimport type { PrivacyFeeMode, StarknetPrivacyConfig } from \"./config\";\nimport { PrivacyRelay, type FeeAction, type RelayCall } from \"./relay\";\nimport type { PrivacySdk } from \"./sdk\";\n\nexport type PrivacyRequirement = \"register\" | \"setup-channel\" | \"setup-token\" | \"ready\";\n\nexport interface PrivacyStatus {\n  /** The pool holds a viewing key for this account. */\n  registered: boolean;\n  /** What the account still needs before it can use `token`. Only present when a token was asked about. */\n  requirement?: PrivacyRequirement;\n}\n\nexport interface PrivacySubmission {\n  transactionHash: string;\n}\n\n/** The only operations a private account offers. No method returns a key, a note or a witness. */\nexport interface PrivacyOperations {\n  status(token?: string): Promise<PrivacyStatus>;\n  balance(token: string): Promise<bigint>;\n  register(): Promise<PrivacySubmission>;\n  deposit(token: string, amount: bigint): Promise<PrivacySubmission>;\n  transfer(token: string, recipient: string, amount: bigint): Promise<PrivacySubmission>;\n  withdraw(token: string, recipient: string, amount: bigint): Promise<PrivacySubmission>;\n}\n\ntype Sdk = PrivacySdk;\ntype TransfersClient = ReturnType<Sdk[\"createPrivateTransfers\"]>;\ntype Registry = ReturnType<Sdk[\"createEmptyRegistry\"]>;\ntype CreateParams = Parameters<Sdk[\"createPrivateTransfers\"]>[0];\n\n/** Replaceable pieces, for tests that run against the SDK's in-memory pool. */\nexport interface PrivacySessionDeps {\n  chain?: PrivacyChain;\n  sdk?: PrivacySdk;\n  provingProvider?: CreateParams[\"provingProvider\"];\n  discoveryProvider?: CreateParams[\"discoveryProvider\"];\n  proofInvocationFactory?: CreateParams[\"proofInvocationFactory\"];\n  fetch?: typeof fetch;\n  poll?: PollOptions;\n}\n\nexport interface PrivacySessionInit {\n  config: StarknetPrivacyConfig;\n  /** Felt of the chain the account lives on. */\n  chainId: string;\n  /** RPC used when the config names none. */\n  rpcUrl: string;\n  account: { address: string; spend: { privateKey(): string } };\n  paymasterApiKey: () => string;\n  /** Loads the privacy SDK. Injected so that only builds that bundle it name the package. */\n  loadSdk: () => Promise<PrivacySdk>;\n  deps?: PrivacySessionDeps;\n}\n\nconst STRK = \"0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d\";\nconst SPONSOR_FEE: PrivacyFeeMode = { mode: \"sponsored\", pool_fee: { paid_by: \"sponsor\" } };\nconst REQUIREMENTS: PrivacyRequirement[] = [\"register\", \"setup-channel\", \"setup-token\", \"ready\"];\n\ninterface Operation {\n  fee: PrivacyFeeMode;\n  invoke?: { token: string; amount: bigint };\n  autoRegister?: boolean;\n  compose(builder: PrivateTransfersBuilder, fee: FeeAction | null): void;\n}\n\n/**\n * One account's private state in one pool. It lives only where the account key\n * lives: the viewing key, the discovered notes and the witnesses are held here\n * and never returned.\n */\nexport class PrivacySession implements PrivacyOperations {\n  private readonly config: StarknetPrivacyConfig;\n  private readonly address: string;\n  private readonly chain: PrivacyChain;\n  private readonly poll: PollOptions;\n  private readonly relay: PrivacyRelay;\n  private viewingKey?: string;\n  private transfers?: Promise<TransfersClient>;\n  private registry?: Registry;\n  private lastTransaction?: string;\n  private queue: Promise<unknown> = Promise.resolve();\n\n  constructor(private readonly init: PrivacySessionInit) {\n    this.config = init.config;\n    this.address = init.account.address;\n    this.chain = init.deps?.chain ?? rpcChain(init.config.rpcUrl ?? init.rpcUrl);\n    this.poll = init.deps?.poll ?? DEFAULT_POLL;\n    this.relay = new PrivacyRelay({\n      url: init.config.relay.url,\n      apiKey: init.paymasterApiKey,\n      maxFee: BigInt(init.config.relay.maxFee),\n      allowedFeeRecipients: init.config.relay.allowedFeeRecipients,\n      publishedFee: async () => {\n        const [fee] = await this.chain.call(this.config.pool, \"get_fee_amount\");\n        return BigInt(fee ?? \"0\");\n      },\n      publishedFeeToken: STRK,\n      ...(init.deps?.fetch ? { fetch: init.deps.fetch } : {}),\n    });\n  }\n\n  async status(token?: string): Promise<PrivacyStatus> {\n    return this.scrubbed(async () => {\n      const registered = await this.registered();\n      if (token === undefined) return { registered };\n      const transfers = await this.client();\n      const requirement = await transfers.discoverRequirement(this.address, requireAddress(token, \"token\"));\n      return { registered, requirement: REQUIREMENTS[requirement] ?? \"ready\" };\n    });\n  }\n\n  async balance(token: string): Promise<bigint> {\n    return this.scrubbed(async () => {\n      const id = BigInt(requireAddress(token, \"token\"));\n      if (!(await this.registered())) return 0n;\n      const transfers = await this.client();\n      const { notes } = await transfers.discoverNotes({ tokens: [id] });\n      return (notes.get(id) ?? []).reduce((total, note) => total + note.amount, 0n);\n    });\n  }\n\n  async register(): Promise<PrivacySubmission> {\n    return this.run(async () => {\n      if (await this.registered()) throw new Error(\"kit/starknet: this account is already registered in the pool\");\n      if (this.config.relay.fee.mode !== \"sponsored\") {\n        throw new Error(\"kit/starknet: this app does not sponsor private transfers, so the first deposit registers the account\");\n      }\n      return { fee: SPONSOR_FEE, compose: (builder) => void builder.register() };\n    });\n  }\n\n  async deposit(token: string, amount: bigint): Promise<PrivacySubmission> {\n    const id = requireAddress(token, \"token\");\n    requireAmount(amount);\n    return this.run(async () => ({\n      fee: this.config.relay.fee,\n      invoke: { token: id, amount },\n      autoRegister: true,\n      compose: (builder, fee) =>\n        this.withToken(builder, id, fee, (t) => t.deposit({ amount }).surplusTo(this.address, false)),\n    }));\n  }\n\n  async transfer(token: string, recipient: string, amount: bigint): Promise<PrivacySubmission> {\n    const id = requireAddress(token, \"token\");\n    const to = requireAddress(recipient, \"recipient\");\n    requireAmount(amount);\n    return this.run(async () => ({\n      fee: this.config.relay.fee,\n      compose: (builder, fee) =>\n        this.withToken(builder, id, fee, (t) => t.transfer({ recipient: to, amount }).surplusTo(this.address, false)),\n    }));\n  }\n\n  async withdraw(token: string, recipient: string, amount: bigint): Promise<PrivacySubmission> {\n    const id = requireAddress(token, \"token\");\n    const to = requireAddress(recipient, \"recipient\");\n    requireAmount(amount);\n    return this.run(async () => ({\n      fee: this.config.relay.fee,\n      compose: (builder, fee) =>\n        this.withToken(builder, id, fee, (t) => t.withdraw({ recipient: to, amount }).surplusTo(this.address, false)),\n    }));\n  }\n\n  private withToken(\n    builder: PrivateTransfersBuilder,\n    token: string,\n    fee: FeeAction | null,\n    operate: (t: TokenOperationsBuilder) => unknown,\n  ): void {\n    const charge = fee && fee.amount > 0n ? fee : null;\n    const sameToken = charge !== null && BigInt(charge.token) === BigInt(token);\n    builder.with(token, (t) => {\n      operate(t);\n      if (sameToken) t.withdraw({ recipient: charge.recipient, amount: charge.amount });\n    });\n    if (charge && !sameToken) {\n      builder.with(charge.token, (t) => t.withdraw({ recipient: charge.recipient, amount: charge.amount }));\n    }\n  }\n\n  private run(plan: () => Promise<Operation>): Promise<PrivacySubmission> {\n    const result = this.queue.then(() => this.scrubbed(async () => this.submit(await plan())));\n    this.queue = result.then(\n      () => undefined,\n      () => undefined,\n    );\n    return result;\n  }\n\n  private async submit(operation: Operation): Promise<PrivacySubmission> {\n    await this.registered();\n    const transfers = await this.client();\n    const invoke = operation.invoke ? this.approval(operation.invoke) : undefined;\n    const quote = await this.relay.quote(this.config.pool, operation.fee, invoke);\n\n    let approval: { userAddress: string; typedData: TypedData; signature: Awaited<ReturnType<Signer[\"signMessage\"]>> } | undefined;\n    if (invoke && quote.typedData) {\n      approval = {\n        userAddress: this.address,\n        typedData: quote.typedData,\n        signature: await new Signer(this.init.account.spend.privateKey()).signMessage(quote.typedData, this.address),\n      };\n    }\n\n    const provingBlockId = await this.provingBlock();\n    this.registry ??= (await this.sdk()).createEmptyRegistry();\n    this.registry.notes.clear();\n    delete this.registry.cursor;\n    const builder = transfers.build({\n      autoSelectNotes: \"naive\",\n      autoSetup: true,\n      autoDiscover: { notes: \"refresh\", channels: \"refresh\" },\n      ...(operation.autoRegister ? { autoRegister: true } : {}),\n      registry: this.registry,\n      provingBlockId,\n    });\n    operation.compose(builder, quote.feeAction);\n\n    try {\n      const { callAndProof, registry } = await builder.execute();\n      this.registry = registry;\n      await assertProofFresh(this.chain, this.config.pool, callAndProof.proof.proofFacts);\n      const submission = await this.relay.execute(\n        toRelayCall(callAndProof.call),\n        { data: callAndProof.proof.data, proofFacts: callAndProof.proof.proofFacts },\n        quote.parameters,\n        approval,\n      );\n      this.lastTransaction = submission.transactionHash;\n      return submission;\n    } catch (error) {\n      transfers.invalidateProofNonceCache();\n      throw error;\n    }\n  }\n\n  private approval(spec: { token: string; amount: bigint }): { userAddress: string; chainId: string; calls: RelayCall[] } {\n    const low = spec.amount & ((1n << 128n) - 1n);\n    const high = spec.amount >> 128n;\n    const call: Call = {\n      contractAddress: spec.token,\n      entrypoint: \"approve\",\n      calldata: [this.config.pool, `0x${low.toString(16)}`, `0x${high.toString(16)}`],\n    };\n    return { userAddress: this.address, chainId: this.init.chainId, calls: [toRelayCall(call)] };\n  }\n\n  private async provingBlock(): Promise<number> {\n    const previous = this.lastTransaction ? await this.chain.confirm(this.lastTransaction, this.poll) : -1;\n    return provableBlock(this.chain, previous, this.poll, PROOF_BASE_BLOCK_DEPTH);\n  }\n\n  /** Reads the registered key and refuses to go on when it is not the one this account derives: a replacement is never registered. */\n  private async registered(): Promise<boolean> {\n    const mine = BigInt(viewingPublicKey(this.derived()));\n    const [stored] = await this.chain.call(this.config.pool, \"get_public_key\", [this.address]);\n    const key = BigInt(stored ?? \"0\");\n    if (key === 0n) return false;\n    if (key !== mine) {\n      throw new Error(\n        \"kit/starknet: this account is registered in the pool with a different viewing key. Cavos will not register a replacement; the private balance stays reachable only with the original key.\",\n      );\n    }\n    return true;\n  }\n\n  private derived(): string {\n    this.viewingKey ??= deriveViewingKey(this.init.account.spend.privateKey(), {\n      chainId: this.init.chainId,\n      accountAddress: this.address,\n      poolAddress: this.config.pool,\n    });\n    return this.viewingKey;\n  }\n\n  private sdk(): Promise<PrivacySdk> {\n    return this.init.deps?.sdk ? Promise.resolve(this.init.deps.sdk) : this.init.loadSdk();\n  }\n\n  private client(): Promise<TransfersClient> {\n    this.transfers ??= this.createClient().catch((error: unknown) => {\n      this.transfers = undefined;\n      throw error;\n    });\n    return this.transfers;\n  }\n\n  private async createClient(): Promise<TransfersClient> {\n    const sdk = await this.sdk();\n    const deps = this.init.deps;\n    const ohttp = this.config.ohttp ?? true;\n    const chainId = this.init.chainId as ProofProviderConfig[\"chainId\"];\n    const params: CreateParams = {\n      account: {\n        address: this.address,\n        signer: new Signer(this.init.account.spend.privateKey()) as unknown as CreateParams[\"account\"][\"signer\"],\n      },\n      viewingKeyProvider: { getViewingKey: async () => this.derived() },\n      provingProvider: deps?.provingProvider ?? {\n        url: this.config.prover,\n        chainId,\n        nodeUrl: this.config.rpcUrl ?? this.init.rpcUrl,\n        ...(ohttp ? { ohttp: true } : {}),\n      },\n      discoveryProvider:\n        deps?.discoveryProvider ??\n        new sdk.IndexerDiscoveryProvider(this.config.discovery, this.config.pool, ohttp ? { ohttp: true } : {}),\n      poolContractAddress: this.config.pool,\n      ...(deps?.proofInvocationFactory ? { proofInvocationFactory: deps.proofInvocationFactory } : {}),\n    };\n    return sdk.createPrivateTransfers(params);\n  }\n\n  private async scrubbed<T>(work: () => Promise<T>): Promise<T> {\n    try {\n      return await work();\n    } catch (error) {\n      throw this.redact(error);\n    }\n  }\n\n  private redact(error: unknown): Error {\n    const secrets = [this.viewingKey, this.init.account.spend.privateKey()].filter((value): value is string => Boolean(value));\n    let message = error instanceof Error ? error.message : String(error);\n    for (const secret of secrets) {\n      const bare = BigInt(secret).toString(16);\n      message = message.split(secret).join(\"[redacted]\").replace(new RegExp(bare, \"gi\"), \"[redacted]\");\n    }\n    return new Error(message);\n  }\n}\n\nfunction toRelayCall(call: Call): RelayCall {\n  return {\n    to: call.contractAddress,\n    selector: /^0x[0-9a-f]+$/i.test(call.entrypoint) ? call.entrypoint : hash.getSelectorFromName(call.entrypoint),\n    calldata: CallData.compile(call.calldata ?? []).map((felt) => num.toHex(felt)),\n  };\n}\n\nfunction requireAddress(value: string, 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/starknet: ${field} must be a 0x-prefixed Starknet address`);\n  }\n  return value;\n}\n\nfunction requireAmount(amount: bigint): void {\n  if (typeof amount !== \"bigint\" || amount <= 0n) throw new Error(\"kit/starknet: amount must be a positive number of base units\");\n}\n\nexport function createPrivacySession(init: PrivacySessionInit): PrivacySession {\n  return new PrivacySession(init);\n}\n\n/** Stands in for the operations when nothing can run them, so every call says why. */\nexport function unavailablePrivacy(reason: string): PrivacyOperations {\n  const refuse = async (): Promise<never> => {\n    throw new Error(reason);\n  };\n  return { status: refuse, balance: refuse, register: refuse, deposit: refuse, transfer: refuse, withdraw: refuse };\n}\n"]}