{"version":3,"sources":["../src/bridge.ts","../src/features/push.ts","../src/features/biometrics.ts","../src/features/camera.ts","../src/features/location.ts","../src/features/haptics.ts","../src/features/storage.ts","../src/features/share.ts","../src/features/network.ts","../src/features/device.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["import type { BridgeMessage, BridgeResponse } from './types';\n\ntype ResponseCallback = (response: BridgeResponse) => void;\ntype EventCallback = (data: unknown) => void;\n\nconst pendingRequests = new Map<string, ResponseCallback>();\nconst eventListeners = new Map<string, Set<EventCallback>>();\n\nlet messageIdCounter = 0;\n\n/**\n * Generates a unique message ID for request/response correlation\n */\nfunction generateMessageId(): string {\n  return `msg_${Date.now()}_${++messageIdCounter}`;\n}\n\n/**\n * Checks if running inside a React Native WebView\n */\nexport function isNativeEnvironment(): boolean {\n  return typeof window !== 'undefined' && !!window.ReactNativeWebView;\n}\n\n/**\n * Sends a message to the native layer and waits for a response\n */\nexport function sendMessage<T = unknown>(\n  type: string,\n  payload?: unknown,\n  timeout = 30000\n): Promise<T> {\n  return new Promise((resolve, reject) => {\n    if (!isNativeEnvironment()) {\n      reject(new Error('Not running in native environment'));\n      return;\n    }\n\n    const id = generateMessageId();\n    const message: BridgeMessage = { id, type, payload };\n\n    const timeoutId = setTimeout(() => {\n      pendingRequests.delete(id);\n      reject(new Error(`Request timed out: ${type}`));\n    }, timeout);\n\n    pendingRequests.set(id, (response: BridgeResponse) => {\n      clearTimeout(timeoutId);\n      pendingRequests.delete(id);\n\n      if (response.success) {\n        resolve(response.data as T);\n      } else {\n        reject(new Error(response.error || 'Unknown native error'));\n      }\n    });\n\n    window.ReactNativeWebView!.postMessage(JSON.stringify(message));\n  });\n}\n\n/**\n * Sends a fire-and-forget message to native (no response expected)\n */\nexport function postMessage(type: string, payload?: unknown): void {\n  if (!isNativeEnvironment()) {\n    return;\n  }\n\n  const id = generateMessageId();\n  const message: BridgeMessage = { id, type, payload };\n  window.ReactNativeWebView!.postMessage(JSON.stringify(message));\n}\n\n/**\n * Subscribes to events from the native layer\n */\nexport function addEventListener(event: string, callback: EventCallback): () => void {\n  if (!eventListeners.has(event)) {\n    eventListeners.set(event, new Set());\n  }\n  eventListeners.get(event)!.add(callback);\n\n  return () => {\n    const listeners = eventListeners.get(event);\n    if (listeners) {\n      listeners.delete(callback);\n      if (listeners.size === 0) {\n        eventListeners.delete(event);\n      }\n    }\n  };\n}\n\n/**\n * Handles messages from the native layer (called from window.onmessage)\n */\nexport function handleNativeMessage(event: MessageEvent): void {\n  let data: BridgeResponse | { event: string; data: unknown };\n\n  try {\n    data = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;\n  } catch {\n    return;\n  }\n\n  // Handle response to a pending request\n  if ('id' in data && pendingRequests.has(data.id)) {\n    const callback = pendingRequests.get(data.id);\n    callback?.(data as BridgeResponse);\n    return;\n  }\n\n  // Handle event broadcast from native\n  if ('event' in data && data.event) {\n    const listeners = eventListeners.get(data.event);\n    if (listeners) {\n      listeners.forEach((callback) => callback(data.data));\n    }\n  }\n}\n\n/**\n * Initializes the bridge message handler\n */\nexport function initializeBridge(): void {\n  if (typeof window !== 'undefined') {\n    window.addEventListener('message', handleNativeMessage);\n  }\n}\n","import type { PushApi, PushMessage, PermissionStatus } from '../types';\nimport { sendMessage, addEventListener, isNativeEnvironment } from '../bridge';\n\nexport function createPushApi(): PushApi {\n  return {\n    async requestPermission(): Promise<PermissionStatus> {\n      if (!isNativeEnvironment()) {\n        return 'denied';\n      }\n      return sendMessage<PermissionStatus>('push.requestPermission');\n    },\n\n    async getToken(): Promise<string | null> {\n      if (!isNativeEnvironment()) {\n        return null;\n      }\n      return sendMessage<string | null>('push.getToken');\n    },\n\n    onMessage(callback: (message: PushMessage) => void): () => void {\n      return addEventListener('push.message', (data) => {\n        callback(data as PushMessage);\n      });\n    },\n  };\n}\n","import type { BiometricsApi } from '../types';\nimport { sendMessage, isNativeEnvironment } from '../bridge';\n\nexport function createBiometricsApi(): BiometricsApi {\n  return {\n    async isAvailable(): Promise<boolean> {\n      if (!isNativeEnvironment()) {\n        return false;\n      }\n      return sendMessage<boolean>('biometrics.isAvailable');\n    },\n\n    async authenticate(reason: string): Promise<boolean> {\n      if (!isNativeEnvironment()) {\n        return false;\n      }\n      return sendMessage<boolean>('biometrics.authenticate', { reason });\n    },\n  };\n}\n","import type { CameraApi, CameraResult, PermissionStatus } from '../types';\nimport { sendMessage, isNativeEnvironment } from '../bridge';\n\nexport function createCameraApi(): CameraApi {\n  return {\n    async requestPermission(): Promise<PermissionStatus> {\n      if (!isNativeEnvironment()) {\n        return 'denied';\n      }\n      return sendMessage<PermissionStatus>('camera.requestPermission');\n    },\n\n    async takePicture(): Promise<CameraResult> {\n      if (!isNativeEnvironment()) {\n        throw new Error('Camera not available outside native environment');\n      }\n      return sendMessage<CameraResult>('camera.takePicture');\n    },\n  };\n}\n","import type { LocationApi, Position, PermissionStatus } from '../types';\nimport { sendMessage, isNativeEnvironment } from '../bridge';\n\nexport function createLocationApi(): LocationApi {\n  return {\n    async requestPermission(): Promise<PermissionStatus> {\n      if (!isNativeEnvironment()) {\n        return 'denied';\n      }\n      return sendMessage<PermissionStatus>('location.requestPermission');\n    },\n\n    async getCurrentPosition(): Promise<Position> {\n      if (!isNativeEnvironment()) {\n        throw new Error('Location not available outside native environment');\n      }\n      return sendMessage<Position>('location.getCurrentPosition');\n    },\n  };\n}\n","import type { HapticsApi, HapticImpactStyle, HapticNotificationType } from '../types';\nimport { postMessage, isNativeEnvironment } from '../bridge';\n\nexport function createHapticsApi(): HapticsApi {\n  return {\n    impact(style: HapticImpactStyle): void {\n      if (!isNativeEnvironment()) {\n        return;\n      }\n      postMessage('haptics.impact', { style });\n    },\n\n    notification(type: HapticNotificationType): void {\n      if (!isNativeEnvironment()) {\n        return;\n      }\n      postMessage('haptics.notification', { type });\n    },\n  };\n}\n","import type { StorageApi } from '../types';\nimport { sendMessage, isNativeEnvironment } from '../bridge';\n\nexport function createStorageApi(): StorageApi {\n  return {\n    async get(key: string): Promise<string | null> {\n      if (!isNativeEnvironment()) {\n        // Fallback to localStorage when not in native\n        return localStorage.getItem(key);\n      }\n      return sendMessage<string | null>('storage.get', { key });\n    },\n\n    async set(key: string, value: string): Promise<void> {\n      if (!isNativeEnvironment()) {\n        // Fallback to localStorage when not in native\n        localStorage.setItem(key, value);\n        return;\n      }\n      return sendMessage<void>('storage.set', { key, value });\n    },\n\n    async delete(key: string): Promise<void> {\n      if (!isNativeEnvironment()) {\n        // Fallback to localStorage when not in native\n        localStorage.removeItem(key);\n        return;\n      }\n      return sendMessage<void>('storage.delete', { key });\n    },\n  };\n}\n","import type { ShareApi, ShareOptions, ShareResult } from '../types';\nimport { sendMessage, isNativeEnvironment } from '../bridge';\n\nexport function createShareApi(): ShareApi {\n  return {\n    async open(options: ShareOptions): Promise<ShareResult> {\n      if (!isNativeEnvironment()) {\n        // Fallback to Web Share API if available\n        if (navigator.share) {\n          try {\n            await navigator.share({\n              title: options.title,\n              text: options.message,\n              url: options.url,\n            });\n            return { success: true };\n          } catch {\n            return { success: false };\n          }\n        }\n        return { success: false };\n      }\n      return sendMessage<ShareResult>('share.open', options);\n    },\n  };\n}\n","import type { NetworkApi, NetworkStatus } from '../types';\nimport { sendMessage, addEventListener, isNativeEnvironment } from '../bridge';\n\nexport function createNetworkApi(): NetworkApi {\n  return {\n    async getStatus(): Promise<NetworkStatus> {\n      if (!isNativeEnvironment()) {\n        // Fallback to navigator.onLine when not in native\n        return {\n          isConnected: navigator.onLine,\n          type: 'unknown',\n        };\n      }\n      return sendMessage<NetworkStatus>('network.getStatus');\n    },\n\n    onChange(callback: (status: NetworkStatus) => void): () => void {\n      if (!isNativeEnvironment()) {\n        // Fallback to browser online/offline events\n        const handleOnline = () => callback({ isConnected: true, type: 'unknown' });\n        const handleOffline = () => callback({ isConnected: false, type: 'none' });\n\n        window.addEventListener('online', handleOnline);\n        window.addEventListener('offline', handleOffline);\n\n        return () => {\n          window.removeEventListener('online', handleOnline);\n          window.removeEventListener('offline', handleOffline);\n        };\n      }\n      return addEventListener('network.change', (data) => {\n        callback(data as NetworkStatus);\n      });\n    },\n  };\n}\n","import type { DeviceApi, DeviceInfo } from '../types';\nimport { sendMessage, isNativeEnvironment } from '../bridge';\n\nexport function createDeviceApi(): DeviceApi {\n  return {\n    async getInfo(): Promise<DeviceInfo> {\n      if (!isNativeEnvironment()) {\n        // Return browser-based fallback info\n        const userAgent = navigator.userAgent;\n        const isTablet = /iPad|Android(?!.*Mobile)/i.test(userAgent);\n        const isIOS = /iPad|iPhone|iPod/.test(userAgent);\n\n        return {\n          platform: isIOS ? 'ios' : 'android',\n          osVersion: 'web',\n          appVersion: '1.0.0',\n          deviceId: 'web-browser',\n          deviceName: navigator.userAgent.substring(0, 50),\n          isTablet,\n        };\n      }\n      return sendMessage<DeviceInfo>('device.getInfo');\n    },\n  };\n}\n","import type { Appo } from './types';\nimport { initializeBridge, isNativeEnvironment } from './bridge';\nimport {\n  createPushApi,\n  createBiometricsApi,\n  createCameraApi,\n  createLocationApi,\n  createHapticsApi,\n  createStorageApi,\n  createShareApi,\n  createNetworkApi,\n  createDeviceApi,\n} from './features';\n\nexport const VERSION = '1.0.0';\n\n/**\n * Creates the Appo SDK instance\n */\nfunction createAppo(): Appo {\n  return {\n    isNative: isNativeEnvironment(),\n    version: VERSION,\n    push: createPushApi(),\n    biometrics: createBiometricsApi(),\n    camera: createCameraApi(),\n    location: createLocationApi(),\n    haptics: createHapticsApi(),\n    storage: createStorageApi(),\n    share: createShareApi(),\n    network: createNetworkApi(),\n    device: createDeviceApi(),\n  };\n}\n\n/**\n * Initializes the Appo SDK and attaches it to window.appo\n */\nexport function initAppo(): Appo {\n  if (typeof window === 'undefined') {\n    throw new Error('Appo SDK can only be initialized in a browser environment');\n  }\n\n  if (window.appo) {\n    return window.appo;\n  }\n\n  initializeBridge();\n  const appo = createAppo();\n  window.appo = appo;\n\n  return appo;\n}\n\n/**\n * Gets the Appo SDK instance (initializes if needed)\n */\nexport function getAppo(): Appo {\n  if (typeof window !== 'undefined' && window.appo) {\n    return window.appo;\n  }\n  return initAppo();\n}\n\n// Export types\nexport type {\n  Appo,\n  PermissionStatus,\n  PushMessage,\n  CameraResult,\n  Position,\n  ShareOptions,\n  ShareResult,\n  NetworkStatus,\n  DeviceInfo,\n  HapticImpactStyle,\n  HapticNotificationType,\n  PushApi,\n  BiometricsApi,\n  CameraApi,\n  LocationApi,\n  HapticsApi,\n  StorageApi,\n  ShareApi,\n  NetworkApi,\n  DeviceApi,\n} from './types';\n\n// Auto-initialize when loaded via script tag\nif (typeof window !== 'undefined' && !window.appo) {\n  initAppo();\n}\n\nexport default getAppo;\n"]}