{"version":3,"sources":["../../src/react-native/runtime.ts","../../src/react-native/encoding.ts","../../src/react-native/NativeModule.ts","../../src/react-native/NativeDeviceUnwrapKey.ts","../../src/react-native/CavosNative.ts","../../src/react-native/NativeCavosAuth.ts","../../src/react-native/NativePasskeys.ts","../../src/react-native/CavosAuthModal.tsx","../../src/react-native/CavosProvider.tsx","../../src/react-native/NativeControlSigner.ts","../../src/react-native/index.ts"],"names":["Buffer","Cavos","useState","jsxs","jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["import \"react-native-get-random-values\";\nimport { Buffer } from \"buffer\";\n\n// The `buffer` npm polyfill (feross/buffer) does NOT override `subarray`, so it\n// inherits Uint8Array.prototype.subarray, which returns a plain Uint8Array —\n// unlike Node's Buffer, whose subarray returns a Buffer. @stellar/js-xdr's\n// XdrWriter.finalize() does `this._buffer.subarray(...)`, and Transaction.toXDR()\n// then calls `.toString(\"base64\")` on the result. On a plain Uint8Array that\n// yields comma-joined decimal bytes instead of base64, producing malformed XDR\n// that the relayer rejects with \"Invalid transaction encoding\". Re-parent the\n// result to Buffer.prototype so `.toString(\"base64\")` works in React Native.\nconst bufferProto = Buffer.prototype as unknown as {\n  subarray: (start?: number, end?: number) => Uint8Array;\n  __cavosSubarrayPatched?: boolean;\n};\nif (!bufferProto.__cavosSubarrayPatched) {\n  const originalSubarray = bufferProto.subarray;\n  bufferProto.subarray = function patchedSubarray(this: Uint8Array, start?: number, end?: number) {\n    const result = originalSubarray.call(this, start, end);\n    Object.setPrototypeOf(result, Buffer.prototype);\n    return result;\n  };\n  bufferProto.__cavosSubarrayPatched = true;\n}\n\nconst runtime = globalThis as typeof globalThis & { Buffer?: typeof Buffer };\nruntime.Buffer ??= Buffer;\n","import { Buffer } from \"buffer\";\n\nexport function toBase64(bytes: Uint8Array): string {\n  return Buffer.from(bytes).toString(\"base64\");\n}\n\nexport function fromBase64(value: string): Uint8Array {\n  return new Uint8Array(Buffer.from(value, \"base64\"));\n}\n\nexport function utf8(value: string): Uint8Array {\n  return new Uint8Array(Buffer.from(value, \"utf8\"));\n}\n\nexport function decodeUtf8(value: Uint8Array): string {\n  return Buffer.from(value).toString(\"utf8\");\n}\n\nexport function base64url(bytes: Uint8Array): string {\n  return Buffer.from(bytes).toString(\"base64url\");\n}\n","import { requireNativeModule } from \"expo-modules-core\";\n\nexport type NativeSecurityLevel =\n  | \"secure-enclave\"\n  | \"strongbox\"\n  | \"tee\"\n  | \"os-protected\"\n  | \"development\";\n\nexport interface NativeCapabilities {\n  signingKey: NativeSecurityLevel;\n  ecdhKey: NativeSecurityLevel;\n  passkey: boolean;\n  passkeyPrf: boolean;\n}\n\nexport interface NativeKeyResult {\n  publicKey: string;\n  securityLevel: NativeSecurityLevel;\n}\n\nexport interface NativePasskeyRegistration {\n  credentialId: string;\n  publicKey: string;\n  prfSecret?: string;\n}\n\nexport interface NativePasskeyAssertionResult {\n  authenticatorData: string;\n  clientDataJSON: string;\n  signature: string;\n  prfSecret?: string;\n}\n\n/** Result of native ed25519 signing — only signature + public key, never seed. */\nexport interface NativeControlSignResult {\n  signature: string;\n  publicKey: string;\n}\n\n/** Result of native control public key derivation. */\nexport interface NativeControlPublicKeyResult {\n  publicKey: string;\n}\n\nexport interface CavosKitNativeModule {\n  getOrCreateSigningKey(alias: string): Promise<NativeKeyResult>;\n  sign(alias: string, payload: string): Promise<string>;\n  getOrCreateUnwrapKey(alias: string): Promise<NativeKeyResult>;\n  deriveSharedSecret(alias: string, peerPublicKey: string): Promise<string>;\n  deleteKeys(alias: string): Promise<void>;\n  getCapabilities(): Promise<NativeCapabilities>;\n  randomBytes(length: number): Promise<string>;\n  getStoredValue(key: string): Promise<string | null>;\n  setStoredValue(key: string, value: string | null): Promise<void>;\n  createPasskey(optionsJson: string): Promise<NativePasskeyRegistration>;\n  getPasskey(optionsJson: string): Promise<NativePasskeyAssertionResult>;\n\n  /**\n   * Native ed25519 signing — the control seed never crosses the JS bridge.\n   *\n   * Performs ECDH → KEK derivation → DEK unwrap → control seed open → ed25519 sign\n   * entirely in native code. The seed is wiped after signing.\n   *\n   * @param alias - Device key alias (same as getOrCreateUnwrapKey)\n   * @param deviceWrap - Base64 ECIES wrap: ephPubCompressed(33) || nonce(12) || ct\n   * @param ciphertext - Base64 control ciphertext: nonce(12) || AES-GCM(dek, seed)\n   * @param data - Base64 data to sign\n   * @returns { signature: base64, publicKey: base64 }\n   */\n  unwrapControlAndSign(\n    alias: string,\n    deviceWrap: string,\n    ciphertext: string,\n    data: string,\n  ): Promise<NativeControlSignResult>;\n\n  /**\n   * Get the ed25519 public key for a control seed without exposing it to JS.\n   *\n   * @param alias - Device key alias\n   * @param deviceWrap - Base64 ECIES wrap\n   * @param ciphertext - Base64 control ciphertext\n   * @returns { publicKey: base64 }\n   */\n  unwrapControlPublicKey(\n    alias: string,\n    deviceWrap: string,\n    ciphertext: string,\n  ): Promise<NativeControlPublicKeyResult>;\n}\n\nlet cached: CavosKitNativeModule | undefined;\n\nexport function nativeModule(): CavosKitNativeModule {\n  cached ??= requireNativeModule<CavosKitNativeModule>(\"CavosKit\");\n  return cached!;\n}\n","import { p256 } from \"@noble/curves/p256\";\nimport type { DeviceUnwrapKey } from \"../chains/stellar/DeviceUnwrapKey\";\nimport { deviceSlotId } from \"../chains/stellar/DeviceUnwrapKey\";\nimport { eciesKEKFromX, unwrapDEK } from \"../chains/stellar/envelope\";\nimport { fromBase64, toBase64 } from \"./encoding\";\nimport { nativeModule, type NativeSecurityLevel } from \"./NativeModule\";\n\nexport type MinimumKeySecurity = \"os-protected\" | \"hardware\";\n\nexport interface NativeDeviceUnwrapKeyOptions {\n  keyId: string;\n  minimumKeySecurity?: MinimumKeySecurity;\n}\n\nexport class NativeDeviceUnwrapKey implements DeviceUnwrapKey {\n  private constructor(\n    readonly keyId: string,\n    readonly securityLevel: NativeSecurityLevel,\n    private readonly publicKey: Uint8Array,\n  ) {}\n\n  static async loadOrCreate(opts: NativeDeviceUnwrapKeyOptions): Promise<NativeDeviceUnwrapKey> {\n    const result = await nativeModule().getOrCreateUnwrapKey(opts.keyId);\n    assertSecurity(result.securityLevel, opts.minimumKeySecurity ?? \"os-protected\");\n    const publicKey = fromBase64(result.publicKey);\n    if (publicKey.length !== 65 || publicKey[0] !== 4) throw new Error(\"kit/native: invalid ECDH public key\");\n    return new NativeDeviceUnwrapKey(opts.keyId, result.securityLevel, publicKey);\n  }\n\n  publicKeySec1(): Uint8Array {\n    return this.publicKey.slice();\n  }\n\n  slotId(): string {\n    return deviceSlotId(this.publicKey);\n  }\n\n  async unwrap(blob: Uint8Array): Promise<Uint8Array> {\n    const ephemeral = blob.subarray(0, 33);\n    const uncompressed = p256.ProjectivePoint.fromHex(ephemeral).toRawBytes(false);\n    const sharedX = fromBase64(\n      await nativeModule().deriveSharedSecret(this.keyId, toBase64(uncompressed)),\n    );\n    return unwrapDEK(blob.subarray(33), eciesKEKFromX(sharedX, ephemeral));\n  }\n}\n\nfunction assertSecurity(level: NativeSecurityLevel, minimum: MinimumKeySecurity): void {\n  if (minimum === \"hardware\" && ![\"secure-enclave\", \"strongbox\", \"tee\"].includes(level)) {\n    throw new Error(`kit/native: hardware-backed key required; device provided ${level}`);\n  }\n}\n","import { Cavos as CoreCavos, type CavosWallet, type ConnectOptions } from \"../Cavos\";\nimport type { CavosSolana, RecoverSolanaOptions } from \"../chains/solana/CavosSolana\";\nimport { NativeDeviceUnwrapKey, type MinimumKeySecurity } from \"./NativeDeviceUnwrapKey\";\nimport { nativeModule } from \"./NativeModule\";\n\nexport interface NativeConnectOptions extends ConnectOptions {\n  minimumKeySecurity?: MinimumKeySecurity;\n}\n\nfunction nativeFactories(minimumKeySecurity: MinimumKeySecurity = \"os-protected\") {\n  return {\n    createStellarDeviceKey: (keyId: string) =>\n      NativeDeviceUnwrapKey.loadOrCreate({ keyId: `${keyId}:stellar-unwrap`, minimumKeySecurity }),\n  };\n}\n\n/** React Native facade with platform keys injected for every chain. */\nexport const Cavos = {\n  connect(opts: NativeConnectOptions): Promise<CavosWallet> {\n    const factories = nativeFactories(opts.minimumKeySecurity);\n    return CoreCavos.connect({\n      ...opts,\n      createStellarDeviceKey: opts.createStellarDeviceKey ?? factories.createStellarDeviceKey,\n    });\n  },\n\n  recoverSolana(opts: RecoverSolanaOptions & { minimumKeySecurity?: MinimumKeySecurity }) {\n    return Cavos.connect({\n      chain: \"solana\",\n      network: opts.network === \"solana-mainnet\" ? \"mainnet\" : \"testnet\",\n      appSalt: opts.appSalt,\n      ...(opts.identity ? { identity: opts.identity } : {}),\n      ...(opts.auth ? { auth: opts.auth } : {}),\n      ...(opts.appId ? { appId: opts.appId } : {}),\n      ...(opts.environment ? { environment: opts.environment } : {}),\n      ...(opts.backendUrl ? { backendUrl: opts.backendUrl } : {}),\n      ...(opts.rpcUrl ? { rpcUrl: opts.rpcUrl } : {}),\n      ...(opts.relayer ? { relayer: opts.relayer } : {}),\n      ...(opts.registry ? { registry: opts.registry } : {}),\n      ...(opts.socialRecovery ? { socialRecovery: opts.socialRecovery } : {}),\n      ...(opts.credential ? { socialRecoveryCredential: opts.credential } : {}),\n      ...(opts.passkey ? { passkeyPrf: opts.passkey } : {}),\n      minimumKeySecurity: opts.minimumKeySecurity,\n    }) as Promise<CavosSolana>;\n  },\n};\n\nexport async function deleteDeviceKeys(keyId: string): Promise<void> {\n  await nativeModule().deleteKeys(keyId);\n  await nativeModule().deleteKeys(`${keyId}:stellar-unwrap`);\n}\n","import * as WebBrowser from \"expo-web-browser\";\nimport type { AuthProvider, Identity } from \"../auth/AuthProvider\";\nimport { decodeUtf8, fromBase64 } from \"./encoding\";\nimport {\n  assertLoginBinding,\n  loginNonce,\n  loginSecretFrom,\n  requiresLoginBinding,\n} from \"../auth/loginBinding\";\nimport { nativeModule } from \"./NativeModule\";\nimport {\n  createSocialRecoveryCredential,\n  isSocialRecoveryIssuer,\n  type SocialRecoveryCredential,\n} from \"../recovery/SocialRecoveryCredential\";\n\nexport interface NativeCavosAuthOptions {\n  appId: string;\n  redirectUri: string;\n  backendUrl?: string;\n}\n\nexport type NativeCavosAuthErrorCode =\n  | \"invalid-config\"\n  | \"cancelled\"\n  | \"callback-invalid\"\n  | \"not-authenticated\"\n  | \"http-error\"\n  | \"unsupported\";\n\nexport class NativeCavosAuthError extends Error {\n  readonly name = \"NativeCavosAuthError\";\n  constructor(readonly code: NativeCavosAuthErrorCode, message: string, readonly status?: number) {\n    super(message);\n  }\n}\n\nexport class NativeCavosAuth implements AuthProvider {\n  private readonly backendUrl: string;\n  private readonly storageKey: string;\n  private last: Identity | null = null;\n  /** Never persisted; every recovery requires a fresh social login. */\n  private recoveryCredential: SocialRecoveryCredential | null = null;\n  /** The secret of the login in flight; see `auth/loginBinding`. */\n  private loginSecret: string | null = null;\n\n  constructor(private readonly opts: NativeCavosAuthOptions) {\n    if (!opts.appId) throw new NativeCavosAuthError(\"invalid-config\", \"kit/native-auth: appId is required\");\n    if (!opts.redirectUri) throw new NativeCavosAuthError(\"invalid-config\", \"kit/native-auth: redirectUri is required\");\n    this.backendUrl = opts.backendUrl ?? \"https://cavos.xyz\";\n    this.storageKey = `cavos-kit:identity:${opts.appId}`;\n  }\n\n  async restoreIdentity(): Promise<Identity | null> {\n    const raw = await nativeModule().getStoredValue(this.storageKey);\n    if (!raw) return null;\n    try {\n      const identity = JSON.parse(raw) as Identity;\n      if (!identity.userId) return null;\n      this.last = identity;\n      return identity;\n    } catch {\n      return null;\n    }\n  }\n\n  async clearStoredIdentity(): Promise<void> {\n    this.last = null;\n    this.recoveryCredential = null;\n    await nativeModule().setStoredValue(this.storageKey, null);\n  }\n\n  async login(provider: \"google\" | \"apple\"): Promise<Identity> {\n    // Kept in memory: the system browser returns to this same call, and a\n    // callback that arrives in a new process is refused (see `loginBinding`).\n    this.loginSecret = loginSecretFrom(fromBase64(await nativeModule().randomBytes(32)));\n    const params = new URLSearchParams({\n      nonce: loginNonce(this.loginSecret),\n      redirect_uri: this.opts.redirectUri,\n      app_id: this.opts.appId,\n    });\n    const { url } = await this.get(`/api/oauth/v2/${provider}?${params}`);\n    const result = await WebBrowser.openAuthSessionAsync(url, this.opts.redirectUri);\n    if (result.type !== \"success\" || !result.url) {\n      throw new NativeCavosAuthError(\n        result.type === \"cancel\" ? \"cancelled\" : \"callback-invalid\",\n        result.type === \"cancel\" ? \"kit/native-auth: login cancelled\" : \"kit/native-auth: login failed\",\n      );\n    }\n    return this.handleCallback(result.url, provider);\n  }\n\n  async sendOtp(_email: string): Promise<void> {\n    throw emailUnsupported();\n  }\n\n  async verifyOtp(_email: string, _code: string): Promise<Identity> {\n    throw emailUnsupported();\n  }\n\n  async handleCallback(input: string, provider = \"oauth\"): Promise<Identity> {\n    const callbackCode = extractCallbackCode(input);\n    if (callbackCode) {\n      const result = await this.post(\"/api/oauth/callback/exchange\", {\n        code: callbackCode,\n        app_id: this.opts.appId,\n        redirect_uri: this.opts.redirectUri,\n      });\n      return this.identityFromAuthData(JSON.stringify(result), provider);\n    }\n    let authData = input;\n    if (input.includes(\"auth_data=\") || input.includes(\"zk_auth_data=\")) {\n      const params = new URL(input).searchParams;\n      authData = params.get(\"auth_data\") ?? params.get(\"zk_auth_data\") ?? input;\n    }\n    return this.identityFromAuthData(authData, provider);\n  }\n\n  async authenticate(): Promise<Identity> {\n    if (!this.last) throw new NativeCavosAuthError(\"not-authenticated\", \"kit/native-auth: complete login first\");\n    return this.last;\n  }\n\n  getSocialRecoveryCredential(): SocialRecoveryCredential {\n    if (!this.recoveryCredential) {\n      throw new NativeCavosAuthError(\n        \"not-authenticated\",\n        \"kit/native-auth: complete a fresh social login before recovery\",\n      );\n    }\n    return this.recoveryCredential;\n  }\n\n  private async identityFromAuthData(data: string, provider: string, email?: string): Promise<Identity> {\n    let token = data;\n    try {\n      const parsed = JSON.parse(data);\n      token = parsed.id_token ?? parsed.jwt ?? parsed.token ?? data;\n    } catch { /* raw JWT */ }\n    const payload = token.split(\".\")[1];\n    if (!payload) throw new NativeCavosAuthError(\"callback-invalid\", \"kit/native-auth: malformed JWT\");\n    const claims = JSON.parse(decodeUtf8(fromBase64(normalizeBase64url(payload))));\n    let loginSecret: string | undefined;\n    if (requiresLoginBinding(claims.iss)) {\n      const kept = this.loginSecret;\n      this.loginSecret = null;\n      try {\n        assertLoginBinding(claims.nonce, kept);\n      } catch (error) {\n        throw new NativeCavosAuthError(\"callback-invalid\", (error as Error).message);\n      }\n      loginSecret = kept;\n    }\n    this.recoveryCredential = isSocialRecoveryIssuer(claims.iss)\n      ? createSocialRecoveryCredential(token, loginSecret)\n      : null;\n    const identity: Identity = {\n      userId: String(claims.sub ?? claims.user_id ?? claims.uid),\n      email: claims.email ?? email,\n      name: claims.name,\n      provider: claims.provider ?? provider,\n    };\n    this.last = identity;\n    await nativeModule().setStoredValue(this.storageKey, JSON.stringify(identity));\n    return identity;\n  }\n\n  private async get(path: string): Promise<any> {\n    const response = await fetch(`${this.backendUrl}${path}`);\n    if (!response.ok) throw new NativeCavosAuthError(\"http-error\", `kit/native-auth: ${path} -> ${response.status} ${await response.text()}`, response.status);\n    return response.json();\n  }\n\n  private async post(path: string, body: unknown): Promise<any> {\n    const response = await fetch(`${this.backendUrl}${path}`, {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\" },\n      body: JSON.stringify(body),\n    });\n    if (!response.ok) throw new NativeCavosAuthError(\"http-error\", `kit/native-auth: ${path} -> ${response.status} ${await response.text()}`, response.status);\n    return response.json();\n  }\n}\n\nfunction normalizeBase64url(value: string): string {\n  const base = value.replace(/-/g, \"+\").replace(/_/g, \"/\");\n  return base + \"=\".repeat((4 - base.length % 4) % 4);\n}\n\nfunction extractCallbackCode(input: string): string | null {\n  if (/^[A-Za-z0-9_-]{43}$/.test(input)) return input;\n  try { return new URL(input).searchParams.get(\"cavos_auth_code\"); }\n  catch { return null; }\n}\n\nfunction emailUnsupported(): NativeCavosAuthError {\n  return new NativeCavosAuthError(\n    \"unsupported\",\n    \"kit/native-auth: email sign-in is not supported in React Native yet. It needs to verify the enclave's attestation, which this build cannot do. Use Google or Apple.\",\n  );\n}\n","import { sha256 } from \"@noble/hashes/sha256\";\nimport type { PasskeyEnrollParams, PasskeyPrfProvider } from \"../signer/PasskeyProvider\";\nimport { fromBase64, toBase64, utf8 } from \"./encoding\";\nimport { nativeModule } from \"./NativeModule\";\n\nexport interface NativePasskeyOptions {\n  rpId: string;\n  rpName?: string;\n}\n\nconst STELLAR_PRF_SALT = sha256(utf8(\"cavos-stellar-prf-v1\"));\n\nexport class NativePasskeyPrf implements PasskeyPrfProvider {\n  constructor(private readonly opts: NativePasskeyOptions) {\n    if (!opts.rpId) throw new Error(\"kit/native: rpId is required for passkeys\");\n  }\n\n  async enroll(params: PasskeyEnrollParams): Promise<{ credentialId: Uint8Array; secret?: Uint8Array }> {\n    const result = await nativeModule().createPasskey(JSON.stringify({\n      rpId: this.opts.rpId,\n      rpName: this.opts.rpName ?? this.opts.rpId,\n      userId: toBase64(userHandle(params.userId)),\n      userName: params.userName,\n      displayName: params.displayName ?? params.userName,\n      challenge: toBase64(await randomBytes(32)),\n      prfSalt: toBase64(STELLAR_PRF_SALT),\n    }));\n    return {\n      credentialId: fromBase64(result.credentialId),\n      ...(result.prfSecret ? { secret: fromBase64(result.prfSecret) } : {}),\n    };\n  }\n\n  async getSecret(): Promise<Uint8Array> {\n    const result = await nativeModule().getPasskey(JSON.stringify({\n      rpId: this.opts.rpId,\n      challenge: toBase64(await randomBytes(32)),\n      userVerification: \"required\",\n      prfSalt: toBase64(STELLAR_PRF_SALT),\n    }));\n    if (!result.prfSecret) {\n      throw new Error(\"kit/native: passkey PRF is unsupported; use recovery code or another device\");\n    }\n    return fromBase64(result.prfSecret);\n  }\n}\n\nasync function randomBytes(length: number): Promise<Uint8Array> {\n  return fromBase64(await nativeModule().randomBytes(length));\n}\n\nfunction userHandle(userId: string): Uint8Array {\n  const value = utf8(userId);\n  return value.length <= 64 ? value : sha256(value);\n}\n","import { useState } from \"react\";\nimport { ActivityIndicator, Modal, Pressable, SafeAreaView, StyleSheet, Text, TextInput, View } from \"react-native\";\nimport type { CavosModalConfig } from \"./CavosProvider\";\nimport { useCavos } from \"./CavosProvider\";\n\nexport interface CavosAuthModalProps {\n  open: boolean;\n  onClose(): void;\n  config: CavosModalConfig;\n}\n\nexport function CavosAuthModal({ open, onClose, config }: CavosAuthModalProps) {\n  const cavos = useCavos();\n  const [email, setEmail] = useState(\"\");\n  const [code, setCode] = useState(\"\");\n  const [recoveryCode, setRecoveryCode] = useState(\"\");\n  const [generatedRecoveryCode, setGeneratedRecoveryCode] = useState(\"\");\n  const [otpSent, setOtpSent] = useState(false);\n  const [busy, setBusy] = useState(false);\n  const providers = config.providers ?? [\"google\", \"apple\", \"email\"];\n  const color = config.primaryColor ?? \"#111111\";\n\n  async function run(action: () => Promise<unknown>) {\n    setBusy(true);\n    cavos.clearAuthError();\n    try { await action(); }\n    finally { setBusy(false); }\n  }\n\n  const approval = cavos.walletStatus.needsDeviceApproval;\n  const ready = cavos.walletStatus.isReady;\n\n  return <Modal visible={open} animationType=\"slide\" presentationStyle=\"pageSheet\" onRequestClose={onClose}>\n    <SafeAreaView style={styles.safe}>\n      <View style={styles.card}>\n        <View style={styles.header}>\n          <Text style={styles.title}>{config.appName ?? \"Sign in with Cavos\"}</Text>\n          <Pressable onPress={onClose}><Text style={styles.close}>Close</Text></Pressable>\n        </View>\n\n        {busy || cavos.isLoading || cavos.walletStatus.isDeploying ? <ActivityIndicator color={color} /> : null}\n        {cavos.authError ? <Text style={styles.error}>{cavos.authError}</Text> : null}\n\n        {!cavos.isAuthenticated && !busy ? <View style={styles.stack}>\n          {providers.includes(\"google\") ? <Button label=\"Continue with Google\" color={color} onPress={() => run(() => cavos.login(\"google\"))} /> : null}\n          {providers.includes(\"apple\") ? <Button label=\"Continue with Apple\" color={color} onPress={() => run(() => cavos.login(\"apple\"))} /> : null}\n          {providers.includes(\"email\") ? <>\n            <TextInput style={styles.input} value={email} onChangeText={setEmail} keyboardType=\"email-address\" autoCapitalize=\"none\" placeholder=\"Email\" />\n            {otpSent ? <TextInput style={styles.input} value={code} onChangeText={setCode} autoCapitalize=\"none\" autoCorrect={false} placeholder=\"9-character code\" /> : null}\n            <Button color={color} label={otpSent ? \"Verify code\" : \"Send code\"} onPress={() => run(async () => {\n              if (otpSent) await cavos.verifyOtp(email, code);\n              else { await cavos.sendOtp(email); setOtpSent(true); }\n            })} />\n          </> : null}\n        </View> : null}\n\n        {approval && !busy ? <View style={styles.stack}>\n          <Text style={styles.body}>This is a new device. Restore it with your passkey{cavos.chain === \"stellar\" ? \" or recovery code\" : \"\"}.</Text>\n          {cavos.capabilities?.passkey ? <Button color={color} label=\"Approve with passkey\" onPress={() => run(cavos.approveDeviceWithPasskey)} /> : null}\n          {cavos.chain === \"stellar\" ? <>\n            <TextInput style={styles.input} value={recoveryCode} onChangeText={setRecoveryCode} autoCapitalize=\"characters\" placeholder=\"Recovery code\" />\n            <Button color={color} label=\"Recover this device\" onPress={() => run(() => cavos.recover(recoveryCode))} />\n          </> : null}\n        </View> : null}\n\n        {ready && !busy ? <View style={styles.stack}>\n          <Text style={styles.body}>Wallet ready: {cavos.address}</Text>\n          { (config.secureStep === \"optional\" || config.secureStep === \"required\") && cavos.walletStatus.isNewAccount ? <>\n            {cavos.chain === \"stellar\" && cavos.capabilities?.passkey ? <Button color={color} label=\"Secure with passkey\" onPress={() => run(cavos.enrollPasskeyDefault)} /> : null}\n            {cavos.chain === \"stellar\" ? <Button color={color} label=\"Create recovery code\" onPress={() => run(async () => setGeneratedRecoveryCode(await cavos.setupRecovery()))} /> : null}\n            {generatedRecoveryCode ? <Text selectable style={styles.recovery}>{generatedRecoveryCode}</Text> : null}\n          </> : null}\n          <Button color={color} label=\"Done\" onPress={onClose} />\n        </View> : null}\n      </View>\n    </SafeAreaView>\n  </Modal>;\n}\n\nfunction Button({ label, color, onPress }: { label: string; color: string; onPress(): void }) {\n  return <Pressable accessibilityRole=\"button\" style={[styles.button, { backgroundColor: color }]} onPress={onPress}>\n    <Text style={styles.buttonText}>{label}</Text>\n  </Pressable>;\n}\n\nconst styles = StyleSheet.create({\n  safe: { flex: 1, backgroundColor: \"#f5f5f2\" },\n  card: { flex: 1, padding: 24, gap: 24 },\n  header: { flexDirection: \"row\", justifyContent: \"space-between\", alignItems: \"center\" },\n  title: { fontSize: 24, fontWeight: \"700\", color: \"#111\" },\n  close: { fontSize: 16, color: \"#555\" },\n  stack: { gap: 12 },\n  body: { fontSize: 15, lineHeight: 21, color: \"#333\" },\n  error: { color: \"#b42318\", fontSize: 14 },\n  recovery: { color: \"#111\", fontSize: 15, fontFamily: \"monospace\", padding: 12, backgroundColor: \"#ecece6\", borderRadius: 8 },\n  input: { borderWidth: 1, borderColor: \"#d0d0ca\", borderRadius: 10, padding: 14, fontSize: 16, backgroundColor: \"white\" },\n  button: { minHeight: 48, borderRadius: 10, alignItems: \"center\", justifyContent: \"center\", paddingHorizontal: 16 },\n  buttonText: { color: \"white\", fontSize: 16, fontWeight: \"600\" },\n});\n","import {\n  createContext,\n  useCallback,\n  useContext,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n  type ReactNode,\n} from \"react\";\nimport type { Identity } from \"../auth/AuthProvider\";\nimport type { Chain, CavosWallet, NetworkEnv } from \"../Cavos\";\nimport type { ChainCall, ExecuteOptions } from \"../chains/ChainAdapter\";\nimport type { MessageSignature } from \"../signing\";\nimport { generateRecoveryCode } from \"../recovery/recoveryCode\";\nimport { Cavos, type NativeConnectOptions } from \"./CavosNative\";\nimport { NativeCavosAuth } from \"./NativeCavosAuth\";\nimport { NativePasskeyPrf } from \"./NativePasskeys\";\nimport { nativeModule, type NativeCapabilities } from \"./NativeModule\";\nimport type { MinimumKeySecurity } from \"./NativeDeviceUnwrapKey\";\nimport { CavosAuthModal } from \"./CavosAuthModal\";\n\nexport interface CavosConfig {\n  appId: string;\n  environment?: \"development\" | \"production\";\n  chain?: Chain;\n  network: NetworkEnv;\n  appSalt: string;\n  paymasterApiKey?: string;\n  authBackendUrl?: string;\n  rpcUrl?: string;\n  redirectUri: string;\n  rpId: string;\n  minimumKeySecurity?: MinimumKeySecurity;\n}\n\nexport interface CavosModalConfig {\n  appName?: string;\n  providers?: (\"google\" | \"apple\" | \"email\")[];\n  secureStep?: \"optional\" | \"required\" | \"off\";\n  primaryColor?: string;\n  onSuccess?: (address: string) => void;\n}\n\nexport interface WalletStatus {\n  isDeploying: boolean;\n  isReady: boolean;\n  needsDeviceApproval: boolean;\n  hasPasskey: boolean;\n  isNewAccount: boolean;\n}\n\nconst INITIAL_STATUS: WalletStatus = {\n  isDeploying: false,\n  isReady: false,\n  needsDeviceApproval: false,\n  hasPasskey: false,\n  isNewAccount: false,\n};\n\nexport interface CavosContextValue {\n  openModal(): void;\n  closeModal(): void;\n  isAuthenticated: boolean;\n  user: Identity | null;\n  chain: Chain;\n  wallet: CavosWallet | null;\n  address: string | null;\n  walletStatus: WalletStatus;\n  capabilities: NativeCapabilities | null;\n  isLoading: boolean;\n  authError: string | null;\n  clearAuthError(): void;\n  login(provider: \"google\" | \"apple\"): Promise<void>;\n  sendOtp(email: string): Promise<void>;\n  verifyOtp(email: string, code: string): Promise<void>;\n  handleCallback(url: string): Promise<void>;\n  execute(calls: ChainCall[], opts?: ExecuteOptions): Promise<{ transactionHash: string }>;\n  signMessage(message: string | Uint8Array): Promise<MessageSignature>;\n  enrollPasskeyDefault(): Promise<void>;\n  approveDeviceWithPasskey(): Promise<void>;\n  setupRecovery(): Promise<string>;\n  recover(code: string): Promise<void>;\n  logout(): Promise<void>;\n}\n\nconst Context = createContext<CavosContextValue | null>(null);\n\nexport function CavosProvider(props: { config: CavosConfig; modal?: CavosModalConfig; children: ReactNode }) {\n  const { config, modal, children } = props;\n  const configRef = useRef(config);\n  configRef.current = config;\n  const auth = useMemo(() => new NativeCavosAuth({\n    appId: config.appId,\n    redirectUri: config.redirectUri,\n    backendUrl: config.authBackendUrl,\n  }), [config.appId, config.redirectUri, config.authBackendUrl]);\n  const [wallet, setWallet] = useState<CavosWallet | null>(null);\n  const [identity, setIdentity] = useState<Identity | null>(null);\n  const [status, setStatus] = useState(INITIAL_STATUS);\n  const [isLoading, setLoading] = useState(true);\n  const [authError, setAuthError] = useState<string | null>(null);\n  const [modalOpen, setModalOpen] = useState(false);\n  const [capabilities, setCapabilities] = useState<NativeCapabilities | null>(null);\n\n  const connect = useCallback(async (id: Identity, connectOpts?: { passkey?: boolean }): Promise<CavosWallet> => {\n    const cfg = configRef.current;\n    setStatus({ ...INITIAL_STATUS, isDeploying: true });\n    const opts: NativeConnectOptions = {\n      chain: cfg.chain ?? \"starknet\",\n      network: cfg.network,\n      identity: id,\n      appSalt: cfg.appSalt,\n      appId: cfg.appId,\n      environment: cfg.environment,\n      backendUrl: cfg.authBackendUrl,\n      rpcUrl: cfg.rpcUrl,\n      paymasterApiKey: cfg.paymasterApiKey,\n      minimumKeySecurity: cfg.minimumKeySecurity,\n      ...(connectOpts?.passkey\n        ? { passkeyPrf: new NativePasskeyPrf({ rpId: cfg.rpId, rpName: modal?.appName ?? \"Cavos\" }) }\n        : {}),\n    };\n    const next = await Cavos.connect(opts);\n    let hasPasskey = false;\n    if (next.status === \"needs-device-approval\") {\n      try { hasPasskey = await next.hasPasskey(); } catch { /* factor is optional */ }\n    }\n    setWallet(next);\n    setIdentity(id);\n    setStatus({\n      isDeploying: false,\n      isReady: next.status === \"ready\",\n      needsDeviceApproval: next.status === \"needs-device-approval\",\n      hasPasskey,\n      isNewAccount: next.isNewAccount,\n    });\n    modal?.onSuccess?.(next.address);\n    return next;\n  }, [modal]);\n\n  useEffect(() => {\n    let active = true;\n    Promise.all([nativeModule().getCapabilities(), auth.restoreIdentity()])\n      .then(async ([caps, saved]) => {\n        if (!active) return;\n        setCapabilities(caps);\n        if (saved) await connect(saved);\n      })\n      .catch((error) => active && setAuthError(messageOf(error)))\n      .finally(() => active && setLoading(false));\n    return () => { active = false; };\n  }, [auth, connect]);\n\n  const finishIdentity = useCallback(async (id: Identity) => {\n    setAuthError(null);\n    setLoading(true);\n    try { await connect(id); } finally { setLoading(false); }\n  }, [connect]);\n\n  const login = useCallback(async (provider: \"google\" | \"apple\") => {\n    try { await finishIdentity(await auth.login(provider)); }\n    catch (error) { setAuthError(messageOf(error)); throw error; }\n  }, [auth, finishIdentity]);\n\n  const sendOtp = useCallback(async (email: string) => {\n    try { await auth.sendOtp(email); }\n    catch (error) { setAuthError(messageOf(error)); throw error; }\n  }, [auth]);\n\n  const verifyOtp = useCallback(async (email: string, code: string) => {\n    try { await finishIdentity(await auth.verifyOtp(email, code)); }\n    catch (error) { setAuthError(messageOf(error)); throw error; }\n  }, [auth, finishIdentity]);\n\n  const handleCallback = useCallback(async (url: string) => {\n    try { await finishIdentity(await auth.handleCallback(url)); }\n    catch (error) { setAuthError(messageOf(error)); throw error; }\n  }, [auth, finishIdentity]);\n\n  const execute = useCallback(async (calls: ChainCall[], opts?: ExecuteOptions) => {\n    if (!wallet || wallet.chain !== \"starknet\") {\n      throw new Error(\"kit/native: context execute is Starknet-only; use the typed wallet on Solana or Stellar\");\n    }\n    return wallet.execute(calls, opts);\n  }, [wallet]);\n\n  const signMessage = useCallback(async (message: string | Uint8Array) => {\n    if (!wallet) throw new Error(\"kit/native: not connected\");\n    return wallet.signMessage(message);\n  }, [wallet]);\n\n  const enrollPasskeyDefault = useCallback(async () => {\n    if (!wallet || !identity || wallet.status !== \"ready\") throw new Error(\"kit/native: ready wallet required\");\n    if (wallet.chain !== \"stellar\") {\n      throw new Error(\"kit/native: adding a passkey is not available on Solana and Starknet in React Native yet\");\n    }\n    const passkey = new NativePasskeyPrf({ rpId: config.rpId, rpName: modal?.appName ?? \"Cavos\" });\n    const result = await passkey.enroll({\n      userId: identity.userId,\n      userName: identity.email ?? identity.userId,\n    });\n    await wallet.enrollPasskey(result.secret ?? await passkey.getSecret());\n  }, [wallet, identity, modal?.appName, config.rpId]);\n\n  const approveDeviceWithPasskey = useCallback(async () => {\n    if (!wallet || !identity) throw new Error(\"kit/native: sign in first\");\n    if (wallet.chain === \"stellar\" && !wallet.nativeDek) {\n      const passkey = new NativePasskeyPrf({ rpId: config.rpId, rpName: modal?.appName ?? \"Cavos\" });\n      await wallet.approveThisDeviceWithPasskey(await passkey.getSecret());\n      await connect(identity);\n      return;\n    }\n    await connect(identity, { passkey: true });\n  }, [wallet, identity, modal?.appName, config.rpId, connect]);\n\n  const setupRecovery = useCallback(async () => {\n    if (!wallet) throw new Error(\"kit/native: not connected\");\n    if (wallet.chain !== \"stellar\") throw new Error(\"kit/native: recovery codes are Stellar-only\");\n    const code = generateRecoveryCode();\n    await wallet.setupRecovery(code);\n    return code;\n  }, [wallet]);\n\n  const recover = useCallback(async (code: string) => {\n    if (!identity) throw new Error(\"kit/native: sign in before recovery\");\n    const cfg = configRef.current;\n    if (cfg.chain !== \"stellar\") {\n      await connect(identity);\n      return;\n    }\n    const next = await Cavos.connect({\n      chain: \"stellar\", network: cfg.network, identity, appSalt: cfg.appSalt,\n      appId: cfg.appId, environment: cfg.environment, backendUrl: cfg.authBackendUrl,\n      minimumKeySecurity: cfg.minimumKeySecurity,\n    });\n    if (next.chain === \"stellar\" && next.status === \"needs-device-approval\") {\n      await next.approveThisDeviceWithRecovery(code);\n    }\n    setWallet(next);\n    setStatus({ ...INITIAL_STATUS, isReady: true });\n  }, [identity, connect]);\n\n  const logout = useCallback(async () => {\n    await auth.clearStoredIdentity();\n    setWallet(null);\n    setIdentity(null);\n    setStatus(INITIAL_STATUS);\n    setAuthError(null);\n  }, [auth]);\n\n  const value: CavosContextValue = {\n    openModal: () => setModalOpen(true), closeModal: () => setModalOpen(false),\n    isAuthenticated: !!wallet, user: identity, chain: config.chain ?? \"starknet\",\n    wallet, address: wallet?.address ?? null, walletStatus: status, capabilities,\n    isLoading, authError, clearAuthError: () => setAuthError(null), login,\n    sendOtp,\n    verifyOtp, handleCallback, execute, signMessage, enrollPasskeyDefault,\n    approveDeviceWithPasskey, setupRecovery, recover, logout,\n  };\n\n  return <Context.Provider value={value}>\n    {children}\n    {modal ? <CavosAuthModal open={modalOpen} onClose={() => setModalOpen(false)} config={modal} /> : null}\n  </Context.Provider>;\n}\n\nexport function useCavos(): CavosContextValue {\n  const value = useContext(Context);\n  if (!value) throw new Error(\"useCavos must be used within CavosProvider\");\n  return value;\n}\n\nfunction messageOf(error: unknown): string {\n  return error instanceof Error ? error.message : \"Cavos operation failed\";\n}\n","import { StrKey } from \"@stellar/stellar-sdk\";\nimport { LocalControlKey } from \"../chains/stellar/WebCryptoControlKey\";\nimport { nativeModule } from \"./NativeModule\";\nimport { fromBase64, toBase64 } from \"./encoding\";\n\n/**\n * TODO(android): Implement Kotlin equivalent of iOS unwrapControlAndSign.\n *\n * The iOS implementation (CavosKitModule.swift) uses:\n * - Security framework for P-256 ECDH (SE-backed when available)\n * - CryptoKit for HKDF-SHA256, AES-GCM, Curve25519.Signing\n *\n * For Android, the equivalent would use:\n * - AndroidKeyStore for P-256 ECDH (StrongBox when available)\n * - javax.crypto / BouncyCastle for HKDF, AES-GCM\n * - A pure-Java/Kotlin ed25519 implementation (e.g. TweetNaCl or custom)\n *\n * Until then, NativeControlSigner will throw on Android. The web/JS path\n * (WebCryptoControlKey) works fine on Android React Native since Unit 1\n * ensures the seed is never on the instance.\n */\n\n/**\n * Native ed25519 control key signer for React Native.\n *\n * This implementation keeps the control seed entirely within the native process.\n * Unlike WebCryptoControlKey which imports the seed into WebCrypto (non-extractable),\n * NativeControlSigner never materializes the seed in JavaScript at all — only\n * signatures and the public key cross the JS bridge.\n *\n * **Security model**:\n * - The device's P-256 ECDH key (SE-backed when available) protects the DEK\n * - The DEK unwraps the control seed from the on-chain envelope (cv:ct)\n * - Ed25519 signing happens in native code, using CryptoKit's Curve25519\n * - The native function wipes the seed from memory after signing\n * - No biometric / Face ID prompt — access is AfterFirstUnlockThisDeviceOnly\n *\n * **Usage**:\n * ```ts\n * const signer = await NativeControlSigner.create({\n *   keyId: address,\n *   deviceWrap: env.deviceWraps[deviceKey.slotId()],\n *   ciphertext: env.ct,\n * });\n * const sig = await signer.sign(txHash);\n * ```\n */\nexport class NativeControlSigner extends LocalControlKey {\n  private constructor(\n    readonly keyId: string,\n    private readonly deviceWrapBase64: string,\n    private readonly ciphertextBase64: string,\n    private readonly publicKeyRawBytes: Uint8Array,\n  ) {\n    super();\n  }\n\n  /**\n   * Create a native control signer from the on-chain envelope data.\n   *\n   * NOTE: Currently iOS only. Android support requires a Kotlin implementation\n   * of unwrapControlAndSign — see TODO at top of this file.\n   *\n   * @param opts.keyId - The device key alias (same as used in NativeDeviceUnwrapKey)\n   * @param opts.deviceWrap - This device's ECIES wrap of the DEK from the envelope\n   * @param opts.ciphertext - The cv:ct ciphertext containing the encrypted control seed\n   */\n  static async create(opts: {\n    keyId: string;\n    deviceWrap: Uint8Array;\n    ciphertext: Uint8Array;\n  }): Promise<NativeControlSigner> {\n    // Check if native signing is available\n    const module = nativeModule();\n    if (typeof module.unwrapControlPublicKey !== \"function\") {\n      throw new Error(\n        \"kit/native: NativeControlSigner is iOS-only. Use WebCryptoControlKey on Android.\",\n      );\n    }\n\n    const deviceWrapBase64 = toBase64(opts.deviceWrap);\n    const ciphertextBase64 = toBase64(opts.ciphertext);\n\n    // Get the public key (native unwraps, derives pubkey, wipes seed)\n    const result = await nativeModule().unwrapControlPublicKey(\n      opts.keyId,\n      deviceWrapBase64,\n      ciphertextBase64,\n    );\n\n    const publicKeyRaw = fromBase64(result.publicKey);\n    if (publicKeyRaw.length !== 32) {\n      throw new Error(\"kit/native: invalid ed25519 public key length\");\n    }\n\n    return new NativeControlSigner(\n      opts.keyId,\n      deviceWrapBase64,\n      ciphertextBase64,\n      publicKeyRaw,\n    );\n  }\n\n  publicAddress(): string {\n    return StrKey.encodeEd25519PublicKey(Buffer.from(this.publicKeyRawBytes));\n  }\n\n  publicKeyRaw(): Uint8Array {\n    return this.publicKeyRawBytes;\n  }\n\n  /**\n   * Sign data with the control key, entirely within the native process.\n   *\n   * The native function:\n   * 1. Performs ECDH with the SE-protected device key\n   * 2. Derives KEK and unwraps DEK\n   * 3. Opens the control seed from ciphertext\n   * 4. Signs with ed25519\n   * 5. Wipes the seed from memory\n   * 6. Returns only the signature\n   *\n   * @returns 64-byte Ed25519 signature\n   */\n  async sign(data: Uint8Array): Promise<Uint8Array> {\n    const result = await nativeModule().unwrapControlAndSign(\n      this.keyId,\n      this.deviceWrapBase64,\n      this.ciphertextBase64,\n      toBase64(data),\n    );\n\n    const signature = fromBase64(result.signature);\n    if (signature.length !== 64) {\n      throw new Error(\"kit/native: invalid ed25519 signature length\");\n    }\n\n    return signature;\n  }\n}\n","import \"./runtime\";\n\nexport { Cavos, deleteDeviceKeys } from \"./CavosNative\";\nexport type { NativeConnectOptions } from \"./CavosNative\";\nexport { CavosProvider, useCavos } from \"./CavosProvider\";\nexport type { CavosConfig, CavosModalConfig, CavosContextValue, WalletStatus } from \"./CavosProvider\";\nexport { CavosAuthModal } from \"./CavosAuthModal\";\nexport type { CavosAuthModalProps } from \"./CavosAuthModal\";\nexport { NativeCavosAuth, NativeCavosAuthError } from \"./NativeCavosAuth\";\nexport type { NativeCavosAuthOptions, NativeCavosAuthErrorCode } from \"./NativeCavosAuth\";\nexport { NativeDeviceUnwrapKey } from \"./NativeDeviceUnwrapKey\";\nexport type { NativeDeviceUnwrapKeyOptions, MinimumKeySecurity } from \"./NativeDeviceUnwrapKey\";\nexport { NativeControlSigner } from \"./NativeControlSigner\";\nexport { NativePasskeyPrf } from \"./NativePasskeys\";\nexport type { NativePasskeyOptions } from \"./NativePasskeys\";\nexport type { NativeSecurityLevel, NativeCapabilities } from \"./NativeModule\";\nexport { nativeModule as getCavosNativeModule } from \"./NativeModule\";\n\nimport { nativeModule } from \"./NativeModule\";\nexport const getNativeCapabilities = () => nativeModule().getCapabilities();\n\nexport type { CavosWallet, Chain, NetworkEnv } from \"../Cavos\";\nexport type { Identity } from \"../auth/AuthProvider\";\n"]}