{"version":3,"sources":["../../src/storage/SecureStorage.ts","../../src/security/KeyManager.ts","../../src/storage/BackupService.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Secure Storage Interface\n * Platform-agnostic interface for secure key storage\n */\nexport interface SecureStorageAdapter {\n  /**\n   * Store a value securely\n   */\n  setItem(key: string, value: string): Promise<void>;\n\n  /**\n   * Retrieve a value\n   */\n  getItem(key: string): Promise<string | null>;\n\n  /**\n   * Remove a value\n   */\n  removeItem(key: string): Promise<void>;\n\n  /**\n   * Check if a key exists\n   */\n  hasItem(key: string): Promise<boolean>;\n\n  /**\n   * Clear all stored values\n   */\n  clear(): Promise<void>;\n}\n\n/**\n * iOS Keychain Storage Adapter\n * Uses react-native-keychain for iOS Keychain access\n */\nexport class KeychainStorageAdapter implements SecureStorageAdapter {\n  private serviceName: string;\n\n  constructor(serviceName: string = 'com.zubari.wallet') {\n    this.serviceName = serviceName;\n  }\n\n  async setItem(key: string, value: string): Promise<void> {\n    // In React Native, use react-native-keychain\n    // const Keychain = require('react-native-keychain');\n    // await Keychain.setGenericPassword(key, value, { service: this.serviceName });\n\n    // Placeholder for native implementation\n    if (typeof global !== 'undefined' && (global as any).KeychainModule) {\n      await (global as any).KeychainModule.setItem(this.serviceName, key, value);\n    } else {\n      throw new Error('Keychain not available on this platform');\n    }\n  }\n\n  async getItem(key: string): Promise<string | null> {\n    if (typeof global !== 'undefined' && (global as any).KeychainModule) {\n      return (global as any).KeychainModule.getItem(this.serviceName, key);\n    }\n    throw new Error('Keychain not available on this platform');\n  }\n\n  async removeItem(key: string): Promise<void> {\n    if (typeof global !== 'undefined' && (global as any).KeychainModule) {\n      await (global as any).KeychainModule.removeItem(this.serviceName, key);\n    } else {\n      throw new Error('Keychain not available on this platform');\n    }\n  }\n\n  async hasItem(key: string): Promise<boolean> {\n    const value = await this.getItem(key);\n    return value !== null;\n  }\n\n  async clear(): Promise<void> {\n    if (typeof global !== 'undefined' && (global as any).KeychainModule) {\n      await (global as any).KeychainModule.clear(this.serviceName);\n    } else {\n      throw new Error('Keychain not available on this platform');\n    }\n  }\n}\n\n/**\n * Android Keystore Storage Adapter\n * Uses Android Keystore for secure storage\n */\nexport class KeystoreStorageAdapter implements SecureStorageAdapter {\n  private alias: string;\n\n  constructor(alias: string = 'zubari_wallet_keys') {\n    this.alias = alias;\n  }\n\n  async setItem(key: string, value: string): Promise<void> {\n    // In React Native, use react-native-encrypted-storage or similar\n    // const EncryptedStorage = require('react-native-encrypted-storage');\n    // await EncryptedStorage.setItem(key, value);\n\n    if (typeof global !== 'undefined' && (global as any).KeystoreModule) {\n      await (global as any).KeystoreModule.setItem(this.alias, key, value);\n    } else {\n      throw new Error('Keystore not available on this platform');\n    }\n  }\n\n  async getItem(key: string): Promise<string | null> {\n    if (typeof global !== 'undefined' && (global as any).KeystoreModule) {\n      return (global as any).KeystoreModule.getItem(this.alias, key);\n    }\n    throw new Error('Keystore not available on this platform');\n  }\n\n  async removeItem(key: string): Promise<void> {\n    if (typeof global !== 'undefined' && (global as any).KeystoreModule) {\n      await (global as any).KeystoreModule.removeItem(this.alias, key);\n    } else {\n      throw new Error('Keystore not available on this platform');\n    }\n  }\n\n  async hasItem(key: string): Promise<boolean> {\n    const value = await this.getItem(key);\n    return value !== null;\n  }\n\n  async clear(): Promise<void> {\n    if (typeof global !== 'undefined' && (global as any).KeystoreModule) {\n      await (global as any).KeystoreModule.clear(this.alias);\n    } else {\n      throw new Error('Keystore not available on this platform');\n    }\n  }\n}\n\n/**\n * Web Encrypted LocalStorage Adapter\n * Uses Web Crypto API for encryption with localStorage\n */\nexport class WebEncryptedStorageAdapter implements SecureStorageAdapter {\n  private encryptionKey: CryptoKey | null = null;\n  private storagePrefix: string;\n\n  constructor(storagePrefix: string = 'zubari_') {\n    this.storagePrefix = storagePrefix;\n  }\n\n  /**\n   * Initialize with a password-derived key\n   */\n  async initialize(password: string): Promise<void> {\n    const encoder = new TextEncoder();\n    const salt = this.getSalt();\n\n    const keyMaterial = await crypto.subtle.importKey(\n      'raw',\n      encoder.encode(password),\n      'PBKDF2',\n      false,\n      ['deriveKey']\n    );\n\n    this.encryptionKey = await crypto.subtle.deriveKey(\n      {\n        name: 'PBKDF2',\n        salt: salt.buffer as ArrayBuffer,\n        iterations: 100000,\n        hash: 'SHA-256',\n      },\n      keyMaterial,\n      { name: 'AES-GCM', length: 256 },\n      false,\n      ['encrypt', 'decrypt']\n    );\n  }\n\n  private getSalt(): Uint8Array {\n    const saltKey = `${this.storagePrefix}salt`;\n    let saltHex = localStorage.getItem(saltKey);\n\n    if (!saltHex) {\n      const salt = crypto.getRandomValues(new Uint8Array(16));\n      saltHex = Array.from(salt)\n        .map((b) => b.toString(16).padStart(2, '0'))\n        .join('');\n      localStorage.setItem(saltKey, saltHex);\n    }\n\n    return new Uint8Array(\n      saltHex.match(/.{1,2}/g)!.map((byte) => parseInt(byte, 16))\n    );\n  }\n\n  async setItem(key: string, value: string): Promise<void> {\n    if (!this.encryptionKey) {\n      throw new Error('Storage not initialized. Call initialize() first.');\n    }\n\n    const encoder = new TextEncoder();\n    const iv = crypto.getRandomValues(new Uint8Array(12));\n\n    const encrypted = await crypto.subtle.encrypt(\n      { name: 'AES-GCM', iv },\n      this.encryptionKey,\n      encoder.encode(value)\n    );\n\n    const combined = new Uint8Array(iv.length + encrypted.byteLength);\n    combined.set(iv);\n    combined.set(new Uint8Array(encrypted), iv.length);\n\n    const base64 = btoa(String.fromCharCode(...combined));\n    localStorage.setItem(`${this.storagePrefix}${key}`, base64);\n  }\n\n  async getItem(key: string): Promise<string | null> {\n    if (!this.encryptionKey) {\n      throw new Error('Storage not initialized. Call initialize() first.');\n    }\n\n    const base64 = localStorage.getItem(`${this.storagePrefix}${key}`);\n    if (!base64) return null;\n\n    try {\n      const combined = new Uint8Array(\n        atob(base64)\n          .split('')\n          .map((c) => c.charCodeAt(0))\n      );\n\n      const iv = combined.slice(0, 12);\n      const encrypted = combined.slice(12);\n\n      const decrypted = await crypto.subtle.decrypt(\n        { name: 'AES-GCM', iv },\n        this.encryptionKey,\n        encrypted\n      );\n\n      const decoder = new TextDecoder();\n      return decoder.decode(decrypted);\n    } catch {\n      return null;\n    }\n  }\n\n  async removeItem(key: string): Promise<void> {\n    localStorage.removeItem(`${this.storagePrefix}${key}`);\n  }\n\n  async hasItem(key: string): Promise<boolean> {\n    return localStorage.getItem(`${this.storagePrefix}${key}`) !== null;\n  }\n\n  async clear(): Promise<void> {\n    const keysToRemove: string[] = [];\n\n    for (let i = 0; i < localStorage.length; i++) {\n      const key = localStorage.key(i);\n      if (key?.startsWith(this.storagePrefix)) {\n        keysToRemove.push(key);\n      }\n    }\n\n    keysToRemove.forEach((key) => localStorage.removeItem(key));\n  }\n}\n\n/**\n * In-Memory Storage Adapter (for testing)\n */\nexport class MemoryStorageAdapter implements SecureStorageAdapter {\n  private storage: Map<string, string> = new Map();\n\n  async setItem(key: string, value: string): Promise<void> {\n    this.storage.set(key, value);\n  }\n\n  async getItem(key: string): Promise<string | null> {\n    return this.storage.get(key) || null;\n  }\n\n  async removeItem(key: string): Promise<void> {\n    this.storage.delete(key);\n  }\n\n  async hasItem(key: string): Promise<boolean> {\n    return this.storage.has(key);\n  }\n\n  async clear(): Promise<void> {\n    this.storage.clear();\n  }\n}\n\n/**\n * Secure Storage Factory\n * Creates appropriate storage adapter based on platform\n */\nexport function createSecureStorage(): SecureStorageAdapter {\n  // Check for React Native\n  if (\n    typeof global !== 'undefined' &&\n    (global as any).nativeModuleProxy !== undefined\n  ) {\n    // Check platform\n    const Platform = (global as any).Platform;\n    if (Platform?.OS === 'ios') {\n      return new KeychainStorageAdapter();\n    } else if (Platform?.OS === 'android') {\n      return new KeystoreStorageAdapter();\n    }\n  }\n\n  // Check for browser environment\n  if (typeof window !== 'undefined' && typeof localStorage !== 'undefined') {\n    return new WebEncryptedStorageAdapter();\n  }\n\n  // Fallback to memory storage (for Node.js/testing)\n  return new MemoryStorageAdapter();\n}\n","/**\n * KeyManager - Secure key storage and encryption\n *\n * Handles seed phrase encryption using AES-256-GCM\n * with PBKDF2 key derivation from user password.\n */\nexport class KeyManager {\n  private static readonly ALGORITHM = 'AES-GCM';\n  private static readonly KEY_LENGTH = 256;\n  private static readonly IV_LENGTH = 12;\n  private static readonly SALT_LENGTH = 16;\n  private static readonly PBKDF2_ITERATIONS = 100000;\n\n  /**\n   * Encrypt a seed phrase with a password\n   */\n  static async encryptSeed(seed: string, password: string): Promise<string> {\n    const encoder = new TextEncoder();\n    const seedData = encoder.encode(seed);\n\n    // Generate random salt and IV\n    const salt = crypto.getRandomValues(new Uint8Array(this.SALT_LENGTH));\n    const iv = crypto.getRandomValues(new Uint8Array(this.IV_LENGTH));\n\n    // Derive key from password\n    const key = await this.deriveKey(password, salt);\n\n    // Encrypt\n    const encrypted = await crypto.subtle.encrypt(\n      { name: this.ALGORITHM, iv },\n      key,\n      seedData\n    );\n\n    // Combine salt + iv + encrypted data\n    const combined = new Uint8Array(salt.length + iv.length + encrypted.byteLength);\n    combined.set(salt, 0);\n    combined.set(iv, salt.length);\n    combined.set(new Uint8Array(encrypted), salt.length + iv.length);\n\n    // Return as base64\n    return btoa(String.fromCharCode(...combined));\n  }\n\n  /**\n   * Decrypt a seed phrase with a password\n   */\n  static async decryptSeed(encryptedData: string, password: string): Promise<string> {\n    // Decode from base64\n    const combined = new Uint8Array(\n      atob(encryptedData)\n        .split('')\n        .map(c => c.charCodeAt(0))\n    );\n\n    // Extract salt, iv, and encrypted data\n    const salt = combined.slice(0, this.SALT_LENGTH);\n    const iv = combined.slice(this.SALT_LENGTH, this.SALT_LENGTH + this.IV_LENGTH);\n    const encrypted = combined.slice(this.SALT_LENGTH + this.IV_LENGTH);\n\n    // Derive key from password\n    const key = await this.deriveKey(password, salt);\n\n    // Decrypt\n    const decrypted = await crypto.subtle.decrypt(\n      { name: this.ALGORITHM, iv },\n      key,\n      encrypted\n    );\n\n    const decoder = new TextDecoder();\n    return decoder.decode(decrypted);\n  }\n\n  /**\n   * Derive encryption key from password using PBKDF2\n   */\n  private static async deriveKey(\n    password: string,\n    salt: Uint8Array\n  ): Promise<CryptoKey> {\n    const encoder = new TextEncoder();\n    const passwordData = encoder.encode(password);\n\n    // Import password as key material\n    const keyMaterial = await crypto.subtle.importKey(\n      'raw',\n      passwordData,\n      'PBKDF2',\n      false,\n      ['deriveKey']\n    );\n\n    // Derive AES key\n    return crypto.subtle.deriveKey(\n      {\n        name: 'PBKDF2',\n        salt: salt.buffer.slice(salt.byteOffset, salt.byteOffset + salt.byteLength) as ArrayBuffer,\n        iterations: this.PBKDF2_ITERATIONS,\n        hash: 'SHA-256',\n      },\n      keyMaterial,\n      { name: this.ALGORITHM, length: this.KEY_LENGTH },\n      false,\n      ['encrypt', 'decrypt']\n    );\n  }\n\n  /**\n   * Validate a BIP-39 seed phrase (basic validation)\n   */\n  static validateSeedPhrase(seed: string): boolean {\n    const words = seed.trim().split(/\\s+/);\n    // BIP-39 supports 12, 15, 18, 21, or 24 words\n    const validWordCounts = [12, 15, 18, 21, 24];\n    return validWordCounts.includes(words.length);\n  }\n\n  /**\n   * Generate a random encryption key (for backup purposes)\n   */\n  static generateBackupKey(): string {\n    const bytes = crypto.getRandomValues(new Uint8Array(32));\n    return Array.from(bytes)\n      .map(b => b.toString(16).padStart(2, '0'))\n      .join('');\n  }\n}\n","import { KeyManager } from '../security/KeyManager';\n\n/**\n * Backup metadata\n */\nexport interface BackupMetadata {\n  version: number;\n  createdAt: string;\n  checksum: string;\n  networks: string[];\n}\n\n/**\n * Encrypted backup payload\n */\nexport interface EncryptedBackup {\n  metadata: BackupMetadata;\n  encryptedSeed: string;\n  salt: string;\n  iv: string;\n}\n\n/**\n * Backup Service\n * Handles encrypted seed backup to S3 and recovery\n */\nexport class BackupService {\n  private apiUrl: string;\n  private accessToken: string;\n\n  constructor(apiUrl: string, accessToken: string) {\n    this.apiUrl = apiUrl;\n    this.accessToken = accessToken;\n  }\n\n  /**\n   * Export encrypted seed to S3\n   */\n  async exportSeedEncrypted(\n    seed: string,\n    password: string,\n    networks: string[] = []\n  ): Promise<{ backupId: string; checksum: string }> {\n    // Encrypt the seed\n    const encryptedSeed = await KeyManager.encryptSeed(seed, password);\n\n    // Generate checksum for integrity verification\n    const checksum = await this.generateChecksum(encryptedSeed);\n\n    // Create backup payload\n    const backup: EncryptedBackup = {\n      metadata: {\n        version: 1,\n        createdAt: new Date().toISOString(),\n        checksum,\n        networks,\n      },\n      encryptedSeed,\n      salt: this.extractSalt(encryptedSeed),\n      iv: this.extractIV(encryptedSeed),\n    };\n\n    // Upload to API (which stores in S3)\n    const response = await fetch(`${this.apiUrl}/backups`, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n        Authorization: `Bearer ${this.accessToken}`,\n      },\n      body: JSON.stringify({ backup: JSON.stringify(backup) }),\n    });\n\n    if (!response.ok) {\n      const error = await response.json();\n      throw new Error(error.message || 'Failed to create backup');\n    }\n\n    const result = await response.json();\n\n    return {\n      backupId: result.backupId,\n      checksum,\n    };\n  }\n\n  /**\n   * Import encrypted seed from S3\n   */\n  async importSeedEncrypted(password: string): Promise<string> {\n    // Fetch backup from API\n    const response = await fetch(`${this.apiUrl}/backups/latest`, {\n      headers: {\n        Authorization: `Bearer ${this.accessToken}`,\n      },\n    });\n\n    if (!response.ok) {\n      if (response.status === 404) {\n        throw new Error('No backup found');\n      }\n      const error = await response.json();\n      throw new Error(error.message || 'Failed to fetch backup');\n    }\n\n    const result = await response.json();\n    const backup: EncryptedBackup = JSON.parse(result.backup);\n\n    // Verify integrity\n    const checksum = await this.generateChecksum(backup.encryptedSeed);\n    if (checksum !== backup.metadata.checksum) {\n      throw new Error('Backup integrity check failed');\n    }\n\n    // Decrypt the seed\n    const seed = await KeyManager.decryptSeed(backup.encryptedSeed, password);\n\n    return seed;\n  }\n\n  /**\n   * List all backups\n   */\n  async listBackups(): Promise<BackupMetadata[]> {\n    const response = await fetch(`${this.apiUrl}/backups`, {\n      headers: {\n        Authorization: `Bearer ${this.accessToken}`,\n      },\n    });\n\n    if (!response.ok) {\n      const error = await response.json();\n      throw new Error(error.message || 'Failed to list backups');\n    }\n\n    const result = await response.json();\n    return result.backups.map((b: any) => b.metadata);\n  }\n\n  /**\n   * Delete a backup\n   */\n  async deleteBackup(backupId: string): Promise<void> {\n    const response = await fetch(`${this.apiUrl}/backups/${backupId}`, {\n      method: 'DELETE',\n      headers: {\n        Authorization: `Bearer ${this.accessToken}`,\n      },\n    });\n\n    if (!response.ok) {\n      const error = await response.json();\n      throw new Error(error.message || 'Failed to delete backup');\n    }\n  }\n\n  /**\n   * Verify backup can be decrypted\n   */\n  async verifyBackup(password: string): Promise<boolean> {\n    try {\n      await this.importSeedEncrypted(password);\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  /**\n   * Generate SHA-256 checksum\n   */\n  private async generateChecksum(data: string): Promise<string> {\n    const encoder = new TextEncoder();\n    const dataBuffer = encoder.encode(data);\n\n    const hashBuffer = await crypto.subtle.digest('SHA-256', dataBuffer);\n    const hashArray = Array.from(new Uint8Array(hashBuffer));\n\n    return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');\n  }\n\n  /**\n   * Extract salt from encrypted data (first 32 hex chars)\n   */\n  private extractSalt(encryptedData: string): string {\n    return encryptedData.substring(0, 32);\n  }\n\n  /**\n   * Extract IV from encrypted data (chars 32-56)\n   */\n  private extractIV(encryptedData: string): string {\n    return encryptedData.substring(32, 56);\n  }\n}\n\n/**\n * Backup routes handler (for API)\n */\nexport interface BackupRoutesConfig {\n  s3Bucket: string;\n  s3Prefix: string;\n}\n"]}