@virex-tech/paywallo-sdk 1.3.0 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PaywalloSdk.podspec +1 -0
- package/README.md +28 -53
- package/android/build.gradle +1 -0
- package/android/src/main/java/com/paywallo/sdk/PaywalloFBBridgeModule.kt +84 -0
- package/android/src/main/java/com/paywallo/sdk/PaywalloSdkPackage.kt +4 -1
- package/dist/index.d.mts +13 -10
- package/dist/index.d.ts +13 -10
- package/dist/index.js +325 -176
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +315 -161
- package/dist/index.mjs.map +1 -1
- package/ios/PaywalloFBBridge.m +23 -0
- package/ios/PaywalloFBBridge.swift +77 -0
- package/ios/PaywalloStoreKit.swift +17 -5
- package/ios/RCTBridgeTypes.swift +6 -0
- package/package.json +6 -20
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors/PaywalloError.ts","../src/domains/analytics/AnalyticsError.ts","../src/errors/ClientError.ts","../src/domains/paywall/PaywallModal.tsx","../src/domains/paywall/usePaywallActions.ts","../src/domains/iap/IAPService.ts","../src/domains/iap/PurchaseError.ts","../src/domains/iap/NativeStoreKit.ts","../src/domains/identity/IdentityError.ts","../src/utils/uuid.ts","../src/core/storage/SecureStorage.ts","../src/domains/identity/IdentityManager.ts","../src/domains/paywall/usePaywallTracking.ts","../src/domains/paywall/usePaywallLoader.ts","../src/domains/paywall/PaywallError.ts","../src/utils/localization.ts","../src/domains/paywall/PaywallWebView.tsx","../src/domains/paywall/parseWebViewMessage.ts","../src/domains/paywall/paywallScripts.ts","../src/domains/paywall/PaywallErrorBoundary.tsx","../src/domains/paywall/PaywallContext.ts","../src/domains/paywall/usePaywallPresenter.ts","../src/domains/affiliate/AffiliateError.ts","../src/domains/affiliate/affiliateHttp.ts","../src/domains/affiliate/affiliateDateMappers.ts","../src/domains/affiliate/AffiliateManager.ts","../src/domains/affiliate/PaywalloAffiliate.ts","../src/domains/subscription/SubscriptionCache.ts","../src/domains/subscription/SubscriptionManager.ts","../src/domains/session/SessionError.ts","../src/core/ApiClient.ts","../src/core/apiUrlUtils.ts","../src/domains/iap/apiPurchaseMethods.ts","../src/core/http/types.ts","../src/core/http/HttpClient.ts","../src/core/network/NetworkMonitor.ts","../src/core/network/types.ts","../src/core/queue/OfflineQueue.ts","../src/core/queue/deduplication.ts","../src/core/queue/types.ts","../src/core/queue/QueueProcessor.ts","../src/core/ApiCache.ts","../src/domains/campaign/CampaignError.ts","../src/domains/campaign/CampaignGateService.ts","../src/domains/identity/AdvertisingIdManager.ts","../src/domains/identity/FacebookIdManager.ts","../src/domains/identity/InstallTracker.ts","../src/domains/identity/InstallReferrerManager.ts","../src/domains/session/SessionManager.ts","../src/domains/session/sessionTracking.ts","../src/core/PaywalloClient.ts","../src/context/PaywalloContext.ts","../src/hooks/usePaywallo.ts","../src/hooks/useProducts.ts","../src/utils/productMappers.ts","../src/hooks/usePurchase.ts","../src/hooks/useSubscription.ts","../src/PaywalloProvider.tsx","../src/hooks/useCampaignPreload.ts","../src/utils/serverProduct.ts","../src/utils/loadCampaignProducts.ts","../src/utils/preloadCache.ts","../src/hooks/useProductLoader.ts","../src/hooks/usePurchaseOrchestrator.ts","../src/hooks/useSubscriptionSync.ts","../src/utils/productVariableResolver.ts","../src/utils/variableResolver.ts","../src/index.ts"],"sourcesContent":["export class PaywalloError extends Error {\n readonly code: string;\n readonly domain: string;\n\n constructor(domain: string, code: string, message: string) {\n super(message);\n this.name = \"PaywalloError\";\n this.domain = domain;\n this.code = code;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import { PaywalloError } from \"../../errors/PaywalloError\";\n\nexport class AnalyticsError extends PaywalloError {\n constructor(code: string, message: string) {\n super(\"analytics\", code, message);\n this.name = \"AnalyticsError\";\n }\n}\n\nexport const ANALYTICS_ERROR_CODES = {\n NOT_INITIALIZED: \"ANALYTICS_NOT_INITIALIZED\",\n INVALID_STEP_INDEX: \"ANALYTICS_INVALID_STEP_INDEX\",\n INVALID_ACTION_NAME: \"ANALYTICS_INVALID_ACTION_NAME\",\n} as const;\n","import { PaywalloError } from \"./PaywalloError\";\n\nexport class ClientError extends PaywalloError {\n constructor(code: string, message: string) {\n super(\"client\", code, message);\n this.name = \"ClientError\";\n }\n}\n\nexport const CLIENT_ERROR_CODES = {\n NOT_INITIALIZED: \"CLIENT_NOT_INITIALIZED\",\n MISSING_APP_KEY: \"CLIENT_MISSING_APP_KEY\",\n INVALID_EVENT_NAME: \"CLIENT_INVALID_EVENT_NAME\",\n PROVIDER_MISSING: \"CLIENT_PROVIDER_MISSING\",\n UNKNOWN: \"CLIENT_UNKNOWN\",\n} as const;\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n Animated,\n Dimensions,\n Easing,\n Modal,\n Pressable,\n StyleSheet,\n Text,\n View,\n} from \"react-native\";\n\nimport { usePaywallActions } from \"./usePaywallActions\";\nimport { usePaywallLoader } from \"./usePaywallLoader\";\nimport type { PaywallResult } from \"../../types\";\nimport type { Product } from \"../../types/purchase\";\nimport { PaywalloClient } from \"../../core/PaywalloClient\";\nimport { getSdkString } from \"../../utils/localization\";\n\nimport { PaywallWebView } from \"./PaywallWebView\";\n\nconst SCREEN_HEIGHT = Dimensions.get(\"window\").height;\n\ninterface ErrorFallbackProps {\n description: string;\n onRetry: () => void;\n onClose: () => void;\n}\n\nfunction ErrorFallback({ description, onRetry, onClose }: ErrorFallbackProps): React.ReactElement {\n const overrides = PaywalloClient.getConfig()?.errorStrings;\n const title = overrides?.title ?? getSdkString(\"paywallErrorTitle\");\n const retryLabel = overrides?.retry ?? getSdkString(\"paywallRetryButton\");\n const closeLabel = overrides?.close ?? getSdkString(\"paywallCloseButton\");\n\n return (\n <View style={styles.fallbackContainer}>\n <View style={styles.fallbackCard}>\n <Text style={styles.fallbackTitle}>{title}</Text>\n <Text style={styles.fallbackDescription}>{description}</Text>\n <Pressable style={styles.retryButton} onPress={onRetry}>\n <Text style={styles.retryButtonText}>{retryLabel}</Text>\n </Pressable>\n <Pressable style={styles.closeButton} onPress={onClose}>\n <Text style={styles.closeButtonText}>{closeLabel}</Text>\n </Pressable>\n </View>\n </View>\n );\n}\n\ninterface PaywallModalProps {\n placement: string;\n visible: boolean;\n onResult: (result: PaywallResult) => void;\n paywallConfig?: {\n id: string;\n placement: string;\n config: Record<string, unknown>;\n primaryProductId?: string;\n secondaryProductId?: string;\n };\n preloadedProducts?: Map<string, Product>;\n variantKey?: string;\n campaignId?: string;\n}\n\nexport function PaywallModal({\n placement,\n visible,\n onResult,\n paywallConfig: preloadedConfig,\n preloadedProducts,\n variantKey,\n campaignId,\n}: PaywallModalProps): React.ReactElement | null {\n const { paywallConfig, products, error } = usePaywallLoader(\n placement,\n visible,\n preloadedConfig,\n preloadedProducts,\n variantKey,\n campaignId\n );\n\n const openAnim = useRef(new Animated.Value(SCREEN_HEIGHT)).current;\n const [modalVisible, setModalVisible] = useState(false);\n\n const handleResult = useCallback((result: PaywallResult) => {\n setModalVisible(false);\n onResult(result);\n }, [onResult]);\n\n const { isPurchasing, slideAnim, handleClose, handlePurchase, handleRestore } =\n usePaywallActions(placement, paywallConfig, handleResult, variantKey, campaignId, openAnim);\n\n const [webViewError, setWebViewError] = useState<{\n code: number;\n description: string;\n } | null>(null);\n const [retryCount, setRetryCount] = useState(0);\n\n const retryCountRef = useRef(0);\n\n const handleWebViewError = useCallback(\n (err: { code: number; description: string; url?: string }) => {\n if (retryCountRef.current >= 1) {\n setWebViewError({ code: err.code, description: err.description });\n } else {\n retryCountRef.current += 1;\n setRetryCount(retryCountRef.current);\n }\n },\n []\n );\n\n const handleRetry = useCallback(() => {\n retryCountRef.current = 0;\n setWebViewError(null);\n setRetryCount(0);\n }, []);\n\n useEffect(() => {\n if (visible) {\n setModalVisible(true);\n openAnim.setValue(SCREEN_HEIGHT);\n Animated.timing(openAnim, {\n toValue: 0,\n duration: 550,\n easing: Easing.out(Easing.cubic),\n useNativeDriver: true,\n }).start();\n }\n }, [visible, openAnim]);\n\n if (!modalVisible && !visible) return null;\n\n return (\n <Modal\n visible={modalVisible}\n animationType=\"none\"\n presentationStyle=\"overFullScreen\"\n onRequestClose={handleClose}\n transparent\n statusBarTranslucent\n >\n <View style={styles.overlay}>\n <Animated.View style={[styles.animatedContainer, { transform: [{ translateY: openAnim }] }]}>\n <View style={styles.container}>\n {error && (\n <View style={styles.errorContainer}>\n <Text style={styles.errorText}>{error.message}</Text>\n </View>\n )}\n\n {!error && paywallConfig && \"craftData\" in paywallConfig.config && (\n <>\n {webViewError ? (\n <ErrorFallback\n description={webViewError.description}\n onRetry={handleRetry}\n onClose={handleClose}\n />\n ) : (\n <PaywallWebView\n key={retryCount}\n paywallId={paywallConfig.id}\n craftData={paywallConfig.config.craftData}\n products={products}\n primaryProductId={paywallConfig.primaryProductId}\n secondaryProductId={paywallConfig.secondaryProductId}\n isPurchasing={isPurchasing}\n onClose={handleClose}\n onPurchase={handlePurchase}\n onRestore={handleRestore}\n onError={handleWebViewError}\n />\n )}\n </>\n )}\n </View>\n </Animated.View>\n </View>\n </Modal>\n );\n}\n\nconst styles = StyleSheet.create({\n overlay: { flex: 1, backgroundColor: \"rgba(0,0,0,0.3)\" },\n animatedContainer: { flex: 1, backgroundColor: \"#fff\" },\n container: { flex: 1, backgroundColor: \"#fff\" },\n errorContainer: { flex: 1, justifyContent: \"center\", alignItems: \"center\", padding: 20 },\n errorText: { fontSize: 16, color: \"#ef4444\", textAlign: \"center\" },\n fallbackContainer: {\n flex: 1, justifyContent: \"center\", alignItems: \"center\",\n backgroundColor: \"#111010\", padding: 24,\n },\n fallbackCard: {\n width: \"100%\", maxWidth: 360, alignItems: \"center\",\n backgroundColor: \"rgba(255,255,255,0.07)\", borderRadius: 16, padding: 28,\n },\n fallbackTitle: {\n fontSize: 18, fontWeight: \"600\", color: \"#f5f5f5\",\n marginBottom: 10, textAlign: \"center\",\n },\n fallbackDescription: {\n fontSize: 14, color: \"rgba(255,255,255,0.55)\",\n textAlign: \"center\", marginBottom: 28, lineHeight: 20,\n },\n retryButton: {\n width: \"100%\", backgroundColor: \"#ffffff\", borderRadius: 10,\n paddingVertical: 14, alignItems: \"center\", marginBottom: 12,\n },\n retryButtonText: { fontSize: 15, fontWeight: \"600\", color: \"#111010\" },\n closeButton: {\n width: \"100%\", borderRadius: 10, paddingVertical: 14,\n alignItems: \"center\", backgroundColor: \"rgba(255,255,255,0.1)\",\n },\n closeButtonText: { fontSize: 15, fontWeight: \"500\", color: \"rgba(255,255,255,0.7)\" },\n});\n","import { useCallback, useRef, useState } from \"react\";\nimport { Animated, Dimensions } from \"react-native\";\n\nimport { PaywalloClient } from \"../../core/PaywalloClient\";\nimport { getIAPService } from \"../iap/IAPService\";\nimport type { PaywallConfig, PaywallResult } from \"../../types\";\n\nimport { usePaywallTracking } from \"./usePaywallTracking\";\n\nconst SCREEN_HEIGHT = Dimensions.get(\"window\").height;\n\nexport interface UsePaywallActionsResult {\n isPurchasing: boolean;\n slideAnim: Animated.Value;\n handleClose: () => void;\n handlePurchase: (productId: string) => Promise<void>;\n handleRestore: () => Promise<void>;\n}\n\nexport function usePaywallActions(\n placement: string,\n paywallConfig: PaywallConfig | null,\n onResult: (result: PaywallResult) => void,\n variantKey?: string,\n campaignId?: string,\n openAnim?: Animated.Value\n): UsePaywallActionsResult {\n const [isPurchasing, setIsPurchasing] = useState(false);\n const [isClosing, setIsClosing] = useState(false);\n const slideAnim = useRef(new Animated.Value(0)).current;\n const presentedAtRef = useRef<number>(Date.now());\n const { trackDismissed, trackProductSelected, trackPurchased } = usePaywallTracking();\n\n const handleClose = useCallback(() => {\n if (isClosing) return;\n setIsClosing(true);\n const animTarget = openAnim ?? slideAnim;\n Animated.timing(animTarget, { toValue: SCREEN_HEIGHT, duration: 350, useNativeDriver: true }).start(() => {\n if (paywallConfig) {\n const durationSeconds = Math.round((Date.now() - presentedAtRef.current) / 1000);\n void trackDismissed({ placement, paywallId: paywallConfig.id, durationSeconds, action: \"close\", variantKey, campaignId });\n }\n slideAnim.setValue(0);\n setIsClosing(false);\n onResult({ presented: true, purchased: false, cancelled: true, restored: false });\n });\n }, [isClosing, openAnim, onResult, paywallConfig, placement, slideAnim, trackDismissed, variantKey, campaignId]);\n\n const handlePurchase = useCallback(async (productId: string) => {\n if (isPurchasing) return;\n setIsPurchasing(true);\n try {\n if (paywallConfig) trackProductSelected({ placement, paywallId: paywallConfig.id, productId, variantKey, campaignId });\n const result = await getIAPService().purchase(productId, { paywallPlacement: placement, variantKey });\n if (result.success) {\n if (paywallConfig) {\n const durationSeconds = Math.round((Date.now() - presentedAtRef.current) / 1000);\n await trackDismissed({ placement, paywallId: paywallConfig.id, durationSeconds, action: \"purchase\", variantKey, campaignId });\n await trackPurchased({ placement, paywallId: paywallConfig.id, productId, variantKey, campaignId });\n }\n onResult({ presented: true, purchased: true, cancelled: false, restored: false });\n } else if (result.error) {\n onResult({ presented: true, purchased: false, cancelled: false, restored: false });\n }\n } catch (error) {\n onResult({ presented: true, purchased: false, cancelled: false, restored: false });\n } finally {\n setIsPurchasing(false);\n }\n }, [isPurchasing, onResult, paywallConfig, placement, trackDismissed, trackProductSelected, trackPurchased, variantKey, campaignId]);\n\n const handleRestore = useCallback(async () => {\n if (isPurchasing) return;\n setIsPurchasing(true);\n try {\n const transactions = await getIAPService().restore();\n if (transactions.length > 0) {\n if (paywallConfig) {\n const durationSeconds = Math.round((Date.now() - presentedAtRef.current) / 1000);\n await trackDismissed({ placement, paywallId: paywallConfig.id, durationSeconds, action: \"restore\", variantKey, campaignId });\n }\n onResult({ presented: true, purchased: false, cancelled: false, restored: true });\n } else {\n onResult({ presented: true, purchased: false, cancelled: false, restored: false });\n }\n } catch (error) {\n onResult({ presented: true, purchased: false, cancelled: false, restored: false });\n } finally {\n setIsPurchasing(false);\n }\n }, [isPurchasing, onResult, paywallConfig, placement, trackDismissed, variantKey, campaignId]);\n\n return { isPurchasing, slideAnim, handleClose, handlePurchase, handleRestore };\n}\n","import { Platform } from \"react-native\";\n\nimport { PURCHASE_ERROR_CODES, PurchaseError } from \"./PurchaseError\";\nimport type { Product, Purchase, PurchaseResult, ValidatePurchaseResponse } from \"../../types/purchase\";\n\nimport { ApiClient } from \"../../core/ApiClient\";\nimport { nativeStoreKit as NativeStoreKit } from \"./NativeStoreKit\";\nimport { PaywalloClient } from \"../../core/PaywalloClient\";\n\nexport class IAPService {\n private productsCache: Map<string, Product> = new Map();\n private apiClient: ApiClient | null = null;\n\n constructor(apiClient?: ApiClient) {\n this.apiClient = apiClient ?? null;\n }\n\n private get debug(): boolean {\n return PaywalloClient.getConfig()?.debug ?? false;\n }\n\n private getDeviceCountry(): string {\n try {\n const locale = Intl.DateTimeFormat().resolvedOptions().locale;\n const parts = locale.split(\"-\");\n return parts[parts.length - 1]?.toUpperCase() || \"US\";\n } catch {\n return \"US\";\n }\n }\n\n private getApiClient(): ApiClient {\n if (this.apiClient) return this.apiClient;\n const client = PaywalloClient.getApiClient();\n if (!client)\n throw new PurchaseError(PURCHASE_ERROR_CODES.NOT_INITIALIZED, \"SDK not initialized\");\n return client;\n }\n\n isAvailable(): boolean {\n return NativeStoreKit.isAvailable();\n }\n\n async loadProducts(productIds: string[]): Promise<Product[]> {\n if (!NativeStoreKit.isAvailable()) {\n return [];\n }\n\n try {\n const products = await NativeStoreKit.getProducts(productIds);\n for (const product of products) {\n this.productsCache.set(product.productId, product);\n }\n return products;\n } catch (error) {\n return [];\n }\n }\n\n getProduct(productId: string): Product | undefined {\n return this.productsCache.get(productId);\n }\n\n getCachedProducts(): Map<string, Product> {\n return new Map(this.productsCache);\n }\n\n private async validateWithRetry(\n attempt: () => Promise<ValidatePurchaseResponse>,\n maxRetries = 2,\n delayMs = 3000\n ): Promise<ValidatePurchaseResponse> {\n let lastError: unknown;\n for (let i = 0; i <= maxRetries; i++) {\n try {\n return await attempt();\n } catch (error) {\n lastError = error;\n if (i < maxRetries) await new Promise<void>((resolve) => setTimeout(resolve, delayMs));\n }\n }\n throw lastError;\n }\n\n private async validateWithServer(\n purchase: Purchase,\n productId: string,\n options?: { paywallPlacement?: string; variantKey?: string }\n ): Promise<ValidatePurchaseResponse> {\n const apiClient = this.getApiClient();\n const product = this.productsCache.get(productId);\n const platform = Platform.OS as \"ios\" | \"android\";\n const distinctId = PaywalloClient.getDistinctId();\n\n return this.validateWithRetry(\n () => apiClient.validatePurchase(\n platform,\n purchase.receipt,\n purchase.productId,\n purchase.transactionId,\n product?.priceValue ?? 0,\n product?.currency ?? \"USD\",\n this.getDeviceCountry(),\n distinctId,\n options?.paywallPlacement,\n options?.variantKey\n )\n );\n }\n\n private async finishTransaction(transactionId: string): Promise<void> {\n try {\n await NativeStoreKit.finishTransaction(transactionId);\n } catch (finishError) {\n }\n }\n\n async purchase(\n productId: string,\n options?: { paywallPlacement?: string; variantKey?: string; onValidating?: () => void }\n ): Promise<PurchaseResult> {\n if (!NativeStoreKit.isAvailable()) {\n return {\n success: false,\n error: new PurchaseError(PURCHASE_ERROR_CODES.STORE_NOT_AVAILABLE, \"In-app purchases are not available on this device\"),\n };\n }\n\n try {\n const purchase = await NativeStoreKit.purchase(productId);\n\n if (!purchase) {\n return { success: false };\n }\n\n options?.onValidating?.();\n\n let validation: ValidatePurchaseResponse | null = null;\n try {\n validation = await this.validateWithServer(purchase, productId, options);\n } catch (validationError) {\n return {\n success: false,\n error: new PurchaseError(PURCHASE_ERROR_CODES.VALIDATION_FAILED, validationError instanceof Error ? validationError.message : \"Server validation failed\"),\n };\n }\n\n if (!validation?.success) {\n return {\n success: false,\n error: new PurchaseError(PURCHASE_ERROR_CODES.VALIDATION_FAILED, validation?.error ? `Server validation: ${validation.error}` : \"Server validation failed\"),\n };\n }\n\n await this.finishTransaction(purchase.transactionId);\n return { success: true, purchase };\n } catch (error) {\n const e = error instanceof PurchaseError ? error : new PurchaseError(PURCHASE_ERROR_CODES.PURCHASE_FAILED, error instanceof Error ? error.message : String(error));\n return { success: false, error: e };\n }\n }\n\n async restore(): Promise<Purchase[]> {\n if (!NativeStoreKit.isAvailable()) {\n return [];\n }\n\n try {\n const transactions = await NativeStoreKit.getActiveTransactions();\n\n const apiClient = this.getApiClient();\n const distinctId = PaywalloClient.getDistinctId();\n const platform = Platform.OS as \"ios\" | \"android\";\n\n const results = await Promise.allSettled(\n transactions.map((tx) => {\n const product = this.productsCache.get(tx.productId);\n return apiClient.validatePurchase(\n platform,\n tx.receipt,\n tx.productId,\n tx.transactionId,\n product?.priceValue ?? 0,\n product?.currency ?? \"USD\",\n this.getDeviceCountry(),\n distinctId\n );\n })\n );\n\n const validated: Purchase[] = [];\n for (let i = 0; i < results.length; i++) {\n const r = results[i];\n const tx = transactions[i];\n if (r.status === \"fulfilled\" && r.value.success) {\n try {\n await NativeStoreKit.finishTransaction(tx.transactionId);\n } catch (finishError) {\n }\n validated.push(tx);\n }\n }\n\n return validated;\n } catch (error) {\n return [];\n }\n }\n}\n\nlet _instance: IAPService | null = null;\n\nexport function getIAPService(): IAPService {\n if (!_instance) {\n _instance = new IAPService();\n }\n return _instance;\n}\n","import { PaywalloError } from \"../../errors/PaywalloError\";\n\nexport class PurchaseError extends PaywalloError {\n readonly userCancelled: boolean;\n\n constructor(code: string, message: string, userCancelled = false) {\n super(\"purchase\", code, message);\n this.name = \"PurchaseError\";\n this.userCancelled = userCancelled;\n }\n}\n\nexport const PURCHASE_ERROR_CODES = {\n NOT_INITIALIZED: \"PURCHASE_NOT_INITIALIZED\",\n PRODUCT_NOT_FOUND: \"PRODUCT_NOT_FOUND\",\n PURCHASE_FAILED: \"PURCHASE_FAILED\",\n RESTORE_FAILED: \"RESTORE_FAILED\",\n VALIDATION_FAILED: \"VALIDATION_FAILED\",\n USER_CANCELLED: \"USER_CANCELLED\",\n NETWORK_ERROR: \"PURCHASE_NETWORK_ERROR\",\n STORE_ERROR: \"PURCHASE_STORE_ERROR\",\n PENDING_PURCHASE: \"PURCHASE_PENDING\",\n DEFERRED_PURCHASE: \"PURCHASE_DEFERRED\",\n STORE_NOT_AVAILABLE: \"PURCHASE_STORE_NOT_AVAILABLE\",\n} as const;\n\nconst DEFAULT_MESSAGES: Record<keyof typeof PURCHASE_ERROR_CODES, string> = {\n NOT_INITIALIZED: \"Purchase controller not initialized. Call init() first.\",\n PRODUCT_NOT_FOUND: \"Product not found in store.\",\n PURCHASE_FAILED: \"Purchase failed. Please try again.\",\n RESTORE_FAILED: \"Failed to restore purchases. Please try again.\",\n VALIDATION_FAILED: \"Failed to validate purchase with server.\",\n USER_CANCELLED: \"Purchase was cancelled.\",\n NETWORK_ERROR: \"Network error. Please check your connection.\",\n STORE_ERROR: \"Store error. Please try again later.\",\n PENDING_PURCHASE: \"Purchase is pending approval.\",\n DEFERRED_PURCHASE: \"Purchase is deferred (e.g., parental approval required).\",\n STORE_NOT_AVAILABLE: \"In-app purchases are not available on this device.\",\n};\n\nexport function createPurchaseError(\n code: keyof typeof PURCHASE_ERROR_CODES,\n message?: string\n): PurchaseError {\n return new PurchaseError(\n PURCHASE_ERROR_CODES[code],\n message ?? DEFAULT_MESSAGES[code] ?? \"Unknown purchase error\",\n code === \"USER_CANCELLED\"\n );\n}\n","import { NativeModules, Platform } from \"react-native\";\n\nimport { PURCHASE_ERROR_CODES, PurchaseError } from \"./PurchaseError\";\nimport { identityManager } from \"../identity/IdentityManager\";\nimport { PaywalloClient } from \"../../core/PaywalloClient\";\nimport type { Product, Purchase } from \"../../types/purchase\";\n\ninterface NativeStoreKitModule {\n getProducts(productIds: string[]): Promise<NativeProduct[]>;\n purchase(productId: string, appAccountToken: string | null): Promise<NativePurchaseResult | null>;\n finishTransaction(transactionId: string): Promise<void>;\n getActiveTransactions(): Promise<NativePurchaseResult[]>;\n}\n\ninterface NativeProduct {\n productId: string;\n title: string;\n description: string;\n price: string;\n priceValue: number;\n currency: string;\n localizedPrice: string;\n type: string;\n subscriptionPeriod?: string;\n introductoryPrice?: string;\n introductoryPriceValue?: number;\n freeTrialPeriod?: string;\n}\n\ninterface NativePurchaseResult {\n transactionId: string;\n productId: string;\n receipt: string;\n transactionDate: number;\n pending?: boolean;\n}\n\nconst PaywalloStoreKitNative: NativeStoreKitModule | null =\n (NativeModules.PaywalloStoreKit as NativeStoreKitModule | undefined) ?? null;\n\nfunction isAvailable(): boolean {\n return PaywalloStoreKitNative != null;\n}\n\nfunction mapNativeProduct(native: NativeProduct): Product {\n const product: Product = {\n productId: native.productId,\n title: native.title,\n description: native.description,\n price: native.price,\n priceValue: native.priceValue,\n currency: native.currency ?? \"USD\",\n localizedPrice: native.localizedPrice,\n type: mapProductType(native.type),\n subscriptionPeriod: native.subscriptionPeriod,\n introductoryPrice: native.introductoryPrice,\n introductoryPriceValue: native.introductoryPriceValue,\n freeTrialPeriod: native.freeTrialPeriod,\n };\n\n if (native.subscriptionPeriod) {\n const prices = calculatePerPeriodPrices(native.priceValue, native.subscriptionPeriod);\n product.pricePerMonth = prices.perMonth;\n product.pricePerWeek = prices.perWeek;\n product.pricePerDay = prices.perDay;\n }\n\n return product;\n}\n\nfunction mapProductType(type: string): Product[\"type\"] {\n switch (type) {\n case \"subscription\":\n case \"autoRenewable\":\n return \"subscription\";\n case \"consumable\":\n return \"consumable\";\n default:\n return \"non_consumable\";\n }\n}\n\nfunction calculatePerPeriodPrices(\n priceValue: number,\n period: string\n): { perMonth?: string; perWeek?: string; perDay?: string } {\n const totalDays = periodToDays(period);\n if (totalDays <= 0) return {};\n\n const perDay = priceValue / totalDays;\n const perWeek = perDay * 7;\n const perMonth = perDay * 30;\n\n return {\n perDay: perDay.toFixed(2),\n perWeek: perWeek.toFixed(2),\n perMonth: perMonth.toFixed(2),\n };\n}\n\nfunction periodToDays(period: string): number {\n const match = period.match(/^P(\\d+)([DWMY])$/);\n if (!match) return 0;\n\n const value = parseInt(match[1], 10);\n switch (match[2]) {\n case \"D\":\n return value;\n case \"W\":\n return value * 7;\n case \"M\":\n return value * 30;\n case \"Y\":\n return value * 365;\n default:\n return 0;\n }\n}\n\nfunction mapNativePurchase(native: NativePurchaseResult): Purchase {\n return {\n productId: native.productId,\n transactionId: native.transactionId,\n transactionDate: native.transactionDate,\n receipt: native.receipt,\n platform: Platform.OS as \"ios\" | \"android\",\n };\n}\n\nexport const nativeStoreKit = {\n isAvailable,\n\n async getProducts(productIds: string[]): Promise<Product[]> {\n if (!PaywalloStoreKitNative) {\n return [];\n }\n const nativeProducts = await PaywalloStoreKitNative.getProducts(productIds);\n return nativeProducts.map(mapNativeProduct);\n },\n\n async purchase(productId: string): Promise<Purchase | null> {\n if (!PaywalloStoreKitNative) {\n throw new PurchaseError(\n PURCHASE_ERROR_CODES.STORE_NOT_AVAILABLE,\n \"StoreKit native module not available\"\n );\n }\n const distinctId = identityManager.getDistinctId();\n const result = await PaywalloStoreKitNative.purchase(productId, distinctId ?? null);\n if (!result || result.pending) {\n return null;\n }\n return mapNativePurchase(result);\n },\n\n async finishTransaction(transactionId: string): Promise<void> {\n if (!PaywalloStoreKitNative) return;\n await PaywalloStoreKitNative.finishTransaction(transactionId);\n },\n\n async getActiveTransactions(): Promise<Purchase[]> {\n if (!PaywalloStoreKitNative) return [];\n const results = await PaywalloStoreKitNative.getActiveTransactions();\n return results.map(mapNativePurchase);\n },\n};\n\n/** @deprecated Use `nativeStoreKit` (camelCase) */\nexport const NativeStoreKit = nativeStoreKit;\n","import { PaywalloError } from \"../../errors/PaywalloError\";\n\nexport class IdentityError extends PaywalloError {\n constructor(code: string, message: string) {\n super(\"identity\", code, message);\n this.name = \"IdentityError\";\n }\n}\n\nexport const IDENTITY_ERROR_CODES = {\n NOT_INITIALIZED: \"IDENTITY_NOT_INITIALIZED\",\n DEVICE_ID_UNAVAILABLE: \"IDENTITY_DEVICE_ID_UNAVAILABLE\",\n STORAGE_READ_FAILED: \"IDENTITY_STORAGE_READ_FAILED\",\n STORAGE_WRITE_FAILED: \"IDENTITY_STORAGE_WRITE_FAILED\",\n IDENTIFY_FAILED: \"IDENTITY_IDENTIFY_FAILED\",\n} as const;\n","export function generateUUID(): string {\n const template = \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\";\n return template.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n","import AsyncStorage from \"@react-native-async-storage/async-storage\";\n\ntype KeychainModule = {\n setGenericPassword: (username: string, password: string, options?: { service?: string }) => Promise<boolean>;\n getGenericPassword: (options?: { service?: string }) => Promise<false | { password: string }>;\n resetGenericPassword: (options?: { service?: string }) => Promise<boolean>;\n};\n\nlet _keychain: KeychainModule | null | undefined = undefined;\n\nasync function loadKeychain(): Promise<KeychainModule | null> {\n if (_keychain !== undefined) return _keychain;\n try {\n const mod = await import(\"react-native-keychain\");\n _keychain = mod.default as KeychainModule;\n } catch {\n _keychain = null;\n }\n return _keychain;\n}\n\nconst KEYCHAIN_SERVICE_PREFIX = \"com.paywallo.sdk.\";\n\nexport class SecureStorage {\n // eslint-disable-next-line @typescript-eslint/no-useless-constructor\n constructor(_debug = false) {}\n\n async get(key: string): Promise<string | null> {\n const keychainValue = await this.getFromKeychain(key);\n if (keychainValue) {\n return keychainValue;\n }\n\n try {\n const value = await AsyncStorage.getItem(`@paywallo:${key}`);\n if (value) {\n await this.setToKeychain(key, value);\n }\n return value;\n } catch {\n return null;\n }\n }\n\n async set(key: string, value: string): Promise<boolean> {\n try {\n await Promise.all([\n AsyncStorage.setItem(`@paywallo:${key}`, value),\n this.setToKeychain(key, value),\n ]);\n return true;\n } catch {\n return false;\n }\n }\n\n async remove(key: string): Promise<boolean> {\n try {\n await Promise.all([\n AsyncStorage.removeItem(`@paywallo:${key}`),\n this.removeFromKeychain(key),\n ]);\n return true;\n } catch {\n return false;\n }\n }\n\n hasKeychainSupport(): boolean {\n return _keychain !== null && _keychain !== undefined;\n }\n\n private async getFromKeychain(key: string): Promise<string | null> {\n const keychain = await loadKeychain();\n if (!keychain) return null;\n try {\n const result = await keychain.getGenericPassword({ service: `${KEYCHAIN_SERVICE_PREFIX}${key}` });\n if (result && result.password) {\n return result.password;\n }\n return null;\n } catch {\n return null;\n }\n }\n\n private async setToKeychain(key: string, value: string): Promise<boolean> {\n const keychain = await loadKeychain();\n if (!keychain) return false;\n try {\n await keychain.setGenericPassword(\"panel\", value, { service: `${KEYCHAIN_SERVICE_PREFIX}${key}` });\n return true;\n } catch {\n return false;\n }\n }\n\n private async removeFromKeychain(key: string): Promise<boolean> {\n const keychain = await loadKeychain();\n if (!keychain) return false;\n try {\n await keychain.resetGenericPassword({ service: `${KEYCHAIN_SERVICE_PREFIX}${key}` });\n return true;\n } catch {\n return false;\n }\n }\n\n}\n\nexport const secureStorage = new SecureStorage();\n","import { IDENTITY_ERROR_CODES, IdentityError } from \"./IdentityError\";\nimport type { IdentifyOptions, UserProperties } from \"../../types\";\nimport { generateUUID } from \"../../utils/uuid\";\n\nimport { ApiClient } from \"../../core/ApiClient\";\nimport { SecureStorage } from \"../../core/storage/SecureStorage\";\n\nconst DEVICE_ID_KEY = \"device_id\";\nconst ANON_ID_KEY = \"anon_id\";\nconst USER_EMAIL_KEY = \"user_email\";\nconst USER_PROPERTIES_KEY = \"user_properties\";\n\nexport interface IdentityState {\n deviceId: string;\n email: string | null;\n properties: UserProperties;\n}\n\nexport class IdentityManager {\n private deviceId: string | null = null;\n private anonId: string | null = null;\n private email: string | null = null;\n private properties: UserProperties = {};\n private apiClient: ApiClient | null = null;\n private secureStorage: SecureStorage | null = null;\n private debug = false;\n private initialized = false;\n\n async initialize(apiClient: ApiClient, debug = false): Promise<string> {\n if (this.initialized) {\n return this.deviceId ?? \"\";\n }\n\n this.apiClient = apiClient;\n this.debug = debug;\n this.secureStorage = new SecureStorage(debug);\n\n await this.loadPersistedState();\n\n if (!this.deviceId) {\n type DeviceInfoMod = { getUniqueId: () => Promise<string> };\n let DeviceInfo: DeviceInfoMod | null = null;\n try {\n const mod = await import(\"react-native-device-info\");\n DeviceInfo = mod.default as DeviceInfoMod;\n } catch {\n DeviceInfo = null;\n }\n\n try {\n if (DeviceInfo) {\n this.deviceId = await DeviceInfo.getUniqueId();\n } else {\n this.deviceId = generateUUID();\n }\n } catch {\n this.deviceId = generateUUID();\n }\n const stored = await this.secureStorage.set(DEVICE_ID_KEY, this.deviceId);\n if (!stored) {\n await this.secureStorage.set(\"device_id_fallback\", this.deviceId).catch(() => { /* non-critical */ });\n }\n }\n\n if (!this.anonId) {\n this.anonId = \"$paywallo_anon:\" + generateUUID();\n await this.secureStorage.set(ANON_ID_KEY, this.anonId).catch(() => { /* non-critical */ });\n }\n\n this.initialized = true;\n return this.deviceId ?? \"\";\n }\n\n async identify(options?: IdentifyOptions | UserProperties): Promise<void> {\n this.ensureInitialized();\n\n let email: string | undefined;\n let properties: UserProperties | undefined;\n\n if (options) {\n if (\"email\" in options || \"properties\" in options) {\n email = (options as IdentifyOptions).email;\n properties = (options as IdentifyOptions).properties;\n } else {\n properties = options as UserProperties;\n }\n }\n\n if (email) {\n this.email = email;\n await this.secureStorage!.set(USER_EMAIL_KEY, email);\n }\n\n if (properties) {\n this.properties = { ...this.properties, ...properties };\n await this.secureStorage!.set(USER_PROPERTIES_KEY, JSON.stringify(this.properties));\n }\n\n if (this.apiClient && this.anonId) {\n try {\n await this.apiClient.identify(this.anonId, properties, email, this.deviceId ?? undefined);\n } catch { /* non-critical */ }\n }\n }\n\n getDistinctId(): string {\n if (!this.initialized || !this.anonId) {\n return \"\";\n }\n return this.anonId;\n }\n\n getDeviceId(): string | null {\n return this.deviceId;\n }\n\n getEmail(): string | null {\n return this.email;\n }\n\n getProperties(): UserProperties {\n return { ...this.properties };\n }\n\n async updateProperties(properties: UserProperties): Promise<void> {\n this.ensureInitialized();\n\n this.properties = { ...this.properties, ...properties };\n await this.secureStorage!.set(USER_PROPERTIES_KEY, JSON.stringify(this.properties));\n\n if (this.apiClient && this.anonId) {\n try {\n await this.apiClient.identify(this.anonId, this.properties, this.email ?? undefined, this.deviceId ?? undefined);\n } catch { /* non-critical */ }\n }\n }\n\n async reset(): Promise<void> {\n const newAnonId = \"$paywallo_anon:\" + generateUUID();\n this.anonId = newAnonId;\n this.email = null;\n this.properties = {};\n\n await Promise.all([\n this.secureStorage?.set(ANON_ID_KEY, newAnonId) ?? Promise.resolve(false),\n this.secureStorage?.remove(USER_EMAIL_KEY) ?? Promise.resolve(false),\n this.secureStorage?.remove(USER_PROPERTIES_KEY) ?? Promise.resolve(false),\n ]);\n }\n\n getState(): IdentityState {\n return {\n deviceId: this.deviceId ?? \"\",\n email: this.email,\n properties: this.getProperties(),\n };\n }\n\n isSecureStorageAvailable(): boolean {\n return this.secureStorage !== null;\n }\n\n private async loadPersistedState(): Promise<void> {\n if (!this.secureStorage) {\n return;\n }\n\n const [storedDeviceId, storedAnonId, storedEmail, storedPropertiesJson] = await Promise.all([\n this.secureStorage.get(DEVICE_ID_KEY),\n this.secureStorage.get(ANON_ID_KEY),\n this.secureStorage.get(USER_EMAIL_KEY),\n this.secureStorage.get(USER_PROPERTIES_KEY),\n ]);\n\n if (storedDeviceId) {\n this.deviceId = storedDeviceId;\n } else {\n const fallbackDeviceId = await this.secureStorage.get(\"device_id_fallback\");\n if (fallbackDeviceId) {\n this.deviceId = fallbackDeviceId;\n }\n }\n\n if (storedAnonId) {\n this.anonId = storedAnonId;\n }\n\n if (storedEmail) {\n this.email = storedEmail;\n }\n\n if (storedPropertiesJson) {\n try {\n this.properties = JSON.parse(storedPropertiesJson) as UserProperties;\n } catch {\n this.properties = {};\n }\n }\n }\n\n private ensureInitialized(): void {\n if (!this.initialized) {\n throw new IdentityError(\n IDENTITY_ERROR_CODES.NOT_INITIALIZED,\n \"IdentityManager not initialized. Call initialize() first\"\n );\n }\n }\n\n}\n\nexport const identityManager = new IdentityManager();\n","import { useCallback } from \"react\";\n\nimport { PaywalloClient } from \"../../core/PaywalloClient\";\n\ninterface TrackDismissedOptions {\n placement: string;\n paywallId: string;\n durationSeconds: number;\n action: \"close\" | \"purchase\" | \"restore\";\n variantKey?: string;\n campaignId?: string;\n}\n\ninterface TrackProductSelectedOptions {\n placement: string;\n paywallId: string;\n productId: string;\n variantKey?: string;\n campaignId?: string;\n}\n\ninterface TrackPurchasedOptions {\n placement: string;\n paywallId: string;\n productId: string;\n variantKey?: string;\n campaignId?: string;\n}\n\nexport interface UsePaywallTrackingResult {\n trackDismissed: (opts: TrackDismissedOptions) => Promise<void>;\n trackProductSelected: (opts: TrackProductSelectedOptions) => void;\n trackPurchased: (opts: TrackPurchasedOptions) => Promise<void>;\n}\n\nexport function usePaywallTracking(): UsePaywallTrackingResult {\n const trackDismissed = useCallback(async (opts: TrackDismissedOptions): Promise<void> => {\n try {\n const api = PaywalloClient.getApiClient();\n if (!api) return;\n const sessionId = PaywalloClient.getSessionId();\n await api.trackEvent(\"$paywall_dismissed\", PaywalloClient.getDistinctId(), {\n placement: opts.placement,\n paywallId: opts.paywallId,\n durationSeconds: opts.durationSeconds,\n action: opts.action,\n ...(opts.variantKey && { variantKey: opts.variantKey }),\n ...(opts.campaignId && { campaignId: opts.campaignId }),\n ...(sessionId && { sessionId }),\n });\n } catch {}\n }, []);\n\n const trackProductSelected = useCallback((opts: TrackProductSelectedOptions): void => {\n const api = PaywalloClient.getApiClient();\n if (!api) return;\n const sessionId = PaywalloClient.getSessionId();\n void api.trackEvent(\"$paywall_product_selected\", PaywalloClient.getDistinctId(), {\n placement: opts.placement,\n paywallId: opts.paywallId,\n productId: opts.productId,\n ...(opts.variantKey && { variantKey: opts.variantKey }),\n ...(opts.campaignId && { campaignId: opts.campaignId }),\n ...(sessionId && { sessionId }),\n }).catch(() => {});\n }, []);\n\n const trackPurchased = useCallback(async (opts: TrackPurchasedOptions): Promise<void> => {\n try {\n const api = PaywalloClient.getApiClient();\n if (!api) return;\n const sessionId = PaywalloClient.getSessionId();\n await api.trackEvent(\"$paywall_purchased\", PaywalloClient.getDistinctId(), {\n placement: opts.placement,\n paywallId: opts.paywallId,\n productId: opts.productId,\n ...(opts.variantKey && { variantKey: opts.variantKey }),\n ...(opts.campaignId && { campaignId: opts.campaignId }),\n ...(sessionId && { sessionId }),\n });\n } catch {}\n }, []);\n\n return { trackDismissed, trackProductSelected, trackPurchased };\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport { PaywalloClient } from \"../../core/PaywalloClient\";\nimport { getIAPService } from \"../iap/IAPService\";\nimport { PAYWALL_ERROR_CODES, PaywallError } from \"./PaywallError\";\nimport type { PaywallConfig } from \"../../types\";\nimport type { Product } from \"../../types/purchase\";\n\ninterface PreloadedConfig {\n id: string;\n placement: string;\n config: Record<string, unknown>;\n primaryProductId?: string;\n secondaryProductId?: string;\n}\n\ninterface UsePaywallLoaderResult {\n paywallConfig: PaywallConfig | null;\n products: Map<string, Product>;\n error: Error | null;\n}\n\nexport function usePaywallLoader(\n placement: string,\n visible: boolean,\n preloadedConfig?: PreloadedConfig,\n preloadedProducts?: Map<string, Product>,\n variantKey?: string,\n campaignId?: string\n): UsePaywallLoaderResult {\n const [error, setError] = useState<Error | null>(null);\n const [paywallConfig, setPaywallConfig] = useState<PaywallConfig | null>(null);\n const [products, setProducts] = useState<Map<string, Product>>(new Map());\n const preloadedConfigRef = useRef(preloadedConfig);\n preloadedConfigRef.current = preloadedConfig;\n const preloadedProductsRef = useRef(preloadedProducts);\n preloadedProductsRef.current = preloadedProducts;\n const trackingDoneRef = useRef(false);\n\n useEffect(() => {\n if (!visible) { trackingDoneRef.current = false; return; }\n\n const load = async () => {\n setError(null);\n try {\n const apiClient = PaywalloClient.getApiClient();\n if (!apiClient) throw new PaywallError(PAYWALL_ERROR_CODES.NOT_INITIALIZED, \"SDK not initialized\");\n\n let config: PaywallConfig;\n const snap = preloadedConfigRef.current;\n if (snap) {\n config = { id: snap.id, placement: snap.placement, config: snap.config as { craftData: string },\n primaryProductId: snap.primaryProductId, secondaryProductId: snap.secondaryProductId };\n } else {\n const fetched = await apiClient.getPaywall(placement);\n if (!fetched) throw new PaywallError(PAYWALL_ERROR_CODES.NOT_FOUND, `Paywall not found for placement: ${placement}`);\n config = fetched;\n }\n setPaywallConfig(config);\n\n const productIds: string[] = [];\n if (config.primaryProductId) productIds.push(config.primaryProductId);\n if (config.secondaryProductId) productIds.push(config.secondaryProductId);\n\n const snapProducts = preloadedProductsRef.current;\n if (snapProducts && snapProducts.size > 0) {\n setProducts(snapProducts);\n } else if (productIds.length > 0) {\n try {\n const storeProducts = await getIAPService().loadProducts(productIds);\n const map = new Map<string, Product>();\n for (const p of storeProducts) map.set(p.productId, p);\n setProducts(map);\n } catch { setProducts(new Map()); }\n } else {\n setProducts(new Map());\n }\n\n if (!trackingDoneRef.current) {\n trackingDoneRef.current = true;\n const sessionId = PaywalloClient.getSessionId();\n await apiClient.trackEvent(\"$paywall_viewed\", PaywalloClient.getDistinctId(), {\n placement, paywallId: config.id,\n ...(sessionId && { sessionId }),\n ...(variantKey && { variantKey }),\n ...(campaignId && { campaignId }),\n });\n }\n } catch (err) {\n const e = err instanceof Error ? err : new PaywallError(PAYWALL_ERROR_CODES.LOAD_FAILED, String(err));\n setError(e);\n }\n };\n\n void load();\n }, [placement, visible, variantKey, campaignId]);\n\n return { paywallConfig, products, error };\n}\n","import { PaywalloError } from \"../../errors/PaywalloError\";\n\nexport class PaywallError extends PaywalloError {\n constructor(code: string, message: string) {\n super(\"paywall\", code, message);\n this.name = \"PaywallError\";\n }\n}\n\nexport const PAYWALL_ERROR_CODES = {\n NOT_INITIALIZED: \"PAYWALL_NOT_INITIALIZED\",\n NOT_FOUND: \"PAYWALL_NOT_FOUND\",\n RENDER_FAILED: \"PAYWALL_RENDER_FAILED\",\n LOAD_FAILED: \"PAYWALL_LOAD_FAILED\",\n DISMISS_FAILED: \"PAYWALL_DISMISS_FAILED\",\n INVALID_CONFIG: \"PAYWALL_INVALID_CONFIG\",\n} as const;\n","import { NativeModules, Platform } from \"react-native\";\n\nimport type { LocalizedText } from \"../types/blocks\";\n\nlet currentLanguage = \"pt-BR\";\nlet defaultLanguage = \"pt-BR\";\n\nexport function setCurrentLanguage(language: string): void {\n currentLanguage = language;\n}\n\nexport function setDefaultLanguage(language: string): void {\n defaultLanguage = language;\n}\n\nexport function getCurrentLanguage(): string {\n return currentLanguage;\n}\n\nexport function getDefaultLanguage(): string {\n return defaultLanguage;\n}\n\nexport function getLocalizedString(text: string | LocalizedText | undefined): string {\n if (!text) return \"\";\n if (typeof text === \"string\") return text;\n\n return text[currentLanguage] ?? text[defaultLanguage] ?? Object.values(text)[0] ?? \"\";\n}\n\nexport function detectDeviceLanguage(): string {\n try {\n if (Platform.OS === \"ios\") {\n const settings = (\n NativeModules as {\n SettingsManager?: { settings?: { AppleLocale?: string; AppleLanguages?: string[] } };\n }\n ).SettingsManager?.settings;\n return settings?.AppleLocale ?? settings?.AppleLanguages?.[0] ?? \"en-US\";\n }\n\n return (\n (NativeModules as { I18nManager?: { localeIdentifier?: string } }).I18nManager\n ?.localeIdentifier ?? \"en-US\"\n );\n } catch {\n return \"en-US\";\n }\n}\n\nconst SDK_STRINGS = {\n paywallErrorTitle: {\n \"pt-BR\": \"Algo deu errado\",\n \"pt\": \"Algo deu errado\",\n \"en\": \"Something went wrong\",\n \"en-US\": \"Something went wrong\",\n \"en-GB\": \"Something went wrong\",\n \"es\": \"Algo salió mal\",\n \"es-419\": \"Algo salió mal\",\n },\n paywallRetryButton: {\n \"pt-BR\": \"Tentar novamente\",\n \"pt\": \"Tentar novamente\",\n \"en\": \"Try again\",\n \"en-US\": \"Try again\",\n \"en-GB\": \"Try again\",\n \"es\": \"Reintentar\",\n \"es-419\": \"Reintentar\",\n },\n paywallCloseButton: {\n \"pt-BR\": \"Fechar\",\n \"pt\": \"Fechar\",\n \"en\": \"Close\",\n \"en-US\": \"Close\",\n \"en-GB\": \"Close\",\n \"es\": \"Cerrar\",\n \"es-419\": \"Cerrar\",\n },\n} as const;\n\ntype SdkStringKey = keyof typeof SDK_STRINGS;\n\nexport function getSdkString(key: SdkStringKey): string {\n const map = SDK_STRINGS[key];\n const lang = currentLanguage as string;\n if (lang in map) return (map as Record<string, string>)[lang];\n const base = lang.split(\"-\")[0];\n if (base && base in map) return (map as Record<string, string>)[base];\n if (defaultLanguage in map) return (map as Record<string, string>)[defaultLanguage];\n return Object.values(map)[0];\n}\n\nexport function initLocalization(options?: {\n defaultLanguage?: string;\n detectDevice?: boolean;\n}): void {\n if (options?.defaultLanguage) {\n defaultLanguage = options.defaultLanguage;\n }\n\n if (options?.detectDevice !== false) {\n const deviceLanguage = detectDeviceLanguage();\n currentLanguage = deviceLanguage;\n }\n}\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n Linking,\n NativeEventEmitter,\n NativeModules,\n requireNativeComponent,\n StyleProp,\n StyleSheet,\n View,\n ViewStyle,\n} from \"react-native\";\n\nimport { PaywalloClient } from \"../../core/PaywalloClient\";\nimport type { Product } from \"../../types/purchase\";\nimport { deriveMessageId, parseWebViewMessage, WebViewMessage } from \"./parseWebViewMessage\";\nimport { buildPaywallInjectionScript, buildPurchaseStateScript } from \"./paywallScripts\";\n\ninterface NativeWebViewProps {\n sourceUrl: string;\n injectedJavaScript?: string;\n onMessage?: (event: { nativeEvent: { data: string } }) => void;\n onLoadEnd?: () => void;\n onError?: (event: { nativeEvent: Record<string, unknown> }) => void;\n style?: StyleProp<ViewStyle>;\n ref?: React.Ref<View>;\n}\n\ninterface WebViewError {\n code: number;\n description: string;\n url?: string;\n}\n\nlet NativeWebViewComponent: ReturnType<typeof requireNativeComponent<NativeWebViewProps>> | null =\n null;\n\nfunction getNativeWebView(): ReturnType<typeof requireNativeComponent<NativeWebViewProps>> {\n if (!NativeWebViewComponent) {\n NativeWebViewComponent = requireNativeComponent<NativeWebViewProps>(\"PaywalloWebView\");\n }\n return NativeWebViewComponent;\n}\n\nlet webViewEmitter: NativeEventEmitter | null = null;\nfunction getWebViewEmitter(): NativeEventEmitter {\n if (!webViewEmitter) {\n webViewEmitter = new NativeEventEmitter(NativeModules.PaywalloWebViewModule);\n }\n return webViewEmitter;\n}\n\nfunction parseErrorEvent(raw: Record<string, unknown>): WebViewError {\n return {\n code: typeof raw[\"code\"] === \"number\" ? raw[\"code\"] : -1,\n description: typeof raw[\"description\"] === \"string\" ? raw[\"description\"] : \"WebView error\",\n url: typeof raw[\"url\"] === \"string\" ? raw[\"url\"] : undefined,\n };\n}\n\ninterface PaywallWebViewProps {\n paywallId: string;\n craftData: string;\n products: Map<string, Product>;\n primaryProductId?: string;\n secondaryProductId?: string;\n isPurchasing: boolean;\n webUrl?: string | null;\n onPurchase: (productId: string) => void;\n onClose: () => void;\n onRestore: () => void;\n onReady?: () => void;\n onError?: (error: WebViewError) => void;\n}\n\nexport function PaywallWebView({\n paywallId,\n craftData,\n products,\n primaryProductId,\n secondaryProductId,\n isPurchasing,\n webUrl: webUrlProp,\n onPurchase,\n onClose,\n onRestore,\n onReady,\n onError,\n}: PaywallWebViewProps): React.ReactElement | null {\n const paywallDataSent = useRef(false);\n const loadEndReceived = useRef(false);\n const [scriptToInject, setScriptToInject] = useState<string | undefined>(undefined);\n const onErrorRef = useRef(onError);\n onErrorRef.current = onError;\n const onReadyRef = useRef(onReady);\n onReadyRef.current = onReady;\n\n const NativeWebView = useMemo(() => getNativeWebView(), []);\n\n const [resolvedWebUrl, setResolvedWebUrl] = useState<string | null>(\n () => webUrlProp ?? PaywalloClient.getWebUrl()\n );\n\n useEffect(() => {\n if (webUrlProp !== undefined) {\n setResolvedWebUrl(webUrlProp ?? null);\n return;\n }\n const url = PaywalloClient.getWebUrl();\n if (url) { setResolvedWebUrl(url); return; }\n const interval = setInterval(() => {\n const u = PaywalloClient.getWebUrl();\n if (u) { setResolvedWebUrl(u); clearInterval(interval); }\n }, 200);\n return () => clearInterval(interval);\n }, [webUrlProp]);\n\n useEffect(() => {\n if (!resolvedWebUrl) {\n onErrorRef.current?.({\n code: -1,\n description: \"Paywall URL not configured. SDK may not be initialized.\",\n });\n }\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n const buildAndSetInjectionScript = useCallback(() => {\n if (!craftData || paywallDataSent.current) return;\n paywallDataSent.current = true;\n const script = buildPaywallInjectionScript({\n craftData,\n products: Array.from(products.values()),\n primaryProductId,\n secondaryProductId,\n });\n setScriptToInject(script);\n }, [craftData, products, primaryProductId, secondaryProductId]);\n\n const processedIdsRef = useRef<Set<string>>(new Set());\n\n const handleParsedMessage = useCallback(\n (message: WebViewMessage) => {\n const msgId = deriveMessageId(message);\n if (processedIdsRef.current.has(msgId)) return;\n processedIdsRef.current.add(msgId);\n setTimeout(() => processedIdsRef.current.delete(msgId), 5_000);\n\n switch (message.type) {\n case \"ready\":\n if (!paywallDataSent.current) {\n buildAndSetInjectionScript();\n } else {\n onReadyRef.current?.();\n }\n break;\n case \"purchase\":\n if (message.payload?.productId) onPurchase(message.payload.productId);\n break;\n case \"close\":\n onClose();\n break;\n case \"restore\":\n onRestore();\n break;\n case \"open-url\":\n if (message.payload?.url) {\n const url = message.payload.url;\n if (/^https?:\\/\\//i.test(url) || /^mailto:/i.test(url)) {\n void Linking.openURL(url);\n }\n }\n break;\n }\n },\n [buildAndSetInjectionScript, onPurchase, onClose, onRestore]\n );\n\n useEffect(() => {\n const emitter = getWebViewEmitter();\n\n const loadEndSub = emitter.addListener(\"PaywalloWebViewLoadEnd\", () => {\n if (!loadEndReceived.current) {\n loadEndReceived.current = true;\n buildAndSetInjectionScript();\n }\n });\n\n const messageSub = emitter.addListener(\"PaywalloWebViewMessage\", (event: { data: string }) => {\n const message = parseWebViewMessage(event.data);\n if (message) handleParsedMessage(message);\n });\n\n const errorSub = emitter.addListener(\n \"PaywalloWebViewError\",\n (event: Record<string, unknown>) => {\n onErrorRef.current?.(parseErrorEvent(event));\n }\n );\n\n return () => {\n loadEndSub.remove();\n messageSub.remove();\n errorSub.remove();\n };\n }, [buildAndSetInjectionScript, handleParsedMessage]);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n if (!paywallDataSent.current) {\n onErrorRef.current?.({\n code: -1001,\n description: \"Paywall load timed out after 10 seconds\",\n });\n }\n }, 10_000);\n\n return () => clearTimeout(timer);\n }, []);\n\n const handleLoadEnd = useCallback(() => {\n if (!loadEndReceived.current) {\n loadEndReceived.current = true;\n buildAndSetInjectionScript();\n }\n }, [buildAndSetInjectionScript]);\n\n const handleNativeError = useCallback((event: { nativeEvent: Record<string, unknown> }) => {\n const ne = event.nativeEvent;\n let errorData: Record<string, unknown>;\n if (ne[\"payload\"] && typeof ne[\"payload\"] === \"object\") {\n errorData = ne[\"payload\"] as Record<string, unknown>;\n } else if (typeof ne[\"data\"] === \"string\") {\n try {\n errorData = JSON.parse(ne[\"data\"]) as Record<string, unknown>;\n } catch {\n errorData = {};\n }\n } else {\n errorData = {};\n }\n onErrorRef.current?.(parseErrorEvent(errorData));\n }, []);\n\n const handleMessage = useCallback(\n (event: { nativeEvent: { data: string } }) => {\n const message = parseWebViewMessage(event.nativeEvent.data);\n if (message) handleParsedMessage(message);\n },\n [handleParsedMessage]\n );\n\n useEffect(() => {\n if (!paywallDataSent.current) return;\n setScriptToInject(buildPurchaseStateScript(isPurchasing));\n }, [isPurchasing]);\n\n if (!resolvedWebUrl) return null;\n\n const paywallUrl = `${resolvedWebUrl}/paywall/${paywallId}`;\n\n return (\n <View style={styles.container}>\n <NativeWebView\n sourceUrl={paywallUrl}\n injectedJavaScript={scriptToInject}\n onMessage={handleMessage}\n onLoadEnd={handleLoadEnd}\n onError={handleNativeError}\n style={styles.webview}\n />\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: { flex: 1 },\n webview: { flex: 1, backgroundColor: \"transparent\" },\n});\n","export interface WebViewMessage {\n type: \"purchase\" | \"close\" | \"restore\" | \"select-product\" | \"open-url\" | \"ready\";\n id?: string;\n payload?: {\n productId?: string;\n url?: string;\n timestamp?: number;\n };\n}\n\nexport function deriveMessageId(message: WebViewMessage): string {\n if (message.id) return message.id;\n\n const payloadKey =\n message.payload?.productId ??\n message.payload?.url ??\n (message.payload?.timestamp != null ? String(message.payload.timestamp) : \"\");\n\n return `${message.type}:${payloadKey}`;\n}\n\nexport function parseWebViewMessage(raw: string): WebViewMessage | null {\n try {\n const parsed = JSON.parse(raw) as WebViewMessage;\n if (typeof parsed?.type !== \"string\") {\n return null;\n }\n return parsed;\n } catch {\n return null;\n }\n}\n","import type { Product } from \"../../types/purchase\";\n\ninterface PaywallInjectionData {\n craftData: string;\n products: Product[];\n primaryProductId?: string;\n secondaryProductId?: string;\n}\n\nexport function buildPaywallInjectionScript(data: PaywallInjectionData): string {\n const paywallData = {\n type: \"paywall\",\n data: {\n craftData: data.craftData,\n products: data.products,\n primaryProductId: data.primaryProductId,\n secondaryProductId: data.secondaryProductId,\n },\n };\n\n return `(function(){var d=${JSON.stringify(paywallData)},a=0,m=50;function t(){a++;if(window.receiveNativeMessage){window.receiveNativeMessage(d);return;}if(a<m){setTimeout(t,100);}}t();})();true;`;\n}\n\nexport function buildPurchaseStateScript(isPurchasing: boolean): string {\n return `if(window.receiveNativeMessage){window.receiveNativeMessage({type:\"purchaseState\",data:{isPurchasing:${isPurchasing}}});}true;`;\n}\n","import React, { Component } from \"react\";\nimport { PaywalloClient } from \"../../core/PaywalloClient\";\n\nexport class PaywallErrorBoundary extends Component<{ children: React.ReactNode }, { hasError: boolean }> {\n state = { hasError: false };\n static getDerivedStateFromError(): { hasError: boolean } { return { hasError: true }; }\n componentDidCatch(_error: Error): void {}\n render(): React.ReactNode { return this.state.hasError ? null : this.props.children; }\n}\n","import { createContext, useContext } from \"react\";\n\nimport { PAYWALL_ERROR_CODES, PaywallError } from \"./PaywallError\";\nimport type { PaywallNode, TapBehavior } from \"../../types/blocks\";\nimport type { Product } from \"../../types/purchase\";\n\nexport interface PaywallContextValue {\n nodes: Record<string, PaywallNode>;\n rootId: string;\n language: string;\n defaultLanguage: string;\n products: Map<string, Product>;\n selectedProductId: string | null;\n primaryProductId: string | null;\n secondaryProductId: string | null;\n currentNavigationIndex: number;\n currentTabIndex: number;\n trialEnabled: boolean;\n selectedPeriod: string | null;\n isPurchasing: boolean;\n exitOfferVisible: boolean;\n exitOfferTriggeredByBackButton: boolean;\n\n onClose: () => void;\n onTryClose: () => void;\n onSelectProduct: (productId: string) => void;\n onPurchase: (productId: string) => void;\n onRestore: () => void;\n onNavigate: (target: \"next\" | \"previous\" | \"first\" | \"last\" | number) => void;\n onSetTab: (index: number) => void;\n onSetVariable: (name: string, value: string) => void;\n onToggleTrial: (enabled: boolean) => void;\n onSelectPeriod: (value: string) => void;\n onOpenUrl: (url: string, inBrowser?: boolean) => void;\n onTapBehavior: (behavior: TapBehavior) => void;\n onShowExitOffer: () => void;\n onDismissExitOffer: () => void;\n onTriggerBackButton: () => void;\n}\n\nexport const PaywallContext = createContext<PaywallContextValue | null>(null);\n\nexport function usePaywallContext(): PaywallContextValue {\n const context = useContext(PaywallContext);\n if (!context) {\n throw new PaywallError(\n PAYWALL_ERROR_CODES.NOT_INITIALIZED,\n \"usePaywallContext must be used within a Paywall component\"\n );\n }\n return context;\n}\n","import type { Dispatch, MutableRefObject, SetStateAction } from \"react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { PaywalloClient } from \"../../core/PaywalloClient\";\nimport type { PaywallResult } from \"../../types\";\n\nimport type { PreloadedWebView } from \"../../hooks/useCampaignPreload\";\n\ntype SetPreloadedWebView = Dispatch<SetStateAction<PreloadedWebView | null>>;\n\ninterface UsePaywallPresenterReturn {\n showingPreloadedWebView: boolean;\n presentPreloadedWebView: () => Promise<PaywallResult>;\n resolvePreloadedPaywall: (result: PaywallResult) => void;\n handlePreloadedWebViewReady: () => void;\n handlePreloadedClose: () => void;\n setShowingPreloadedWebView: Dispatch<SetStateAction<boolean>>;\n presentedAtRef: MutableRefObject<number>;\n}\n\nexport function usePaywallPresenter(\n preloadedWebView: PreloadedWebView | null,\n setPreloadedWebView: SetPreloadedWebView\n): UsePaywallPresenterReturn {\n const [showingPreloadedWebView, setShowingPreloadedWebView] = useState(false);\n const resolverRef = useRef<((result: PaywallResult) => void) | null>(null);\n const presentedAtRef = useRef<number>(Date.now());\n\n useEffect(() => {\n return () => {\n if (resolverRef.current) {\n resolverRef.current({ presented: false, purchased: false, cancelled: true, restored: false });\n resolverRef.current = null;\n }\n };\n }, []);\n\n const presentPreloadedWebView = useCallback((): Promise<PaywallResult> => {\n return new Promise<PaywallResult>((resolve) => {\n resolverRef.current = resolve;\n presentedAtRef.current = Date.now();\n setShowingPreloadedWebView(true);\n });\n }, []);\n\n const resolvePreloadedPaywall = useCallback((result: PaywallResult): void => {\n if (resolverRef.current) { resolverRef.current(result); resolverRef.current = null; }\n }, []);\n\n const handlePreloadedWebViewReady = useCallback((): void => {\n setPreloadedWebView((prev) => (prev ? { ...prev, loaded: true } : null));\n }, [setPreloadedWebView]);\n\n const handlePreloadedClose = useCallback((): void => {\n const track = async (): Promise<void> => {\n try {\n const apiClient = PaywalloClient.getApiClient();\n if (!apiClient || !preloadedWebView) return;\n const sessionId = PaywalloClient.getSessionId();\n const durationSeconds = Math.round((Date.now() - presentedAtRef.current) / 1000);\n await apiClient.trackEvent(\"$paywall_dismissed\", PaywalloClient.getDistinctId(), {\n placement: preloadedWebView.placement,\n paywallId: preloadedWebView.paywallId,\n durationSeconds,\n action: \"close\",\n ...(sessionId && { sessionId }),\n ...(preloadedWebView.variantKey && { variantKey: preloadedWebView.variantKey }),\n ...(preloadedWebView.campaignId && { campaignId: preloadedWebView.campaignId }),\n });\n } catch {}\n };\n void track();\n setShowingPreloadedWebView(false);\n resolvePreloadedPaywall({ presented: true, purchased: false, cancelled: true, restored: false });\n }, [preloadedWebView, resolvePreloadedPaywall]);\n\n return { showingPreloadedWebView, presentPreloadedWebView, resolvePreloadedPaywall, handlePreloadedWebViewReady, handlePreloadedClose, setShowingPreloadedWebView, presentedAtRef };\n}\n","import { PaywalloError } from \"../../errors/PaywalloError\";\n\nexport class AffiliateError extends PaywalloError {\n constructor(code: string, message: string) {\n super(\"affiliate\", code, message);\n this.name = \"AffiliateError\";\n }\n}\n\nexport const AFFILIATE_ERROR_CODES = {\n NOT_INITIALIZED: \"AFFILIATE_NOT_INITIALIZED\",\n COUPON_REGISTER_FAILED: \"AFFILIATE_COUPON_REGISTER_FAILED\",\n COUPON_APPLY_FAILED: \"AFFILIATE_COUPON_APPLY_FAILED\",\n BALANCE_FETCH_FAILED: \"AFFILIATE_BALANCE_FETCH_FAILED\",\n WITHDRAWAL_FAILED: \"AFFILIATE_WITHDRAWAL_FAILED\",\n NETWORK_ERROR: \"AFFILIATE_NETWORK_ERROR\",\n} as const;\n","import type { ApiClient } from \"../../core/ApiClient\";\n\n/** Builds a query string from a params object, URL-encoding keys and values. */\nexport function buildQueryString(params?: Record<string, unknown>): string {\n if (!params) return \"\";\n const entries = Object.entries(params).filter(([, v]) => v !== undefined && v !== null);\n if (entries.length === 0) return \"\";\n return `?${entries.map(([k, v]) => `${k}=${encodeURIComponent(String(v))}`).join(\"&\")}`;\n}\n\n/** GET helper — returns the parsed response body. */\nexport async function affiliateGet<T>(\n apiClient: ApiClient,\n path: string,\n params?: Record<string, unknown>\n): Promise<T> {\n const response = await apiClient.get<T>(`${path}${buildQueryString(params)}`);\n return response.data;\n}\n\n/** POST helper — returns the parsed response body. */\nexport async function affiliatePost<T>(\n apiClient: ApiClient,\n path: string,\n body: Record<string, unknown>\n): Promise<T> {\n const response = await apiClient.post<T>(path, body);\n return response.data;\n}\n","import type { AffiliateCoupon, AffiliateCommission, WithdrawalRequest } from \"../../types\";\n\ntype RawCoupon = { code: string; status: string; createdAt: string };\ntype RawCommission = {\n id: string;\n referredDistinctId: string;\n purchaseAmount: number;\n commissionAmount: number;\n status: \"pending\" | \"eligible\" | \"ineligible\" | \"withdrawn\";\n createdAt: string;\n};\ntype RawWithdrawal = {\n id: string;\n amount: number;\n status: \"pending\" | \"approved\" | \"rejected\" | \"paid\";\n createdAt: string;\n};\n\nexport function mapRawCoupon(raw: RawCoupon): AffiliateCoupon {\n return { code: raw.code, status: raw.status, createdAt: new Date(raw.createdAt) };\n}\n\nexport function mapRawCommission(raw: RawCommission): AffiliateCommission {\n return { ...raw, createdAt: new Date(raw.createdAt) };\n}\n\nexport function mapRawWithdrawal(raw: RawWithdrawal): WithdrawalRequest {\n return { ...raw, createdAt: new Date(raw.createdAt) };\n}\n","import { AFFILIATE_ERROR_CODES, AffiliateError } from \"./AffiliateError\";\nimport type { AffiliateBalance, AffiliateCommission, AffiliateCoupon, WithdrawalRequest } from \"../../types\";\n\nimport { affiliateGet, affiliatePost } from \"./affiliateHttp\";\nimport { mapRawCommission, mapRawCoupon, mapRawWithdrawal } from \"./affiliateDateMappers\";\nimport { ApiClient } from \"../../core/ApiClient\";\nimport { identityManager } from \"../identity/IdentityManager\";\n\nexport class AffiliateManager {\n private apiClient: ApiClient | null = null;\n private debug = false;\n\n initialize(apiClient: ApiClient, debug = false): void {\n this.apiClient = apiClient;\n this.debug = debug;\n this.log(\"AffiliateManager initialized\");\n }\n\n async registerCoupon(code: string): Promise<{\n success: boolean;\n coupon?: AffiliateCoupon;\n error?: string;\n }> {\n this.ensureInitialized();\n\n const distinctId = identityManager.getDistinctId();\n\n try {\n const response = await this.post<{\n success: boolean;\n coupon?: {\n code: string;\n status: string;\n createdAt: string;\n };\n error?: string;\n }>(\"/api/v1/affiliate/register-coupon\", {\n code,\n distinctId,\n });\n\n if (response.success && response.coupon) {\n this.log(\"Coupon registered:\", code);\n return { success: true, coupon: mapRawCoupon(response.coupon) };\n }\n\n return {\n success: false,\n error: response.error,\n };\n } catch (error) {\n this.log(\"Failed to register coupon:\", error);\n return {\n success: false,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }\n\n async applyCoupon(code: string): Promise<{\n success: boolean;\n applied?: boolean;\n error?: string;\n }> {\n this.ensureInitialized();\n\n const distinctId = identityManager.getDistinctId();\n\n try {\n const response = await this.post<{\n success: boolean;\n applied?: boolean;\n error?: string;\n }>(\"/api/v1/affiliate/apply-coupon\", {\n code,\n distinctId,\n });\n\n if (response.success) {\n this.log(\"Coupon applied:\", code);\n }\n\n return response;\n } catch (error) {\n this.log(\"Failed to apply coupon:\", error);\n return {\n success: false,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }\n\n async getMyCoupon(): Promise<{ coupon: AffiliateCoupon | null }> {\n this.ensureInitialized();\n\n const distinctId = identityManager.getDistinctId();\n\n try {\n const response = await this.get<{\n coupon: {\n code: string;\n status: string;\n createdAt: string;\n } | null;\n }>(\"/api/v1/affiliate/my-coupon\", { distinctId });\n\n if (response.coupon) {\n return { coupon: mapRawCoupon(response.coupon) };\n }\n\n return { coupon: null };\n } catch (error) {\n this.log(\"Failed to get my coupon:\", error);\n return { coupon: null };\n }\n }\n\n async getAppliedCoupon(): Promise<{ coupon: { code: string } | null }> {\n this.ensureInitialized();\n\n const distinctId = identityManager.getDistinctId();\n\n try {\n const response = await this.get<{\n coupon: { code: string } | null;\n }>(\"/api/v1/affiliate/applied-coupon\", { distinctId });\n\n return response;\n } catch (error) {\n this.log(\"Failed to get applied coupon:\", error);\n return { coupon: null };\n }\n }\n\n async getBalance(): Promise<AffiliateBalance> {\n this.ensureInitialized();\n\n const distinctId = identityManager.getDistinctId();\n\n try {\n const response = await this.get<AffiliateBalance>(\"/api/v1/affiliate/balance\", {\n distinctId,\n });\n\n return response;\n } catch (error) {\n this.log(\"Failed to get balance:\", error);\n return {\n total: 0,\n pending: 0,\n available: 0,\n withdrawn: 0,\n };\n }\n }\n\n async getCommissions(): Promise<AffiliateCommission[]> {\n this.ensureInitialized();\n\n const distinctId = identityManager.getDistinctId();\n\n try {\n const response = await this.get<{\n commissions: Array<{\n id: string;\n referredDistinctId: string;\n purchaseAmount: number;\n commissionAmount: number;\n status: \"pending\" | \"eligible\" | \"ineligible\" | \"withdrawn\";\n createdAt: string;\n }>;\n }>(\"/api/v1/affiliate/commissions\", { distinctId });\n\n return response.commissions.map(mapRawCommission);\n } catch (error) {\n this.log(\"Failed to get commissions:\", error);\n return [];\n }\n }\n\n async requestWithdrawal(amount: number): Promise<{\n success: boolean;\n withdrawal?: WithdrawalRequest;\n error?: string;\n }> {\n this.ensureInitialized();\n\n const distinctId = identityManager.getDistinctId();\n\n try {\n const response = await this.post<{\n success: boolean;\n withdrawal?: {\n id: string;\n amount: number;\n status: \"pending\" | \"approved\" | \"rejected\" | \"paid\";\n createdAt: string;\n };\n error?: string;\n }>(\"/api/v1/affiliate/withdraw\", {\n amount,\n distinctId,\n });\n\n if (response.success && response.withdrawal) {\n this.log(\"Withdrawal requested:\", amount);\n return { success: true, withdrawal: mapRawWithdrawal(response.withdrawal) };\n }\n\n return {\n success: false,\n error: response.error,\n };\n } catch (error) {\n this.log(\"Failed to request withdrawal:\", error);\n return {\n success: false,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }\n\n async getWithdrawals(): Promise<WithdrawalRequest[]> {\n this.ensureInitialized();\n\n const distinctId = identityManager.getDistinctId();\n\n try {\n const response = await this.get<{\n withdrawals: Array<{\n id: string;\n amount: number;\n status: \"pending\" | \"approved\" | \"rejected\" | \"paid\";\n createdAt: string;\n }>;\n }>(\"/api/v1/affiliate/withdrawals\", { distinctId });\n\n return response.withdrawals.map(mapRawWithdrawal);\n } catch (error) {\n this.log(\"Failed to get withdrawals:\", error);\n return [];\n }\n }\n\n private async get<T>(path: string, params?: Record<string, unknown>): Promise<T> {\n this.ensureInitialized();\n return affiliateGet<T>(this.apiClient!, path, params);\n }\n\n private async post<T>(path: string, body: Record<string, unknown>): Promise<T> {\n this.ensureInitialized();\n return affiliatePost<T>(this.apiClient!, path, body);\n }\n\n private ensureInitialized(): void {\n if (!this.apiClient) {\n throw new AffiliateError(\n AFFILIATE_ERROR_CODES.NOT_INITIALIZED,\n \"AffiliateManager not initialized. Call initialize() first\"\n );\n }\n }\n\n private log(..._args: unknown[]): void {}\n}\n\nexport const affiliateManager = new AffiliateManager();\n","import { affiliateManager } from \"./AffiliateManager\";\n\nexport const PaywalloAffiliate = {\n registerCoupon: (code: string) => affiliateManager.registerCoupon(code),\n applyCoupon: (code: string) => affiliateManager.applyCoupon(code),\n getMyCoupon: () => affiliateManager.getMyCoupon(),\n getAppliedCoupon: () => affiliateManager.getAppliedCoupon(),\n getBalance: () => affiliateManager.getBalance(),\n getCommissions: () => affiliateManager.getCommissions(),\n requestWithdrawal: (amount: number) => affiliateManager.requestWithdrawal(amount),\n getWithdrawals: () => affiliateManager.getWithdrawals(),\n};\n","import { SecureStorage } from \"../../core/storage/SecureStorage\";\n\nimport type { CachedSubscription, SubscriptionStatusResponse } from \"./types\";\n\nconst LEGACY_CACHE_KEY = \"subscription_cache\";\nconst CACHE_KEY_PREFIX = \"subscription_cache:\";\nconst DEFAULT_TTL = 24 * 60 * 60 * 1000;\n\nfunction keyFor(distinctId: string): string {\n return `${CACHE_KEY_PREFIX}${distinctId}`;\n}\n\nexport class SubscriptionCache {\n private ttl: number;\n private memoryCache: Map<string, CachedSubscription> = new Map();\n private storage: SecureStorage;\n private legacyCleanupDone = false;\n\n constructor(ttl: number = DEFAULT_TTL) {\n this.ttl = ttl;\n this.storage = new SecureStorage();\n }\n\n private async cleanupLegacyCache(): Promise<void> {\n if (this.legacyCleanupDone) return;\n this.legacyCleanupDone = true;\n try {\n await this.storage.remove(LEGACY_CACHE_KEY);\n } catch {\n }\n }\n\n async get(distinctId: string): Promise<CachedSubscription | null> {\n await this.cleanupLegacyCache();\n if (!distinctId) return null;\n\n const memEntry = this.memoryCache.get(distinctId);\n if (memEntry && !this.isExpired(memEntry)) {\n return memEntry;\n }\n\n try {\n const stored = await this.storage.get(keyFor(distinctId));\n if (!stored) {\n return null;\n }\n\n const parsed: unknown = JSON.parse(stored);\n if (\n typeof parsed !== \"object\" ||\n parsed === null ||\n !(\"data\" in parsed) ||\n typeof (parsed as Record<string, unknown>).data !== \"object\" ||\n (parsed as Record<string, unknown>).data === null ||\n !(\"cachedAt\" in parsed) ||\n typeof (parsed as Record<string, unknown>).cachedAt !== \"number\"\n ) {\n await this.storage.remove(keyFor(distinctId));\n return null;\n }\n const cached = parsed as CachedSubscription;\n\n if (cached.data.subscription?.expiresAt) {\n cached.data.subscription.expiresAt = new Date(cached.data.subscription.expiresAt);\n }\n if (cached.data.subscription?.originalPurchaseDate) {\n cached.data.subscription.originalPurchaseDate = new Date(\n cached.data.subscription.originalPurchaseDate\n );\n }\n if (cached.data.subscription?.latestPurchaseDate) {\n cached.data.subscription.latestPurchaseDate = new Date(\n cached.data.subscription.latestPurchaseDate\n );\n }\n if (cached.data.subscription?.cancellationDate) {\n cached.data.subscription.cancellationDate = new Date(\n cached.data.subscription.cancellationDate\n );\n }\n if (cached.data.subscription?.gracePeriodExpiresAt) {\n cached.data.subscription.gracePeriodExpiresAt = new Date(\n cached.data.subscription.gracePeriodExpiresAt\n );\n }\n\n cached.isStale = this.isExpired(cached);\n if (!cached.isStale) {\n this.memoryCache.set(distinctId, cached);\n }\n\n return cached;\n } catch {\n return null;\n }\n }\n\n async set(distinctId: string, data: SubscriptionStatusResponse): Promise<void> {\n if (!distinctId) return;\n const cached: CachedSubscription = {\n data,\n cachedAt: Date.now(),\n isStale: false,\n };\n\n this.memoryCache.set(distinctId, cached);\n\n try {\n await this.storage.set(keyFor(distinctId), JSON.stringify(cached));\n } catch {\n }\n }\n\n async invalidate(distinctId: string): Promise<void> {\n if (!distinctId) return;\n this.memoryCache.delete(distinctId);\n\n try {\n await this.storage.remove(keyFor(distinctId));\n } catch {\n }\n }\n\n async invalidateAll(): Promise<void> {\n this.memoryCache.clear();\n try {\n await this.storage.remove(LEGACY_CACHE_KEY);\n } catch {\n }\n }\n\n private isExpired(cached: CachedSubscription): boolean {\n return Date.now() - cached.cachedAt > this.ttl;\n }\n\n setTTL(ttl: number): void {\n this.ttl = ttl;\n }\n}\n\nexport const subscriptionCache = new SubscriptionCache();\n","import { Platform } from \"react-native\";\n\nimport { SESSION_ERROR_CODES, SessionError } from \"../session/SessionError\";\n\nimport { SubscriptionCache } from \"./SubscriptionCache\";\nimport type {\n SubscriptionInfo,\n SubscriptionManagerConfig,\n SubscriptionStatusResponse,\n} from \"./types\";\n\ntype SubscriptionListener = (subscription: SubscriptionStatusResponse) => void;\n\nclass SubscriptionManagerClass {\n private config: SubscriptionManagerConfig | null = null;\n private cache: SubscriptionCache;\n private listeners: Set<SubscriptionListener> = new Set();\n private userId: string | null = null;\n\n constructor() {\n this.cache = new SubscriptionCache();\n }\n\n private cacheKey(): string {\n return this.userId ?? \"__anonymous__\";\n }\n\n init(config: SubscriptionManagerConfig): void {\n this.config = config;\n if (config.cacheTTL) {\n this.cache.setTTL(config.cacheTTL);\n }\n }\n\n setUserId(userId: string | null): void {\n if (this.userId !== userId) {\n this.userId = userId;\n void this.cache.invalidateAll();\n }\n }\n\n async hasActiveSubscription(forceRefresh = false): Promise<boolean> {\n const status = await this.getSubscriptionStatus(forceRefresh);\n return status.hasActiveSubscription;\n }\n\n async getSubscription(forceRefresh = false): Promise<SubscriptionInfo | null> {\n const status = await this.getSubscriptionStatus(forceRefresh);\n return status.subscription;\n }\n\n async getEntitlements(forceRefresh = false): Promise<string[]> {\n const status = await this.getSubscriptionStatus(forceRefresh);\n return status.entitlements;\n }\n\n async getSubscriptionStatus(forceRefresh = false): Promise<SubscriptionStatusResponse> {\n if (!this.config) {\n return this.getEmptyStatus();\n }\n\n if (!forceRefresh) {\n const cached = await this.cache.get(this.cacheKey());\n if (cached && !cached.isStale) {\n return cached.data;\n }\n }\n\n try {\n const status = await this.fetchSubscriptionStatus();\n await this.cache.set(this.cacheKey(), status);\n this.notifyListeners(status);\n return status;\n } catch (error) {\n this.log(\"Failed to fetch subscription status\", error);\n\n const cached = await this.cache.get(this.cacheKey());\n if (cached) {\n return cached.data;\n }\n\n return this.getEmptyStatus();\n }\n }\n\n async restorePurchases(): Promise<SubscriptionStatusResponse> {\n if (!this.config) {\n throw new SessionError(\n SESSION_ERROR_CODES.NOT_INITIALIZED,\n \"SubscriptionManager not initialized\"\n );\n }\n\n await this.cache.invalidate(this.cacheKey());\n return this.getSubscriptionStatus(true);\n }\n\n private async fetchSubscriptionStatus(): Promise<SubscriptionStatusResponse> {\n if (!this.config) {\n return this.getEmptyStatus();\n }\n\n const url = new URL(`${this.config.serverUrl}/subscriptions/status`);\n if (this.userId) {\n url.searchParams.set(\"userId\", this.userId);\n }\n url.searchParams.set(\"platform\", Platform.OS);\n\n const response = await fetch(url.toString(), {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-App-Key\": this.config.appKey,\n },\n });\n\n if (!response.ok) {\n throw new SessionError(\n SESSION_ERROR_CODES.RESTORE_FAILED,\n `Failed to fetch subscription status: ${response.status}`\n );\n }\n\n const data = (await response.json()) as SubscriptionStatusResponse;\n\n if (data.subscription) {\n data.subscription.expiresAt = new Date(data.subscription.expiresAt);\n data.subscription.originalPurchaseDate = new Date(data.subscription.originalPurchaseDate);\n data.subscription.latestPurchaseDate = new Date(data.subscription.latestPurchaseDate);\n if (data.subscription.cancellationDate) {\n data.subscription.cancellationDate = new Date(data.subscription.cancellationDate);\n }\n if (data.subscription.gracePeriodExpiresAt) {\n data.subscription.gracePeriodExpiresAt = new Date(data.subscription.gracePeriodExpiresAt);\n }\n }\n\n return data;\n }\n\n private getEmptyStatus(): SubscriptionStatusResponse {\n return {\n hasActiveSubscription: false,\n subscription: null,\n entitlements: [],\n };\n }\n\n addListener(listener: SubscriptionListener): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n private notifyListeners(status: SubscriptionStatusResponse): void {\n for (const listener of this.listeners) {\n listener(status);\n }\n }\n\n async onPurchaseComplete(): Promise<void> {\n await this.cache.invalidate(this.cacheKey());\n await this.getSubscriptionStatus(true);\n }\n\n private log(..._args: unknown[]): void {}\n}\n\nexport const subscriptionManager = new SubscriptionManagerClass();\n","import { PaywalloError } from \"../../errors/PaywalloError\";\n\nexport class SessionError extends PaywalloError {\n constructor(code: string, message: string) {\n super(\"session\", code, message);\n this.name = \"SessionError\";\n }\n}\n\nexport const SESSION_ERROR_CODES = {\n NOT_INITIALIZED: \"SESSION_NOT_INITIALIZED\",\n START_FAILED: \"SESSION_START_FAILED\",\n END_FAILED: \"SESSION_END_FAILED\",\n RESTORE_FAILED: \"SESSION_RESTORE_FAILED\",\n} as const;\n","import { Platform } from \"react-native\";\n\nconst SDK_VERSION = \"1.0.0\";\n\nimport type {\n ApiClientConfig,\n CampaignResponse,\n ConditionalFlagContext,\n ConditionalFlagResult,\n EmergencyPaywallResponse,\n Environment,\n FlagVariant,\n PaywallConfig,\n SubscriptionStatusResponse,\n UserProperties,\n ValidatePurchaseResponse,\n} from \"../types\";\n\nimport { buildConditionalFlagUrl, deriveWebUrl } from \"./apiUrlUtils\";\nimport {\n getCampaignData,\n getEmergencyPaywall,\n getSubscriptionStatus,\n validatePurchase,\n} from \"../domains/iap/apiPurchaseMethods\";\nimport { HttpClient, type HttpResponse } from \"./http\";\nimport { networkMonitor } from \"./network\";\nimport { offlineQueue } from \"./queue\";\nimport { ApiCache } from \"./ApiCache\";\nimport { secureStorage } from \"./storage/SecureStorage\";\n\nconst DEFAULT_BASE_URL = \"https://panel.lucasqueiroga.shop\";\n\nexport type { ApiClientConfig };\n\nexport class ApiClient {\n private baseUrl: string;\n private webUrl: string;\n private appKey: string;\n private debug: boolean;\n private environment: Environment;\n private offlineQueueEnabled: boolean;\n private httpClient: HttpClient;\n private readonly cache = new ApiCache();\n\n constructor(\n appKey: string,\n debug = false,\n environment: Environment = \"Production\",\n offlineQueueEnabled = true,\n timeout = 30000\n ) {\n this.appKey = appKey;\n this.baseUrl = DEFAULT_BASE_URL;\n this.webUrl = deriveWebUrl(this.baseUrl);\n this.debug = debug;\n this.environment = environment;\n this.offlineQueueEnabled = offlineQueueEnabled;\n this.httpClient = new HttpClient(this.baseUrl, { timeout, debug });\n }\n\n getHttpClient(): HttpClient { return this.httpClient; }\n getBaseUrl(): string { return this.baseUrl; }\n getWebUrl(): string { return this.webUrl; }\n getEnvironment(): Environment { return this.environment; }\n getQueueSize(): number { return offlineQueue.getSize(); }\n setofflineQueueEnabled(enabled: boolean): void { this.offlineQueueEnabled = enabled; }\n isofflineQueueEnabled(): boolean { return this.offlineQueueEnabled; }\n\n setEnvironment(environment: Environment): void {\n this.environment = environment;\n }\n\n setDebug(debug: boolean): void {\n this.debug = debug;\n this.httpClient.setDebug(debug);\n }\n\n async clearQueue(): Promise<void> { await offlineQueue.clear(); }\n\n async get<T>(path: string): Promise<HttpResponse<T>> {\n return this.httpClient.get<T>(path, { headers: { \"X-App-Key\": this.appKey } });\n }\n\n async post<T>(path: string, body: unknown, skipRetry = false): Promise<HttpResponse<T>> {\n return this.httpClient.post<T>(path, body, { headers: { \"X-App-Key\": this.appKey }, skipRetry });\n }\n\n async reportError(errorType: string, message: string, context?: Record<string, unknown>): Promise<void> {\n try {\n await this.post(\"/api/v1/sdk/errors\", {\n errorType, message, context,\n sdkVersion: SDK_VERSION,\n platform: Platform.OS,\n }, true);\n } catch {\n }\n }\n\n async trackEvent(eventName: string, distinctId: string, properties?: UserProperties, timestamp?: number): Promise<void> {\n await this.postWithQueue(\"/api/v1/events\", {\n eventName, distinctId,\n properties: { ...properties, platform: Platform.OS },\n timestamp: timestamp ?? Date.now(),\n environment: this.environment.toLowerCase(),\n }, `event:${eventName}`);\n }\n\n async identify(distinctId: string, properties?: UserProperties, email?: string, deviceId?: string): Promise<void> {\n await this.postWithQueue(\"/api/v1/identify\", { distinctId, properties: properties ?? {}, email, platform: Platform.OS, ...(deviceId && { deviceId }) }, \"identify\");\n }\n\n async startSession(distinctId: string, sessionId: string, platform?: string): Promise<{ success: boolean }> {\n await this.postWithQueue(\"/api/v1/sessions/start\", {\n distinctId, sessionId, platform: platform ?? Platform.OS, environment: this.environment.toLowerCase(),\n }, `session.start:${sessionId}`);\n return { success: true };\n }\n\n async endSession(sessionId: string, durationSeconds: number): Promise<{ success: boolean }> {\n await this.postWithQueue(\"/api/v1/sessions/end\", { sessionId, durationSeconds }, `session.end:${sessionId}`);\n return { success: true };\n }\n\n async getVariant(flagKey: string, distinctId: string): Promise<FlagVariant> {\n const key = `${flagKey}:${distinctId}`;\n const hit = this.cache.getVariant(key);\n if (hit !== undefined) return hit;\n\n const persisted = await this.readFlagFromStorage(flagKey, distinctId);\n if (persisted !== null) {\n this.cache.setVariant(key, persisted);\n return persisted;\n }\n\n try {\n const res = await this.get<FlagVariant>(`/api/v1/flags/${flagKey}?distinctId=${encodeURIComponent(distinctId)}`);\n if (res.status === 404) {\n const v: FlagVariant = { variant: null };\n this.cache.setVariant(key, v, this.cache.nullTTL);\n return v;\n }\n if (!res.ok) {\n this.log(\"Non-OK response for variant:\", flagKey, res.status);\n const stale = this.cache.getStaleVariant(key);\n if (stale !== undefined) return stale;\n return { variant: null };\n }\n this.cache.setVariant(key, res.data);\n await this.writeFlagToStorage(flagKey, distinctId, res.data);\n return res.data;\n } catch (error) {\n this.log(\"Failed to get variant:\", flagKey, error);\n const stale = this.cache.getStaleVariant(key);\n if (stale !== undefined) return stale;\n return { variant: null };\n }\n }\n\n async getPaywall(placement: string): Promise<PaywallConfig | null> {\n const hit = this.cache.getPaywall(placement);\n if (hit !== undefined) return hit;\n try {\n const res = await this.get<PaywallConfig>(`/api/v1/paywalls/${placement}`);\n if (res.status === 404) { this.cache.setPaywall(placement, null, this.cache.nullTTL); return null; }\n if (!res.ok) {\n this.log(\"Non-OK response for paywall:\", placement, res.status);\n const stale = this.cache.getStalePaywall(placement);\n if (stale !== undefined) return stale;\n return null;\n }\n this.cache.setPaywall(placement, res.data);\n return res.data;\n } catch (error) {\n this.log(\"Failed to get paywall:\", placement, error);\n const stale = this.cache.getStalePaywall(placement);\n if (stale !== undefined) return stale;\n return null;\n }\n }\n\n async getEmergencyPaywall(): Promise<EmergencyPaywallResponse> {\n const result = await getEmergencyPaywall(this);\n this.log(\"Got emergency paywall:\", result.enabled);\n return result;\n }\n\n async getCampaign(\n placement: string,\n distinctId: string,\n context?: Record<string, unknown>\n ): Promise<CampaignResponse | null> {\n const key = `${placement}:${distinctId}`;\n const hit = this.cache.getCampaign(key);\n if (hit !== undefined) return hit;\n try {\n const result = await getCampaignData(this, this.baseUrl, placement, distinctId, context);\n if (!result) {\n this.log(\"No campaign found for placement:\", placement);\n this.cache.setCampaign(key, null, this.cache.nullTTL);\n return null;\n }\n this.log(\"Got campaign:\", placement, result.variantKey);\n this.cache.setCampaign(key, result);\n return result;\n } catch (error) {\n this.log(\"Failed to get campaign:\", placement, error);\n const stale = this.cache.getStaleCampaign(key);\n if (stale !== undefined) return stale;\n return null;\n }\n }\n\n async getPrimaryCampaign(distinctId: string): Promise<CampaignResponse | null> {\n const key = `primary:${distinctId}`;\n const hit = this.cache.getCampaign(key);\n if (hit !== undefined) return hit;\n try {\n const res = await this.get<CampaignResponse>(`/campaigns/public/primary?distinctId=${encodeURIComponent(distinctId)}`);\n if (res.status === 404) {\n this.cache.setCampaign(key, null, this.cache.nullTTL);\n return null;\n }\n if (!res.ok) {\n this.log(\"Non-OK response for primary campaign:\", res.status);\n const stale = this.cache.getStaleCampaign(key);\n if (stale !== undefined) return stale;\n return null;\n }\n this.log(\"Got primary campaign:\", res.data?.campaignId);\n this.cache.setCampaign(key, res.data);\n return res.data;\n } catch (error) {\n this.log(\"Failed to get primary campaign:\", error);\n const stale = this.cache.getStaleCampaign(key);\n if (stale !== undefined) return stale;\n return null;\n }\n }\n\n async validatePurchase(\n platform: \"ios\" | \"android\",\n receipt: string,\n productId: string,\n transactionId: string,\n priceLocal: number,\n currency: string,\n country: string,\n distinctId?: string,\n paywallPlacement?: string,\n variantKey?: string\n ): Promise<ValidatePurchaseResponse> {\n const result = await validatePurchase(\n this, this.appKey, platform, receipt, productId, transactionId,\n priceLocal, currency, country, distinctId, paywallPlacement, variantKey\n );\n this.log(\"Purchase validated:\", result.success);\n return result;\n }\n\n async getSubscriptionStatus(distinctId: string): Promise<SubscriptionStatusResponse> {\n const result = await getSubscriptionStatus(this, this.baseUrl, this.appKey, distinctId);\n this.log(\"Subscription status:\", result.hasActiveSubscription);\n return result;\n }\n\n async evaluateFlags(keys: string[], distinctId: string): Promise<Record<string, string | null>> {\n const query = keys.map(encodeURIComponent).join(\",\");\n const path = `/api/v1/flags/evaluate?keys=${query}`;\n try {\n const res = await this.httpClient.get<unknown>(path, {\n headers: { \"X-App-Key\": this.appKey, \"x-distinct-id\": distinctId },\n });\n if (!res.ok) {\n this.log(\"Non-OK response for evaluateFlags:\", res.status);\n return {};\n }\n const raw = res.data;\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) return {};\n const record = raw as Record<string, unknown>;\n const result: Record<string, string | null> = {};\n for (const key of Object.keys(record)) {\n const value = record[key];\n const variant: string | null = typeof value === \"boolean\" ? String(value) : typeof value === \"string\" ? value : null;\n result[key] = variant;\n const flagVariant: FlagVariant = { variant };\n this.cache.setVariant(`${key}:${distinctId}`, flagVariant);\n await this.writeFlagToStorage(key, distinctId, flagVariant);\n }\n return result;\n } catch (error) {\n this.log(\"Failed to evaluateFlags:\", error);\n return {};\n }\n }\n\n async getConditionalFlag(\n flagKey: string,\n context: ConditionalFlagContext\n ): Promise<ConditionalFlagResult> {\n try {\n const url = buildConditionalFlagUrl(this.baseUrl, flagKey, context);\n const response = await this.get<{ value: boolean }>(url);\n if (response.status === 404) return { value: false, flagKey };\n if (!response.ok) {\n this.log(\"Non-OK response for conditional flag:\", flagKey, response.status);\n return { value: false, flagKey };\n }\n this.log(\"Got conditional flag:\", flagKey, response.data.value);\n return { value: response.data.value, flagKey };\n } catch {\n this.log(\"Failed to get conditional flag:\", flagKey);\n return { value: false, flagKey };\n }\n }\n\n async getVariantFromCache(flagKey: string, distinctId: string): Promise<FlagVariant | null> {\n const key = `${flagKey}:${distinctId}`;\n const hit = this.cache.getVariant(key);\n if (hit !== undefined) return hit;\n const persisted = await this.readFlagFromStorage(flagKey, distinctId);\n if (persisted !== null) {\n this.cache.setVariant(key, persisted);\n return persisted;\n }\n return null;\n }\n\n private static readonly FLAG_MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000;\n\n private async readFlagFromStorage(flagKey: string, distinctId: string): Promise<FlagVariant | null> {\n try {\n const raw = await secureStorage.get(`flag:${flagKey}:${distinctId}`);\n if (!raw) return null;\n const parsed: unknown = JSON.parse(raw);\n if (\n typeof parsed !== \"object\" || parsed === null ||\n !(\"variant\" in parsed) || !(\"cachedAt\" in parsed) ||\n typeof (parsed as Record<string, unknown>).cachedAt !== \"number\"\n ) return null;\n const { variant, payload, cachedAt } = parsed as { variant: string | null; payload?: Record<string, unknown>; cachedAt: number };\n if (Date.now() - cachedAt > ApiClient.FLAG_MAX_AGE_MS) return null;\n return { variant, payload };\n } catch {\n return null;\n }\n }\n\n private async writeFlagToStorage(flagKey: string, distinctId: string, flag: FlagVariant): Promise<void> {\n try {\n const value = JSON.stringify({ variant: flag.variant, payload: flag.payload, cachedAt: Date.now() });\n await secureStorage.set(`flag:${flagKey}:${distinctId}`, value);\n } catch {\n }\n }\n\n private async postWithQueue(\n url: string,\n payload: Record<string, unknown>,\n label: string\n ): Promise<void> {\n if (this.offlineQueueEnabled && !networkMonitor.isOnline()) {\n await offlineQueue.enqueue(\"POST\", url, payload, { \"X-App-Key\": this.appKey });\n this.log(\"Queued for offline:\", label);\n return;\n }\n try {\n await this.post(url, payload);\n } catch (error) {\n this.log(\"Request failed:\", label, error);\n if (this.offlineQueueEnabled) {\n await offlineQueue.enqueue(\"POST\", url, payload, { \"X-App-Key\": this.appKey });\n this.log(\"Queued after failure:\", label);\n return;\n }\n throw error;\n }\n }\n\n private log(..._args: unknown[]): void {}\n}\n","import type { ConditionalFlagContext } from \"../types\";\n\nconst DEFAULT_WEB_URL = \"https://paywallo.com.br\";\n\n/**\n * Derives the web (dashboard) URL from the API base URL.\n * - Local dev (192.168.x or localhost): same host, port 3000\n * - Production: uses DEFAULT_WEB_URL (paywallo.com.br)\n * - api.* → app.*\n */\nexport function deriveWebUrl(baseUrl: string): string {\n try {\n const url = new URL(baseUrl);\n if (url.hostname.startsWith(\"192.168\") || url.hostname === \"localhost\") {\n url.port = \"3000\";\n return url.toString().replace(/\\/$/, \"\");\n }\n if (url.hostname.startsWith(\"api.\")) {\n url.hostname = url.hostname.replace(\"api.\", \"app.\");\n return url.toString().replace(/\\/$/, \"\");\n }\n return DEFAULT_WEB_URL;\n } catch {\n return DEFAULT_WEB_URL;\n }\n}\n\n/** Builds a URL with optional query params appended. */\nexport function buildUrl(base: string, params?: Record<string, unknown>): string {\n if (!params) return base;\n const entries = Object.entries(params).filter(([, v]) => v !== undefined && v !== null);\n if (entries.length === 0) return base;\n const query = entries\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)\n .join(\"&\");\n return `${base}?${query}`;\n}\n\n/** Builds the URL for the conditional-flags endpoint including context query params. */\nexport function buildConditionalFlagUrl(\n baseUrl: string,\n flagKey: string,\n context: ConditionalFlagContext\n): string {\n const url = new URL(`${baseUrl}/api/v1/conditional-flags/${flagKey}`);\n if (context.platform) url.searchParams.set(\"platform\", context.platform);\n if (context.appVersion) url.searchParams.set(\"appVersion\", context.appVersion);\n if (context.country) url.searchParams.set(\"country\", context.country);\n if (context.distinctId) url.searchParams.set(\"distinctId\", context.distinctId);\n return url.toString();\n}\n","import type {\n CampaignResponse,\n EmergencyPaywallResponse,\n SubscriptionStatusResponse,\n ValidatePurchaseResponse,\n} from \"../../types\";\n\nimport type { ApiClient } from \"../../core/ApiClient\";\n\nexport async function validatePurchase(\n client: ApiClient,\n appKey: string,\n platform: \"ios\" | \"android\",\n receipt: string,\n productId: string,\n transactionId: string,\n priceLocal: number,\n currency: string,\n country: string,\n distinctId?: string,\n paywallPlacement?: string,\n variantKey?: string\n): Promise<ValidatePurchaseResponse> {\n const response = await client.post<ValidatePurchaseResponse>(\n `/purchases/validate/${appKey}`,\n {\n platform, receipt, productId, transactionId, priceLocal, currency, country, distinctId,\n ...(paywallPlacement !== undefined && { paywallPlacement }),\n ...(variantKey !== undefined && { variantKey }),\n },\n false\n );\n return response.data;\n}\n\nexport async function getSubscriptionStatus(\n client: ApiClient,\n baseUrl: string,\n appKey: string,\n distinctId: string\n): Promise<SubscriptionStatusResponse> {\n const url = new URL(`${baseUrl}/purchases/status/${appKey}`);\n url.searchParams.set(\"distinctId\", distinctId);\n const response = await client.get<SubscriptionStatusResponse>(url.toString());\n return response.data;\n}\n\nexport async function getEmergencyPaywall(\n client: ApiClient\n): Promise<EmergencyPaywallResponse> {\n try {\n const response = await client.get<EmergencyPaywallResponse>(\"/api/v1/emergency-paywall\");\n if (response.status === 404) return { enabled: false };\n return response.data;\n } catch {\n return { enabled: false };\n }\n}\n\nexport async function getCampaignData(\n client: ApiClient,\n baseUrl: string,\n placement: string,\n distinctId: string,\n context?: Record<string, unknown>\n): Promise<CampaignResponse | null> {\n const url = new URL(`${baseUrl}/api/v1/campaigns/${placement}`);\n url.searchParams.set(\"distinctId\", distinctId);\n if (context) url.searchParams.set(\"context\", JSON.stringify(context));\n\n const response = await client.get<CampaignResponse | { paywall: null }>(url.toString());\n if (response.status === 404) return null;\n\n const data = response.data;\n if (\"paywall\" in data && data.paywall === null && !(\"campaignId\" in data)) return null;\n return data as CampaignResponse;\n}\n","export interface RetryConfig {\n maxRetries: number;\n baseDelay: number;\n maxDelay: number;\n retryableStatusCodes: number[];\n}\n\nexport interface HttpClientConfig {\n baseUrl: string;\n timeout: number;\n retry: RetryConfig;\n debug: boolean;\n}\n\nexport interface RequestOptions {\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\";\n headers?: Record<string, string>;\n body?: unknown;\n skipRetry?: boolean;\n timeout?: number;\n}\n\nexport interface HttpResponse<T = unknown> {\n ok: boolean;\n status: number;\n data: T;\n headers: Record<string, string>;\n}\n\nexport interface RetryState {\n attempt: number;\n lastError: Error | null;\n}\n\nexport const DEFAULT_RETRY_CONFIG: RetryConfig = {\n maxRetries: 2,\n baseDelay: 500,\n maxDelay: 4000,\n retryableStatusCodes: [408, 429, 500, 502, 503, 504],\n};\n\nexport const DEFAULT_HTTP_CONFIG: Partial<HttpClientConfig> = {\n timeout: 10000,\n retry: DEFAULT_RETRY_CONFIG,\n debug: false,\n};\n","import { CLIENT_ERROR_CODES, ClientError } from \"../../errors/ClientError\";\nimport type {\n HttpClientConfig,\n HttpResponse,\n RequestOptions,\n RetryConfig,\n RetryState,\n} from \"./types\";\nimport { DEFAULT_HTTP_CONFIG, DEFAULT_RETRY_CONFIG } from \"./types\";\n\nexport class HttpClient {\n private config: HttpClientConfig;\n\n constructor(baseUrl: string, config?: Partial<Omit<HttpClientConfig, \"baseUrl\">>) {\n this.config = {\n baseUrl,\n timeout: config?.timeout ?? (DEFAULT_HTTP_CONFIG.timeout as number),\n retry: { ...DEFAULT_RETRY_CONFIG, ...config?.retry },\n debug: config?.debug ?? false,\n };\n }\n\n async get<T>(path: string, options?: Partial<RequestOptions>): Promise<HttpResponse<T>> {\n return this.request<T>(path, { ...options, method: \"GET\" });\n }\n\n async post<T>(\n path: string,\n body?: unknown,\n options?: Partial<RequestOptions>\n ): Promise<HttpResponse<T>> {\n return this.request<T>(path, { ...options, method: \"POST\", body });\n }\n\n async request<T>(path: string, options: RequestOptions): Promise<HttpResponse<T>> {\n const url = this.buildUrl(path);\n const fetchOptions = this.buildFetchOptions(options);\n const timeout = options.timeout ?? this.config.timeout;\n\n if (options.skipRetry) {\n return this.executeRequest<T>(url, fetchOptions, timeout);\n }\n\n return this.executeWithRetry<T>(url, fetchOptions, options);\n }\n\n private async executeWithRetry<T>(\n url: string,\n fetchOptions: RequestInit,\n options: RequestOptions\n ): Promise<HttpResponse<T>> {\n const retryConfig = this.config.retry;\n const timeout = options.timeout ?? this.config.timeout;\n const state: RetryState = { attempt: 0, lastError: null };\n\n while (state.attempt <= retryConfig.maxRetries) {\n try {\n const response = await this.executeRequest<T>(url, fetchOptions, timeout);\n\n if (this.shouldRetry(response.status, retryConfig)) {\n if (state.attempt < retryConfig.maxRetries) {\n state.attempt++;\n const delay = this.calculateDelay(state.attempt, retryConfig);\n await this.sleep(delay);\n continue;\n }\n }\n\n return response;\n } catch (error) {\n state.lastError = error instanceof Error ? error : new ClientError(CLIENT_ERROR_CODES.UNKNOWN, String(error));\n\n if (this.isNetworkError(state.lastError) && state.attempt < retryConfig.maxRetries) {\n state.attempt++;\n const delay = this.calculateDelay(state.attempt, retryConfig);\n await this.sleep(delay);\n continue;\n }\n\n throw state.lastError;\n }\n }\n\n throw state.lastError ?? new ClientError(CLIENT_ERROR_CODES.UNKNOWN, \"Max retries exceeded\");\n }\n\n private async executeRequest<T>(\n url: string,\n options: RequestInit,\n timeout: number\n ): Promise<HttpResponse<T>> {\n const controller = new AbortController();\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n let isCompleted = false;\n\n timeoutId = setTimeout(() => {\n if (!isCompleted) {\n controller.abort();\n }\n }, timeout);\n\n try {\n const response = await fetch(url, {\n ...options,\n signal: controller.signal,\n });\n\n isCompleted = true;\n\n let data: T;\n const contentType = response.headers.get(\"content-type\");\n\n if (contentType?.includes(\"application/json\")) {\n data = (await response.json()) as T;\n } else {\n const textData = await response.text();\n data = textData as unknown as T;\n }\n\n const headers: Record<string, string> = {};\n response.headers.forEach((value: string, key: string) => {\n headers[key] = value;\n });\n\n return {\n ok: response.ok,\n status: response.status,\n data,\n headers,\n };\n } catch (error) {\n this.log(\"Request failed\", {\n url,\n error: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n isCompleted = true;\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n }\n }\n\n private buildUrl(path: string): string {\n if (path.startsWith(\"http://\") || path.startsWith(\"https://\")) {\n return path;\n }\n return `${this.config.baseUrl}${path}`;\n }\n\n private buildFetchOptions(options: RequestOptions): RequestInit {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n };\n\n const fetchOptions: RequestInit = {\n method: options.method,\n headers,\n };\n\n if (options.body !== undefined) {\n fetchOptions.body = JSON.stringify(options.body);\n }\n\n return fetchOptions;\n }\n\n private shouldRetry(status: number, config: RetryConfig): boolean {\n return config.retryableStatusCodes.includes(status);\n }\n\n private isNetworkError(error: Error): boolean {\n const networkErrorPatterns = [\n \"network\",\n \"fetch\",\n \"ECONNREFUSED\",\n \"ETIMEDOUT\",\n \"ENOTFOUND\",\n \"aborted\",\n \"timeout\",\n ];\n\n const message = error.message.toLowerCase();\n return networkErrorPatterns.some((pattern) => message.includes(pattern.toLowerCase()));\n }\n\n private calculateDelay(attempt: number, config: RetryConfig): number {\n const exponentialDelay = config.baseDelay * Math.pow(2, attempt - 1);\n const jitter = Math.random() * 0.3 * exponentialDelay;\n return Math.min(exponentialDelay + jitter, config.maxDelay);\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n private log(..._args: unknown[]): void {}\n\n setDebug(debug: boolean): void {\n this.config.debug = debug;\n }\n\n getConfig(): Readonly<HttpClientConfig> {\n return { ...this.config };\n }\n}\n","import { AppState, AppStateStatus } from \"react-native\";\n\nimport type { NetworkListener, NetworkMonitorConfig, NetworkState } from \"./types\";\nimport { DEFAULT_NETWORK_CONFIG } from \"./types\";\n\ntype NetInfoState = {\n isConnected: boolean | null;\n isInternetReachable: boolean | null;\n};\n\ntype NetInfoSubscription = () => void;\n\ntype NetInfoModule = {\n addEventListener: (listener: (state: NetInfoState) => void) => NetInfoSubscription;\n fetch: () => Promise<NetInfoState>;\n};\n\nclass NetworkMonitorClass {\n private config: NetworkMonitorConfig = DEFAULT_NETWORK_CONFIG;\n private listeners: Set<NetworkListener> = new Set();\n private currentState: NetworkState = \"unknown\";\n private netInfoModule: NetInfoModule | null = null;\n private netInfoSubscription: NetInfoSubscription | null = null;\n private appStateSubscription: ReturnType<typeof AppState.addEventListener> | null = null;\n private initialized = false;\n private checkIntervalId: ReturnType<typeof setInterval> | null = null;\n\n async initialize(config?: Partial<NetworkMonitorConfig>): Promise<void> {\n if (this.initialized) {\n return;\n }\n\n this.config = { ...DEFAULT_NETWORK_CONFIG, ...config };\n\n this.currentState = \"unknown\";\n this.initialized = true;\n\n this.log(\"Initialized (state: unknown, awaiting first connectivity check)\");\n\n void this.setupFallbackDetection();\n this.setupAppStateListener();\n }\n\n private setupNetInfoListener(): void {\n if (!this.netInfoModule) return;\n\n this.netInfoSubscription = this.netInfoModule.addEventListener((state) => {\n const newState = this.netInfoStateToNetworkState(state);\n this.updateState(newState);\n });\n }\n\n private async setupFallbackDetection(): Promise<void> {\n await this.checkConnectivity();\n\n this.checkIntervalId = setInterval(() => {\n void this.checkConnectivity();\n }, this.config.checkInterval);\n }\n\n private setupAppStateListener(): void {\n this.appStateSubscription = AppState.addEventListener(\"change\", (state: AppStateStatus) => {\n if (state === \"active\") {\n void this.checkConnectivity();\n }\n });\n }\n\n private async checkConnectivity(): Promise<void> {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 5000);\n\n const response = await fetch(this.config.checkUrl, {\n method: \"HEAD\",\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n this.updateState(response.ok ? \"online\" : \"offline\");\n } catch {\n this.updateState(\"offline\");\n }\n }\n\n private netInfoStateToNetworkState(state: NetInfoState): NetworkState {\n if (state.isConnected === null) {\n return \"unknown\";\n }\n if (!state.isConnected) {\n return \"offline\";\n }\n return \"online\";\n }\n\n private updateState(newState: NetworkState): void {\n const previousState = this.currentState;\n if (previousState === newState) {\n return;\n }\n\n this.currentState = newState;\n this.log(\"Network state changed\", { from: previousState, to: newState });\n this.notifyListeners(newState);\n }\n\n private notifyListeners(state: NetworkState): void {\n for (const listener of this.listeners) {\n try {\n listener(state);\n } catch (error) {\n this.log(\"Listener error\", error);\n }\n }\n }\n\n isOnline(): boolean {\n if (!this.initialized || this.currentState === \"unknown\") {\n return true;\n }\n return this.currentState === \"online\";\n }\n\n getState(): NetworkState {\n return this.currentState;\n }\n\n isInitialized(): boolean {\n return this.initialized;\n }\n\n addListener(listener: NetworkListener): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n removeListener(listener: NetworkListener): void {\n this.listeners.delete(listener);\n }\n\n async forceCheck(): Promise<NetworkState> {\n await this.checkConnectivity();\n return this.currentState;\n }\n\n dispose(): void {\n if (this.netInfoSubscription) {\n this.netInfoSubscription();\n this.netInfoSubscription = null;\n }\n\n if (this.appStateSubscription) {\n this.appStateSubscription.remove();\n this.appStateSubscription = null;\n }\n\n if (this.checkIntervalId) {\n clearInterval(this.checkIntervalId);\n this.checkIntervalId = null;\n }\n\n this.listeners.clear();\n this.initialized = false;\n this.currentState = \"unknown\";\n }\n\n private log(..._args: unknown[]): void {}\n\n setDebug(debug: boolean): void {\n this.config.debug = debug;\n }\n}\n\nexport const networkMonitor = new NetworkMonitorClass();\n/** @deprecated Use `networkMonitor` (camelCase) */\nexport const NetworkMonitor = networkMonitor;\n","export type NetworkState = \"online\" | \"offline\" | \"unknown\";\n\nexport type NetworkListener = (state: NetworkState) => void;\n\nexport interface NetworkMonitorConfig {\n debug: boolean;\n checkInterval: number;\n checkUrl: string;\n}\n\nexport const DEFAULT_NETWORK_CONFIG: NetworkMonitorConfig = {\n debug: false,\n checkInterval: 30000,\n checkUrl: \"https://clients3.google.com/generate_204\",\n};\n","import AsyncStorage from \"@react-native-async-storage/async-storage\";\n\nimport { CLIENT_ERROR_CODES, ClientError } from \"../../errors/ClientError\";\nimport { generateUUID } from \"../../utils/uuid\";\n\nimport { findDuplicateIndex } from \"./deduplication\";\nimport type { OfflineQueueConfig, QueueEvent, QueueItem, QueueListener } from \"./types\";\nimport { DEFAULT_QUEUE_CONFIG } from \"./types\";\n\nclass OfflineQueueClass {\n private config: OfflineQueueConfig = DEFAULT_QUEUE_CONFIG;\n private queue: QueueItem[] = [];\n private listeners: Set<QueueListener> = new Set();\n private initialized = false;\n private processing = false;\n private processingLock = false;\n private cleanupTimer: ReturnType<typeof setInterval> | null = null;\n\n async initialize(config?: Partial<OfflineQueueConfig>): Promise<void> {\n if (this.initialized) {\n return;\n }\n\n this.config = { ...DEFAULT_QUEUE_CONFIG, ...config };\n await this.loadFromStorage();\n this.cleanupExpired();\n\n this.cleanupTimer = setInterval(() => this.cleanupExpired(), 60 * 60 * 1000);\n\n this.initialized = true;\n }\n\n private async loadFromStorage(): Promise<void> {\n try {\n const stored = await AsyncStorage.getItem(this.config.storageKey);\n if (stored) {\n this.queue = JSON.parse(stored) as QueueItem[];\n }\n } catch {\n this.queue = [];\n }\n }\n\n private async saveToStorage(): Promise<boolean> {\n try {\n await AsyncStorage.setItem(this.config.storageKey, JSON.stringify(this.queue));\n return true;\n } catch (error) {\n this.log(\"Failed to save queue to storage\", error);\n this.emit({\n type: \"item:failed\",\n error: new ClientError(CLIENT_ERROR_CODES.UNKNOWN, \"Storage save failed - items may be lost on restart\"),\n queueSize: this.queue.length,\n });\n return false;\n }\n }\n\n private cleanupExpired(): void {\n const now = Date.now();\n const before = this.queue.length;\n\n this.queue = this.queue.filter((item) => Date.now() - item.timestamp < this.config.maxAge);\n\n if (before !== this.queue.length) {\n void this.saveToStorage();\n }\n }\n\n async enqueue(\n method: \"POST\" | \"PUT\",\n url: string,\n body: unknown,\n headers?: Record<string, string>,\n id?: string\n ): Promise<QueueItem> {\n const item: QueueItem = {\n id: id ?? generateUUID(),\n method,\n url,\n body,\n headers,\n timestamp: Date.now(),\n attempts: 0,\n maxAttempts: this.config.maxAttempts,\n };\n\n const existingIndex = this.findDuplicateIndex(item);\n if (existingIndex !== -1) {\n this.queue[existingIndex].timestamp = Date.now();\n await this.saveToStorage();\n return this.queue[existingIndex];\n }\n\n if (this.queue.length >= this.config.maxItems) {\n const removed = this.queue.shift();\n if (removed) {\n this.emit({ type: \"item:evicted\", item: removed, queueSize: this.queue.length });\n }\n }\n\n this.queue.push(item);\n await this.saveToStorage();\n\n this.emit({ type: \"item:added\", item, queueSize: this.queue.length });\n\n return item;\n }\n\n private findDuplicateIndex(item: QueueItem): number {\n return findDuplicateIndex(this.queue, item);\n }\n\n async dequeue(): Promise<QueueItem | null> {\n const item = this.queue.shift() ?? null;\n if (item) {\n await this.saveToStorage();\n this.emit({ type: \"item:removed\", item, queueSize: this.queue.length });\n }\n return item;\n }\n\n async removeItem(id: string): Promise<boolean> {\n const index = this.queue.findIndex((item) => item.id === id);\n if (index === -1) return false;\n const [item] = this.queue.splice(index, 1);\n await this.saveToStorage();\n this.emit({ type: \"item:removed\", item, queueSize: this.queue.length });\n return true;\n }\n\n async processQueue(\n processor: (item: QueueItem) => Promise<boolean | { success: boolean; permanent?: boolean }>,\n options?: { delayBetweenItems?: number }\n ): Promise<{ processed: number; failed: number }> {\n if (this.processingLock || this.queue.length === 0) {\n return { processed: 0, failed: 0 };\n }\n\n this.processingLock = true;\n this.processing = true;\n this.emit({ type: \"processing:start\", queueSize: this.queue.length });\n\n let processed = 0;\n let failed = 0;\n const delayMs = options?.delayBetweenItems ?? 100;\n\n const itemIds = this.queue.map((item) => item.id);\n\n for (let i = 0; i < itemIds.length; i++) {\n const item = this.queue.find((q) => q.id === itemIds[i]);\n if (!item) continue;\n\n item.attempts++;\n\n try {\n const result = await processor(item);\n const success = typeof result === \"boolean\" ? result : result.success;\n const permanent = typeof result === \"object\" ? (result.permanent ?? false) : false;\n\n if (success) {\n await this.removeItem(item.id);\n processed++;\n this.emit({ type: \"item:success\", item, queueSize: this.queue.length });\n } else {\n const didFail = await this.handleItemFailure(item, undefined, permanent);\n if (didFail) failed++;\n }\n } catch (error) {\n const err = error instanceof Error ? error : new ClientError(CLIENT_ERROR_CODES.UNKNOWN, String(error));\n const didFail = await this.handleItemFailure(item, err, false);\n if (didFail) failed++;\n }\n\n if (i < itemIds.length - 1 && delayMs > 0) await this.sleep(delayMs);\n }\n\n this.processing = false;\n this.processingLock = false;\n this.emit({ type: \"processing:end\", queueSize: this.queue.length });\n\n return { processed, failed };\n }\n\n private async handleItemFailure(item: QueueItem, error?: Error, permanent = false): Promise<boolean> {\n if (permanent || item.attempts >= item.maxAttempts) {\n await this.removeItem(item.id);\n this.emit({\n type: \"item:failed\",\n item,\n error: error ?? new ClientError(CLIENT_ERROR_CODES.UNKNOWN, permanent ? \"Permanent failure\" : \"Max attempts reached\"),\n queueSize: this.queue.length,\n });\n return true;\n }\n await this.saveToStorage();\n return false;\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n getQueue(): ReadonlyArray<QueueItem> {\n return [...this.queue];\n }\n\n getSize(): number {\n return this.queue.length;\n }\n\n isEmpty(): boolean {\n return this.queue.length === 0;\n }\n\n isProcessing(): boolean {\n return this.processing;\n }\n\n async clear(): Promise<void> {\n this.queue = [];\n await this.saveToStorage();\n }\n\n async clearItemsWithInvalidAppKey(validAppKey: string): Promise<number> {\n const before = this.queue.length;\n this.queue = this.queue.filter((item) => {\n const itemAppKey = item.headers?.[\"X-App-Key\"];\n return itemAppKey === validAppKey || !itemAppKey;\n });\n const removed = before - this.queue.length;\n if (removed > 0) {\n await this.saveToStorage();\n }\n return removed;\n }\n\n addListener(listener: QueueListener): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n removeListener(listener: QueueListener): void {\n this.listeners.delete(listener);\n }\n\n private emit(event: QueueEvent): void {\n for (const listener of this.listeners) {\n try {\n listener(event);\n } catch (error) {\n this.log(\"Listener error\", error);\n }\n }\n }\n\n private log(..._args: unknown[]): void {}\n\n setDebug(debug: boolean): void {\n this.config.debug = debug;\n }\n\n dispose(): void {\n if (this.cleanupTimer) {\n clearInterval(this.cleanupTimer);\n this.cleanupTimer = null;\n }\n this.listeners.clear();\n this.queue = [];\n this.initialized = false;\n this.processing = false;\n this.processingLock = false;\n }\n}\n\nexport const offlineQueue = new OfflineQueueClass();\n/** @deprecated Use `offlineQueue` (camelCase) */\nexport const OfflineQueue = offlineQueue;\n","import type { QueueItem } from \"./types\";\n\nexport function normalizeForComparison(obj: unknown): string {\n if (obj === null || obj === undefined) {\n return String(obj);\n }\n\n if (typeof obj !== \"object\") {\n return JSON.stringify(obj);\n }\n\n if (Array.isArray(obj)) {\n return \"[\" + obj.map((item) => normalizeForComparison(item)).join(\",\") + \"]\";\n }\n\n const sortedKeys = Object.keys(obj as Record<string, unknown>).sort();\n const pairs = sortedKeys.map((key) => {\n const value = (obj as Record<string, unknown>)[key];\n return `${JSON.stringify(key)}:${normalizeForComparison(value)}`;\n });\n return \"{\" + pairs.join(\",\") + \"}\";\n}\n\nexport function findDuplicateIndex(queue: QueueItem[], item: QueueItem): number {\n const byId = queue.findIndex((existing) => existing.id === item.id);\n if (byId !== -1) return byId;\n\n const normalizedBody = normalizeForComparison(item.body);\n return queue.findIndex(\n (existing) =>\n existing.url === item.url && normalizeForComparison(existing.body) === normalizedBody\n );\n}\n","export interface QueueItem {\n id: string;\n method: \"POST\" | \"PUT\";\n url: string;\n body: unknown;\n headers?: Record<string, string>;\n timestamp: number;\n attempts: number;\n maxAttempts: number;\n}\n\nexport interface OfflineQueueConfig {\n maxItems: number;\n maxAge: number;\n maxAttempts: number;\n storageKey: string;\n debug: boolean;\n}\n\nexport type QueueEventType =\n | \"item:added\"\n | \"item:removed\"\n | \"item:success\"\n | \"item:failed\"\n | \"item:evicted\"\n | \"processing:start\"\n | \"processing:end\";\n\nexport interface QueueEvent {\n type: QueueEventType;\n item?: QueueItem;\n error?: Error;\n queueSize: number;\n}\n\nexport type QueueListener = (event: QueueEvent) => void;\n\nexport const DEFAULT_QUEUE_CONFIG: OfflineQueueConfig = {\n maxItems: 100,\n maxAge: 24 * 60 * 60 * 1000,\n maxAttempts: 3,\n storageKey: \"@paywallo:offline_queue\",\n debug: false,\n};\n","import { HttpClient } from \"../http\";\nimport { networkMonitor, type NetworkState } from \"../network\";\n\nimport { offlineQueue } from \"./OfflineQueue\";\nimport type { QueueItem } from \"./types\";\n\ninterface QueueItemResult {\n success: boolean;\n permanent?: boolean;\n status?: number;\n}\n\nexport interface QueueProcessorConfig {\n debounceMs: number;\n debug: boolean;\n}\n\nconst DEFAULT_PROCESSOR_CONFIG: QueueProcessorConfig = {\n debounceMs: 2000,\n debug: false,\n};\n\nclass QueueProcessorClass {\n private config: QueueProcessorConfig = DEFAULT_PROCESSOR_CONFIG;\n private httpClient: HttpClient | null = null;\n private networkUnsubscribe: (() => void) | null = null;\n private debounceTimeout: ReturnType<typeof setTimeout> | null = null;\n private retryIntervalId: ReturnType<typeof setInterval> | null = null;\n private initialized = false;\n\n initialize(httpClient: HttpClient, config?: Partial<QueueProcessorConfig>): void {\n if (this.initialized) {\n return;\n }\n\n this.httpClient = httpClient;\n this.config = { ...DEFAULT_PROCESSOR_CONFIG, ...config };\n\n this.networkUnsubscribe = networkMonitor.addListener((state: NetworkState) => {\n if (state === \"online\") {\n this.scheduleProcessing();\n }\n });\n\n if (networkMonitor.isOnline() && !offlineQueue.isEmpty()) {\n this.scheduleProcessing();\n }\n\n this.retryIntervalId = setInterval(() => {\n if (networkMonitor.isOnline() && !offlineQueue.isEmpty()) {\n this.scheduleProcessing();\n }\n }, 60000);\n\n this.initialized = true;\n this.log(\"QueueProcessor initialized\");\n }\n\n private scheduleProcessing(): void {\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n }\n\n this.debounceTimeout = setTimeout(() => {\n void this.processQueue();\n }, this.config.debounceMs);\n }\n\n async processQueue(): Promise<{ processed: number; failed: number }> {\n if (!this.httpClient) {\n this.log(\"HttpClient not initialized\");\n return { processed: 0, failed: 0 };\n }\n\n if (!networkMonitor.isOnline()) {\n this.log(\"Offline, skipping queue processing\");\n return { processed: 0, failed: 0 };\n }\n\n return offlineQueue.processQueue(async (item: QueueItem) => {\n return this.processItem(item);\n });\n }\n\n private async processItem(item: QueueItem): Promise<QueueItemResult> {\n if (!this.httpClient) {\n return { success: false, permanent: false };\n }\n\n this.log(\"Processing queue item\", {\n id: item.id,\n url: item.url,\n method: item.method,\n headers: item.headers,\n attempts: item.attempts,\n });\n\n const response = await this.httpClient.request(item.url, {\n method: item.method,\n body: item.body,\n headers: item.headers,\n skipRetry: false,\n });\n\n if (response.ok) {\n this.log(\"Queue item processed successfully\", { id: item.id });\n return { success: true, permanent: false };\n }\n\n if (response.status >= 400 && response.status < 500) {\n this.log(\"Request failed with permanent client error - removing from queue\", {\n id: item.id,\n url: item.url,\n status: response.status,\n appKeyInHeaders: item.headers?.[\"X-App-Key\"],\n });\n return { success: false, permanent: true, status: response.status };\n }\n\n this.log(\"Request failed with server error - will retry\", {\n id: item.id,\n status: response.status,\n });\n return { success: false, permanent: false, status: response.status };\n }\n\n async enqueueIfOffline(\n method: \"POST\" | \"PUT\",\n url: string,\n body: unknown,\n headers?: Record<string, string>\n ): Promise<{ queued: boolean; item?: QueueItem }> {\n if (networkMonitor.isOnline()) {\n return { queued: false };\n }\n\n const item = await offlineQueue.enqueue(method, url, body, headers);\n this.log(\"Request queued for offline\", { id: item.id, url });\n return { queued: true, item };\n }\n\n getQueueSize(): number {\n return offlineQueue.getSize();\n }\n\n async clearQueue(): Promise<void> {\n await offlineQueue.clear();\n }\n\n dispose(): void {\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n this.debounceTimeout = null;\n }\n\n if (this.retryIntervalId) {\n clearInterval(this.retryIntervalId);\n this.retryIntervalId = null;\n }\n\n if (this.networkUnsubscribe) {\n this.networkUnsubscribe();\n this.networkUnsubscribe = null;\n }\n\n this.httpClient = null;\n this.initialized = false;\n }\n\n private log(..._args: unknown[]): void {}\n\n setDebug(debug: boolean): void {\n this.config.debug = debug;\n }\n}\n\nexport const queueProcessor = new QueueProcessorClass();\n/** @deprecated Use `queueProcessor` (camelCase) */\nexport const QueueProcessor = queueProcessor;\n","import type { CampaignResponse, FlagVariant, PaywallConfig } from \"../types\";\n\ntype CacheEntry<T> = { value: T; ts: number; ttl?: number };\n\nexport class ApiCache {\n private readonly CACHE_TTL = 300_000;\n private readonly CACHE_NULL_TTL = 30_000;\n private readonly MAX_SIZE = 200;\n private readonly STALE_WINDOW_MS = 86_400_000;\n\n private variantCache = new Map<string, CacheEntry<FlagVariant>>();\n private paywallCache = new Map<string, CacheEntry<PaywallConfig | null>>();\n private campaignCache = new Map<string, CacheEntry<CampaignResponse | null>>();\n\n getCached<T>(cache: Map<string, CacheEntry<T>>, key: string): T | undefined {\n const entry = cache.get(key);\n if (!entry) return undefined;\n const ttl = entry.ttl ?? this.CACHE_TTL;\n if (Date.now() - entry.ts < ttl) return entry.value;\n cache.delete(key);\n return undefined;\n }\n\n setCached<T>(\n cache: Map<string, CacheEntry<T>>,\n key: string,\n value: T,\n ttlOverride?: number\n ): void {\n const entry: CacheEntry<T> = { value, ts: Date.now() };\n if (ttlOverride !== undefined) entry.ttl = ttlOverride;\n cache.set(key, entry);\n }\n\n evictExpiredEntries<T>(cache: Map<string, CacheEntry<T>>): void {\n if (cache.size <= this.MAX_SIZE) return;\n const now = Date.now();\n for (const [key, entry] of cache) {\n const ttl = entry.ttl ?? this.CACHE_TTL;\n if (now - entry.ts > ttl) cache.delete(key);\n }\n }\n\n getVariant(key: string): FlagVariant | undefined {\n return this.getCached(this.variantCache, key);\n }\n\n setVariant(key: string, value: FlagVariant, ttlOverride?: number): void {\n this.setCached(this.variantCache, key, value, ttlOverride);\n this.evictExpiredEntries(this.variantCache);\n }\n\n get nullTTL(): number {\n return this.CACHE_NULL_TTL;\n }\n\n getStaleVariant(key: string): FlagVariant | undefined {\n const entry = this.variantCache.get(key);\n if (entry && Date.now() - entry.ts < this.STALE_WINDOW_MS) return entry.value;\n return undefined;\n }\n\n getPaywall(key: string): PaywallConfig | null | undefined {\n return this.getCached(this.paywallCache, key);\n }\n\n setPaywall(key: string, value: PaywallConfig | null, ttlOverride?: number): void {\n this.setCached(this.paywallCache, key, value, ttlOverride);\n this.evictExpiredEntries(this.paywallCache);\n }\n\n getStalePaywall(key: string): PaywallConfig | null | undefined {\n const entry = this.paywallCache.get(key);\n if (entry && Date.now() - entry.ts < this.STALE_WINDOW_MS) return entry.value;\n return undefined;\n }\n\n getCampaign(key: string): CampaignResponse | null | undefined {\n return this.getCached(this.campaignCache, key);\n }\n\n setCampaign(key: string, value: CampaignResponse | null, ttlOverride?: number): void {\n this.setCached(this.campaignCache, key, value, ttlOverride);\n this.evictExpiredEntries(this.campaignCache);\n }\n\n getStaleCampaign(key: string): CampaignResponse | null | undefined {\n const entry = this.campaignCache.get(key);\n if (entry && Date.now() - entry.ts < this.STALE_WINDOW_MS) return entry.value;\n return undefined;\n }\n}\n","import { PaywalloError } from \"../../errors/PaywalloError\";\n\nexport class CampaignError extends PaywalloError {\n constructor(code: string, message: string) {\n super(\"campaign\", code, message);\n this.name = \"CampaignError\";\n }\n}\n\nexport const CAMPAIGN_ERROR_CODES = {\n NOT_INITIALIZED: \"CAMPAIGN_NOT_INITIALIZED\",\n FETCH_FAILED: \"CAMPAIGN_FETCH_FAILED\",\n PRELOAD_FAILED: \"CAMPAIGN_PRELOAD_FAILED\",\n NOT_FOUND: \"CAMPAIGN_NOT_FOUND\",\n PRESENT_FAILED: \"CAMPAIGN_PRESENT_FAILED\",\n} as const;\n","import { CAMPAIGN_ERROR_CODES, CampaignError } from \"./CampaignError\";\nimport { PaywalloError } from \"../../errors/PaywalloError\";\nimport { PAYWALL_ERROR_CODES, PaywallError } from \"../paywall/PaywallError\";\nimport type { CampaignResponse, CampaignResult, PaywallResult } from \"../../types\";\n\nimport type { ApiClient } from \"../../core/ApiClient\";\nimport { PaywalloClient } from \"../../core/PaywalloClient\";\nimport { identityManager } from \"../identity/IdentityManager\";\nimport type { PreloadCampaignResult } from \"../../core/types\";\n\ntype PaywallPresenter = (placement: string) => Promise<PaywallResult>;\ntype CampaignPresenter = (campaign: CampaignResponse) => Promise<CampaignResult>;\n\nconst PRELOAD_CACHE_TTL_MS = 5 * 60 * 1000;\nconst PRELOAD_WAIT_MAX_MS = 2000;\nconst PRELOAD_WAIT_INTERVAL_MS = 100;\ninterface PreloadedCampaignCache { campaign: CampaignResponse; preloadedAt: number }\n\nexport class CampaignGateService {\n private readonly preloadedCampaigns: Map<string, PreloadedCampaignCache> = new Map();\n private readonly pendingPreloads: Set<string> = new Set();\n\n async getCampaign(apiClient: ApiClient, placement: string, context?: Record<string, unknown>): Promise<CampaignResponse | null> {\n const distinctId = identityManager.getDistinctId();\n if (!distinctId) return null;\n return apiClient.getCampaign(placement, distinctId, context);\n }\n\n private async waitForPreload(placement: string): Promise<void> {\n if (!this.pendingPreloads.has(placement)) return;\n const deadline = Date.now() + PRELOAD_WAIT_MAX_MS;\n await new Promise<void>((resolve) => {\n const check = () => {\n if (!this.pendingPreloads.has(placement) || Date.now() >= deadline) { resolve(); return; }\n setTimeout(check, PRELOAD_WAIT_INTERVAL_MS);\n };\n check();\n });\n }\n\n async presentCampaign(\n apiClient: ApiClient,\n placement: string,\n hasActive: () => Promise<boolean>,\n paywallPresenter: PaywallPresenter | null,\n campaignPresenter: CampaignPresenter | null,\n context?: Record<string, unknown>,\n ): Promise<CampaignResult> {\n await this.waitForPreload(placement);\n const preloaded = this.getPreloadedCampaign(placement);\n const campaign = preloaded ?? await this.getCampaign(apiClient, placement, context);\n if (!campaign) {\n return { presented: false, purchased: false, cancelled: false, restored: false, error: new CampaignError(CAMPAIGN_ERROR_CODES.NOT_FOUND, \"No campaign found\") };\n }\n if (!context?.forceShow) {\n const isActive = await hasActive();\n if (isActive) {\n return { presented: false, purchased: false, cancelled: false, restored: false, skippedReason: \"subscriber\" };\n }\n }\n if (campaignPresenter) return campaignPresenter(campaign);\n if (!paywallPresenter) throw new PaywallError(PAYWALL_ERROR_CODES.NOT_INITIALIZED, \"PaywalloProvider not mounted. Wrap your app with <PaywalloProvider>\");\n return { ...(await paywallPresenter(placement)), campaignId: campaign.campaignId, variantKey: campaign.variantKey };\n }\n\n async requireSubscriptionWithCampaign(\n apiClient: ApiClient,\n placement: string,\n hasActive: () => Promise<boolean>,\n paywallPresenter: PaywallPresenter | null,\n campaignPresenter: CampaignPresenter | null,\n context?: Record<string, unknown>,\n ): Promise<boolean> {\n const isActive = await hasActive();\n if (PaywalloClient.getConfig()?.debug) console.info(`[Paywallo] requireSubscription — hasActive: ${isActive}`);\n if (isActive) return true;\n const r = await this.presentCampaign(apiClient, placement, hasActive, paywallPresenter, campaignPresenter, context);\n return r.purchased || r.restored;\n }\n\n async preloadCampaign(apiClient: ApiClient, placement: string, context?: Record<string, unknown>): Promise<PreloadCampaignResult> {\n this.pendingPreloads.add(placement);\n try {\n const campaign = await this.getCampaign(apiClient, placement, context);\n if (!campaign?.paywall) {\n return { success: false, error: new CampaignError(CAMPAIGN_ERROR_CODES.NOT_FOUND, `Campaign or paywall not found: ${placement}`) };\n }\n this.preloadedCampaigns.set(placement, { campaign, preloadedAt: Date.now() });\n if (PaywalloClient.getConfig()?.debug) { console.info(`[Paywallo PRELOAD] data cached — placement: ${placement}`); }\n return { success: true };\n } catch (error) {\n return { success: false, error: error instanceof Error ? error : new PaywalloError(\"panel\", \"PANEL_UNKNOWN\", String(error)) };\n } finally {\n this.pendingPreloads.delete(placement);\n }\n }\n\n getPreloadedCampaign(placement: string): CampaignResponse | null {\n const cached = this.preloadedCampaigns.get(placement);\n if (!cached) return null;\n if (Date.now() - cached.preloadedAt >= PRELOAD_CACHE_TTL_MS) { this.preloadedCampaigns.delete(placement); return null; }\n return cached.campaign;\n }\n\n clearPreloaded(): void { this.preloadedCampaigns.clear(); this.pendingPreloads.clear(); }\n}\n\nexport const campaignGateService = new CampaignGateService();\n","import { Platform } from \"react-native\";\n\nconst ZERO_IDFA = \"00000000-0000-0000-0000-000000000000\";\n\nexport type AttStatus = \"granted\" | \"denied\" | \"restricted\" | \"undetermined\" | \"unavailable\";\n\nexport interface AdvertisingIdResult {\n idfv: string | null;\n idfa: string | null;\n gaid: string | null;\n attStatus: AttStatus;\n}\n\nexport class AdvertisingIdManager {\n private cached: AdvertisingIdResult | null = null;\n\n async collect(requestATT = false): Promise<AdvertisingIdResult> {\n if (this.cached) return this.cached;\n\n const fallback: AdvertisingIdResult = { idfv: null, idfa: null, gaid: null, attStatus: \"unavailable\" };\n\n try {\n const tracking = await import(\"expo-tracking-transparency\");\n\n if (Platform.OS === \"ios\") {\n if (!tracking.isAvailable()) {\n const idfv = await this.collectIdfv();\n this.cached = { ...fallback, idfv };\n return this.cached;\n }\n\n const current = await tracking.getTrackingPermissionsAsync();\n let status = current.status as AttStatus;\n let granted = current.granted;\n\n if (status === \"undetermined\" && requestATT) {\n const result = await tracking.requestTrackingPermissionsAsync();\n status = result.status as AttStatus;\n granted = result.granted;\n }\n\n const idfv = await this.collectIdfv();\n const idfa = granted ? this.sanitizeId(tracking.getAdvertisingId()) : null;\n this.cached = { idfv, idfa, gaid: null, attStatus: status };\n return this.cached;\n }\n\n if (Platform.OS === \"android\") {\n const androidStatus = await tracking.getTrackingPermissionsAsync();\n const optedIn = androidStatus.granted;\n const rawGaid = optedIn ? tracking.getAdvertisingId() : null;\n const gaid = this.sanitizeId(rawGaid);\n this.cached = { idfv: null, idfa: null, gaid, attStatus: \"unavailable\" };\n return this.cached;\n }\n\n this.cached = fallback;\n return this.cached;\n } catch {\n this.cached = fallback;\n return this.cached;\n }\n }\n\n private async collectIdfv(): Promise<string | null> {\n try {\n const app = await import(\"expo-application\");\n const idfv = await app.getIosIdForVendorAsync();\n return this.sanitizeId(idfv);\n } catch {\n return null;\n }\n }\n\n private sanitizeId(id: string | null | undefined): string | null {\n if (!id || id === ZERO_IDFA) return null;\n return id;\n }\n}\n","const TIMEOUT_MS = 2000;\n\nexport class FacebookIdManager {\n async getAnonId(): Promise<string | null> {\n try {\n let timerId: ReturnType<typeof setTimeout> | undefined;\n const timeoutPromise = new Promise<null>((resolve) => {\n timerId = setTimeout(() => resolve(null), TIMEOUT_MS);\n });\n const result = await Promise.race([this.fetchAnonId(), timeoutPromise]);\n clearTimeout(timerId);\n return result;\n } catch {\n return null;\n }\n }\n\n private async fetchAnonId(): Promise<string | null> {\n try {\n const fbsdk = await import(\"react-native-fbsdk-next\");\n const anonId = await fbsdk.AppEventsLogger.getAnonymousID();\n return anonId || null;\n } catch {\n return null;\n }\n }\n}\n\nexport const facebookIdManager = new FacebookIdManager();\n","import { Dimensions, Platform } from \"react-native\";\n\nimport type { ApiClient } from \"../../core/ApiClient\";\nimport { AdvertisingIdManager } from \"./AdvertisingIdManager\";\nimport { facebookIdManager } from \"./FacebookIdManager\";\nimport { identityManager } from \"./IdentityManager\";\nimport { installReferrerManager } from \"./InstallReferrerManager\";\nimport { sessionManager } from \"../session/SessionManager\";\nimport { SecureStorage } from \"../../core/storage/SecureStorage\";\n\nexport class InstallTracker {\n private readonly debug: boolean;\n private readonly advertisingIdManager: AdvertisingIdManager;\n\n constructor(debug = false, advertisingIdManager?: AdvertisingIdManager) {\n this.debug = debug;\n this.advertisingIdManager = advertisingIdManager ?? new AdvertisingIdManager();\n }\n\n async trackIfNeeded(apiClient: ApiClient, requestATT = false): Promise<void> {\n const storage = new SecureStorage(this.debug);\n const alreadyTracked = await storage.get(\"install_tracked\");\n if (alreadyTracked) return;\n let fallbackTracked: string | null = null;\n try {\n const AsyncStorage = (await import(\"@react-native-async-storage/async-storage\")).default;\n fallbackTracked = await AsyncStorage.getItem(\"@paywallo:install_tracked\");\n } catch { /* AsyncStorage not available */ }\n if (fallbackTracked) return;\n\n const distinctId = identityManager.getDistinctId();\n const sessionId = sessionManager.getSessionId();\n const installedAt = Date.now();\n\n if (!distinctId) return;\n\n type DeviceInfoType = { getModel: () => string; getSystemVersion: () => string; getVersion: () => string; getBuildNumber: () => string };\n let deviceInfo: DeviceInfoType | null = null;\n try {\n const mod = await import(\"react-native-device-info\");\n deviceInfo = mod.default as DeviceInfoType;\n } catch {\n deviceInfo = null;\n }\n\n let deviceData: Record<string, string | number> = {};\n try {\n const screen = Dimensions.get(\"screen\");\n const screenWidth = Math.round(screen.width ?? 0);\n const screenHeight = Math.round(screen.height ?? 0);\n const locale = Intl.DateTimeFormat().resolvedOptions().locale ?? \"unknown\";\n const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone ?? \"unknown\";\n const deviceModel = deviceInfo?.getModel() || \"unknown\";\n const osVersion = deviceInfo?.getSystemVersion() || \"unknown\";\n const appVersion = deviceInfo?.getVersion() || \"unknown\";\n const buildNumber = deviceInfo?.getBuildNumber() || \"0\";\n deviceData = {\n deviceModel,\n osVersion,\n appVersion,\n buildNumber,\n ...(screenWidth > 0 && { screenWidth }),\n ...(screenHeight > 0 && { screenHeight }),\n timezone,\n locale,\n };\n } catch { /* non-critical */ }\n\n const [fbAnonId, referrer, adIds] = await Promise.all([\n facebookIdManager.getAnonId(),\n installReferrerManager.getReferrer(),\n this.advertisingIdManager.collect(requestATT),\n ]);\n\n try {\n await apiClient.trackEvent(\"$app_installed\", distinctId, {\n installedAt,\n platform: Platform.OS,\n ...(sessionId && { sessionId }),\n ...deviceData,\n ...(fbAnonId && { fbAnonId }),\n ...(referrer.rawReferrer && { installReferrer: referrer.rawReferrer }),\n ...(referrer.trackingId && { referrerTrackingId: referrer.trackingId }),\n ...(referrer.fbclid && { referrerFbclid: referrer.fbclid }),\n ...(referrer.utmSource && { referrerUtmSource: referrer.utmSource }),\n ...(referrer.utmMedium && { referrerUtmMedium: referrer.utmMedium }),\n ...(referrer.utmCampaign && { referrerUtmCampaign: referrer.utmCampaign }),\n ...(adIds.idfa && { idfa: adIds.idfa }),\n ...(adIds.idfv && { idfv: adIds.idfv }),\n ...(adIds.gaid && { gaid: adIds.gaid }),\n attStatus: adIds.attStatus,\n });\n const stored = await storage.set(\"install_tracked\", String(installedAt));\n try {\n const AsyncStorage = (await import(\"@react-native-async-storage/async-storage\")).default;\n await AsyncStorage.setItem(\"@paywallo:install_tracked\", String(installedAt));\n } catch { /* non-critical */ }\n } catch { /* non-critical */ }\n }\n}\n","import { Platform } from \"react-native\";\n\nconst REFERRER_TIMEOUT_MS = 5000;\n\ninterface ReferrerResult {\n rawReferrer: string | null;\n trackingId: string | null;\n fbclid: string | null;\n utmSource: string | null;\n utmMedium: string | null;\n utmCampaign: string | null;\n}\n\nexport class InstallReferrerManager {\n async getReferrer(): Promise<ReferrerResult> {\n if (Platform.OS !== \"android\") {\n return this.emptyResult();\n }\n\n let timerId: ReturnType<typeof setTimeout> | undefined;\n const timeoutPromise = new Promise<ReferrerResult>((resolve) => {\n timerId = setTimeout(() => resolve(this.emptyResult()), REFERRER_TIMEOUT_MS);\n });\n\n const fetchPromise = this.fetchReferrer();\n\n const result = await Promise.race([fetchPromise, timeoutPromise]);\n clearTimeout(timerId);\n return result;\n }\n\n private async fetchReferrer(): Promise<ReferrerResult> {\n try {\n const Application = await import(\"expo-application\");\n const referrer = await Application.getInstallReferrerAsync();\n\n if (!referrer) return this.emptyResult();\n\n const capped = referrer.slice(0, 2048);\n const params = this.parseReferrer(capped);\n return {\n rawReferrer: capped,\n trackingId: params[\"tracking_id\"] || null,\n fbclid: params[\"fbclid\"] || null,\n utmSource: params[\"utm_source\"] || null,\n utmMedium: params[\"utm_medium\"] || null,\n utmCampaign: params[\"utm_campaign\"] || null,\n };\n } catch {\n return this.emptyResult();\n }\n }\n\n private parseReferrer(referrer: string): Record<string, string> {\n const result: Record<string, string> = {};\n for (const pair of referrer.split(\"&\")) {\n const eqIndex = pair.indexOf(\"=\");\n if (eqIndex === -1) continue;\n try {\n const key = decodeURIComponent(pair.slice(0, eqIndex).replace(/\\+/g, \" \"));\n const raw = pair.slice(eqIndex + 1).replace(/\\+/g, \" \");\n const value = decodeURIComponent(raw);\n if (key) result[key] = value;\n } catch {\n }\n }\n return result;\n }\n\n private emptyResult(): ReferrerResult {\n return {\n rawReferrer: null,\n trackingId: null,\n fbclid: null,\n utmSource: null,\n utmMedium: null,\n utmCampaign: null,\n };\n }\n}\n\nexport const installReferrerManager = new InstallReferrerManager();\n","import { AppState, AppStateStatus } from \"react-native\";\n\nimport { SESSION_ERROR_CODES, SessionError } from \"./SessionError\";\nimport { EmergencyPaywallHandler, SessionConfig, SessionState } from \"./types\";\nimport { generateUUID } from \"../../utils/uuid\";\n\nimport { ApiClient } from \"../../core/ApiClient\";\nimport {\n trackAppBackground,\n trackAppOpen,\n trackSessionEnd,\n trackSessionStart,\n} from \"./sessionTracking\";\nimport { SecureStorage } from \"../../core/storage/SecureStorage\";\n\nconst SESSION_ID_KEY = \"current_session_id\";\nconst SESSION_START_KEY = \"session_start\";\nconst EMERGENCY_PAYWALL_SHOWN_KEY = \"emergency_paywall_shown\";\nconst SESSION_TIMEOUT_MS = 30 * 60 * 1000;\n\nexport class SessionManager {\n private sessionId: string | null = null;\n private sessionStartedAt: Date | null = null;\n private appState: AppStateStatus = \"active\";\n private apiClient: ApiClient | null = null;\n private debug = false;\n private initialized = false;\n private config: SessionConfig = {};\n private backgroundTimestamp: number | null = null;\n private appStateSubscription: { remove: () => void } | null = null;\n private emergencyPaywallHandler: EmergencyPaywallHandler | null = null;\n private emergencyPaywallShownInSession = false;\n private secureStorage: SecureStorage | null = null;\n\n async initialize(apiClient: ApiClient, config: SessionConfig = {}, debug = false): Promise<void> {\n if (this.initialized) {\n return;\n }\n\n this.apiClient = apiClient;\n this.debug = debug;\n this.secureStorage = new SecureStorage(debug);\n this.config = {\n sessionTimeoutMs: config.sessionTimeoutMs ?? SESSION_TIMEOUT_MS,\n trackAppState: config.trackAppState ?? true,\n };\n\n await this.restoreSession();\n\n if (this.config.trackAppState) {\n this.setupAppStateListener();\n }\n\n this.initialized = true;\n }\n\n async startSession(): Promise<string> {\n this.ensureInitialized();\n\n if (this.sessionId) {\n await this.endSession();\n }\n\n this.sessionId = generateUUID();\n this.sessionStartedAt = new Date();\n this.emergencyPaywallShownInSession = false;\n\n await Promise.all([\n this.secureStorage!.set(SESSION_ID_KEY, this.sessionId),\n this.secureStorage!.set(SESSION_START_KEY, this.sessionStartedAt.toISOString()),\n this.secureStorage!.remove(EMERGENCY_PAYWALL_SHOWN_KEY),\n ]);\n\n await this.trackSessionStart();\n\n return this.sessionId;\n }\n\n async endSession(): Promise<void> {\n this.ensureInitialized();\n\n if (!this.sessionId || !this.sessionStartedAt) {\n return;\n }\n\n await this.trackSessionEnd();\n\n this.sessionId = null;\n this.sessionStartedAt = null;\n\n await Promise.all([\n this.secureStorage!.remove(SESSION_ID_KEY),\n this.secureStorage!.remove(SESSION_START_KEY),\n ]);\n }\n\n getSessionId(): string | null {\n return this.sessionId;\n }\n\n getSessionDuration(): number {\n if (!this.sessionStartedAt) {\n return 0;\n }\n return Math.floor((Date.now() - this.sessionStartedAt.getTime()) / 1000);\n }\n\n isSessionActive(): boolean {\n return this.sessionId !== null;\n }\n\n getState(): SessionState {\n return {\n sessionId: this.sessionId,\n startedAt: this.sessionStartedAt,\n isActive: this.isSessionActive(),\n duration: this.getSessionDuration(),\n };\n }\n\n destroy(): void {\n if (this.appStateSubscription) {\n this.appStateSubscription.remove();\n this.appStateSubscription = null;\n }\n this.initialized = false;\n }\n\n registerEmergencyPaywallHandler(handler: EmergencyPaywallHandler): void {\n this.emergencyPaywallHandler = handler;\n }\n\n private async restoreSession(): Promise<void> {\n const [sessionId, sessionStart] = await Promise.all([\n this.secureStorage!.get(SESSION_ID_KEY),\n this.secureStorage!.get(SESSION_START_KEY),\n ]).catch(() => [null, null]);\n\n if (sessionId && sessionStart) {\n const startedAt = new Date(sessionStart);\n const elapsed = Date.now() - startedAt.getTime();\n\n if (elapsed < (this.config.sessionTimeoutMs ?? SESSION_TIMEOUT_MS)) {\n this.sessionId = sessionId;\n this.sessionStartedAt = startedAt;\n return;\n }\n\n await Promise.all([\n this.secureStorage!.remove(SESSION_ID_KEY),\n this.secureStorage!.remove(SESSION_START_KEY),\n ]).catch(() => {});\n }\n }\n\n private setupAppStateListener(): void {\n if (this.appStateSubscription) {\n this.appStateSubscription.remove();\n }\n\n this.appStateSubscription = AppState.addEventListener(\"change\", this.handleAppStateChange);\n }\n\n private handleAppStateChange = async (nextAppState: AppStateStatus): Promise<void> => {\n const previousState = this.appState;\n this.appState = nextAppState;\n\n if (nextAppState === \"active\" && previousState !== \"active\") {\n await this.handleForeground();\n } else if (nextAppState === \"background\" && previousState === \"active\") {\n await this.handleBackground();\n }\n };\n\n private async handleForeground(): Promise<void> {\n if (this.backgroundTimestamp) {\n const elapsed = Date.now() - this.backgroundTimestamp;\n this.backgroundTimestamp = null;\n\n if (elapsed > (this.config.sessionTimeoutMs ?? SESSION_TIMEOUT_MS)) {\n await this.startSession();\n await this.trackAppOpen();\n await this.checkEmergencyPaywall();\n return;\n }\n }\n\n if (!this.sessionId) {\n await this.startSession();\n }\n\n await this.trackAppOpen();\n await this.checkEmergencyPaywall();\n }\n\n private async handleBackground(): Promise<void> {\n this.backgroundTimestamp = Date.now();\n await this.trackAppBackground();\n }\n\n private async checkEmergencyPaywall(): Promise<void> {\n if (!this.apiClient || !this.emergencyPaywallHandler) {\n return;\n }\n\n if (this.emergencyPaywallShownInSession) {\n return;\n }\n\n const response = await this.apiClient.getEmergencyPaywall().catch(() => null);\n\n if (response?.enabled && response.paywallId) {\n this.emergencyPaywallShownInSession = true;\n await this.secureStorage!.set(EMERGENCY_PAYWALL_SHOWN_KEY, \"true\");\n await this.emergencyPaywallHandler(response.paywallId);\n }\n }\n\n private async trackSessionStart(): Promise<void> {\n if (!this.apiClient || !this.sessionId) return;\n await trackSessionStart(this.apiClient, this.sessionId, this.sessionStartedAt);\n }\n\n private async trackSessionEnd(): Promise<void> {\n if (!this.apiClient || !this.sessionId) return;\n await trackSessionEnd(this.apiClient, this.sessionId, this.getSessionDuration(), this.sessionStartedAt);\n }\n\n private async trackAppOpen(): Promise<void> {\n if (!this.apiClient) return;\n await trackAppOpen(this.apiClient, this.sessionId);\n }\n\n private async trackAppBackground(): Promise<void> {\n if (!this.apiClient) return;\n await trackAppBackground(this.apiClient, this.sessionId, this.getSessionDuration());\n }\n\n private ensureInitialized(): void {\n if (!this.initialized) {\n throw new SessionError(\n SESSION_ERROR_CODES.NOT_INITIALIZED,\n \"SessionManager not initialized. Call initialize() first\"\n );\n }\n }\n\n private log(..._args: unknown[]): void {}\n}\n\nexport const sessionManager = new SessionManager();\n","import type { ApiClient } from \"../../core/ApiClient\";\nimport { identityManager } from \"../identity/IdentityManager\";\n\nexport async function trackSessionStart(\n apiClient: ApiClient,\n sessionId: string,\n sessionStartedAt: Date | null\n): Promise<void> {\n const distinctId = identityManager.getDistinctId();\n await apiClient\n .trackEvent(\"$session_start\", distinctId, {\n sessionId,\n timestamp: sessionStartedAt?.toISOString() ?? null,\n })\n .catch(() => {});\n}\n\nexport async function trackSessionEnd(\n apiClient: ApiClient,\n sessionId: string,\n durationSeconds: number,\n sessionStartedAt: Date | null\n): Promise<void> {\n const distinctId = identityManager.getDistinctId();\n await apiClient\n .trackEvent(\"$session_end\", distinctId, {\n sessionId,\n durationSeconds,\n startedAt: sessionStartedAt?.toISOString() ?? null,\n endedAt: new Date().toISOString(),\n })\n .catch(() => {});\n}\n\nexport async function trackAppOpen(\n apiClient: ApiClient,\n sessionId: string | null\n): Promise<void> {\n const distinctId = identityManager.getDistinctId();\n await apiClient\n .trackEvent(\"$app_open\", distinctId, {\n sessionId,\n timestamp: new Date().toISOString(),\n })\n .catch(() => {});\n}\n\nexport async function trackAppBackground(\n apiClient: ApiClient,\n sessionId: string | null,\n durationSeconds: number\n): Promise<void> {\n const distinctId = identityManager.getDistinctId();\n await apiClient\n .trackEvent(\"$app_background\", distinctId, {\n sessionId,\n durationSeconds,\n timestamp: new Date().toISOString(),\n })\n .catch(() => {});\n}\n","import { ANALYTICS_ERROR_CODES,AnalyticsError } from \"../domains/analytics\";\nimport { CLIENT_ERROR_CODES,ClientError } from \"../errors/ClientError\";\nimport { PAYWALL_ERROR_CODES,PaywallError } from \"../domains/paywall\";\nimport type {\n CampaignResponse,\n CampaignResult,\n ConditionalFlagContext,\n IdentifyOptions,\n PaywallResult,\n RestoreResult,\n Subscription,\n TrackEventOptions,\n UserProperties,\n} from \"../types\";\n\nimport { affiliateManager } from \"../domains/affiliate\";\nimport { subscriptionCache } from \"../domains/subscription/SubscriptionCache\";\nimport { subscriptionManager } from \"../domains/subscription/SubscriptionManager\";\nimport { ApiClient } from \"./ApiClient\";\nimport { campaignGateService } from \"../domains/campaign\";\nimport { identityManager } from \"../domains/identity\";\nimport { InstallTracker } from \"../domains/identity\";\nimport { networkMonitor } from \"./network\";\nimport { offlineQueue, queueProcessor } from \"./queue\";\nimport type { EmergencyPaywallHandler } from \"../domains/session/types\";\nimport { sessionManager } from \"../domains/session\";\nimport type { IPaywalloClient, PaywalloInitConfig, PreloadCampaignResult } from \"./types\";\n\nexport type { IPaywalloClient, PaywalloInitConfig, PreloadCampaignResult } from \"./types\";\n\ntype PaywallPresenter = (placement: string) => Promise<PaywallResult>;\ntype CampaignPresenter = (campaign: CampaignResponse) => Promise<CampaignResult>;\ntype SubscriptionGetter = () => Promise<Subscription | null>;\ntype ActiveChecker = () => Promise<boolean>;\ntype RestoreHandler = () => Promise<RestoreResult>;\n\nfunction isValidEventName(name: string): boolean {\n if (name.startsWith(\"$\")) return /^\\$[a-z][a-z0-9]*(_[a-z0-9]+)*$/.test(name);\n return /^[a-z][a-z0-9]*(_[a-z0-9]+)*$/.test(name);\n}\n\nclass PaywalloClientClass {\n private config: import(\"../types\").PaywalloConfig | null = null;\n private apiClient: ApiClient | null = null;\n private initPromise: Promise<void> | null = null;\n private readyPromise: Promise<void> | null = null;\n private resolveReady: (() => void) | null = null;\n private paywallPresenter: PaywallPresenter | null = null;\n private campaignPresenter: CampaignPresenter | null = null;\n private subscriptionGetter: SubscriptionGetter | null = null;\n private activeChecker: ActiveChecker | null = null;\n private restoreHandler: RestoreHandler | null = null;\n private lastOnboardingStepTimestamp: number | null = null;\n private pendingConfig: PaywalloInitConfig | null = null;\n private networkCleanup: (() => void) | null = null;\n private initAttempts = 0;\n private autoPreloadedPlacement: string | null = null;\n private autoPreloadPlacementPromise: Promise<string | null> | null = null;\n private readonly sessionFlagsMap: Map<string, string | null> = new Map();\n\n private static readonly MAX_INIT_RETRIES = 3;\n private static readonly RETRY_DELAYS = [2000, 5000, 10000];\n\n async init(config: PaywalloInitConfig): Promise<void> {\n if (!this.readyPromise) {\n this.readyPromise = new Promise<void>((resolve) => { this.resolveReady = resolve; });\n }\n if (this.config && this.apiClient) {\n return;\n }\n if (this.initPromise) {\n await this.initPromise;\n return;\n }\n if (!config.appKey) throw new ClientError(CLIENT_ERROR_CODES.MISSING_APP_KEY, \"appKey is required\");\n this.pendingConfig = config;\n this.initAttempts = 0;\n this.initPromise = this.initWithRetry(config);\n try {\n await this.initPromise;\n } catch (error) {\n this.initPromise = null;\n this.config = null;\n this.apiClient = null;\n this.reportInitFailure(config, error, \"ALL_RETRIES_EXHAUSTED\");\n this.setupNetworkRecovery(config);\n throw error;\n }\n }\n\n isReady(): boolean {\n return this.config !== null && this.apiClient !== null;\n }\n\n waitUntilReady(): Promise<void> {\n if (this.isReady()) return Promise.resolve();\n if (!this.readyPromise) {\n this.readyPromise = new Promise<void>((resolve) => { this.resolveReady = resolve; });\n }\n return this.readyPromise;\n }\n\n private async initWithRetry(config: PaywalloInitConfig): Promise<void> {\n while (this.initAttempts <= PaywalloClientClass.MAX_INIT_RETRIES) {\n try {\n await this.doInit(config);\n if (this.initAttempts > 0) {\n this.reportInitSuccess(config, this.initAttempts);\n }\n this.cleanupNetworkRecovery();\n this.pendingConfig = null;\n return;\n } catch (error) {\n this.initAttempts++;\n if (this.initAttempts > PaywalloClientClass.MAX_INIT_RETRIES) throw error;\n const delay = PaywalloClientClass.RETRY_DELAYS[this.initAttempts - 1] ?? 10000;\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n }\n\n private setupNetworkRecovery(config: PaywalloInitConfig): void {\n if (this.networkCleanup) return;\n if (!networkMonitor.isInitialized()) return;\n this.networkCleanup = networkMonitor.addListener((state) => {\n if (state !== \"online\") return;\n if (this.config && this.apiClient) return;\n this.initPromise = this.initWithRetry(config);\n this.initPromise\n .catch(() => { this.reportInitFailure(config, null, \"NETWORK_RECOVERY_FAILED\"); });\n });\n }\n\n private cleanupNetworkRecovery(): void {\n if (this.networkCleanup) { this.networkCleanup(); this.networkCleanup = null; }\n }\n\n private reportInitFailure(config: PaywalloInitConfig, error: unknown, reason: string): void {\n try {\n const tempClient = new ApiClient(config.appKey, config.debug);\n void tempClient.reportError(\"INIT_FAILED\", reason, {\n attempts: this.initAttempts,\n error: error instanceof Error ? error.message : String(error),\n });\n } catch {}\n }\n\n private reportInitSuccess(config: PaywalloInitConfig, attempts: number): void {\n try {\n if (this.apiClient) {\n void this.apiClient.reportError(\"INIT_RECOVERED\", `Succeeded after ${attempts} retries`, { attempts });\n }\n } catch {}\n }\n\n private async resolveSessionFlags(keys: string[], apiClient: ApiClient, distinctId: string): Promise<void> {\n try {\n const results = await apiClient.evaluateFlags(keys, distinctId);\n this.sessionFlagsMap.clear();\n for (const key of keys) {\n this.sessionFlagsMap.set(key, key in results ? results[key] : null);\n }\n } catch (error) {\n for (const key of keys) {\n this.sessionFlagsMap.set(key, null);\n }\n }\n }\n\n private async doInit(config: PaywalloInitConfig): Promise<void> {\n const environment = config.environment ?? (typeof __DEV__ !== \"undefined\" && __DEV__ ? \"Sandbox\" : \"Production\");\n const offlineQueueEnabled = config.offlineQueueEnabled !== false;\n\n await Promise.all([\n networkMonitor.initialize({ debug: config.debug }),\n offlineQueue.initialize({ debug: config.debug }).then(() =>\n offlineQueue.clearItemsWithInvalidAppKey(config.appKey)\n ),\n ]);\n\n this.apiClient = new ApiClient(config.appKey, config.debug, environment, offlineQueueEnabled, config.timeout);\n queueProcessor.initialize(this.apiClient.getHttpClient(), { debug: config.debug });\n affiliateManager.initialize(this.apiClient, config.debug);\n subscriptionManager.init({\n serverUrl: this.apiClient.getBaseUrl(),\n appKey: config.appKey,\n cacheTTL: config.subscriptionCacheTTL,\n debug: config.debug,\n });\n\n await Promise.all([\n identityManager.initialize(this.apiClient, config.debug),\n sessionManager.initialize(this.apiClient, config.sessionConfig, config.debug),\n ]);\n const distinctId = identityManager.getDistinctId();\n\n if (config.autoStartSession !== false) {\n sessionManager.startSession().catch(() => {});\n }\n new InstallTracker(config.debug).trackIfNeeded(this.apiClient, config.requestATT === true).catch(() => {});\n\n if (config.sessionFlags && config.sessionFlags.length > 0) {\n await this.resolveSessionFlags(config.sessionFlags, this.apiClient, distinctId);\n }\n\n this.config = config;\n if (this.resolveReady) { this.resolveReady(); this.resolveReady = null; }\n if (config.debug) console.info(\"[Paywallo INIT] complete\");\n\n if (this.apiClient) {\n const apiClientRef = this.apiClient;\n if (config.autoPreloadCampaign) {\n this.autoPreloadedPlacement = config.autoPreloadCampaign;\n this.autoPreloadPlacementPromise = Promise.resolve(config.autoPreloadCampaign);\n if (config.debug) console.info(`[Paywallo PRELOAD] started — placement: ${config.autoPreloadCampaign}`);\n void campaignGateService.preloadCampaign(apiClientRef, config.autoPreloadCampaign).catch(() => {});\n } else {\n this.autoPreloadPlacementPromise = apiClientRef.getPrimaryCampaign(distinctId).then((primary) => {\n const placement = primary?.placement ?? primary?.paywall?.placement;\n if (placement) {\n this.autoPreloadedPlacement = placement;\n if (config.debug) console.info(`[Paywallo PRELOAD] started — placement: ${placement}`);\n void campaignGateService.preloadCampaign(apiClientRef, placement).catch(() => {});\n return placement;\n }\n return null;\n }).catch(() => null);\n }\n }\n }\n\n async identify(options?: IdentifyOptions | UserProperties): Promise<void> {\n this.ensureInitialized();\n await identityManager.identify(options);\n }\n async track(eventName: string, options?: TrackEventOptions): Promise<void> {\n const apiClient = this.getApiClientOrThrow();\n const distinctId = identityManager.getDistinctId();\n if (!distinctId) {\n return;\n }\n if (!isValidEventName(eventName)) {\n const msg = `Invalid event name: \"${eventName}\". Use snake_case or $reserved_name.`;\n throw new ClientError(CLIENT_ERROR_CODES.INVALID_EVENT_NAME, msg);\n }\n const sessionId = sessionManager.getSessionId();\n await apiClient.trackEvent(eventName, distinctId, {\n ...identityManager.getProperties(), ...options?.properties, ...(sessionId && { sessionId }),\n }, options?.timestamp);\n }\n\n async onboardingStep(index: number, name: string): Promise<void> {\n const apiClient = this.getApiClientOrThrow();\n const distinctId = identityManager.getDistinctId();\n if (!distinctId) {\n return;\n }\n if (!Number.isInteger(index) || index < 0) {\n const msg = `Invalid stepIndex: \"${index}\". Must be a non-negative integer.`;\n throw new AnalyticsError(ANALYTICS_ERROR_CODES.INVALID_STEP_INDEX, msg);\n }\n const now = Date.now();\n const timeOnPreviousStep = this.lastOnboardingStepTimestamp !== null\n ? Math.round((now - this.lastOnboardingStepTimestamp) / 1000)\n : 0;\n this.lastOnboardingStepTimestamp = now;\n const sessionId = sessionManager.getSessionId();\n await apiClient.trackEvent(\"$onboarding_step\", distinctId, {\n ...identityManager.getProperties(),\n stepIndex: index, stepName: name, timestamp: now, timeOnPreviousStep,\n ...(sessionId && { sessionId }),\n });\n }\n\n async coreAction(actionName: string): Promise<void> {\n const apiClient = this.getApiClientOrThrow();\n const distinctId = identityManager.getDistinctId();\n if (!distinctId) {\n return;\n }\n if (!actionName || typeof actionName !== \"string\") {\n const msg = `Invalid actionName: \"${actionName}\". Must be a non-empty string.`;\n throw new AnalyticsError(ANALYTICS_ERROR_CODES.INVALID_ACTION_NAME, msg);\n }\n const sessionId = sessionManager.getSessionId();\n await apiClient.trackEvent(\"$core_action\", distinctId, {\n ...identityManager.getProperties(), actionName, timestamp: Date.now(), ...(sessionId && { sessionId }),\n });\n }\n\n async getVariantCached(flagKey: string, defaultValue?: string): Promise<import(\"../types\").FlagVariant> {\n this.ensureInitialized();\n const apiClient = this.getApiClientOrThrow();\n const distinctId = identityManager.getDistinctId();\n const result = await apiClient.getVariantFromCache(flagKey, distinctId);\n if (result) return result;\n void apiClient.getVariant(flagKey, distinctId).catch(() => {});\n return { variant: defaultValue ?? null, payload: undefined };\n }\n\n async getVariant(flagKey: string): Promise<import(\"../types\").FlagVariant> {\n try {\n const distinctId = identityManager.getDistinctId();\n if (!distinctId) {\n return { variant: null };\n }\n return await this.getApiClientOrThrow().getVariant(flagKey, distinctId);\n } catch (error) {\n if (this.apiClient) void this.apiClient.reportError(\"GET_VARIANT_FAILED\", error instanceof Error ? error.message : String(error));\n return { variant: null };\n }\n }\n async evaluateFlags(keys: string[]): Promise<Record<string, string | null>> {\n this.ensureInitialized();\n return this.getApiClientOrThrow().evaluateFlags(keys, identityManager.getDistinctId());\n }\n async getConditionalFlag(flagKey: string, context?: Partial<ConditionalFlagContext>): Promise<boolean> {\n try {\n const distinctId = identityManager.getDistinctId();\n if (!distinctId) return false;\n const result = await this.getApiClientOrThrow().getConditionalFlag(flagKey, { distinctId, ...context });\n return result.value;\n } catch (error) {\n if (this.apiClient) void this.apiClient.reportError(\"GET_CONDITIONAL_FLAG_FAILED\", error instanceof Error ? error.message : String(error));\n return false;\n }\n }\n async getPaywall(placement: string): Promise<import(\"../types\").PaywallConfig | null> {\n return this.getApiClientOrThrow().getPaywall(placement);\n }\n async presentPaywall(placement: string): Promise<PaywallResult> {\n this.ensureInitialized();\n if (!this.paywallPresenter) throw new PaywallError(PAYWALL_ERROR_CODES.NOT_INITIALIZED, \"PaywalloProvider not mounted. Wrap your app with <PaywalloProvider>\");\n return this.paywallPresenter(placement);\n }\n async getCampaign(placement: string, context?: Record<string, unknown>): Promise<CampaignResponse | null> {\n return campaignGateService.getCampaign(this.getApiClientOrThrow(), placement, context);\n }\n async presentCampaign(placement: string, context?: Record<string, unknown>): Promise<CampaignResult> {\n this.ensureInitialized();\n return campaignGateService.presentCampaign(this.getApiClientOrThrow(), placement, () => this.hasActiveSubscription(), this.paywallPresenter, this.campaignPresenter, context);\n }\n async hasActiveSubscription(): Promise<boolean> {\n this.ensureInitialized();\n try {\n if (this.activeChecker) {\n return await this.activeChecker();\n }\n const distinctId = identityManager.getDistinctId();\n if (!distinctId || !this.apiClient) {\n return false;\n }\n const status = await this.apiClient.getSubscriptionStatus(distinctId);\n return status.hasActiveSubscription;\n } catch (error) {\n if (this.apiClient) void this.apiClient.reportError(\"SUBSCRIPTION_CHECK_FAILED\", error instanceof Error ? error.message : \"hasActiveSubscription failed\");\n return false;\n }\n }\n\n async getSubscription(): Promise<Subscription | null> {\n this.ensureInitialized();\n try {\n if (this.subscriptionGetter) return await this.subscriptionGetter();\n const distinctId = identityManager.getDistinctId();\n if (!distinctId || !this.apiClient) return null;\n const status = await this.apiClient.getSubscriptionStatus(distinctId);\n if (!status.subscription) return null;\n return { ...status.subscription, expiresAt: status.subscription.expiresAt ? new Date(status.subscription.expiresAt) : null };\n } catch {\n return null;\n }\n }\n\n async restorePurchases(): Promise<RestoreResult> {\n this.ensureInitialized();\n if (!this.restoreHandler) throw new PaywallError(PAYWALL_ERROR_CODES.NOT_INITIALIZED, \"PaywalloProvider not mounted. Wrap your app with <PaywalloProvider>\");\n return this.restoreHandler();\n }\n async reset(): Promise<void> {\n await identityManager.reset();\n await subscriptionCache.invalidateAll();\n }\n async fullReset(): Promise<void> {\n const wasDebug = this.config?.debug ?? false;\n await sessionManager.endSession();\n await identityManager.reset();\n await subscriptionCache.invalidateAll();\n queueProcessor.dispose(); offlineQueue.dispose(); networkMonitor.dispose();\n campaignGateService.clearPreloaded();\n this.cleanupNetworkRecovery();\n this.sessionFlagsMap.clear();\n this.apiClient = null; this.config = null; this.initPromise = null;\n this.readyPromise = null; this.resolveReady = null;\n this.pendingConfig = null; this.initAttempts = 0;\n this.paywallPresenter = null; this.campaignPresenter = null;\n this.subscriptionGetter = null; this.activeChecker = null; this.restoreHandler = null;\n this.lastOnboardingStepTimestamp = null; this.autoPreloadedPlacement = null; this.autoPreloadPlacementPromise = null;\n }\n\n getSessionFlag(key: string): string | null {\n if (!this.config || !this.apiClient) return null;\n const value = this.sessionFlagsMap.get(key);\n return value !== undefined ? value : null;\n }\n\n getConfig(): import(\"../types\").PaywalloConfig | null { return this.config; }\n getDistinctId(): string { return identityManager.getDistinctId(); }\n getDeviceId(): string | null { return identityManager.getDeviceId(); }\n getEmail(): string | null { return identityManager.getEmail(); }\n getEnvironment(): import(\"../types\").Environment { return this.apiClient?.getEnvironment() ?? \"Production\"; }\n setEnvironment(environment: import(\"../types\").Environment): void { this.apiClient?.setEnvironment(environment); }\n getApiClient(): ApiClient | null { return this.apiClient; }\n getWebUrl(): string | null { return this.apiClient?.getWebUrl() ?? null; }\n getIdentityState(): import(\"../domains/identity/IdentityManager\").IdentityState { return identityManager.getState(); }\n getSessionState(): import(\"../domains/session/types\").SessionState { return sessionManager.getState(); }\n getSessionId(): string | null { return sessionManager.getSessionId(); }\n async startSession(): Promise<string> { return sessionManager.startSession(); }\n async endSession(): Promise<void> { return sessionManager.endSession(); }\n registerPaywallPresenter(p: PaywallPresenter): void { this.paywallPresenter = p; }\n registerCampaignPresenter(p: CampaignPresenter): void { this.campaignPresenter = p; }\n registerSubscriptionGetter(g: SubscriptionGetter): void { this.subscriptionGetter = g; }\n registerActiveChecker(c: ActiveChecker): void { this.activeChecker = c; }\n registerRestoreHandler(h: RestoreHandler): void { this.restoreHandler = h; }\n registerEmergencyPaywallHandler(h: EmergencyPaywallHandler): void { sessionManager.registerEmergencyPaywallHandler(h); }\n\n async requireSubscription(paywallPlacement?: string): Promise<boolean> {\n this.ensureInitialized();\n if (await this.hasActiveSubscription()) return true;\n if (!paywallPlacement) return false;\n const r = await this.presentPaywall(paywallPlacement);\n return r.purchased || r.restored;\n }\n async requireSubscriptionWithCampaign(placement: string, context?: Record<string, unknown>): Promise<boolean> {\n this.ensureInitialized();\n return campaignGateService.requireSubscriptionWithCampaign(\n this.getApiClientOrThrow(), placement, () => this.hasActiveSubscription(),\n this.paywallPresenter, this.campaignPresenter, context,\n );\n }\n async gateContent<T>(content: () => T | Promise<T>, paywallPlacement?: string): Promise<T | null> {\n return (await this.requireSubscription(paywallPlacement)) ? content() : null;\n }\n async gateContentWithCampaign<T>(content: () => T | Promise<T>, placement: string, context?: Record<string, unknown>): Promise<T | null> {\n return (await this.requireSubscriptionWithCampaign(placement, context)) ? content() : null;\n }\n async preloadCampaign(placement: string, context?: Record<string, unknown>): Promise<PreloadCampaignResult> {\n return campaignGateService.preloadCampaign(this.getApiClientOrThrow(), placement, context);\n }\n getPreloadedCampaign(placement: string): CampaignResponse | null { return campaignGateService.getPreloadedCampaign(placement); }\n isPreloaded(placement: string): boolean { return campaignGateService.getPreloadedCampaign(placement) !== null; }\n getAutoPreloadedPlacement(): string | null { return this.autoPreloadedPlacement; }\n waitForAutoPreloadedPlacement(): Promise<string | null> { return this.autoPreloadPlacementPromise ?? Promise.resolve(null); }\n isOnline(): boolean { return networkMonitor.isOnline(); }\n getOfflineQueueSize(): number { return offlineQueue.getSize(); }\n async clearOfflineQueue(): Promise<void> { await offlineQueue.clear(); }\n async processOfflineQueue(): Promise<{ processed: number; failed: number }> { return queueProcessor.processQueue(); }\n\n private getApiClientOrThrow(): ApiClient {\n if (!this.config || !this.apiClient) throw new ClientError(CLIENT_ERROR_CODES.NOT_INITIALIZED, \"SDK not initialized. Call Paywallo.init() first\");\n return this.apiClient;\n }\n\n private ensureInitialized(): void {\n if (!this.config || !this.apiClient) throw new ClientError(CLIENT_ERROR_CODES.NOT_INITIALIZED, \"SDK not initialized. Call Paywallo.init() first\");\n }\n}\n\nexport const PaywalloClient: IPaywalloClient = new PaywalloClientClass();\n\nexport { PaywalloAffiliate } from \"../domains/affiliate\";\n","import { createContext } from \"react\";\n\nimport type {\n CampaignResult,\n PaywalloConfig,\n PaywallConfig,\n PaywallResult,\n Subscription,\n} from \"../types\";\nimport type { Product } from \"../types/purchase\";\n\nexport interface PreloadResult {\n success: boolean;\n error?: Error;\n}\n\nexport interface PaywalloContextValue {\n config: PaywalloConfig | null;\n isInitialized: boolean;\n isReady: boolean;\n initError: Error | null;\n distinctId: string | null;\n subscription: Subscription | null;\n products: Map<string, Product>;\n isLoadingProducts: boolean;\n presentPaywall: (placement: string) => Promise<PaywallResult>;\n presentCampaign: (\n placement: string,\n context?: Record<string, unknown>\n ) => Promise<CampaignResult>;\n preloadCampaign: (placement: string, context?: Record<string, unknown>) => Promise<PreloadResult>;\n hasActiveSubscription: () => Promise<boolean>;\n getSubscription: () => Promise<Subscription | null>;\n restorePurchases: () => Promise<{ success: boolean; error?: Error }>;\n getPaywallConfig: (placement: string) => Promise<PaywallConfig | null>;\n refreshProducts: (productIds: string[]) => Promise<void>;\n}\n\nexport const PaywalloContext = createContext<PaywalloContextValue | null>(null);\n","import { useContext } from \"react\";\n\nimport { PaywalloContext, PaywalloContextValue } from \"../context/PaywalloContext\";\nimport { CLIENT_ERROR_CODES,ClientError } from \"../errors/ClientError\";\n\nexport function usePaywallo(): PaywalloContextValue {\n const context = useContext(PaywalloContext);\n\n if (!context) {\n throw new ClientError(CLIENT_ERROR_CODES.PROVIDER_MISSING, \"usePaywallo must be used within a PaywalloProvider\");\n }\n\n return context;\n}\n","import { useCallback, useEffect, useState } from \"react\";\n\nimport { PURCHASE_ERROR_CODES, PurchaseError } from \"../domains/iap\";\nimport { getIAPService } from \"../domains/iap\";\nimport type { IAPProduct, ProductPriceInfo } from \"../domains/iap/types\";\nimport { mapToFormattedProduct, mapToIAPProduct } from \"../utils/productMappers\";\nimport type { FormattedProduct } from \"../utils/productMappers\";\n\ninterface UseProductsResult {\n products: IAPProduct[];\n formattedProducts: FormattedProduct[];\n isLoading: boolean;\n error: Error | null;\n loadProducts: (productIds: string[]) => Promise<void>;\n getProduct: (productId: string) => IAPProduct | undefined;\n getFormattedProduct: (productId: string) => FormattedProduct | undefined;\n getPriceInfo: (productId: string) => ProductPriceInfo | undefined;\n}\n\nexport function useProducts(initialProductIds?: string[]): UseProductsResult {\n const [products, setProducts] = useState<IAPProduct[]>([]);\n const [formattedProducts, setFormattedProducts] = useState<FormattedProduct[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const loadProducts = useCallback(async (productIds: string[]): Promise<void> => {\n setIsLoading(true);\n setError(null);\n\n try {\n const iapService = getIAPService();\n const storeProducts = await iapService.loadProducts(productIds);\n\n setProducts(storeProducts.map(mapToIAPProduct));\n setFormattedProducts(storeProducts.map(mapToFormattedProduct));\n } catch (err) {\n setError(err instanceof PurchaseError ? err : new PurchaseError(PURCHASE_ERROR_CODES.PURCHASE_FAILED, String(err)));\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n useEffect(() => {\n if (initialProductIds && initialProductIds.length > 0) {\n void loadProducts(initialProductIds);\n }\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n const getProduct = useCallback(\n (productId: string): IAPProduct | undefined => {\n return products.find((p) => p.productId === productId);\n },\n [products]\n );\n\n const getFormattedProduct = useCallback(\n (productId: string): FormattedProduct | undefined => {\n return formattedProducts.find((p) => p.productId === productId);\n },\n [formattedProducts]\n );\n\n const getPriceInfo = useCallback(\n (productId: string): ProductPriceInfo | undefined => {\n const p = formattedProducts.find((fp) => fp.productId === productId);\n if (!p) return undefined;\n return {\n price: p.price,\n priceValue: p.priceValue,\n currency: p.currency,\n localizedPrice: p.localizedPrice,\n pricePerMonth: p.pricePerMonth,\n pricePerWeek: p.pricePerWeek,\n pricePerDay: p.pricePerDay,\n };\n },\n [formattedProducts]\n );\n\n return {\n products,\n formattedProducts,\n isLoading,\n error,\n loadProducts,\n getProduct,\n getFormattedProduct,\n getPriceInfo,\n };\n}\n","import type { IAPProduct, ProductPriceInfo } from \"../domains/iap/types\";\n\ntype RawStoreProduct = {\n productId: string;\n title: string;\n description: string;\n price: string;\n priceValue: number;\n currency: string;\n localizedPrice: string;\n type: string;\n subscriptionPeriod?: string;\n introductoryPrice?: string;\n freeTrialPeriod?: string;\n trialDays?: number;\n pricePerMonth?: string;\n pricePerWeek?: string;\n pricePerDay?: string;\n};\n\nexport interface FormattedProduct extends ProductPriceInfo {\n productId: string;\n title: string;\n description: string;\n subscriptionPeriod?: string;\n introductoryPrice?: string;\n freeTrialPeriod?: string;\n trialDays: number;\n}\n\nexport function mapToIAPProduct(product: RawStoreProduct): IAPProduct {\n return {\n productId: product.productId,\n price: product.price,\n currency: product.currency,\n localizedPrice: product.localizedPrice,\n title: product.title,\n description: product.description,\n type: product.type === \"subscription\" ? \"subs\" : \"inapp\",\n subscriptionPeriodAndroid: product.subscriptionPeriod,\n introductoryPrice: product.introductoryPrice,\n freeTrialPeriodAndroid: product.freeTrialPeriod,\n trialDays: product.trialDays ?? 0,\n };\n}\n\nexport function mapToFormattedProduct(product: RawStoreProduct): FormattedProduct {\n return {\n productId: product.productId,\n title: product.title,\n description: product.description,\n price: product.price,\n priceValue: product.priceValue,\n currency: product.currency,\n localizedPrice: product.localizedPrice,\n subscriptionPeriod: product.subscriptionPeriod,\n introductoryPrice: product.introductoryPrice,\n freeTrialPeriod: product.freeTrialPeriod,\n trialDays: product.trialDays ?? 0,\n pricePerMonth: product.pricePerMonth,\n pricePerWeek: product.pricePerWeek,\n pricePerDay: product.pricePerDay,\n };\n}\n","import { useCallback, useState } from \"react\";\n\nimport { getIAPService } from \"../domains/iap\";\nimport { createPurchaseError, PURCHASE_ERROR_CODES, PurchaseError } from \"../domains/iap\";\nimport type { IAPPurchase, PurchaseState } from \"../domains/iap/types\";\n\nexport interface PurchaseOutcome {\n status: \"success\" | \"cancelled\" | \"failed\";\n purchase?: IAPPurchase;\n error?: PurchaseError;\n}\n\ninterface UsePurchaseResult {\n state: PurchaseState;\n purchase: (productId: string) => Promise<PurchaseOutcome>;\n restore: () => Promise<IAPPurchase[]>;\n error: PurchaseError | null;\n isLoading: boolean;\n isPurchasing: boolean;\n isValidating: boolean;\n isRestoring: boolean;\n}\n\nexport function usePurchase(): UsePurchaseResult {\n const [state, setState] = useState<PurchaseState>(\"idle\");\n const [error, setError] = useState<PurchaseError | null>(null);\n\n const purchase = useCallback(async (productId: string): Promise<PurchaseOutcome> => {\n setState(\"purchasing\");\n setError(null);\n\n try {\n const iapService = getIAPService();\n const result = await iapService.purchase(productId, {\n onValidating: () => setState(\"validating\"),\n });\n\n if (result.success && result.purchase) {\n setState(\"idle\");\n return {\n status: \"success\",\n purchase: {\n productId: result.purchase.productId,\n transactionId: result.purchase.transactionId,\n transactionDate: result.purchase.transactionDate,\n transactionReceipt: result.purchase.receipt,\n },\n };\n }\n\n if (result.error) {\n setError(result.error);\n setState(\"error\");\n return { status: \"failed\", error: result.error };\n }\n\n setState(\"idle\");\n return { status: \"cancelled\" };\n } catch (err) {\n const purchaseError = err instanceof PurchaseError\n ? err\n : createPurchaseError(\"PURCHASE_FAILED\", err instanceof Error ? err.message : String(err));\n\n if (purchaseError.userCancelled) {\n setState(\"idle\");\n return { status: \"cancelled\" };\n }\n\n setError(purchaseError);\n setState(\"error\");\n return { status: \"failed\", error: purchaseError };\n }\n }, []);\n\n const restore = useCallback(async (): Promise<IAPPurchase[]> => {\n setState(\"restoring\");\n setError(null);\n\n try {\n const iapService = getIAPService();\n const transactions = await iapService.restore();\n\n setState(\"idle\");\n return transactions.map((tx) => ({\n productId: tx.productId,\n transactionId: tx.transactionId,\n transactionDate: tx.transactionDate,\n transactionReceipt: tx.receipt,\n }));\n } catch (err) {\n const e = err instanceof PurchaseError ? err : createPurchaseError(\"RESTORE_FAILED\", String(err));\n setError(e);\n setState(\"error\");\n throw e;\n }\n }, []);\n\n return {\n state,\n purchase,\n restore,\n error,\n isLoading: state === \"loading\",\n isPurchasing: state === \"purchasing\" || state === \"validating\",\n isValidating: state === \"validating\",\n isRestoring: state === \"restoring\",\n };\n}\n","import { useCallback, useEffect, useState } from \"react\";\n\nimport { PURCHASE_ERROR_CODES, PurchaseError } from \"../domains/iap\";\nimport { subscriptionManager } from \"../domains/subscription/SubscriptionManager\";\nimport type { SubscriptionInfo, SubscriptionStatusResponse } from \"../domains/subscription/types\";\n\ninterface UseSubscriptionResult {\n subscription: SubscriptionInfo | null;\n isActive: boolean;\n isLoading: boolean;\n error: Error | null;\n entitlements: string[];\n refresh: () => Promise<void>;\n restore: () => Promise<void>;\n}\n\nexport function useSubscription(): UseSubscriptionResult {\n const [status, setStatus] = useState<SubscriptionStatusResponse | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const refresh = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const newStatus = await subscriptionManager.getSubscriptionStatus(true);\n setStatus(newStatus);\n } catch (err) {\n const e = err instanceof PurchaseError ? err : new PurchaseError(PURCHASE_ERROR_CODES.PURCHASE_FAILED, String(err));\n setError(e);\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n const restore = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const newStatus = await subscriptionManager.restorePurchases();\n setStatus(newStatus);\n } catch (err) {\n const e = err instanceof PurchaseError ? err : new PurchaseError(PURCHASE_ERROR_CODES.RESTORE_FAILED, String(err));\n setError(e);\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n useEffect(() => {\n void subscriptionManager.getSubscriptionStatus().then((s) => {\n setStatus(s);\n setIsLoading(false);\n });\n\n const removeListener = subscriptionManager.addListener((newStatus) => {\n setStatus(newStatus);\n });\n\n return () => {\n removeListener();\n };\n }, []);\n\n return {\n subscription: status?.subscription ?? null,\n isActive: status?.hasActiveSubscription ?? false,\n isLoading,\n error,\n entitlements: status?.entitlements ?? [],\n refresh,\n restore,\n };\n}\n","import React, { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport { Animated, Dimensions, Easing, StyleSheet } from \"react-native\";\nimport { PaywallErrorBoundary } from \"./domains/paywall\";\nimport { PaywallModal } from \"./domains/paywall\";\nimport { PaywallWebView } from \"./domains/paywall\";\nimport { PaywalloContext, PaywalloContextValue } from \"./context/PaywalloContext\";\nimport { getIAPService } from \"./domains/iap\";\nimport { PaywalloClient } from \"./core/PaywalloClient\";\nimport { useCampaignPreload } from \"./hooks/useCampaignPreload\";\nimport { usePaywallPresenter } from \"./domains/paywall\";\nimport { useProductLoader } from \"./hooks/useProductLoader\";\nimport { usePurchaseOrchestrator } from \"./hooks/usePurchaseOrchestrator\";\nimport { useSubscriptionSync } from \"./hooks/useSubscriptionSync\";\nimport { CAMPAIGN_ERROR_CODES, CampaignError } from \"./domains/campaign\";\nimport { CLIENT_ERROR_CODES, ClientError } from \"./errors/ClientError\";\nimport { PURCHASE_ERROR_CODES, PurchaseError } from \"./domains/iap\";\nimport type { CampaignResult, PaywalloConfig, PaywallConfig, PaywallResult, RestoreResult } from \"./types\";\nimport type { Product } from \"./types/purchase\";\nimport { initLocalization } from \"./utils/localization\";\n\nexport interface PaywalloProviderProps { children: React.ReactNode; config: PaywalloConfig; }\ninterface ActivePaywall {\n placement: string;\n resolver: (result: PaywallResult) => void;\n paywallConfig?: { id: string; placement: string; config: Record<string, unknown>; primaryProductId?: string; secondaryProductId?: string };\n preloadedProducts?: Map<string, Product>;\n variantKey?: string;\n campaignId?: string;\n}\nexport function PaywalloProvider({ children, config }: PaywalloProviderProps): React.ReactElement {\n const [isInitialized, setIsInitialized] = useState(false);\n const [initError, setInitError] = useState<Error | null>(null);\n const [distinctId, setDistinctId] = useState<string | null>(null);\n const [activePaywall, setActivePaywall] = useState<ActivePaywall | null>(null);\n\n const { products, isLoadingProducts, refreshProducts } = useProductLoader();\n const { subscription, hasActiveSubscription, getSubscription, invalidateCache } = useSubscriptionSync();\n const { preloadedWebView, setPreloadedWebView, preloadCampaign, consumePreloadedCampaign, isPreloadValid } = useCampaignPreload();\n const clearPreloadedWebView = useCallback((): void => setPreloadedWebView(null), [setPreloadedWebView]);\n const autoPreloadTriggeredRef = useRef(false);\n const preloadedWebViewRef = useRef(preloadedWebView);\n\n useEffect(() => { preloadedWebViewRef.current = preloadedWebView; }, [preloadedWebView]);\n\n const triggerRepreload = useCallback((placement: string): void => {\n void PaywalloClient.preloadCampaign(placement).catch(() => {});\n }, []);\n\n const { showingPreloadedWebView, presentPreloadedWebView, resolvePreloadedPaywall, handlePreloadedWebViewReady: baseHandlePreloadedWebViewReady, handlePreloadedClose: baseHandlePreloadedClose, setShowingPreloadedWebView, presentedAtRef } =\n usePaywallPresenter(preloadedWebView, setPreloadedWebView);\n\n const SCREEN_HEIGHT = useMemo(() => Dimensions.get(\"window\").height, []);\n const slideAnim = useRef(new Animated.Value(SCREEN_HEIGHT)).current;\n\n const handlePreloadedWebViewReady = useCallback((): void => {\n if (PaywalloClient.getConfig()?.debug) { console.info(`[Paywallo WEBVIEW] loaded — placement: ${preloadedWebView?.placement}`); }\n baseHandlePreloadedWebViewReady();\n }, [config?.debug, preloadedWebView?.placement, baseHandlePreloadedWebViewReady]);\n\n const handlePreloadedClose = useCallback((): void => {\n const placement = preloadedWebView?.placement;\n Animated.timing(slideAnim, { toValue: SCREEN_HEIGHT, duration: 200, easing: Easing.in(Easing.cubic), useNativeDriver: true }).start(() => {\n baseHandlePreloadedClose();\n if (placement) triggerRepreload(placement);\n });\n }, [baseHandlePreloadedClose, preloadedWebView, triggerRepreload, slideAnim, SCREEN_HEIGHT]);\n\n const { handlePreloadedPurchase: rawPreloadedPurchase, handlePreloadedRestore } = usePurchaseOrchestrator(\n preloadedWebView, resolvePreloadedPaywall, clearPreloadedWebView, setShowingPreloadedWebView, presentedAtRef, invalidateCache\n );\n const [isPreloadPurchasing, setIsPreloadPurchasing] = useState(false);\n const handlePreloadedPurchase = useCallback(async (productId: string) => {\n setIsPreloadPurchasing(true);\n try { await rawPreloadedPurchase(productId); } finally { setIsPreloadPurchasing(false); }\n }, [rawPreloadedPurchase]);\n\n useEffect(() => {\n initLocalization({ detectDevice: true });\n PaywalloClient.init(config)\n .then(async () => {\n setDistinctId(PaywalloClient.getDistinctId());\n setIsInitialized(true);\n if (!autoPreloadTriggeredRef.current) {\n autoPreloadTriggeredRef.current = true;\n const placement = await PaywalloClient.waitForAutoPreloadedPlacement();\n if (placement) void preloadCampaign(placement).catch(() => {});\n }\n })\n .catch((err: unknown) => { setInitError(err instanceof Error ? err : new ClientError(CLIENT_ERROR_CODES.NOT_INITIALIZED, String(err))); });\n }, [config, preloadCampaign]);\n\n const getPaywallConfig = useCallback(async (p: string): Promise<PaywallConfig | null> => {\n const api = PaywalloClient.getApiClient(); return api ? api.getPaywall(p) : null;\n }, []);\n\n const presentPaywall = useCallback((placement: string): Promise<PaywallResult> => {\n return new Promise<PaywallResult>((resolve) => setActivePaywall({ placement, resolver: resolve }));\n }, []);\n\n const trackCampaignImpression = useCallback((placement: string, variantKey: string, campaignId: string): void => {\n const api = PaywalloClient.getApiClient();\n if (!api) return;\n const sessionId = PaywalloClient.getSessionId();\n void api.trackEvent(\"$campaign_impression\", PaywalloClient.getDistinctId(), { placement, variantKey, campaignId, ...(sessionId && { sessionId }) }).catch(() => {});\n }, []);\n\n const presentCampaign = useCallback(\n async (placement: string, context?: Record<string, unknown>): Promise<CampaignResult> => {\n try {\n if (preloadedWebView?.placement === placement && preloadedWebView.loaded && isPreloadValid(placement)) {\n consumePreloadedCampaign(placement);\n const apiClient = PaywalloClient.getApiClient();\n if (apiClient) {\n const sessionId = PaywalloClient.getSessionId();\n void apiClient.trackEvent(\"$paywall_viewed\", PaywalloClient.getDistinctId(), {\n placement, paywallId: preloadedWebView.paywallId, preloaded: true,\n variantKey: preloadedWebView.variantKey ?? \"\", campaignId: preloadedWebView.campaignId ?? \"\",\n ...(sessionId && { sessionId }),\n });\n }\n trackCampaignImpression(placement, preloadedWebView.variantKey ?? \"\", preloadedWebView.campaignId ?? \"\");\n const r = await presentPreloadedWebView();\n return { ...r, campaignId: preloadedWebView.campaignId ?? \"\", variantKey: preloadedWebView.variantKey ?? \"\" };\n }\n const preloaded = consumePreloadedCampaign(placement);\n if (preloaded) {\n trackCampaignImpression(placement, preloaded.variantKey, preloaded.campaignId);\n const r = await new Promise<PaywallResult>((resolve) => setActivePaywall({\n placement: preloaded.paywall.placement, resolver: resolve,\n paywallConfig: preloaded.paywall, preloadedProducts: preloaded.products,\n variantKey: preloaded.variantKey, campaignId: preloaded.campaignId,\n }));\n return { ...r, campaignId: preloaded.campaignId, variantKey: preloaded.variantKey };\n }\n const campaign = PaywalloClient.getPreloadedCampaign(placement) ?? await PaywalloClient.getCampaign(placement, context);\n if (!campaign?.paywall) return { presented: false, purchased: false, cancelled: false, restored: false,\n error: new CampaignError(campaign ? CAMPAIGN_ERROR_CODES.PRELOAD_FAILED : CAMPAIGN_ERROR_CODES.NOT_FOUND, campaign ? `No paywall: ${placement}` : `Campaign not found: ${placement}`) };\n trackCampaignImpression(placement, campaign.variantKey, campaign.campaignId);\n const r = await new Promise<PaywallResult>((resolve) => setActivePaywall({\n placement: campaign.paywall.placement, resolver: resolve,\n paywallConfig: { id: campaign.paywall.id, placement: campaign.paywall.placement, config: campaign.paywall.config,\n primaryProductId: campaign.paywall.primaryProductId, secondaryProductId: campaign.paywall.secondaryProductId },\n variantKey: campaign.variantKey, campaignId: campaign.campaignId,\n }));\n return { ...r, campaignId: campaign.campaignId, variantKey: campaign.variantKey };\n } catch (error) {\n return { presented: false, purchased: false, cancelled: false, restored: false,\n error: error instanceof Error ? error : new CampaignError(CAMPAIGN_ERROR_CODES.PRESENT_FAILED, String(error)) };\n }\n },\n [preloadedWebView, isPreloadValid, consumePreloadedCampaign, presentPreloadedWebView, trackCampaignImpression]\n );\n\n const restorePurchases = useCallback(async (): Promise<RestoreResult> => {\n invalidateCache();\n try {\n const txs = await getIAPService().restore();\n return txs.length > 0 ? { success: true, restoredProducts: txs.map((tx) => tx.productId) } : { success: false, restoredProducts: [] };\n } catch (error) {\n return { success: false, restoredProducts: [], error: error instanceof Error ? error : new PurchaseError(PURCHASE_ERROR_CODES.RESTORE_FAILED, String(error)) };\n }\n }, [invalidateCache]);\n\n const handlePaywallResult = useCallback((result: PaywallResult): void => {\n if (activePaywall) { activePaywall.resolver(result); setActivePaywall(null); }\n }, [activePaywall]);\n\n const bridgePaywallPresenter = useCallback((placement: string): Promise<PaywallResult> => {\n if (PaywalloClient.getConfig()?.debug) { console.info(`[Paywallo PRESENT] called — preloaded: ${preloadedWebViewRef.current?.loaded === true} placement: ${placement}`); }\n if (preloadedWebViewRef.current?.placement === placement) {\n if (preloadedWebViewRef.current.loaded) {\n return presentPreloadedWebView();\n }\n return new Promise<PaywallResult>((resolve) => {\n let elapsed = 0;\n const poll = (): void => {\n if (preloadedWebViewRef.current?.loaded) { resolve(presentPreloadedWebView()); return; }\n elapsed += 100;\n if (elapsed >= 500) { resolve(presentCampaign(placement)); return; }\n setTimeout(poll, 100);\n };\n setTimeout(poll, 100);\n });\n }\n return presentCampaign(placement);\n }, [presentPreloadedWebView, presentCampaign]);\n\n useEffect(() => {\n if (!isInitialized) return;\n const onEmergency = async (id: string): Promise<void> => { try { await bridgePaywallPresenter(id); } catch { /* non-critical */ } };\n PaywalloClient.registerPaywallPresenter(bridgePaywallPresenter);\n PaywalloClient.registerSubscriptionGetter(getSubscription);\n PaywalloClient.registerActiveChecker(hasActiveSubscription);\n PaywalloClient.registerRestoreHandler(restorePurchases);\n PaywalloClient.registerEmergencyPaywallHandler(onEmergency);\n }, [isInitialized, bridgePaywallPresenter, getSubscription, hasActiveSubscription, restorePurchases]);\n\n\n const isReady = isInitialized && !isLoadingProducts;\n\n const noOp = useCallback(() => {}, []);\n const contextValue: PaywalloContextValue = useMemo(() => ({\n config: PaywalloClient.getConfig(), isInitialized, isReady, initError, distinctId, subscription, products, isLoadingProducts,\n presentPaywall, presentCampaign, preloadCampaign, hasActiveSubscription, getSubscription, restorePurchases, getPaywallConfig, refreshProducts,\n }), [isInitialized, isReady, initError, distinctId, subscription, products, isLoadingProducts,\n presentPaywall, presentCampaign, preloadCampaign, hasActiveSubscription, getSubscription, restorePurchases, getPaywallConfig, refreshProducts]);\n\n useLayoutEffect(() => {\n if (showingPreloadedWebView) {\n slideAnim.setValue(SCREEN_HEIGHT);\n Animated.timing(slideAnim, { toValue: 0, duration: 200, easing: Easing.out(Easing.cubic), useNativeDriver: true }).start();\n }\n }, [showingPreloadedWebView, slideAnim, SCREEN_HEIGHT]);\n\n const preloadStyle = [\n styles.preloadOverlay,\n showingPreloadedWebView ? styles.visible : styles.hidden,\n showingPreloadedWebView ? { transform: [{ translateY: slideAnim }] } : undefined,\n ];\n\n return (\n <PaywalloContext.Provider value={contextValue}>\n {children}\n <PaywallErrorBoundary>\n {!!preloadedWebView?.craftData && (\n <Animated.View style={preloadStyle} pointerEvents={showingPreloadedWebView ? \"auto\" : \"none\"}>\n <PaywallWebView\n paywallId={preloadedWebView.paywallId} craftData={preloadedWebView.craftData}\n products={preloadedWebView.products} primaryProductId={preloadedWebView.primaryProductId}\n secondaryProductId={preloadedWebView.secondaryProductId} isPurchasing={isPreloadPurchasing}\n webUrl={isInitialized ? PaywalloClient.getWebUrl() : null}\n onReady={handlePreloadedWebViewReady} onClose={showingPreloadedWebView ? handlePreloadedClose : noOp}\n onPurchase={showingPreloadedWebView ? handlePreloadedPurchase : noOp}\n onRestore={showingPreloadedWebView ? handlePreloadedRestore : noOp}\n />\n </Animated.View>\n )}\n </PaywallErrorBoundary>\n <PaywallErrorBoundary>\n {activePaywall && (\n <PaywallModal placement={activePaywall.placement} visible={true} onResult={handlePaywallResult}\n paywallConfig={activePaywall.paywallConfig} preloadedProducts={activePaywall.preloadedProducts}\n variantKey={activePaywall.variantKey} campaignId={activePaywall.campaignId} />\n )}\n </PaywallErrorBoundary>\n </PaywalloContext.Provider>\n );\n}\n\nconst styles = StyleSheet.create({\n preloadOverlay: { position: \"absolute\", top: 0, left: 0, right: 0, bottom: 0, backgroundColor: \"#ffffff\" },\n hidden: { zIndex: -1, opacity: 0, width: 1, height: 1, overflow: \"hidden\" },\n visible: { zIndex: 9999, opacity: 1 },\n});\n","import { useCallback, useRef, useState } from \"react\";\n\nimport type { PreloadResult } from \"../context/PaywalloContext\";\nimport { PaywalloClient } from \"../core/PaywalloClient\";\nimport { CAMPAIGN_ERROR_CODES, CampaignError } from \"../domains/campaign/CampaignError\";\nimport { loadCampaignProducts } from \"../utils/loadCampaignProducts\";\nimport {\n getCacheEntry,\n isCacheEntryValid,\n type PreloadedCampaign,\n type PreloadedWebView,\n} from \"../utils/preloadCache\";\n\nexport type { PreloadedCampaign, PreloadedWebView };\n\nexport function useCampaignPreload() {\n const [preloadedWebView, setPreloadedWebView] = useState<PreloadedWebView | null>(null);\n const preloadedCampaignsRef = useRef<Map<string, PreloadedCampaign>>(new Map());\n\n const isPreloadValid = useCallback(\n (placement: string): boolean => isCacheEntryValid(preloadedCampaignsRef.current.get(placement)),\n []\n );\n\n const consumePreloadedCampaign = useCallback(\n (placement: string): PreloadedCampaign | null =>\n getCacheEntry(preloadedCampaignsRef.current, placement),\n []\n );\n\n const preloadCampaign = useCallback(\n async (placement: string, context?: Record<string, unknown>): Promise<PreloadResult> => {\n try {\n const campaign = await PaywalloClient.getCampaign(placement, context);\n if (!campaign?.paywall) {\n return {\n success: false,\n error: new CampaignError(\n CAMPAIGN_ERROR_CODES.NOT_FOUND,\n `Campaign or paywall not found: ${placement}`\n ),\n };\n }\n\n const { paywall } = campaign;\n const serverProducts = [paywall.primaryProduct, paywall.secondaryProduct].filter(Boolean);\n const storeProductIds = serverProducts.map((p) => p!.storeProductId).filter(Boolean);\n const productsMap = await loadCampaignProducts(\n serverProducts.map((p) => p!),\n storeProductIds\n );\n\n preloadedCampaignsRef.current.set(placement, {\n campaignId: campaign.campaignId,\n variantKey: campaign.variantKey,\n paywall: {\n id: paywall.id,\n placement: paywall.placement,\n config: paywall.config,\n primaryProductId: paywall.primaryProductId,\n secondaryProductId: paywall.secondaryProductId,\n },\n products: productsMap,\n preloadedAt: Date.now(),\n });\n\n const craftData = (paywall.config as { craftData?: string })?.craftData ?? \"\";\n setPreloadedWebView({\n placement, paywallId: paywall.id, craftData, products: productsMap,\n primaryProductId: paywall.primaryProductId,\n secondaryProductId: paywall.secondaryProductId,\n loaded: false, campaignId: campaign.campaignId, variantKey: campaign.variantKey,\n });\n if (PaywalloClient.getConfig()?.debug) console.info(`[Paywallo WEBVIEW] mounting hidden — placement: ${placement}`);\n\n return { success: true };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error\n ? error\n : new CampaignError(CAMPAIGN_ERROR_CODES.FETCH_FAILED, String(error)),\n };\n }\n },\n []\n );\n\n return {\n preloadedCampaignsRef,\n preloadedWebView,\n setPreloadedWebView,\n preloadCampaign,\n consumePreloadedCampaign,\n isPreloadValid,\n };\n}\n","import type { ServerProductInfo } from \"../types/campaign\";\nimport type { Product } from \"../types/purchase\";\n\nconst PERIOD_MAP: Record<string, string> = {\n P1Y: \"ano\",\n P1M: \"mês\",\n P1W: \"semana\",\n P3M: \"trimestre\",\n P6M: \"semestre\",\n};\n\nexport function buildProductFromServerInfo(info: ServerProductInfo): Product {\n const period = PERIOD_MAP[info.billingPeriod ?? \"\"] ?? \"\";\n const priceStr = info.price != null ? `R$ ${info.price.toFixed(2).replace(\".\", \",\")}` : \"\";\n return {\n productId: info.storeProductId,\n title: info.name,\n description: \"\",\n price: priceStr,\n priceValue: info.price ?? 0,\n currency: \"BRL\",\n localizedPrice: priceStr,\n type: \"subscription\",\n subscriptionPeriod: period,\n freeTrialPeriod: info.trialDays ? `${info.trialDays} dias` : undefined,\n };\n}\n","import { getIAPService } from \"../domains/iap/IAPService\";\nimport { buildProductFromServerInfo } from \"./serverProduct\";\nimport type { ServerProductInfo } from \"../types/campaign\";\nimport type { Product } from \"../types/purchase\";\n\nexport async function loadCampaignProducts(\n serverProducts: ServerProductInfo[],\n storeProductIds: string[]\n): Promise<Map<string, Product>> {\n const productsMap = new Map<string, Product>();\n\n if (storeProductIds.length > 0) {\n for (let attempt = 1; attempt <= 3; attempt++) {\n try {\n const storeProducts = await getIAPService().loadProducts(storeProductIds);\n if (storeProducts.length > 0) {\n for (const p of storeProducts) productsMap.set(p.productId, p as never);\n }\n if (productsMap.size >= storeProductIds.length) break;\n if (attempt < 3) await new Promise(r => setTimeout(r, 250 * Math.pow(2, attempt)));\n } catch { if (attempt < 3) await new Promise(r => setTimeout(r, 250 * Math.pow(2, attempt))); }\n }\n }\n\n for (const sp of serverProducts) {\n if (!productsMap.has(sp.storeProductId)) {\n const prod = buildProductFromServerInfo(sp);\n productsMap.set(prod.productId, prod as never);\n }\n }\n\n return productsMap;\n}\n","import type { Product } from \"../types/purchase\";\n\nexport interface PreloadedCampaign {\n campaignId: string;\n variantKey: string;\n paywall: {\n id: string;\n placement: string;\n config: Record<string, unknown>;\n primaryProductId?: string;\n secondaryProductId?: string;\n };\n products: Map<string, Product>;\n preloadedAt: number;\n}\n\nexport interface PreloadedWebView {\n placement: string;\n paywallId: string;\n craftData: string;\n products: Map<string, Product>;\n primaryProductId?: string;\n secondaryProductId?: string;\n loaded: boolean;\n campaignId?: string;\n variantKey?: string;\n}\n\nconst CACHE_TTL_MS = 5 * 60 * 1000;\n\nexport function isCacheEntryValid(entry: PreloadedCampaign | undefined): boolean {\n return !!entry && Date.now() - entry.preloadedAt < CACHE_TTL_MS;\n}\n\nexport function getCacheEntry(\n cache: Map<string, PreloadedCampaign>,\n placement: string\n): PreloadedCampaign | null {\n const entry = cache.get(placement);\n if (!isCacheEntryValid(entry)) return null;\n return entry ?? null;\n}\n","import { useCallback, useState } from \"react\";\n\nimport { getIAPService } from \"../domains/iap\";\nimport { PaywalloClient } from \"../core/PaywalloClient\";\nimport type { Product } from \"../types/purchase\";\n\ninterface UseProductLoaderReturn {\n products: Map<string, Product>;\n isLoadingProducts: boolean;\n refreshProducts: (productIds: string[]) => Promise<void>;\n}\n\nexport function useProductLoader(): UseProductLoaderReturn {\n const [products, setProducts] = useState<Map<string, Product>>(new Map());\n const [isLoadingProducts, setIsLoadingProducts] = useState(false);\n\n const refreshProducts = useCallback(async (productIds: string[]): Promise<void> => {\n setIsLoadingProducts(true);\n try {\n const iapService = getIAPService();\n const loaded = await iapService.loadProducts(productIds);\n const map = new Map<string, Product>();\n for (const p of loaded) map.set(p.productId, p);\n setProducts(map);\n } catch (error) {\n } finally {\n setIsLoadingProducts(false);\n }\n }, []);\n\n return { products, isLoadingProducts, refreshProducts };\n}\n","import { useCallback } from \"react\";\nimport type React from \"react\";\n\nimport { getIAPService } from \"../domains/iap\";\nimport { PaywalloClient } from \"../core/PaywalloClient\";\nimport type { PaywallResult } from \"../types\";\n\nimport type { PreloadedWebView } from \"./useCampaignPreload\";\nimport { usePaywallTracking } from \"../domains/paywall\";\n\ninterface UsePurchaseOrchestratorReturn {\n handlePreloadedPurchase: (productId: string) => Promise<void>;\n handlePreloadedRestore: () => Promise<void>;\n}\n\nexport function usePurchaseOrchestrator(\n preloadedWebView: PreloadedWebView | null,\n resolvePreloadedPaywall: (result: PaywallResult) => void,\n clearPreloadedWebView: () => void,\n setShowingPreloadedWebView: React.Dispatch<React.SetStateAction<boolean>>,\n presentedAtRef: React.MutableRefObject<number>,\n invalidateSubscriptionCache: () => void\n): UsePurchaseOrchestratorReturn {\n const { trackDismissed, trackProductSelected, trackPurchased } = usePaywallTracking();\n\n const handlePreloadedPurchase = useCallback(\n async (productId: string): Promise<void> => {\n try {\n if (preloadedWebView) {\n trackProductSelected({ placement: preloadedWebView.placement, paywallId: preloadedWebView.paywallId, productId, variantKey: preloadedWebView.variantKey, campaignId: preloadedWebView.campaignId });\n }\n\n const result = await getIAPService().purchase(productId, {\n paywallPlacement: preloadedWebView?.placement,\n variantKey: preloadedWebView?.variantKey,\n });\n if (!result.success) {\n if (result.error) {\n setShowingPreloadedWebView(false);\n clearPreloadedWebView();\n resolvePreloadedPaywall({ presented: true, purchased: false, cancelled: false, restored: false });\n }\n return;\n }\n\n if (preloadedWebView) {\n const durationSeconds = Math.round((Date.now() - presentedAtRef.current) / 1000);\n await trackDismissed({ placement: preloadedWebView.placement, paywallId: preloadedWebView.paywallId, durationSeconds, action: \"purchase\", variantKey: preloadedWebView.variantKey, campaignId: preloadedWebView.campaignId });\n await trackPurchased({ placement: preloadedWebView.placement, paywallId: preloadedWebView.paywallId, productId, variantKey: preloadedWebView.variantKey, campaignId: preloadedWebView.campaignId });\n }\n\n invalidateSubscriptionCache();\n setShowingPreloadedWebView(false);\n clearPreloadedWebView();\n resolvePreloadedPaywall({ presented: true, purchased: true, cancelled: false, restored: false });\n } catch (error) {\n setShowingPreloadedWebView(false);\n clearPreloadedWebView();\n resolvePreloadedPaywall({ presented: true, purchased: false, cancelled: false, restored: false });\n }\n },\n [preloadedWebView, resolvePreloadedPaywall, clearPreloadedWebView, setShowingPreloadedWebView, presentedAtRef, trackDismissed, trackProductSelected, trackPurchased, invalidateSubscriptionCache]\n );\n\n const handlePreloadedRestore = useCallback(async (): Promise<void> => {\n try {\n const transactions = await getIAPService().restore();\n if (transactions.length === 0) return;\n\n if (preloadedWebView) {\n const durationSeconds = Math.round((Date.now() - presentedAtRef.current) / 1000);\n await trackDismissed({ placement: preloadedWebView.placement, paywallId: preloadedWebView.paywallId, durationSeconds, action: \"restore\", variantKey: preloadedWebView.variantKey, campaignId: preloadedWebView.campaignId });\n }\n\n invalidateSubscriptionCache();\n setShowingPreloadedWebView(false);\n clearPreloadedWebView();\n resolvePreloadedPaywall({ presented: true, purchased: false, cancelled: false, restored: true });\n } catch (error) {\n setShowingPreloadedWebView(false);\n clearPreloadedWebView();\n resolvePreloadedPaywall({ presented: true, purchased: false, cancelled: false, restored: false });\n }\n }, [preloadedWebView, resolvePreloadedPaywall, clearPreloadedWebView, setShowingPreloadedWebView, presentedAtRef, trackDismissed, invalidateSubscriptionCache]);\n\n return { handlePreloadedPurchase, handlePreloadedRestore };\n}\n","import { useCallback, useRef, useState } from \"react\";\n\nimport { PaywalloClient } from \"../core/PaywalloClient\";\nimport { subscriptionCache } from \"../domains/subscription/SubscriptionCache\";\nimport type {\n SubscriptionInfo,\n SubscriptionStatusResponse as DomainStatusResponse,\n} from \"../domains/subscription/types\";\nimport type { Subscription, SubscriptionStatusResponse } from \"../types\";\n\nconst CACHE_TTL_MS = 5 * 60 * 1000;\n\ninterface CacheEntry {\n data: Subscription | null;\n expiresAt: number;\n}\n\nconst ACTIVE_STATUSES = [\"active\", \"grace_period\"];\n\ninterface UseSubscriptionSyncReturn {\n subscription: Subscription | null;\n hasActiveSubscription: () => Promise<boolean>;\n getSubscription: () => Promise<Subscription | null>;\n invalidateCache: () => void;\n}\n\nfunction toDomainSubscriptionInfo(sub: Subscription): SubscriptionInfo {\n return {\n id: \"\",\n productId: sub.productId,\n status: sub.status as SubscriptionInfo[\"status\"],\n expiresAt: sub.expiresAt ?? new Date(0),\n originalPurchaseDate: new Date(0),\n latestPurchaseDate: new Date(0),\n willRenew: sub.autoRenewEnabled,\n isTrial: false,\n isIntroductoryPeriod: false,\n platform: sub.platform,\n };\n}\n\nfunction toDomainResponse(status: SubscriptionStatusResponse): DomainStatusResponse {\n return {\n hasActiveSubscription: status.hasActiveSubscription,\n subscription: status.subscription\n ? toDomainSubscriptionInfo(status.subscription)\n : null,\n entitlements: [],\n };\n}\n\nfunction isSubscriptionStillActive(sub: { status: string; expiresAt: Date | null } | null): boolean {\n if (!sub) return false;\n if (!ACTIVE_STATUSES.includes(sub.status)) return false;\n if (sub.expiresAt && sub.expiresAt.getTime() !== 0 && sub.expiresAt < new Date()) return false;\n return true;\n}\n\nasync function resolveOfflineFromCache(distinctId: string): Promise<boolean> {\n try {\n const cached = await subscriptionCache.get(distinctId);\n if (!cached) return false;\n const sub = cached.data.subscription;\n return isSubscriptionStillActive(sub ? { status: sub.status, expiresAt: sub.expiresAt ?? null } : null);\n } catch {\n return false;\n }\n}\n\nfunction isActiveCacheEntry(entry: CacheEntry): boolean {\n return isSubscriptionStillActive(entry.data);\n}\n\nexport function useSubscriptionSync(): UseSubscriptionSyncReturn {\n const [subscription, setSubscription] = useState<Subscription | null>(null);\n const cacheRef = useRef<CacheEntry | null>(null);\n\n const invalidateCache = useCallback((): void => {\n cacheRef.current = null;\n const distinctId = PaywalloClient.getDistinctId();\n if (distinctId) void subscriptionCache.invalidate(distinctId);\n }, []);\n\n const fetchAndCache = useCallback(async (): Promise<Subscription | null> => {\n const apiClient = PaywalloClient.getApiClient();\n const distinctId = PaywalloClient.getDistinctId();\n if (!apiClient || !distinctId) return null;\n\n const status = await apiClient.getSubscriptionStatus(distinctId);\n const sub = status.subscription\n ? {\n ...status.subscription,\n expiresAt: status.subscription.expiresAt\n ? new Date(status.subscription.expiresAt)\n : null,\n }\n : null;\n\n cacheRef.current = { data: sub, expiresAt: Date.now() + CACHE_TTL_MS };\n setSubscription(sub);\n void subscriptionCache.set(distinctId, toDomainResponse(status));\n return sub;\n }, []);\n\n const hasActiveSubscription = useCallback(async (): Promise<boolean> => {\n const apiClient = PaywalloClient.getApiClient();\n const distinctId = PaywalloClient.getDistinctId();\n if (!apiClient || !distinctId) return false;\n\n const cached = cacheRef.current;\n if (cached && cached.expiresAt > Date.now()) {\n return isActiveCacheEntry(cached);\n }\n\n try {\n const persisted = await subscriptionCache.get(distinctId);\n if (persisted && !persisted.isStale) {\n const persistedSub = persisted.data.subscription;\n const sub = persistedSub\n ? {\n productId: persistedSub.productId,\n status: persistedSub.status as Subscription[\"status\"],\n expiresAt: persistedSub.expiresAt ?? null,\n platform: persistedSub.platform,\n autoRenewEnabled: persistedSub.willRenew,\n inGracePeriod: persistedSub.status === \"grace_period\",\n }\n : null;\n const stillActive = isSubscriptionStillActive(sub);\n if (stillActive) {\n cacheRef.current = { data: sub, expiresAt: Date.now() + CACHE_TTL_MS };\n setSubscription(sub);\n return true;\n }\n }\n } catch {\n }\n\n try {\n const status = await apiClient.getSubscriptionStatus(distinctId);\n const sub = status.subscription\n ? {\n ...status.subscription,\n expiresAt: status.subscription.expiresAt\n ? new Date(status.subscription.expiresAt)\n : null,\n }\n : null;\n cacheRef.current = { data: sub, expiresAt: Date.now() + CACHE_TTL_MS };\n setSubscription(sub);\n void subscriptionCache.set(distinctId, toDomainResponse(status));\n return status.hasActiveSubscription;\n } catch {\n return await resolveOfflineFromCache(distinctId);\n }\n }, []);\n\n const getSubscription = useCallback(async (): Promise<Subscription | null> => {\n const apiClient = PaywalloClient.getApiClient();\n const distinctId = PaywalloClient.getDistinctId();\n if (!apiClient || !distinctId) return null;\n\n const cached = cacheRef.current;\n if (cached && cached.expiresAt > Date.now()) return cached.data;\n\n try {\n return await fetchAndCache();\n } catch {\n try {\n const persisted = await subscriptionCache.get(distinctId);\n if (!persisted?.data.subscription) return null;\n const s = persisted.data.subscription;\n const normalisedStatus = (s.status as string) === \"grace_period\"\n ? \"in_grace_period\" as Subscription[\"status\"]\n : s.status as Subscription[\"status\"];\n return {\n productId: s.productId,\n status: normalisedStatus,\n expiresAt: s.expiresAt ?? null,\n platform: s.platform,\n autoRenewEnabled: s.willRenew,\n inGracePeriod: normalisedStatus === \"in_grace_period\",\n };\n } catch {\n return null;\n }\n }\n }, [fetchAndCache]);\n\n return { subscription, hasActiveSubscription, getSubscription, invalidateCache };\n}\n","import type { Product } from \"../types/purchase\";\nimport type { VariableContext } from \"./variableResolver\";\n\nexport function getProductVariable(product: Product | undefined, property: string): string {\n if (!product) return \"\";\n\n switch (property) {\n case \"id\": return product.productId;\n case \"name\": return product.title;\n case \"price\": return product.localizedPrice;\n case \"pricePerMonth\": return product.pricePerMonth ?? product.localizedPrice;\n case \"pricePerWeek\": return product.pricePerWeek ?? \"\";\n case \"pricePerDay\": return product.pricePerDay ?? \"\";\n case \"period\": return product.subscriptionPeriod ?? \"\";\n case \"trialPeriod\": return product.freeTrialPeriod ?? \"\";\n case \"introPrice\": return product.introductoryPrice ?? \"\";\n case \"savings\": return product.savings ?? \"\";\n case \"savingsPercent\": return product.savingsPercent ?? \"\";\n case \"hasFreeTrial\": return product.freeTrialPeriod ? \"true\" : \"false\";\n case \"hasIntroOffer\": return product.introductoryPrice ? \"true\" : \"false\";\n case \"renewalPeriod\": return product.subscriptionPeriod ?? \"\";\n default: return \"\";\n }\n}\n\nexport function resolveProductsVariable(parts: string[], context: VariableContext): string | null {\n if (parts[0] !== \"products\") return null;\n\n if (parts[1] === \"selected\" && context.selectedProductId) {\n return getProductVariable(context.products.get(context.selectedProductId), parts[2]);\n }\n if (parts[1] === \"primary\" && context.primaryProductId) {\n return getProductVariable(context.products.get(context.primaryProductId), parts[2]);\n }\n if (parts[1] === \"secondary\" && context.secondaryProductId) {\n return getProductVariable(context.products.get(context.secondaryProductId), parts[2]);\n }\n if (parts[1] === \"hasIntroductoryOffer\") {\n return Array.from(context.products.values()).some((p) => p.introductoryPrice) ? \"true\" : \"false\";\n }\n\n return null;\n}\n\nexport function resolveLegacyVariable(variableName: string, context: VariableContext): string | null {\n if (variableName === \"device_name\") return context.deviceInfo?.name ?? \"\";\n if (variableName === \"product_price\" && context.selectedProductId) {\n return context.products.get(context.selectedProductId)?.localizedPrice ?? \"\";\n }\n if (variableName === \"trial_period\" && context.selectedProductId) {\n return context.products.get(context.selectedProductId)?.freeTrialPeriod ?? \"\";\n }\n return null;\n}\n","import type { Product } from \"../types/purchase\";\nimport { resolveProductsVariable, resolveLegacyVariable } from \"./productVariableResolver\";\n\nexport interface VariableContext {\n selectedProductId?: string;\n primaryProductId?: string;\n secondaryProductId?: string;\n products: Map<string, Product>;\n customVariables?: Record<string, string>;\n deviceInfo?: {\n name?: string;\n model?: string;\n os?: string;\n osVersion?: string;\n locale?: string;\n };\n userInfo?: {\n id?: string;\n name?: string;\n email?: string;\n };\n}\n\nfunction resolveVariable(variableName: string, context: VariableContext): string {\n const parts = variableName.split(\".\");\n\n if (parts[0] === \"device\" && context.deviceInfo) {\n switch (parts[1]) {\n case \"name\": return context.deviceInfo.name ?? \"\";\n case \"model\": return context.deviceInfo.model ?? \"\";\n case \"os\": return context.deviceInfo.os ?? \"\";\n case \"osVersion\": return context.deviceInfo.osVersion ?? \"\";\n case \"locale\": return context.deviceInfo.locale ?? \"\";\n default: return \"\";\n }\n }\n\n if (parts[0] === \"user\" && context.userInfo) {\n switch (parts[1]) {\n case \"id\": return context.userInfo.id ?? \"\";\n case \"name\": return context.userInfo.name ?? \"\";\n case \"email\": return context.userInfo.email ?? \"\";\n default: return \"\";\n }\n }\n\n if (parts[0] === \"products\") {\n return resolveProductsVariable(parts, context) ?? \"\";\n }\n\n return resolveLegacyVariable(variableName, context) ?? context.customVariables?.[variableName] ?? \"\";\n}\n\nexport function resolveText(text: string, context: VariableContext): string {\n const regex = /\\{\\{([^}]+)\\}\\}/g;\n return text.replace(regex, (_, variableName: string) => {\n return resolveVariable(variableName.trim(), context);\n });\n}\n\nexport function parseVariables(text: string): string[] {\n const regex = /\\{\\{([^}]+)\\}\\}/g;\n const variables: string[] = [];\n let match;\n while ((match = regex.exec(text)) !== null) {\n variables.push(match[1].trim());\n }\n return variables;\n}\n\nexport function hasVariables(text: string): boolean {\n return /\\{\\{[^}]+\\}\\}/.test(text);\n}\n","import { PaywalloClient } from \"./core/PaywalloClient\";\n\nexport { PaywallModal } from \"./domains/paywall\";\nexport { PaywalloContext, type PreloadResult } from \"./context/PaywalloContext\";\nexport { PaywallContext, usePaywallContext } from \"./domains/paywall\";\nexport { AffiliateManager, affiliateManager } from \"./domains/affiliate\";\nexport { ApiClient, type ApiClientConfig } from \"./core/ApiClient\";\nexport {\n HttpClient,\n type HttpClientConfig,\n type HttpResponse,\n type RequestOptions,\n type RetryConfig,\n} from \"./core/http\";\nexport { getIAPService, IAPService } from \"./domains/iap\";\nexport { IdentityManager, identityManager, type IdentityState } from \"./domains/identity\";\nexport { nativeStoreKit } from \"./domains/iap\";\nexport {\n type NetworkListener,\n networkMonitor,\n type NetworkMonitorConfig,\n type NetworkState,\n} from \"./core/network\";\nexport {\n type IPaywalloClient,\n PaywalloClient,\n type PaywalloInitConfig,\n type PreloadCampaignResult,\n} from \"./core/PaywalloClient\";\nexport { PaywalloAffiliate } from \"./domains/affiliate\";\nexport {\n offlineQueue,\n type OfflineQueueConfig,\n type QueueEvent,\n type QueueItem,\n type QueueListener,\n queueProcessor,\n type QueueProcessorConfig,\n} from \"./core/queue\";\nexport {\n type SessionConfig,\n SessionManager,\n sessionManager,\n type SessionState,\n} from \"./domains/session\";\nexport {\n AFFILIATE_ERROR_CODES,\n AffiliateError,\n ANALYTICS_ERROR_CODES,\n AnalyticsError,\n CAMPAIGN_ERROR_CODES,\n CampaignError,\n createPurchaseError,\n IDENTITY_ERROR_CODES,\n IdentityError,\n PaywalloError,\n PAYWALL_ERROR_CODES,\n PaywallError,\n PURCHASE_ERROR_CODES,\n PurchaseError,\n SESSION_ERROR_CODES,\n SessionError,\n} from \"./errors\";\nexport { usePaywallo } from \"./hooks/usePaywallo\";\nexport { useProducts } from \"./hooks/useProducts\";\nexport { usePurchase } from \"./hooks/usePurchase\";\nexport { useSubscription } from \"./hooks/useSubscription\";\nexport { PaywalloProvider, type PaywalloProviderProps } from \"./PaywalloProvider\";\nexport type {\n IAPProduct,\n IAPPurchase,\n ProductPriceInfo,\n PurchaseControllerConfig,\n PurchaseState,\n} from \"./domains/iap\";\nexport { ERROR_CODES } from \"./domains/iap\";\nexport type {\n CachedSubscription,\n SubscriptionInfo,\n SubscriptionManagerConfig,\n} from \"./domains/subscription\";\nexport { SubscriptionCache, subscriptionManager } from \"./domains/subscription\";\nexport type {\n AffiliateBalance,\n PaywallErrorStrings,\n AffiliateCommission,\n AffiliateCoupon,\n BlockType,\n BoxSpacing,\n CampaignPresentOptions,\n CampaignResponse,\n CampaignResult,\n ConditionalFlagContext,\n ConditionalFlagResult,\n Environment,\n FlagVariant,\n IdentifyOptions,\n LocalizedText,\n PaywalloConfig,\n PaywallBlockConfig,\n PaywallConfig,\n PaywallNode,\n PaywallPresentOptions,\n PaywallResult,\n PaywallState,\n Product,\n Purchase,\n PurchaseResult,\n RestoreResult,\n Subscription,\n SubscriptionPlatform,\n SubscriptionStatus,\n SubscriptionStatusResponse,\n TapBehavior,\n TrackEventOptions,\n UserProperties,\n ValidatePurchaseResponse,\n WithdrawalRequest,\n} from \"./types\";\nexport {\n detectDeviceLanguage,\n getCurrentLanguage,\n getDefaultLanguage,\n getLocalizedString,\n initLocalization,\n setCurrentLanguage,\n setDefaultLanguage,\n} from \"./utils/localization\";\nexport type { VariableContext } from \"./utils/variableResolver\";\nexport { hasVariables, parseVariables, resolveText } from \"./utils/variableResolver\";\n\nexport const Paywallo = PaywalloClient;\nexport default Paywallo;\n"],"mappings":"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","names":["useCallback","useEffect","useRef","useState","Animated","Dimensions","StyleSheet","View","useCallback","Platform","Platform","useCallback","useRef","useState","useState","useRef","NativeModules","Platform","useCallback","useEffect","useRef","useState","NativeModules","NativeModules","useRef","useState","useEffect","useCallback","jsx","SCREEN_HEIGHT","Dimensions","View","styles","useRef","Animated","useState","useCallback","useEffect","StyleSheet","useCallback","useEffect","useRef","useState","useState","useRef","useEffect","useCallback","Platform","Platform","Platform","AsyncStorage","AsyncStorage","item","Platform","Platform","idfv","Dimensions","Platform","Platform","AppState","AppState","AsyncStorage","Dimensions","Platform","createContext","useContext","useContext","useCallback","useEffect","useState","useState","useCallback","useEffect","useCallback","useState","useState","useCallback","useCallback","useEffect","useState","useState","useCallback","useEffect","useCallback","useEffect","useMemo","useRef","useState","Animated","Dimensions","Easing","StyleSheet","useCallback","useRef","useState","useState","useRef","useCallback","useCallback","useState","useState","useCallback","useCallback","useCallback","useCallback","useRef","useState","CACHE_TTL_MS","useState","useRef","useCallback","jsx","jsxs","useState","useCallback","useRef","useEffect","SCREEN_HEIGHT","useMemo","Dimensions","Animated","Easing","r","styles","StyleSheet"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/uuid.ts","../src/errors/PaywalloError.ts","../src/domains/analytics/AnalyticsError.ts","../src/errors/ClientError.ts","../src/domains/paywall/PaywallModal.tsx","../src/domains/paywall/usePaywallActions.ts","../src/domains/iap/IAPService.ts","../src/domains/iap/PurchaseError.ts","../src/domains/iap/NativeStoreKit.ts","../src/domains/identity/IdentityManager.ts","../src/domains/identity/IdentityError.ts","../src/core/storage/SecureStorage.ts","../src/domains/paywall/usePaywallTracking.ts","../src/domains/paywall/usePaywallLoader.ts","../src/domains/paywall/PaywallError.ts","../src/utils/localization.ts","../src/domains/paywall/PaywallWebView.tsx","../src/domains/paywall/parseWebViewMessage.ts","../src/domains/paywall/paywallScripts.ts","../src/domains/paywall/PaywallErrorBoundary.tsx","../src/domains/paywall/PaywallContext.ts","../src/domains/paywall/usePaywallPresenter.ts","../src/domains/affiliate/AffiliateError.ts","../src/domains/affiliate/affiliateHttp.ts","../src/domains/affiliate/affiliateDateMappers.ts","../src/domains/affiliate/AffiliateManager.ts","../src/domains/affiliate/PaywalloAffiliate.ts","../src/domains/subscription/SubscriptionCache.ts","../src/domains/subscription/SubscriptionManager.ts","../src/domains/session/SessionError.ts","../src/core/ApiClient.ts","../src/core/apiUrlUtils.ts","../src/domains/iap/apiPurchaseMethods.ts","../src/core/http/types.ts","../src/core/http/HttpClient.ts","../src/core/network/NetworkMonitor.ts","../src/core/network/types.ts","../src/core/queue/OfflineQueue.ts","../src/core/queue/deduplication.ts","../src/core/queue/types.ts","../src/core/queue/QueueProcessor.ts","../src/core/ApiCache.ts","../src/domains/campaign/CampaignError.ts","../src/domains/campaign/CampaignGateService.ts","../src/domains/identity/AdvertisingIdManager.ts","../src/domains/identity/InstallTracker.ts","../src/domains/identity/MetaBridge.ts","../src/domains/identity/InstallReferrerManager.ts","../src/domains/session/SessionManager.ts","../src/domains/session/sessionTracking.ts","../src/core/PaywalloClient.ts","../src/context/PaywalloContext.ts","../src/hooks/usePaywallo.ts","../src/hooks/useProducts.ts","../src/utils/productMappers.ts","../src/hooks/usePurchase.ts","../src/hooks/useSubscription.ts","../src/PaywalloProvider.tsx","../src/hooks/useCampaignPreload.ts","../src/utils/serverProduct.ts","../src/utils/loadCampaignProducts.ts","../src/utils/preloadCache.ts","../src/hooks/useProductLoader.ts","../src/hooks/usePurchaseOrchestrator.ts","../src/hooks/useSubscriptionSync.ts","../src/utils/productVariableResolver.ts","../src/utils/variableResolver.ts","../src/index.ts"],"sourcesContent":["export function generateUUID(): string {\n const template = \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\";\n return template.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n","export class PaywalloError extends Error {\n readonly code: string;\n readonly domain: string;\n\n constructor(domain: string, code: string, message: string) {\n super(message);\n this.name = \"PaywalloError\";\n this.domain = domain;\n this.code = code;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import { PaywalloError } from \"../../errors/PaywalloError\";\n\nexport class AnalyticsError extends PaywalloError {\n constructor(code: string, message: string) {\n super(\"analytics\", code, message);\n this.name = \"AnalyticsError\";\n }\n}\n\nexport const ANALYTICS_ERROR_CODES = {\n NOT_INITIALIZED: \"ANALYTICS_NOT_INITIALIZED\",\n INVALID_STEP_INDEX: \"ANALYTICS_INVALID_STEP_INDEX\",\n INVALID_ACTION_NAME: \"ANALYTICS_INVALID_ACTION_NAME\",\n} as const;\n","import { PaywalloError } from \"./PaywalloError\";\n\nexport class ClientError extends PaywalloError {\n constructor(code: string, message: string) {\n super(\"client\", code, message);\n this.name = \"ClientError\";\n }\n}\n\nexport const CLIENT_ERROR_CODES = {\n NOT_INITIALIZED: \"CLIENT_NOT_INITIALIZED\",\n MISSING_APP_KEY: \"CLIENT_MISSING_APP_KEY\",\n INVALID_EVENT_NAME: \"CLIENT_INVALID_EVENT_NAME\",\n PROVIDER_MISSING: \"CLIENT_PROVIDER_MISSING\",\n UNKNOWN: \"CLIENT_UNKNOWN\",\n} as const;\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n Animated,\n Dimensions,\n Easing,\n Modal,\n Pressable,\n StyleSheet,\n Text,\n View,\n} from \"react-native\";\n\nimport { usePaywallActions } from \"./usePaywallActions\";\nimport { usePaywallLoader } from \"./usePaywallLoader\";\nimport type { PaywallResult } from \"../../types\";\nimport type { Product } from \"../../types/purchase\";\nimport { PaywalloClient } from \"../../core/PaywalloClient\";\nimport { getSdkString } from \"../../utils/localization\";\n\nimport { PaywallWebView } from \"./PaywallWebView\";\n\nconst SCREEN_HEIGHT = Dimensions.get(\"window\").height;\n\ninterface ErrorFallbackProps {\n description: string;\n onRetry: () => void;\n onClose: () => void;\n}\n\nfunction ErrorFallback({ description, onRetry, onClose }: ErrorFallbackProps): React.ReactElement {\n const overrides = PaywalloClient.getConfig()?.errorStrings;\n const title = overrides?.title ?? getSdkString(\"paywallErrorTitle\");\n const retryLabel = overrides?.retry ?? getSdkString(\"paywallRetryButton\");\n const closeLabel = overrides?.close ?? getSdkString(\"paywallCloseButton\");\n\n return (\n <View style={styles.fallbackContainer}>\n <View style={styles.fallbackCard}>\n <Text style={styles.fallbackTitle}>{title}</Text>\n <Text style={styles.fallbackDescription}>{description}</Text>\n <Pressable style={styles.retryButton} onPress={onRetry}>\n <Text style={styles.retryButtonText}>{retryLabel}</Text>\n </Pressable>\n <Pressable style={styles.closeButton} onPress={onClose}>\n <Text style={styles.closeButtonText}>{closeLabel}</Text>\n </Pressable>\n </View>\n </View>\n );\n}\n\ninterface PaywallModalProps {\n placement: string;\n visible: boolean;\n onResult: (result: PaywallResult) => void;\n paywallConfig?: {\n id: string;\n placement: string;\n config: Record<string, unknown>;\n primaryProductId?: string;\n secondaryProductId?: string;\n };\n preloadedProducts?: Map<string, Product>;\n variantKey?: string;\n campaignId?: string;\n}\n\nexport function PaywallModal({\n placement,\n visible,\n onResult,\n paywallConfig: preloadedConfig,\n preloadedProducts,\n variantKey,\n campaignId,\n}: PaywallModalProps): React.ReactElement | null {\n const { paywallConfig, products, error } = usePaywallLoader(\n placement,\n visible,\n preloadedConfig,\n preloadedProducts,\n variantKey,\n campaignId\n );\n\n const openAnim = useRef(new Animated.Value(SCREEN_HEIGHT)).current;\n const [modalVisible, setModalVisible] = useState(false);\n\n const handleResult = useCallback((result: PaywallResult) => {\n setModalVisible(false);\n onResult(result);\n }, [onResult]);\n\n const { isPurchasing, slideAnim, handleClose, handlePurchase, handleRestore } =\n usePaywallActions(placement, paywallConfig, handleResult, variantKey, campaignId, openAnim);\n\n const [webViewError, setWebViewError] = useState<{\n code: number;\n description: string;\n } | null>(null);\n const [retryCount, setRetryCount] = useState(0);\n\n const retryCountRef = useRef(0);\n\n const handleWebViewError = useCallback(\n (err: { code: number; description: string; url?: string }) => {\n if (retryCountRef.current >= 1) {\n setWebViewError({ code: err.code, description: err.description });\n } else {\n retryCountRef.current += 1;\n setRetryCount(retryCountRef.current);\n }\n },\n []\n );\n\n const handleRetry = useCallback(() => {\n retryCountRef.current = 0;\n setWebViewError(null);\n setRetryCount(0);\n }, []);\n\n useEffect(() => {\n if (visible) {\n setModalVisible(true);\n openAnim.setValue(SCREEN_HEIGHT);\n Animated.timing(openAnim, {\n toValue: 0,\n duration: 550,\n easing: Easing.out(Easing.cubic),\n useNativeDriver: true,\n }).start();\n }\n }, [visible, openAnim]);\n\n if (!modalVisible && !visible) return null;\n\n return (\n <Modal\n visible={modalVisible}\n animationType=\"none\"\n presentationStyle=\"overFullScreen\"\n onRequestClose={handleClose}\n transparent\n statusBarTranslucent\n >\n <View style={styles.overlay}>\n <Animated.View style={[styles.animatedContainer, { transform: [{ translateY: openAnim }] }]}>\n <View style={styles.container}>\n {error && (\n <View style={styles.errorContainer}>\n <Text style={styles.errorText}>{error.message}</Text>\n </View>\n )}\n\n {!error && paywallConfig && \"craftData\" in paywallConfig.config && (\n <>\n {webViewError ? (\n <ErrorFallback\n description={webViewError.description}\n onRetry={handleRetry}\n onClose={handleClose}\n />\n ) : (\n <PaywallWebView\n key={retryCount}\n paywallId={paywallConfig.id}\n craftData={paywallConfig.config.craftData}\n products={products}\n primaryProductId={paywallConfig.primaryProductId}\n secondaryProductId={paywallConfig.secondaryProductId}\n isPurchasing={isPurchasing}\n onClose={handleClose}\n onPurchase={handlePurchase}\n onRestore={handleRestore}\n onError={handleWebViewError}\n />\n )}\n </>\n )}\n </View>\n </Animated.View>\n </View>\n </Modal>\n );\n}\n\nconst styles = StyleSheet.create({\n overlay: { flex: 1, backgroundColor: \"rgba(0,0,0,0.3)\" },\n animatedContainer: { flex: 1, backgroundColor: \"#fff\" },\n container: { flex: 1, backgroundColor: \"#fff\" },\n errorContainer: { flex: 1, justifyContent: \"center\", alignItems: \"center\", padding: 20 },\n errorText: { fontSize: 16, color: \"#ef4444\", textAlign: \"center\" },\n fallbackContainer: {\n flex: 1, justifyContent: \"center\", alignItems: \"center\",\n backgroundColor: \"#111010\", padding: 24,\n },\n fallbackCard: {\n width: \"100%\", maxWidth: 360, alignItems: \"center\",\n backgroundColor: \"rgba(255,255,255,0.07)\", borderRadius: 16, padding: 28,\n },\n fallbackTitle: {\n fontSize: 18, fontWeight: \"600\", color: \"#f5f5f5\",\n marginBottom: 10, textAlign: \"center\",\n },\n fallbackDescription: {\n fontSize: 14, color: \"rgba(255,255,255,0.55)\",\n textAlign: \"center\", marginBottom: 28, lineHeight: 20,\n },\n retryButton: {\n width: \"100%\", backgroundColor: \"#ffffff\", borderRadius: 10,\n paddingVertical: 14, alignItems: \"center\", marginBottom: 12,\n },\n retryButtonText: { fontSize: 15, fontWeight: \"600\", color: \"#111010\" },\n closeButton: {\n width: \"100%\", borderRadius: 10, paddingVertical: 14,\n alignItems: \"center\", backgroundColor: \"rgba(255,255,255,0.1)\",\n },\n closeButtonText: { fontSize: 15, fontWeight: \"500\", color: \"rgba(255,255,255,0.7)\" },\n});\n","import { useCallback, useRef, useState } from \"react\";\nimport { Animated, Dimensions } from \"react-native\";\n\nimport { PaywalloClient } from \"../../core/PaywalloClient\";\nimport { getIAPService } from \"../iap/IAPService\";\nimport type { PaywallConfig, PaywallResult } from \"../../types\";\n\nimport { usePaywallTracking } from \"./usePaywallTracking\";\n\nconst SCREEN_HEIGHT = Dimensions.get(\"window\").height;\n\nexport interface UsePaywallActionsResult {\n isPurchasing: boolean;\n slideAnim: Animated.Value;\n handleClose: () => void;\n handlePurchase: (productId: string) => Promise<void>;\n handleRestore: () => Promise<void>;\n}\n\nexport function usePaywallActions(\n placement: string,\n paywallConfig: PaywallConfig | null,\n onResult: (result: PaywallResult) => void,\n variantKey?: string,\n campaignId?: string,\n openAnim?: Animated.Value\n): UsePaywallActionsResult {\n const [isPurchasing, setIsPurchasing] = useState(false);\n const [isClosing, setIsClosing] = useState(false);\n const slideAnim = useRef(new Animated.Value(0)).current;\n const presentedAtRef = useRef<number>(Date.now());\n const { trackDismissed, trackProductSelected, trackPurchased } = usePaywallTracking();\n\n const handleClose = useCallback(() => {\n if (isClosing) return;\n setIsClosing(true);\n const animTarget = openAnim ?? slideAnim;\n Animated.timing(animTarget, { toValue: SCREEN_HEIGHT, duration: 350, useNativeDriver: true }).start(() => {\n if (paywallConfig) {\n const durationSeconds = Math.round((Date.now() - presentedAtRef.current) / 1000);\n void trackDismissed({ placement, paywallId: paywallConfig.id, durationSeconds, action: \"close\", variantKey, campaignId });\n }\n slideAnim.setValue(0);\n setIsClosing(false);\n onResult({ presented: true, purchased: false, cancelled: true, restored: false });\n });\n }, [isClosing, openAnim, onResult, paywallConfig, placement, slideAnim, trackDismissed, variantKey, campaignId]);\n\n const handlePurchase = useCallback(async (productId: string) => {\n if (isPurchasing) return;\n setIsPurchasing(true);\n try {\n if (paywallConfig) trackProductSelected({ placement, paywallId: paywallConfig.id, productId, variantKey, campaignId });\n const result = await getIAPService().purchase(productId, { paywallPlacement: placement, variantKey });\n if (result.success) {\n if (paywallConfig) {\n const durationSeconds = Math.round((Date.now() - presentedAtRef.current) / 1000);\n await trackDismissed({ placement, paywallId: paywallConfig.id, durationSeconds, action: \"purchase\", variantKey, campaignId });\n await trackPurchased({ placement, paywallId: paywallConfig.id, productId, variantKey, campaignId });\n }\n onResult({ presented: true, purchased: true, cancelled: false, restored: false });\n } else if (result.error) {\n onResult({ presented: true, purchased: false, cancelled: false, restored: false });\n }\n } catch (error) {\n onResult({ presented: true, purchased: false, cancelled: false, restored: false });\n } finally {\n setIsPurchasing(false);\n }\n }, [isPurchasing, onResult, paywallConfig, placement, trackDismissed, trackProductSelected, trackPurchased, variantKey, campaignId]);\n\n const handleRestore = useCallback(async () => {\n if (isPurchasing) return;\n setIsPurchasing(true);\n try {\n const transactions = await getIAPService().restore();\n if (transactions.length > 0) {\n if (paywallConfig) {\n const durationSeconds = Math.round((Date.now() - presentedAtRef.current) / 1000);\n await trackDismissed({ placement, paywallId: paywallConfig.id, durationSeconds, action: \"restore\", variantKey, campaignId });\n }\n onResult({ presented: true, purchased: false, cancelled: false, restored: true });\n } else {\n onResult({ presented: true, purchased: false, cancelled: false, restored: false });\n }\n } catch (error) {\n onResult({ presented: true, purchased: false, cancelled: false, restored: false });\n } finally {\n setIsPurchasing(false);\n }\n }, [isPurchasing, onResult, paywallConfig, placement, trackDismissed, variantKey, campaignId]);\n\n return { isPurchasing, slideAnim, handleClose, handlePurchase, handleRestore };\n}\n","import { Platform } from \"react-native\";\n\nimport { PURCHASE_ERROR_CODES, PurchaseError } from \"./PurchaseError\";\nimport type { Product, Purchase, PurchaseResult, ValidatePurchaseResponse } from \"../../types/purchase\";\n\nimport { ApiClient } from \"../../core/ApiClient\";\nimport { nativeStoreKit as NativeStoreKit } from \"./NativeStoreKit\";\nimport { PaywalloClient } from \"../../core/PaywalloClient\";\n\nexport class IAPService {\n private productsCache: Map<string, Product> = new Map();\n private apiClient: ApiClient | null = null;\n\n constructor(apiClient?: ApiClient) {\n this.apiClient = apiClient ?? null;\n }\n\n private get debug(): boolean {\n return PaywalloClient.getConfig()?.debug ?? false;\n }\n\n private getDeviceCountry(): string {\n try {\n const locale = Intl.DateTimeFormat().resolvedOptions().locale;\n const parts = locale.split(\"-\");\n return parts[parts.length - 1]?.toUpperCase() || \"US\";\n } catch {\n return \"US\";\n }\n }\n\n private getApiClient(): ApiClient {\n if (this.apiClient) return this.apiClient;\n const client = PaywalloClient.getApiClient();\n if (!client)\n throw new PurchaseError(PURCHASE_ERROR_CODES.NOT_INITIALIZED, \"SDK not initialized\");\n return client;\n }\n\n isAvailable(): boolean {\n return NativeStoreKit.isAvailable();\n }\n\n async loadProducts(productIds: string[]): Promise<Product[]> {\n if (!NativeStoreKit.isAvailable()) {\n return [];\n }\n\n try {\n const products = await NativeStoreKit.getProducts(productIds);\n for (const product of products) {\n this.productsCache.set(product.productId, product);\n }\n return products;\n } catch (err) {\n if (PaywalloClient.getConfig()?.debug) console.warn('[Paywallo] loadProducts failed', err);\n return [];\n }\n }\n\n getProduct(productId: string): Product | undefined {\n return this.productsCache.get(productId);\n }\n\n getCachedProducts(): Map<string, Product> {\n return new Map(this.productsCache);\n }\n\n private async validateWithRetry(\n attempt: () => Promise<ValidatePurchaseResponse>,\n maxRetries = 2,\n delayMs = 3000\n ): Promise<ValidatePurchaseResponse> {\n let lastError: unknown;\n for (let i = 0; i <= maxRetries; i++) {\n try {\n return await attempt();\n } catch (error) {\n lastError = error;\n if (i < maxRetries) await new Promise<void>((resolve) => setTimeout(resolve, delayMs));\n }\n }\n throw lastError;\n }\n\n private async validateWithServer(\n purchase: Purchase,\n productId: string,\n options?: { paywallPlacement?: string; variantKey?: string }\n ): Promise<ValidatePurchaseResponse> {\n const apiClient = this.getApiClient();\n const product = this.productsCache.get(productId);\n const platform = Platform.OS as \"ios\" | \"android\";\n const distinctId = PaywalloClient.getDistinctId();\n\n return this.validateWithRetry(\n () => apiClient.validatePurchase(\n platform,\n purchase.receipt,\n purchase.productId,\n purchase.transactionId,\n product?.priceValue ?? 0,\n product?.currency ?? \"USD\",\n this.getDeviceCountry(),\n distinctId,\n options?.paywallPlacement,\n options?.variantKey\n )\n );\n }\n\n private async finishTransaction(transactionId: string): Promise<void> {\n try {\n await NativeStoreKit.finishTransaction(transactionId);\n } catch (err) {\n if (PaywalloClient.getConfig()?.debug) console.warn('[Paywallo] finishTransaction failed', err);\n }\n }\n\n async purchase(\n productId: string,\n options?: { paywallPlacement?: string; variantKey?: string }\n ): Promise<PurchaseResult> {\n if (!NativeStoreKit.isAvailable()) {\n return {\n success: false,\n error: new PurchaseError(PURCHASE_ERROR_CODES.STORE_NOT_AVAILABLE, \"In-app purchases are not available on this device\"),\n };\n }\n\n const debug = PaywalloClient.getConfig()?.debug;\n if (debug) console.info(`[Paywallo PURCHASE] starting ${productId}`);\n try {\n const purchase = await NativeStoreKit.purchase(productId);\n\n if (!purchase) {\n if (debug) console.info(`[Paywallo PURCHASE] ${productId} cancelled`);\n return { success: false };\n }\n\n if (debug) console.info(`[Paywallo PURCHASE] ${productId} approved`, { transactionId: purchase.transactionId });\n\n await this.finishTransaction(purchase.transactionId);\n if (debug) console.info(`[Paywallo PURCHASE] ${productId} finished`);\n\n this.validateWithServer(purchase, productId, options)\n .then(() => { if (debug) console.info(`[Paywallo PURCHASE] ${productId} server validated`); })\n .catch((err) => { if (debug) console.warn(\"[Paywallo PURCHASE] background validation failed\", err); });\n\n return { success: true, purchase };\n } catch (error) {\n if (debug) console.warn(`[Paywallo PURCHASE] ${productId} failed`, error);\n const e = error instanceof PurchaseError ? error : new PurchaseError(PURCHASE_ERROR_CODES.PURCHASE_FAILED, error instanceof Error ? error.message : String(error));\n return { success: false, error: e };\n }\n }\n\n async restore(): Promise<Purchase[]> {\n if (!NativeStoreKit.isAvailable()) {\n return [];\n }\n\n try {\n const transactions = await NativeStoreKit.getActiveTransactions();\n\n const apiClient = this.getApiClient();\n const distinctId = PaywalloClient.getDistinctId();\n const platform = Platform.OS as \"ios\" | \"android\";\n\n const results = await Promise.allSettled(\n transactions.map((tx) => {\n const product = this.productsCache.get(tx.productId);\n return apiClient.validatePurchase(\n platform,\n tx.receipt,\n tx.productId,\n tx.transactionId,\n product?.priceValue ?? 0,\n product?.currency ?? \"USD\",\n this.getDeviceCountry(),\n distinctId\n );\n })\n );\n\n const validated: Purchase[] = [];\n for (let i = 0; i < results.length; i++) {\n const r = results[i];\n const tx = transactions[i];\n if (r.status === \"fulfilled\" && r.value.success) {\n try {\n await NativeStoreKit.finishTransaction(tx.transactionId);\n } catch (err) {\n if (PaywalloClient.getConfig()?.debug) console.warn('[Paywallo] finishTransaction failed', err);\n }\n validated.push(tx);\n }\n }\n\n return validated;\n } catch (err) {\n if (PaywalloClient.getConfig()?.debug) console.warn('[Paywallo] restore failed', err);\n return [];\n }\n }\n}\n\nlet _instance: IAPService | null = null;\n\nexport function getIAPService(): IAPService {\n if (!_instance) {\n _instance = new IAPService();\n }\n return _instance;\n}\n","import { PaywalloError } from \"../../errors/PaywalloError\";\n\nexport class PurchaseError extends PaywalloError {\n readonly userCancelled: boolean;\n\n constructor(code: string, message: string, userCancelled = false) {\n super(\"purchase\", code, message);\n this.name = \"PurchaseError\";\n this.userCancelled = userCancelled;\n }\n}\n\nexport const PURCHASE_ERROR_CODES = {\n NOT_INITIALIZED: \"PURCHASE_NOT_INITIALIZED\",\n PRODUCT_NOT_FOUND: \"PRODUCT_NOT_FOUND\",\n PURCHASE_FAILED: \"PURCHASE_FAILED\",\n RESTORE_FAILED: \"RESTORE_FAILED\",\n VALIDATION_FAILED: \"VALIDATION_FAILED\",\n USER_CANCELLED: \"USER_CANCELLED\",\n NETWORK_ERROR: \"PURCHASE_NETWORK_ERROR\",\n STORE_ERROR: \"PURCHASE_STORE_ERROR\",\n PENDING_PURCHASE: \"PURCHASE_PENDING\",\n DEFERRED_PURCHASE: \"PURCHASE_DEFERRED\",\n STORE_NOT_AVAILABLE: \"PURCHASE_STORE_NOT_AVAILABLE\",\n} as const;\n\nconst DEFAULT_MESSAGES: Record<keyof typeof PURCHASE_ERROR_CODES, string> = {\n NOT_INITIALIZED: \"Purchase controller not initialized. Call init() first.\",\n PRODUCT_NOT_FOUND: \"Product not found in store.\",\n PURCHASE_FAILED: \"Purchase failed. Please try again.\",\n RESTORE_FAILED: \"Failed to restore purchases. Please try again.\",\n VALIDATION_FAILED: \"Failed to validate purchase with server.\",\n USER_CANCELLED: \"Purchase was cancelled.\",\n NETWORK_ERROR: \"Network error. Please check your connection.\",\n STORE_ERROR: \"Store error. Please try again later.\",\n PENDING_PURCHASE: \"Purchase is pending approval.\",\n DEFERRED_PURCHASE: \"Purchase is deferred (e.g., parental approval required).\",\n STORE_NOT_AVAILABLE: \"In-app purchases are not available on this device.\",\n};\n\nexport function createPurchaseError(\n code: keyof typeof PURCHASE_ERROR_CODES,\n message?: string\n): PurchaseError {\n return new PurchaseError(\n PURCHASE_ERROR_CODES[code],\n message ?? DEFAULT_MESSAGES[code] ?? \"Unknown purchase error\",\n code === \"USER_CANCELLED\"\n );\n}\n","import { NativeModules, Platform } from \"react-native\";\n\nimport { PURCHASE_ERROR_CODES, PurchaseError } from \"./PurchaseError\";\nimport { identityManager } from \"../identity/IdentityManager\";\nimport { PaywalloClient } from \"../../core/PaywalloClient\";\nimport type { Product, Purchase } from \"../../types/purchase\";\n\ninterface NativeStoreKitModule {\n getProducts(productIds: string[]): Promise<NativeProduct[]>;\n purchase(productId: string, appAccountToken: string | null): Promise<NativePurchaseResult | null>;\n finishTransaction(transactionId: string): Promise<void>;\n getActiveTransactions(): Promise<NativePurchaseResult[]>;\n}\n\ninterface NativeProduct {\n productId: string;\n title: string;\n description: string;\n price: string;\n priceValue: number;\n currency: string;\n localizedPrice: string;\n type: string;\n subscriptionPeriod?: string;\n introductoryPrice?: string;\n introductoryPriceValue?: number;\n freeTrialPeriod?: string;\n}\n\ninterface NativePurchaseResult {\n transactionId: string;\n productId: string;\n receipt: string;\n transactionDate: number;\n pending?: boolean;\n}\n\nconst PaywalloStoreKitNative: NativeStoreKitModule | null =\n (NativeModules.PaywalloStoreKit as NativeStoreKitModule | undefined) ?? null;\n\nfunction isAvailable(): boolean {\n return PaywalloStoreKitNative != null;\n}\n\nfunction mapNativeProduct(native: NativeProduct): Product {\n const product: Product = {\n productId: native.productId,\n title: native.title,\n description: native.description,\n price: native.price,\n priceValue: native.priceValue,\n currency: native.currency ?? \"USD\",\n localizedPrice: native.localizedPrice,\n type: mapProductType(native.type),\n subscriptionPeriod: native.subscriptionPeriod,\n introductoryPrice: native.introductoryPrice,\n introductoryPriceValue: native.introductoryPriceValue,\n freeTrialPeriod: native.freeTrialPeriod,\n };\n\n if (native.subscriptionPeriod) {\n const prices = calculatePerPeriodPrices(native.priceValue, native.subscriptionPeriod);\n product.pricePerMonth = prices.perMonth;\n product.pricePerWeek = prices.perWeek;\n product.pricePerDay = prices.perDay;\n }\n\n return product;\n}\n\nfunction mapProductType(type: string): Product[\"type\"] {\n switch (type) {\n case \"subscription\":\n case \"autoRenewable\":\n return \"subscription\";\n case \"consumable\":\n return \"consumable\";\n default:\n return \"non_consumable\";\n }\n}\n\nfunction calculatePerPeriodPrices(\n priceValue: number,\n period: string\n): { perMonth?: string; perWeek?: string; perDay?: string } {\n const totalDays = periodToDays(period);\n if (totalDays <= 0) return {};\n\n const perDay = priceValue / totalDays;\n const perWeek = perDay * 7;\n const perMonth = perDay * 30;\n\n return {\n perDay: perDay.toFixed(2),\n perWeek: perWeek.toFixed(2),\n perMonth: perMonth.toFixed(2),\n };\n}\n\nfunction periodToDays(period: string): number {\n const match = period.match(/^P(\\d+)([DWMY])$/);\n if (!match) return 0;\n\n const value = parseInt(match[1], 10);\n switch (match[2]) {\n case \"D\":\n return value;\n case \"W\":\n return value * 7;\n case \"M\":\n return value * 30;\n case \"Y\":\n return value * 365;\n default:\n return 0;\n }\n}\n\nfunction mapNativePurchase(native: NativePurchaseResult): Purchase {\n return {\n productId: native.productId,\n transactionId: native.transactionId,\n transactionDate: native.transactionDate,\n receipt: native.receipt,\n platform: Platform.OS as \"ios\" | \"android\",\n };\n}\n\nexport const nativeStoreKit = {\n isAvailable,\n\n async getProducts(productIds: string[]): Promise<Product[]> {\n if (!PaywalloStoreKitNative) {\n return [];\n }\n const nativeProducts = await PaywalloStoreKitNative.getProducts(productIds);\n return nativeProducts.map(mapNativeProduct);\n },\n\n async purchase(productId: string): Promise<Purchase | null> {\n if (!PaywalloStoreKitNative) {\n throw new PurchaseError(\n PURCHASE_ERROR_CODES.STORE_NOT_AVAILABLE,\n \"StoreKit native module not available\"\n );\n }\n const distinctId = identityManager.getDistinctId();\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n if (distinctId && !uuidRegex.test(distinctId) && PaywalloClient.getConfig()?.debug) {\n console.warn(\"[Paywallo] distinctId is not a valid UUID for appAccountToken:\", distinctId);\n }\n try {\n const result = await PaywalloStoreKitNative.purchase(productId, distinctId ?? null);\n if (!result || result.pending) {\n return null;\n }\n return mapNativePurchase(result);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n if (message.toLowerCase().includes(\"cancel\")) {\n throw new PurchaseError(PURCHASE_ERROR_CODES.USER_CANCELLED, message, true);\n }\n throw new PurchaseError(PURCHASE_ERROR_CODES.PURCHASE_FAILED, message);\n }\n },\n\n async finishTransaction(transactionId: string): Promise<void> {\n if (!PaywalloStoreKitNative) return;\n try {\n await PaywalloStoreKitNative.finishTransaction(transactionId);\n } catch (err) {\n if (PaywalloClient.getConfig()?.debug) console.warn(\"[Paywallo] finishTransaction native error\", err);\n }\n },\n\n async getActiveTransactions(): Promise<Purchase[]> {\n if (!PaywalloStoreKitNative) return [];\n try {\n const results = await PaywalloStoreKitNative.getActiveTransactions();\n return results.map(mapNativePurchase);\n } catch (err) {\n if (PaywalloClient.getConfig()?.debug) console.warn(\"[Paywallo] getActiveTransactions failed\", err);\n return [];\n }\n },\n};\n\n/** @deprecated Use `nativeStoreKit` (camelCase) */\nexport const NativeStoreKit = nativeStoreKit;\n","import DeviceInfo from \"react-native-device-info\";\n\nimport { IDENTITY_ERROR_CODES, IdentityError } from \"./IdentityError\";\nimport type { IdentifyOptions, UserProperties } from \"../../types\";\nimport { generateUUID } from \"../../utils/uuid\";\n\nimport { ApiClient } from \"../../core/ApiClient\";\nimport { SecureStorage } from \"../../core/storage/SecureStorage\";\n\nconst DEVICE_ID_KEY = \"device_id\";\nconst ANON_ID_KEY = \"anon_id\";\nconst USER_EMAIL_KEY = \"user_email\";\nconst USER_PROPERTIES_KEY = \"user_properties\";\n\nexport interface IdentityState {\n deviceId: string;\n email: string | null;\n properties: UserProperties;\n}\n\nexport class IdentityManager {\n private deviceId: string | null = null;\n private anonId: string | null = null;\n private email: string | null = null;\n private properties: UserProperties = {};\n private apiClient: ApiClient | null = null;\n private secureStorage: SecureStorage | null = null;\n private debug = false;\n private initialized = false;\n\n async initialize(apiClient: ApiClient, debug = false): Promise<string> {\n if (this.initialized) {\n return this.deviceId ?? \"\";\n }\n\n this.apiClient = apiClient;\n this.debug = debug;\n this.secureStorage = new SecureStorage(debug);\n\n await this.loadPersistedState();\n\n if (!this.deviceId) {\n try {\n this.deviceId = await DeviceInfo.getUniqueId();\n } catch {\n this.deviceId = generateUUID();\n }\n const stored = await this.secureStorage.set(DEVICE_ID_KEY, this.deviceId);\n if (!stored) {\n await this.secureStorage.set(\"device_id_fallback\", this.deviceId).catch(() => { /* non-critical */ });\n }\n }\n\n if (!this.anonId) {\n this.anonId = \"$paywallo_anon:\" + generateUUID();\n await this.secureStorage.set(ANON_ID_KEY, this.anonId).catch(() => { /* non-critical */ });\n }\n\n this.initialized = true;\n return this.deviceId ?? \"\";\n }\n\n async identify(options?: IdentifyOptions | UserProperties): Promise<void> {\n this.ensureInitialized();\n\n let email: string | undefined;\n let properties: UserProperties | undefined;\n\n if (options) {\n if (\"email\" in options || \"properties\" in options) {\n email = (options as IdentifyOptions).email;\n properties = (options as IdentifyOptions).properties;\n } else {\n properties = options as UserProperties;\n }\n }\n\n if (email) {\n this.email = email;\n await this.secureStorage!.set(USER_EMAIL_KEY, email);\n }\n\n if (properties) {\n this.properties = { ...this.properties, ...properties };\n await this.secureStorage!.set(USER_PROPERTIES_KEY, JSON.stringify(this.properties));\n }\n\n if (this.apiClient && this.anonId) {\n try {\n await this.apiClient.identify(this.anonId, properties, email, this.deviceId ?? undefined);\n } catch { /* non-critical */ }\n }\n }\n\n getDistinctId(): string {\n if (!this.initialized || !this.anonId) {\n return \"\";\n }\n return this.anonId;\n }\n\n getDeviceId(): string | null {\n return this.deviceId;\n }\n\n getEmail(): string | null {\n return this.email;\n }\n\n getProperties(): UserProperties {\n return { ...this.properties };\n }\n\n async updateProperties(properties: UserProperties): Promise<void> {\n this.ensureInitialized();\n\n this.properties = { ...this.properties, ...properties };\n await this.secureStorage!.set(USER_PROPERTIES_KEY, JSON.stringify(this.properties));\n\n if (this.apiClient && this.anonId) {\n try {\n await this.apiClient.identify(this.anonId, this.properties, this.email ?? undefined, this.deviceId ?? undefined);\n } catch { /* non-critical */ }\n }\n }\n\n async reset(): Promise<void> {\n const newAnonId = \"$paywallo_anon:\" + generateUUID();\n this.anonId = newAnonId;\n this.email = null;\n this.properties = {};\n\n await Promise.all([\n this.secureStorage?.set(ANON_ID_KEY, newAnonId) ?? Promise.resolve(false),\n this.secureStorage?.remove(USER_EMAIL_KEY) ?? Promise.resolve(false),\n this.secureStorage?.remove(USER_PROPERTIES_KEY) ?? Promise.resolve(false),\n ]);\n }\n\n getState(): IdentityState {\n return {\n deviceId: this.deviceId ?? \"\",\n email: this.email,\n properties: this.getProperties(),\n };\n }\n\n isSecureStorageAvailable(): boolean {\n return this.secureStorage !== null;\n }\n\n private async loadPersistedState(): Promise<void> {\n if (!this.secureStorage) {\n return;\n }\n\n const [storedDeviceId, storedAnonId, storedEmail, storedPropertiesJson] = await Promise.all([\n this.secureStorage.get(DEVICE_ID_KEY),\n this.secureStorage.get(ANON_ID_KEY),\n this.secureStorage.get(USER_EMAIL_KEY),\n this.secureStorage.get(USER_PROPERTIES_KEY),\n ]);\n\n if (storedDeviceId) {\n this.deviceId = storedDeviceId;\n } else {\n const fallbackDeviceId = await this.secureStorage.get(\"device_id_fallback\");\n if (fallbackDeviceId) {\n this.deviceId = fallbackDeviceId;\n }\n }\n\n if (storedAnonId) {\n this.anonId = storedAnonId;\n }\n\n if (storedEmail) {\n this.email = storedEmail;\n }\n\n if (storedPropertiesJson) {\n try {\n this.properties = JSON.parse(storedPropertiesJson) as UserProperties;\n } catch {\n this.properties = {};\n }\n }\n }\n\n private ensureInitialized(): void {\n if (!this.initialized) {\n throw new IdentityError(\n IDENTITY_ERROR_CODES.NOT_INITIALIZED,\n \"IdentityManager not initialized. Call initialize() first\"\n );\n }\n }\n\n}\n\nexport const identityManager = new IdentityManager();\n","import { PaywalloError } from \"../../errors/PaywalloError\";\n\nexport class IdentityError extends PaywalloError {\n constructor(code: string, message: string) {\n super(\"identity\", code, message);\n this.name = \"IdentityError\";\n }\n}\n\nexport const IDENTITY_ERROR_CODES = {\n NOT_INITIALIZED: \"IDENTITY_NOT_INITIALIZED\",\n DEVICE_ID_UNAVAILABLE: \"IDENTITY_DEVICE_ID_UNAVAILABLE\",\n STORAGE_READ_FAILED: \"IDENTITY_STORAGE_READ_FAILED\",\n STORAGE_WRITE_FAILED: \"IDENTITY_STORAGE_WRITE_FAILED\",\n IDENTIFY_FAILED: \"IDENTITY_IDENTIFY_FAILED\",\n} as const;\n","import AsyncStorage from \"@react-native-async-storage/async-storage\";\nimport Keychain from \"react-native-keychain\";\n\nconst KEYCHAIN_SERVICE_PREFIX = \"com.paywallo.sdk.\";\n\nexport class SecureStorage {\n // eslint-disable-next-line @typescript-eslint/no-useless-constructor\n constructor(_debug = false) {}\n\n async get(key: string): Promise<string | null> {\n const keychainValue = await this.getFromKeychain(key);\n if (keychainValue) {\n return keychainValue;\n }\n\n try {\n const value = await AsyncStorage.getItem(`@paywallo:${key}`);\n if (value) {\n await this.setToKeychain(key, value);\n }\n return value;\n } catch {\n return null;\n }\n }\n\n async set(key: string, value: string): Promise<boolean> {\n try {\n await Promise.all([\n AsyncStorage.setItem(`@paywallo:${key}`, value),\n this.setToKeychain(key, value),\n ]);\n return true;\n } catch {\n return false;\n }\n }\n\n async remove(key: string): Promise<boolean> {\n try {\n await Promise.all([\n AsyncStorage.removeItem(`@paywallo:${key}`),\n this.removeFromKeychain(key),\n ]);\n return true;\n } catch {\n return false;\n }\n }\n\n hasKeychainSupport(): boolean {\n return true;\n }\n\n private async getFromKeychain(key: string): Promise<string | null> {\n try {\n const result = await Keychain.getGenericPassword({ service: `${KEYCHAIN_SERVICE_PREFIX}${key}` });\n if (result && result.password) {\n return result.password;\n }\n return null;\n } catch {\n return null;\n }\n }\n\n private async setToKeychain(key: string, value: string): Promise<boolean> {\n try {\n await Keychain.setGenericPassword(\"panel\", value, { service: `${KEYCHAIN_SERVICE_PREFIX}${key}` });\n return true;\n } catch {\n return false;\n }\n }\n\n private async removeFromKeychain(key: string): Promise<boolean> {\n try {\n await Keychain.resetGenericPassword({ service: `${KEYCHAIN_SERVICE_PREFIX}${key}` });\n return true;\n } catch {\n return false;\n }\n }\n\n}\n\nexport const secureStorage = new SecureStorage();\n","import { useCallback } from \"react\";\n\nimport { PaywalloClient } from \"../../core/PaywalloClient\";\n\ninterface TrackDismissedOptions {\n placement: string;\n paywallId: string;\n durationSeconds: number;\n action: \"close\" | \"purchase\" | \"restore\";\n variantKey?: string;\n campaignId?: string;\n}\n\ninterface TrackProductSelectedOptions {\n placement: string;\n paywallId: string;\n productId: string;\n variantKey?: string;\n campaignId?: string;\n}\n\ninterface TrackPurchasedOptions {\n placement: string;\n paywallId: string;\n productId: string;\n variantKey?: string;\n campaignId?: string;\n}\n\nexport interface UsePaywallTrackingResult {\n trackDismissed: (opts: TrackDismissedOptions) => Promise<void>;\n trackProductSelected: (opts: TrackProductSelectedOptions) => void;\n trackPurchased: (opts: TrackPurchasedOptions) => Promise<void>;\n}\n\nexport function usePaywallTracking(): UsePaywallTrackingResult {\n const trackDismissed = useCallback(async (opts: TrackDismissedOptions): Promise<void> => {\n try {\n const api = PaywalloClient.getApiClient();\n if (!api) return;\n const sessionId = PaywalloClient.getSessionId();\n await api.trackEvent(\"$paywall_dismissed\", PaywalloClient.getDistinctId(), {\n placement: opts.placement,\n paywallId: opts.paywallId,\n durationSeconds: opts.durationSeconds,\n action: opts.action,\n ...(opts.variantKey && { variantKey: opts.variantKey }),\n ...(opts.campaignId && { campaignId: opts.campaignId }),\n ...(sessionId && { sessionId }),\n });\n } catch (err) {\n if (PaywalloClient.getConfig()?.debug) console.warn(\"[Paywallo] trackDismissed failed\", err);\n }\n }, []);\n\n const trackProductSelected = useCallback((opts: TrackProductSelectedOptions): void => {\n const api = PaywalloClient.getApiClient();\n if (!api) return;\n const sessionId = PaywalloClient.getSessionId();\n void api.trackEvent(\"$paywall_product_selected\", PaywalloClient.getDistinctId(), {\n placement: opts.placement,\n paywallId: opts.paywallId,\n productId: opts.productId,\n ...(opts.variantKey && { variantKey: opts.variantKey }),\n ...(opts.campaignId && { campaignId: opts.campaignId }),\n ...(sessionId && { sessionId }),\n }).catch((err) => { if (PaywalloClient.getConfig()?.debug) console.warn(\"[Paywallo] trackProductSelected failed\", err); });\n }, []);\n\n const trackPurchased = useCallback(async (opts: TrackPurchasedOptions): Promise<void> => {\n try {\n const api = PaywalloClient.getApiClient();\n if (!api) return;\n const sessionId = PaywalloClient.getSessionId();\n await api.trackEvent(\"$paywall_purchased\", PaywalloClient.getDistinctId(), {\n placement: opts.placement,\n paywallId: opts.paywallId,\n productId: opts.productId,\n ...(opts.variantKey && { variantKey: opts.variantKey }),\n ...(opts.campaignId && { campaignId: opts.campaignId }),\n ...(sessionId && { sessionId }),\n });\n } catch (err) {\n if (PaywalloClient.getConfig()?.debug) console.warn(\"[Paywallo] trackPurchased failed\", err);\n }\n }, []);\n\n return { trackDismissed, trackProductSelected, trackPurchased };\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport { PaywalloClient } from \"../../core/PaywalloClient\";\nimport { getIAPService } from \"../iap/IAPService\";\nimport { PAYWALL_ERROR_CODES, PaywallError } from \"./PaywallError\";\nimport type { PaywallConfig } from \"../../types\";\nimport type { Product } from \"../../types/purchase\";\n\ninterface PreloadedConfig {\n id: string;\n placement: string;\n config: Record<string, unknown>;\n primaryProductId?: string;\n secondaryProductId?: string;\n}\n\ninterface UsePaywallLoaderResult {\n paywallConfig: PaywallConfig | null;\n products: Map<string, Product>;\n error: Error | null;\n}\n\nexport function usePaywallLoader(\n placement: string,\n visible: boolean,\n preloadedConfig?: PreloadedConfig,\n preloadedProducts?: Map<string, Product>,\n variantKey?: string,\n campaignId?: string\n): UsePaywallLoaderResult {\n const [error, setError] = useState<Error | null>(null);\n const [paywallConfig, setPaywallConfig] = useState<PaywallConfig | null>(null);\n const [products, setProducts] = useState<Map<string, Product>>(new Map());\n const preloadedConfigRef = useRef(preloadedConfig);\n preloadedConfigRef.current = preloadedConfig;\n const preloadedProductsRef = useRef(preloadedProducts);\n preloadedProductsRef.current = preloadedProducts;\n const trackingDoneRef = useRef(false);\n\n useEffect(() => {\n if (!visible) { trackingDoneRef.current = false; return; }\n\n const load = async () => {\n setError(null);\n try {\n const apiClient = PaywalloClient.getApiClient();\n if (!apiClient) throw new PaywallError(PAYWALL_ERROR_CODES.NOT_INITIALIZED, \"SDK not initialized\");\n\n let config: PaywallConfig;\n const snap = preloadedConfigRef.current;\n if (snap) {\n config = { id: snap.id, placement: snap.placement, config: snap.config as { craftData: string },\n primaryProductId: snap.primaryProductId, secondaryProductId: snap.secondaryProductId };\n } else {\n const fetched = await apiClient.getPaywall(placement);\n if (!fetched) throw new PaywallError(PAYWALL_ERROR_CODES.NOT_FOUND, `Paywall not found for placement: ${placement}`);\n config = fetched;\n }\n setPaywallConfig(config);\n\n const productIds: string[] = [];\n if (config.primaryProductId) productIds.push(config.primaryProductId);\n if (config.secondaryProductId) productIds.push(config.secondaryProductId);\n\n const snapProducts = preloadedProductsRef.current;\n if (snapProducts && snapProducts.size > 0) {\n setProducts(snapProducts);\n } else if (productIds.length > 0) {\n try {\n const storeProducts = await getIAPService().loadProducts(productIds);\n const map = new Map<string, Product>();\n for (const p of storeProducts) map.set(p.productId, p);\n setProducts(map);\n } catch (err) {\n if (PaywalloClient.getConfig()?.debug) console.warn(\"[Paywallo] loadProducts in paywall failed\", err);\n setProducts(new Map());\n }\n } else {\n setProducts(new Map());\n }\n\n if (!trackingDoneRef.current) {\n trackingDoneRef.current = true;\n const sessionId = PaywalloClient.getSessionId();\n await apiClient.trackEvent(\"$paywall_viewed\", PaywalloClient.getDistinctId(), {\n placement, paywallId: config.id,\n ...(sessionId && { sessionId }),\n ...(variantKey && { variantKey }),\n ...(campaignId && { campaignId }),\n });\n }\n } catch (err) {\n const e = err instanceof Error ? err : new PaywallError(PAYWALL_ERROR_CODES.LOAD_FAILED, String(err));\n setError(e);\n }\n };\n\n void load();\n }, [placement, visible, variantKey, campaignId]);\n\n return { paywallConfig, products, error };\n}\n","import { PaywalloError } from \"../../errors/PaywalloError\";\n\nexport class PaywallError extends PaywalloError {\n constructor(code: string, message: string) {\n super(\"paywall\", code, message);\n this.name = \"PaywallError\";\n }\n}\n\nexport const PAYWALL_ERROR_CODES = {\n NOT_INITIALIZED: \"PAYWALL_NOT_INITIALIZED\",\n NOT_FOUND: \"PAYWALL_NOT_FOUND\",\n RENDER_FAILED: \"PAYWALL_RENDER_FAILED\",\n LOAD_FAILED: \"PAYWALL_LOAD_FAILED\",\n DISMISS_FAILED: \"PAYWALL_DISMISS_FAILED\",\n INVALID_CONFIG: \"PAYWALL_INVALID_CONFIG\",\n} as const;\n","import { NativeModules, Platform } from \"react-native\";\n\nimport type { LocalizedText } from \"../types/blocks\";\n\nlet currentLanguage = \"pt-BR\";\nlet defaultLanguage = \"pt-BR\";\n\nexport function setCurrentLanguage(language: string): void {\n currentLanguage = language;\n}\n\nexport function setDefaultLanguage(language: string): void {\n defaultLanguage = language;\n}\n\nexport function getCurrentLanguage(): string {\n return currentLanguage;\n}\n\nexport function getDefaultLanguage(): string {\n return defaultLanguage;\n}\n\nexport function getLocalizedString(text: string | LocalizedText | undefined): string {\n if (!text) return \"\";\n if (typeof text === \"string\") return text;\n\n return text[currentLanguage] ?? text[defaultLanguage] ?? Object.values(text)[0] ?? \"\";\n}\n\nexport function detectDeviceLanguage(): string {\n try {\n if (Platform.OS === \"ios\") {\n const settings = (\n NativeModules as {\n SettingsManager?: { settings?: { AppleLocale?: string; AppleLanguages?: string[] } };\n }\n ).SettingsManager?.settings;\n return settings?.AppleLocale ?? settings?.AppleLanguages?.[0] ?? \"en-US\";\n }\n\n return (\n (NativeModules as { I18nManager?: { localeIdentifier?: string } }).I18nManager\n ?.localeIdentifier ?? \"en-US\"\n );\n } catch {\n return \"en-US\";\n }\n}\n\nconst SDK_STRINGS = {\n paywallErrorTitle: {\n \"pt-BR\": \"Algo deu errado\",\n \"pt\": \"Algo deu errado\",\n \"en\": \"Something went wrong\",\n \"en-US\": \"Something went wrong\",\n \"en-GB\": \"Something went wrong\",\n \"es\": \"Algo salió mal\",\n \"es-419\": \"Algo salió mal\",\n },\n paywallRetryButton: {\n \"pt-BR\": \"Tentar novamente\",\n \"pt\": \"Tentar novamente\",\n \"en\": \"Try again\",\n \"en-US\": \"Try again\",\n \"en-GB\": \"Try again\",\n \"es\": \"Reintentar\",\n \"es-419\": \"Reintentar\",\n },\n paywallCloseButton: {\n \"pt-BR\": \"Fechar\",\n \"pt\": \"Fechar\",\n \"en\": \"Close\",\n \"en-US\": \"Close\",\n \"en-GB\": \"Close\",\n \"es\": \"Cerrar\",\n \"es-419\": \"Cerrar\",\n },\n} as const;\n\ntype SdkStringKey = keyof typeof SDK_STRINGS;\n\nexport function getSdkString(key: SdkStringKey): string {\n const map = SDK_STRINGS[key];\n const lang = currentLanguage as string;\n if (lang in map) return (map as Record<string, string>)[lang];\n const base = lang.split(\"-\")[0];\n if (base && base in map) return (map as Record<string, string>)[base];\n if (defaultLanguage in map) return (map as Record<string, string>)[defaultLanguage];\n return Object.values(map)[0];\n}\n\nexport function initLocalization(options?: {\n defaultLanguage?: string;\n detectDevice?: boolean;\n}): void {\n if (options?.defaultLanguage) {\n defaultLanguage = options.defaultLanguage;\n }\n\n if (options?.detectDevice !== false) {\n const deviceLanguage = detectDeviceLanguage();\n currentLanguage = deviceLanguage;\n }\n}\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n Linking,\n NativeEventEmitter,\n NativeModules,\n requireNativeComponent,\n StyleProp,\n StyleSheet,\n View,\n ViewStyle,\n} from \"react-native\";\n\nimport { PaywalloClient } from \"../../core/PaywalloClient\";\nimport type { Product } from \"../../types/purchase\";\nimport { deriveMessageId, parseWebViewMessage, WebViewMessage } from \"./parseWebViewMessage\";\nimport { buildPaywallInjectionScript, buildPurchaseStateScript } from \"./paywallScripts\";\n\ninterface NativeWebViewProps {\n sourceUrl: string;\n injectedJavaScript?: string;\n onMessage?: (event: { nativeEvent: { data: string } }) => void;\n onLoadEnd?: () => void;\n onError?: (event: { nativeEvent: Record<string, unknown> }) => void;\n style?: StyleProp<ViewStyle>;\n ref?: React.Ref<View>;\n}\n\ninterface WebViewError {\n code: number;\n description: string;\n url?: string;\n}\n\nlet NativeWebViewComponent: ReturnType<typeof requireNativeComponent<NativeWebViewProps>> | null =\n null;\n\nfunction getNativeWebView(): ReturnType<typeof requireNativeComponent<NativeWebViewProps>> {\n if (!NativeWebViewComponent) {\n NativeWebViewComponent = requireNativeComponent<NativeWebViewProps>(\"PaywalloWebView\");\n }\n return NativeWebViewComponent;\n}\n\nlet webViewEmitter: NativeEventEmitter | null = null;\nfunction getWebViewEmitter(): NativeEventEmitter {\n if (!webViewEmitter) {\n webViewEmitter = new NativeEventEmitter(NativeModules.PaywalloWebViewModule);\n }\n return webViewEmitter;\n}\n\nfunction parseErrorEvent(raw: Record<string, unknown>): WebViewError {\n return {\n code: typeof raw[\"code\"] === \"number\" ? raw[\"code\"] : -1,\n description: typeof raw[\"description\"] === \"string\" ? raw[\"description\"] : \"WebView error\",\n url: typeof raw[\"url\"] === \"string\" ? raw[\"url\"] : undefined,\n };\n}\n\ninterface PaywallWebViewProps {\n paywallId: string;\n craftData: string;\n products: Map<string, Product>;\n primaryProductId?: string;\n secondaryProductId?: string;\n isPurchasing: boolean;\n webUrl?: string | null;\n onPurchase: (productId: string) => void;\n onClose: () => void;\n onRestore: () => void;\n onReady?: () => void;\n onError?: (error: WebViewError) => void;\n}\n\nexport function PaywallWebView({\n paywallId,\n craftData,\n products,\n primaryProductId,\n secondaryProductId,\n isPurchasing,\n webUrl: webUrlProp,\n onPurchase,\n onClose,\n onRestore,\n onReady,\n onError,\n}: PaywallWebViewProps): React.ReactElement | null {\n const paywallDataSent = useRef(false);\n const loadEndReceived = useRef(false);\n const [scriptToInject, setScriptToInject] = useState<string | undefined>(undefined);\n const onErrorRef = useRef(onError);\n onErrorRef.current = onError;\n const onReadyRef = useRef(onReady);\n onReadyRef.current = onReady;\n\n const NativeWebView = useMemo(() => getNativeWebView(), []);\n\n const [resolvedWebUrl, setResolvedWebUrl] = useState<string | null>(\n () => webUrlProp ?? PaywalloClient.getWebUrl()\n );\n\n useEffect(() => {\n if (webUrlProp !== undefined) {\n setResolvedWebUrl(webUrlProp ?? null);\n return;\n }\n const url = PaywalloClient.getWebUrl();\n if (url) { setResolvedWebUrl(url); return; }\n const interval = setInterval(() => {\n const u = PaywalloClient.getWebUrl();\n if (u) { setResolvedWebUrl(u); clearInterval(interval); }\n }, 200);\n return () => clearInterval(interval);\n }, [webUrlProp]);\n\n useEffect(() => {\n if (!resolvedWebUrl) {\n onErrorRef.current?.({\n code: -1,\n description: \"Paywall URL not configured. SDK may not be initialized.\",\n });\n }\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n const buildAndSetInjectionScript = useCallback(() => {\n if (!craftData || paywallDataSent.current) return;\n paywallDataSent.current = true;\n const script = buildPaywallInjectionScript({\n craftData,\n products: Array.from(products.values()),\n primaryProductId,\n secondaryProductId,\n });\n setScriptToInject(script);\n }, [craftData, products, primaryProductId, secondaryProductId]);\n\n const processedIdsRef = useRef<Set<string>>(new Set());\n\n const handleParsedMessage = useCallback(\n (message: WebViewMessage) => {\n const msgId = deriveMessageId(message);\n if (processedIdsRef.current.has(msgId)) return;\n processedIdsRef.current.add(msgId);\n setTimeout(() => processedIdsRef.current.delete(msgId), 5_000);\n\n switch (message.type) {\n case \"ready\":\n if (!paywallDataSent.current) {\n buildAndSetInjectionScript();\n } else {\n onReadyRef.current?.();\n }\n break;\n case \"purchase\":\n if (message.payload?.productId) onPurchase(message.payload.productId);\n break;\n case \"close\":\n onClose();\n break;\n case \"restore\":\n onRestore();\n break;\n case \"open-url\":\n if (message.payload?.url) {\n const url = message.payload.url;\n if (/^https?:\\/\\//i.test(url) || /^mailto:/i.test(url)) {\n void Linking.openURL(url);\n }\n }\n break;\n }\n },\n [buildAndSetInjectionScript, onPurchase, onClose, onRestore]\n );\n\n useEffect(() => {\n const emitter = getWebViewEmitter();\n\n const loadEndSub = emitter.addListener(\"PaywalloWebViewLoadEnd\", () => {\n if (!loadEndReceived.current) {\n loadEndReceived.current = true;\n buildAndSetInjectionScript();\n }\n });\n\n const messageSub = emitter.addListener(\"PaywalloWebViewMessage\", (event: { data: string }) => {\n const message = parseWebViewMessage(event.data);\n if (message) handleParsedMessage(message);\n });\n\n const errorSub = emitter.addListener(\n \"PaywalloWebViewError\",\n (event: Record<string, unknown>) => {\n onErrorRef.current?.(parseErrorEvent(event));\n }\n );\n\n return () => {\n loadEndSub.remove();\n messageSub.remove();\n errorSub.remove();\n };\n }, [buildAndSetInjectionScript, handleParsedMessage]);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n if (!paywallDataSent.current) {\n onErrorRef.current?.({\n code: -1001,\n description: \"Paywall load timed out after 10 seconds\",\n });\n }\n }, 10_000);\n\n return () => clearTimeout(timer);\n }, []);\n\n const handleLoadEnd = useCallback(() => {\n if (!loadEndReceived.current) {\n loadEndReceived.current = true;\n buildAndSetInjectionScript();\n }\n }, [buildAndSetInjectionScript]);\n\n const handleNativeError = useCallback((event: { nativeEvent: Record<string, unknown> }) => {\n const ne = event.nativeEvent;\n let errorData: Record<string, unknown>;\n if (ne[\"payload\"] && typeof ne[\"payload\"] === \"object\") {\n errorData = ne[\"payload\"] as Record<string, unknown>;\n } else if (typeof ne[\"data\"] === \"string\") {\n try {\n errorData = JSON.parse(ne[\"data\"]) as Record<string, unknown>;\n } catch {\n errorData = {};\n }\n } else {\n errorData = {};\n }\n onErrorRef.current?.(parseErrorEvent(errorData));\n }, []);\n\n const handleMessage = useCallback(\n (event: { nativeEvent: { data: string } }) => {\n const message = parseWebViewMessage(event.nativeEvent.data);\n if (message) handleParsedMessage(message);\n },\n [handleParsedMessage]\n );\n\n useEffect(() => {\n if (!paywallDataSent.current) return;\n setScriptToInject(buildPurchaseStateScript(isPurchasing));\n }, [isPurchasing]);\n\n if (!resolvedWebUrl) return null;\n\n const paywallUrl = `${resolvedWebUrl}/paywall/${paywallId}`;\n\n return (\n <View style={styles.container}>\n <NativeWebView\n sourceUrl={paywallUrl}\n injectedJavaScript={scriptToInject}\n onMessage={handleMessage}\n onLoadEnd={handleLoadEnd}\n onError={handleNativeError}\n style={styles.webview}\n />\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: { flex: 1 },\n webview: { flex: 1, backgroundColor: \"transparent\" },\n});\n","export interface WebViewMessage {\n type: \"purchase\" | \"close\" | \"restore\" | \"select-product\" | \"open-url\" | \"ready\";\n id?: string;\n payload?: {\n productId?: string;\n url?: string;\n timestamp?: number;\n };\n}\n\nexport function deriveMessageId(message: WebViewMessage): string {\n if (message.id) return message.id;\n\n const payloadKey =\n message.payload?.productId ??\n message.payload?.url ??\n (message.payload?.timestamp != null ? String(message.payload.timestamp) : \"\");\n\n return `${message.type}:${payloadKey}`;\n}\n\nexport function parseWebViewMessage(raw: string): WebViewMessage | null {\n try {\n const parsed = JSON.parse(raw) as WebViewMessage;\n if (typeof parsed?.type !== \"string\") {\n return null;\n }\n return parsed;\n } catch {\n return null;\n }\n}\n","import type { Product } from \"../../types/purchase\";\n\ninterface PaywallInjectionData {\n craftData: string;\n products: Product[];\n primaryProductId?: string;\n secondaryProductId?: string;\n}\n\nexport function buildPaywallInjectionScript(data: PaywallInjectionData): string {\n const paywallData = {\n type: \"paywall\",\n data: {\n craftData: data.craftData,\n products: data.products,\n primaryProductId: data.primaryProductId,\n secondaryProductId: data.secondaryProductId,\n },\n };\n\n return `(function(){var d=${JSON.stringify(paywallData)},a=0,m=50;function t(){a++;if(window.receiveNativeMessage){window.receiveNativeMessage(d);return;}if(a<m){setTimeout(t,100);}}t();})();true;`;\n}\n\nexport function buildPurchaseStateScript(isPurchasing: boolean): string {\n return `if(window.receiveNativeMessage){window.receiveNativeMessage({type:\"purchaseState\",data:{isPurchasing:${isPurchasing}}});}true;`;\n}\n","import React, { Component } from \"react\";\nimport { PaywalloClient } from \"../../core/PaywalloClient\";\n\nexport class PaywallErrorBoundary extends Component<{ children: React.ReactNode }, { hasError: boolean }> {\n state = { hasError: false };\n static getDerivedStateFromError(): { hasError: boolean } { return { hasError: true }; }\n componentDidCatch(error: Error): void {\n if (PaywalloClient.getConfig()?.debug) console.error(\"[Paywallo] Paywall render error:\", error);\n try { PaywalloClient.getApiClient()?.reportError(\"PAYWALL_RENDER_ERROR\", error.message); } catch {}\n }\n render(): React.ReactNode { return this.state.hasError ? null : this.props.children; }\n}\n","import { createContext, useContext } from \"react\";\n\nimport { PAYWALL_ERROR_CODES, PaywallError } from \"./PaywallError\";\nimport type { PaywallNode, TapBehavior } from \"../../types/blocks\";\nimport type { Product } from \"../../types/purchase\";\n\nexport interface PaywallContextValue {\n nodes: Record<string, PaywallNode>;\n rootId: string;\n language: string;\n defaultLanguage: string;\n products: Map<string, Product>;\n selectedProductId: string | null;\n primaryProductId: string | null;\n secondaryProductId: string | null;\n currentNavigationIndex: number;\n currentTabIndex: number;\n trialEnabled: boolean;\n selectedPeriod: string | null;\n isPurchasing: boolean;\n exitOfferVisible: boolean;\n exitOfferTriggeredByBackButton: boolean;\n\n onClose: () => void;\n onTryClose: () => void;\n onSelectProduct: (productId: string) => void;\n onPurchase: (productId: string) => void;\n onRestore: () => void;\n onNavigate: (target: \"next\" | \"previous\" | \"first\" | \"last\" | number) => void;\n onSetTab: (index: number) => void;\n onSetVariable: (name: string, value: string) => void;\n onToggleTrial: (enabled: boolean) => void;\n onSelectPeriod: (value: string) => void;\n onOpenUrl: (url: string, inBrowser?: boolean) => void;\n onTapBehavior: (behavior: TapBehavior) => void;\n onShowExitOffer: () => void;\n onDismissExitOffer: () => void;\n onTriggerBackButton: () => void;\n}\n\nexport const PaywallContext = createContext<PaywallContextValue | null>(null);\n\nexport function usePaywallContext(): PaywallContextValue {\n const context = useContext(PaywallContext);\n if (!context) {\n throw new PaywallError(\n PAYWALL_ERROR_CODES.NOT_INITIALIZED,\n \"usePaywallContext must be used within a Paywall component\"\n );\n }\n return context;\n}\n","import type { Dispatch, MutableRefObject, SetStateAction } from \"react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { PaywalloClient } from \"../../core/PaywalloClient\";\nimport type { PaywallResult } from \"../../types\";\n\nimport type { PreloadedWebView } from \"../../hooks/useCampaignPreload\";\n\ntype SetPreloadedWebView = Dispatch<SetStateAction<PreloadedWebView | null>>;\n\ninterface UsePaywallPresenterReturn {\n showingPreloadedWebView: boolean;\n presentPreloadedWebView: () => Promise<PaywallResult>;\n resolvePreloadedPaywall: (result: PaywallResult) => void;\n handlePreloadedWebViewReady: () => void;\n handlePreloadedClose: () => void;\n setShowingPreloadedWebView: Dispatch<SetStateAction<boolean>>;\n presentedAtRef: MutableRefObject<number>;\n}\n\nexport function usePaywallPresenter(\n preloadedWebView: PreloadedWebView | null,\n setPreloadedWebView: SetPreloadedWebView\n): UsePaywallPresenterReturn {\n const [showingPreloadedWebView, setShowingPreloadedWebView] = useState(false);\n const resolverRef = useRef<((result: PaywallResult) => void) | null>(null);\n const presentedAtRef = useRef<number>(Date.now());\n\n useEffect(() => {\n return () => {\n if (resolverRef.current) {\n resolverRef.current({ presented: false, purchased: false, cancelled: true, restored: false });\n resolverRef.current = null;\n }\n };\n }, []);\n\n const presentPreloadedWebView = useCallback((): Promise<PaywallResult> => {\n return new Promise<PaywallResult>((resolve) => {\n resolverRef.current = resolve;\n presentedAtRef.current = Date.now();\n setShowingPreloadedWebView(true);\n });\n }, []);\n\n const resolvePreloadedPaywall = useCallback((result: PaywallResult): void => {\n if (resolverRef.current) { resolverRef.current(result); resolverRef.current = null; }\n }, []);\n\n const handlePreloadedWebViewReady = useCallback((): void => {\n setPreloadedWebView((prev) => (prev ? { ...prev, loaded: true } : null));\n }, [setPreloadedWebView]);\n\n const handlePreloadedClose = useCallback((): void => {\n const track = async (): Promise<void> => {\n try {\n const apiClient = PaywalloClient.getApiClient();\n if (!apiClient || !preloadedWebView) return;\n const sessionId = PaywalloClient.getSessionId();\n const durationSeconds = Math.round((Date.now() - presentedAtRef.current) / 1000);\n await apiClient.trackEvent(\"$paywall_dismissed\", PaywalloClient.getDistinctId(), {\n placement: preloadedWebView.placement,\n paywallId: preloadedWebView.paywallId,\n durationSeconds,\n action: \"close\",\n ...(sessionId && { sessionId }),\n ...(preloadedWebView.variantKey && { variantKey: preloadedWebView.variantKey }),\n ...(preloadedWebView.campaignId && { campaignId: preloadedWebView.campaignId }),\n });\n } catch {}\n };\n void track();\n setShowingPreloadedWebView(false);\n resolvePreloadedPaywall({ presented: true, purchased: false, cancelled: true, restored: false });\n }, [preloadedWebView, resolvePreloadedPaywall]);\n\n return { showingPreloadedWebView, presentPreloadedWebView, resolvePreloadedPaywall, handlePreloadedWebViewReady, handlePreloadedClose, setShowingPreloadedWebView, presentedAtRef };\n}\n","import { PaywalloError } from \"../../errors/PaywalloError\";\n\nexport class AffiliateError extends PaywalloError {\n constructor(code: string, message: string) {\n super(\"affiliate\", code, message);\n this.name = \"AffiliateError\";\n }\n}\n\nexport const AFFILIATE_ERROR_CODES = {\n NOT_INITIALIZED: \"AFFILIATE_NOT_INITIALIZED\",\n COUPON_REGISTER_FAILED: \"AFFILIATE_COUPON_REGISTER_FAILED\",\n COUPON_APPLY_FAILED: \"AFFILIATE_COUPON_APPLY_FAILED\",\n BALANCE_FETCH_FAILED: \"AFFILIATE_BALANCE_FETCH_FAILED\",\n WITHDRAWAL_FAILED: \"AFFILIATE_WITHDRAWAL_FAILED\",\n NETWORK_ERROR: \"AFFILIATE_NETWORK_ERROR\",\n} as const;\n","import type { ApiClient } from \"../../core/ApiClient\";\n\n/** Builds a query string from a params object, URL-encoding keys and values. */\nexport function buildQueryString(params?: Record<string, unknown>): string {\n if (!params) return \"\";\n const entries = Object.entries(params).filter(([, v]) => v !== undefined && v !== null);\n if (entries.length === 0) return \"\";\n return `?${entries.map(([k, v]) => `${k}=${encodeURIComponent(String(v))}`).join(\"&\")}`;\n}\n\n/** GET helper — returns the parsed response body. */\nexport async function affiliateGet<T>(\n apiClient: ApiClient,\n path: string,\n params?: Record<string, unknown>\n): Promise<T> {\n const response = await apiClient.get<T>(`${path}${buildQueryString(params)}`);\n return response.data;\n}\n\n/** POST helper — returns the parsed response body. */\nexport async function affiliatePost<T>(\n apiClient: ApiClient,\n path: string,\n body: Record<string, unknown>\n): Promise<T> {\n const response = await apiClient.post<T>(path, body);\n return response.data;\n}\n","import type { AffiliateCoupon, AffiliateCommission, WithdrawalRequest } from \"../../types\";\n\ntype RawCoupon = { code: string; status: string; createdAt: string };\ntype RawCommission = {\n id: string;\n referredDistinctId: string;\n purchaseAmount: number;\n commissionAmount: number;\n status: \"pending\" | \"eligible\" | \"ineligible\" | \"withdrawn\";\n createdAt: string;\n};\ntype RawWithdrawal = {\n id: string;\n amount: number;\n status: \"pending\" | \"approved\" | \"rejected\" | \"paid\";\n createdAt: string;\n};\n\nexport function mapRawCoupon(raw: RawCoupon): AffiliateCoupon {\n return { code: raw.code, status: raw.status, createdAt: new Date(raw.createdAt) };\n}\n\nexport function mapRawCommission(raw: RawCommission): AffiliateCommission {\n return { ...raw, createdAt: new Date(raw.createdAt) };\n}\n\nexport function mapRawWithdrawal(raw: RawWithdrawal): WithdrawalRequest {\n return { ...raw, createdAt: new Date(raw.createdAt) };\n}\n","import { AFFILIATE_ERROR_CODES, AffiliateError } from \"./AffiliateError\";\nimport type { AffiliateBalance, AffiliateCommission, AffiliateCoupon, WithdrawalRequest } from \"../../types\";\n\nimport { affiliateGet, affiliatePost } from \"./affiliateHttp\";\nimport { mapRawCommission, mapRawCoupon, mapRawWithdrawal } from \"./affiliateDateMappers\";\nimport { ApiClient } from \"../../core/ApiClient\";\nimport { identityManager } from \"../identity/IdentityManager\";\n\nexport class AffiliateManager {\n private apiClient: ApiClient | null = null;\n private debug = false;\n\n initialize(apiClient: ApiClient, debug = false): void {\n this.apiClient = apiClient;\n this.debug = debug;\n this.log(\"AffiliateManager initialized\");\n }\n\n async registerCoupon(code: string): Promise<{\n success: boolean;\n coupon?: AffiliateCoupon;\n error?: string;\n }> {\n this.ensureInitialized();\n\n const distinctId = identityManager.getDistinctId();\n\n try {\n const response = await this.post<{\n success: boolean;\n coupon?: {\n code: string;\n status: string;\n createdAt: string;\n };\n error?: string;\n }>(\"/api/v1/affiliate/register-coupon\", {\n code,\n distinctId,\n });\n\n if (response.success && response.coupon) {\n this.log(\"Coupon registered:\", code);\n return { success: true, coupon: mapRawCoupon(response.coupon) };\n }\n\n return {\n success: false,\n error: response.error,\n };\n } catch (error) {\n this.log(\"Failed to register coupon:\", error);\n return {\n success: false,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }\n\n async applyCoupon(code: string): Promise<{\n success: boolean;\n applied?: boolean;\n error?: string;\n }> {\n this.ensureInitialized();\n\n const distinctId = identityManager.getDistinctId();\n\n try {\n const response = await this.post<{\n success: boolean;\n applied?: boolean;\n error?: string;\n }>(\"/api/v1/affiliate/apply-coupon\", {\n code,\n distinctId,\n });\n\n if (response.success) {\n this.log(\"Coupon applied:\", code);\n }\n\n return response;\n } catch (error) {\n this.log(\"Failed to apply coupon:\", error);\n return {\n success: false,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }\n\n async getMyCoupon(): Promise<{ coupon: AffiliateCoupon | null }> {\n this.ensureInitialized();\n\n const distinctId = identityManager.getDistinctId();\n\n try {\n const response = await this.get<{\n coupon: {\n code: string;\n status: string;\n createdAt: string;\n } | null;\n }>(\"/api/v1/affiliate/my-coupon\", { distinctId });\n\n if (response.coupon) {\n return { coupon: mapRawCoupon(response.coupon) };\n }\n\n return { coupon: null };\n } catch (error) {\n this.log(\"Failed to get my coupon:\", error);\n return { coupon: null };\n }\n }\n\n async getAppliedCoupon(): Promise<{ coupon: { code: string } | null }> {\n this.ensureInitialized();\n\n const distinctId = identityManager.getDistinctId();\n\n try {\n const response = await this.get<{\n coupon: { code: string } | null;\n }>(\"/api/v1/affiliate/applied-coupon\", { distinctId });\n\n return response;\n } catch (error) {\n this.log(\"Failed to get applied coupon:\", error);\n return { coupon: null };\n }\n }\n\n async getBalance(): Promise<AffiliateBalance> {\n this.ensureInitialized();\n\n const distinctId = identityManager.getDistinctId();\n\n try {\n const response = await this.get<AffiliateBalance>(\"/api/v1/affiliate/balance\", {\n distinctId,\n });\n\n return response;\n } catch (error) {\n this.log(\"Failed to get balance:\", error);\n return {\n total: 0,\n pending: 0,\n available: 0,\n withdrawn: 0,\n };\n }\n }\n\n async getCommissions(): Promise<AffiliateCommission[]> {\n this.ensureInitialized();\n\n const distinctId = identityManager.getDistinctId();\n\n try {\n const response = await this.get<{\n commissions: Array<{\n id: string;\n referredDistinctId: string;\n purchaseAmount: number;\n commissionAmount: number;\n status: \"pending\" | \"eligible\" | \"ineligible\" | \"withdrawn\";\n createdAt: string;\n }>;\n }>(\"/api/v1/affiliate/commissions\", { distinctId });\n\n return response.commissions.map(mapRawCommission);\n } catch (error) {\n this.log(\"Failed to get commissions:\", error);\n return [];\n }\n }\n\n async requestWithdrawal(amount: number): Promise<{\n success: boolean;\n withdrawal?: WithdrawalRequest;\n error?: string;\n }> {\n this.ensureInitialized();\n\n const distinctId = identityManager.getDistinctId();\n\n try {\n const response = await this.post<{\n success: boolean;\n withdrawal?: {\n id: string;\n amount: number;\n status: \"pending\" | \"approved\" | \"rejected\" | \"paid\";\n createdAt: string;\n };\n error?: string;\n }>(\"/api/v1/affiliate/withdraw\", {\n amount,\n distinctId,\n });\n\n if (response.success && response.withdrawal) {\n this.log(\"Withdrawal requested:\", amount);\n return { success: true, withdrawal: mapRawWithdrawal(response.withdrawal) };\n }\n\n return {\n success: false,\n error: response.error,\n };\n } catch (error) {\n this.log(\"Failed to request withdrawal:\", error);\n return {\n success: false,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }\n\n async getWithdrawals(): Promise<WithdrawalRequest[]> {\n this.ensureInitialized();\n\n const distinctId = identityManager.getDistinctId();\n\n try {\n const response = await this.get<{\n withdrawals: Array<{\n id: string;\n amount: number;\n status: \"pending\" | \"approved\" | \"rejected\" | \"paid\";\n createdAt: string;\n }>;\n }>(\"/api/v1/affiliate/withdrawals\", { distinctId });\n\n return response.withdrawals.map(mapRawWithdrawal);\n } catch (error) {\n this.log(\"Failed to get withdrawals:\", error);\n return [];\n }\n }\n\n private async get<T>(path: string, params?: Record<string, unknown>): Promise<T> {\n this.ensureInitialized();\n return affiliateGet<T>(this.apiClient!, path, params);\n }\n\n private async post<T>(path: string, body: Record<string, unknown>): Promise<T> {\n this.ensureInitialized();\n return affiliatePost<T>(this.apiClient!, path, body);\n }\n\n private ensureInitialized(): void {\n if (!this.apiClient) {\n throw new AffiliateError(\n AFFILIATE_ERROR_CODES.NOT_INITIALIZED,\n \"AffiliateManager not initialized. Call initialize() first\"\n );\n }\n }\n\n private log(...args: unknown[]): void {\n if (this.debug) console.log(\"[Paywallo:Affiliate]\", ...args);\n }\n}\n\nexport const affiliateManager = new AffiliateManager();\n","import { affiliateManager } from \"./AffiliateManager\";\n\nexport const PaywalloAffiliate = {\n registerCoupon: (code: string) => affiliateManager.registerCoupon(code),\n applyCoupon: (code: string) => affiliateManager.applyCoupon(code),\n getMyCoupon: () => affiliateManager.getMyCoupon(),\n getAppliedCoupon: () => affiliateManager.getAppliedCoupon(),\n getBalance: () => affiliateManager.getBalance(),\n getCommissions: () => affiliateManager.getCommissions(),\n requestWithdrawal: (amount: number) => affiliateManager.requestWithdrawal(amount),\n getWithdrawals: () => affiliateManager.getWithdrawals(),\n};\n","import { SecureStorage } from \"../../core/storage/SecureStorage\";\n\nimport type { CachedSubscription, SubscriptionStatusResponse } from \"./types\";\n\nconst LEGACY_CACHE_KEY = \"subscription_cache\";\nconst CACHE_KEY_PREFIX = \"subscription_cache:\";\nconst DEFAULT_TTL = 24 * 60 * 60 * 1000;\n\nfunction keyFor(distinctId: string): string {\n return `${CACHE_KEY_PREFIX}${distinctId}`;\n}\n\nexport class SubscriptionCache {\n private ttl: number;\n private memoryCache: Map<string, CachedSubscription> = new Map();\n private storage: SecureStorage;\n private legacyCleanupDone = false;\n\n constructor(ttl: number = DEFAULT_TTL) {\n this.ttl = ttl;\n this.storage = new SecureStorage();\n }\n\n private async cleanupLegacyCache(): Promise<void> {\n if (this.legacyCleanupDone) return;\n this.legacyCleanupDone = true;\n try {\n await this.storage.remove(LEGACY_CACHE_KEY);\n } catch {\n }\n }\n\n async get(distinctId: string): Promise<CachedSubscription | null> {\n await this.cleanupLegacyCache();\n if (!distinctId) return null;\n\n const memEntry = this.memoryCache.get(distinctId);\n if (memEntry && !this.isExpired(memEntry)) {\n return memEntry;\n }\n\n try {\n const stored = await this.storage.get(keyFor(distinctId));\n if (!stored) {\n return null;\n }\n\n const parsed: unknown = JSON.parse(stored);\n if (\n typeof parsed !== \"object\" ||\n parsed === null ||\n !(\"data\" in parsed) ||\n typeof (parsed as Record<string, unknown>).data !== \"object\" ||\n (parsed as Record<string, unknown>).data === null ||\n !(\"cachedAt\" in parsed) ||\n typeof (parsed as Record<string, unknown>).cachedAt !== \"number\"\n ) {\n await this.storage.remove(keyFor(distinctId));\n return null;\n }\n const cached = parsed as CachedSubscription;\n\n if (cached.data.subscription?.expiresAt) {\n cached.data.subscription.expiresAt = new Date(cached.data.subscription.expiresAt);\n }\n if (cached.data.subscription?.originalPurchaseDate) {\n cached.data.subscription.originalPurchaseDate = new Date(\n cached.data.subscription.originalPurchaseDate\n );\n }\n if (cached.data.subscription?.latestPurchaseDate) {\n cached.data.subscription.latestPurchaseDate = new Date(\n cached.data.subscription.latestPurchaseDate\n );\n }\n if (cached.data.subscription?.cancellationDate) {\n cached.data.subscription.cancellationDate = new Date(\n cached.data.subscription.cancellationDate\n );\n }\n if (cached.data.subscription?.gracePeriodExpiresAt) {\n cached.data.subscription.gracePeriodExpiresAt = new Date(\n cached.data.subscription.gracePeriodExpiresAt\n );\n }\n\n cached.isStale = this.isExpired(cached);\n if (!cached.isStale) {\n this.memoryCache.set(distinctId, cached);\n }\n\n return cached;\n } catch {\n return null;\n }\n }\n\n async set(distinctId: string, data: SubscriptionStatusResponse): Promise<void> {\n if (!distinctId) return;\n const cached: CachedSubscription = {\n data,\n cachedAt: Date.now(),\n isStale: false,\n };\n\n this.memoryCache.set(distinctId, cached);\n\n try {\n await this.storage.set(keyFor(distinctId), JSON.stringify(cached));\n } catch {\n }\n }\n\n async invalidate(distinctId: string): Promise<void> {\n if (!distinctId) return;\n this.memoryCache.delete(distinctId);\n\n try {\n await this.storage.remove(keyFor(distinctId));\n } catch {\n }\n }\n\n async invalidateAll(): Promise<void> {\n this.memoryCache.clear();\n try {\n await this.storage.remove(LEGACY_CACHE_KEY);\n } catch {\n }\n }\n\n private isExpired(cached: CachedSubscription): boolean {\n return Date.now() - cached.cachedAt > this.ttl;\n }\n\n setTTL(ttl: number): void {\n this.ttl = ttl;\n }\n}\n\nexport const subscriptionCache = new SubscriptionCache();\n","import { Platform } from \"react-native\";\n\nimport { SESSION_ERROR_CODES, SessionError } from \"../session/SessionError\";\n\nimport { SubscriptionCache } from \"./SubscriptionCache\";\nimport type {\n SubscriptionInfo,\n SubscriptionManagerConfig,\n SubscriptionStatusResponse,\n} from \"./types\";\n\ntype SubscriptionListener = (subscription: SubscriptionStatusResponse) => void;\n\nclass SubscriptionManagerClass {\n private config: SubscriptionManagerConfig | null = null;\n private cache: SubscriptionCache;\n private listeners: Set<SubscriptionListener> = new Set();\n private userId: string | null = null;\n\n constructor() {\n this.cache = new SubscriptionCache();\n }\n\n private cacheKey(): string {\n return this.userId ?? \"__anonymous__\";\n }\n\n init(config: SubscriptionManagerConfig): void {\n this.config = config;\n if (config.cacheTTL) {\n this.cache.setTTL(config.cacheTTL);\n }\n }\n\n setUserId(userId: string | null): void {\n if (this.userId !== userId) {\n this.userId = userId;\n void this.cache.invalidateAll();\n }\n }\n\n async hasActiveSubscription(forceRefresh = false): Promise<boolean> {\n const status = await this.getSubscriptionStatus(forceRefresh);\n return status.hasActiveSubscription;\n }\n\n async getSubscription(forceRefresh = false): Promise<SubscriptionInfo | null> {\n const status = await this.getSubscriptionStatus(forceRefresh);\n return status.subscription;\n }\n\n async getEntitlements(forceRefresh = false): Promise<string[]> {\n const status = await this.getSubscriptionStatus(forceRefresh);\n return status.entitlements;\n }\n\n async getSubscriptionStatus(forceRefresh = false): Promise<SubscriptionStatusResponse> {\n if (!this.config) {\n return this.getEmptyStatus();\n }\n\n if (!forceRefresh) {\n const cached = await this.cache.get(this.cacheKey());\n if (cached && !cached.isStale) {\n return cached.data;\n }\n }\n\n try {\n const status = await this.fetchSubscriptionStatus();\n await this.cache.set(this.cacheKey(), status);\n this.notifyListeners(status);\n return status;\n } catch (error) {\n this.log(\"Failed to fetch subscription status\", error);\n\n const cached = await this.cache.get(this.cacheKey());\n if (cached) {\n return cached.data;\n }\n\n return this.getEmptyStatus();\n }\n }\n\n async restorePurchases(): Promise<SubscriptionStatusResponse> {\n if (!this.config) {\n throw new SessionError(\n SESSION_ERROR_CODES.NOT_INITIALIZED,\n \"SubscriptionManager not initialized\"\n );\n }\n\n await this.cache.invalidate(this.cacheKey());\n return this.getSubscriptionStatus(true);\n }\n\n private async fetchSubscriptionStatus(): Promise<SubscriptionStatusResponse> {\n if (!this.config) {\n return this.getEmptyStatus();\n }\n\n const url = new URL(`${this.config.serverUrl}/subscriptions/status`);\n if (this.userId) {\n url.searchParams.set(\"userId\", this.userId);\n }\n url.searchParams.set(\"platform\", Platform.OS);\n\n const response = await fetch(url.toString(), {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-App-Key\": this.config.appKey,\n },\n });\n\n if (!response.ok) {\n throw new SessionError(\n SESSION_ERROR_CODES.RESTORE_FAILED,\n `Failed to fetch subscription status: ${response.status}`\n );\n }\n\n const data = (await response.json()) as SubscriptionStatusResponse;\n\n if (data.subscription) {\n data.subscription.expiresAt = new Date(data.subscription.expiresAt);\n data.subscription.originalPurchaseDate = new Date(data.subscription.originalPurchaseDate);\n data.subscription.latestPurchaseDate = new Date(data.subscription.latestPurchaseDate);\n if (data.subscription.cancellationDate) {\n data.subscription.cancellationDate = new Date(data.subscription.cancellationDate);\n }\n if (data.subscription.gracePeriodExpiresAt) {\n data.subscription.gracePeriodExpiresAt = new Date(data.subscription.gracePeriodExpiresAt);\n }\n }\n\n return data;\n }\n\n private getEmptyStatus(): SubscriptionStatusResponse {\n return {\n hasActiveSubscription: false,\n subscription: null,\n entitlements: [],\n };\n }\n\n addListener(listener: SubscriptionListener): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n private notifyListeners(status: SubscriptionStatusResponse): void {\n for (const listener of this.listeners) {\n listener(status);\n }\n }\n\n async onPurchaseComplete(): Promise<void> {\n await this.cache.invalidate(this.cacheKey());\n await this.getSubscriptionStatus(true);\n }\n\n private log(...args: unknown[]): void {\n if (this.config?.debug) console.log(\"[Paywallo:Subscription]\", ...args);\n }\n}\n\nexport const subscriptionManager = new SubscriptionManagerClass();\n","import { PaywalloError } from \"../../errors/PaywalloError\";\n\nexport class SessionError extends PaywalloError {\n constructor(code: string, message: string) {\n super(\"session\", code, message);\n this.name = \"SessionError\";\n }\n}\n\nexport const SESSION_ERROR_CODES = {\n NOT_INITIALIZED: \"SESSION_NOT_INITIALIZED\",\n START_FAILED: \"SESSION_START_FAILED\",\n END_FAILED: \"SESSION_END_FAILED\",\n RESTORE_FAILED: \"SESSION_RESTORE_FAILED\",\n} as const;\n","import { Platform } from \"react-native\";\n\nconst SDK_VERSION = \"1.4.1\";\n\nimport type {\n ApiClientConfig,\n CampaignResponse,\n ConditionalFlagContext,\n ConditionalFlagResult,\n EmergencyPaywallResponse,\n Environment,\n FlagVariant,\n PaywallConfig,\n SubscriptionStatusResponse,\n UserProperties,\n ValidatePurchaseResponse,\n} from \"../types\";\n\nimport { buildConditionalFlagUrl, deriveWebUrl } from \"./apiUrlUtils\";\nimport {\n getCampaignData,\n getEmergencyPaywall,\n getSubscriptionStatus,\n validatePurchase,\n} from \"../domains/iap/apiPurchaseMethods\";\nimport { HttpClient, type HttpResponse } from \"./http\";\nimport { networkMonitor } from \"./network\";\nimport { offlineQueue } from \"./queue\";\nimport { ApiCache } from \"./ApiCache\";\nimport { secureStorage } from \"./storage/SecureStorage\";\n\nexport type { ApiClientConfig };\n\nexport class ApiClient {\n private baseUrl: string;\n private webUrl: string;\n private appKey: string;\n private debug: boolean;\n private environment: Environment;\n private offlineQueueEnabled: boolean;\n private httpClient: HttpClient;\n private readonly cache = new ApiCache();\n\n constructor(\n appKey: string,\n apiUrl: string,\n debug = false,\n environment: Environment = \"Production\",\n offlineQueueEnabled = true,\n timeout = 30000,\n ) {\n this.appKey = appKey;\n this.baseUrl = apiUrl;\n this.webUrl = deriveWebUrl(this.baseUrl);\n this.debug = debug;\n this.environment = environment;\n this.offlineQueueEnabled = offlineQueueEnabled;\n this.httpClient = new HttpClient(this.baseUrl, { timeout, debug });\n }\n\n getHttpClient(): HttpClient { return this.httpClient; }\n getBaseUrl(): string { return this.baseUrl; }\n getWebUrl(): string { return this.webUrl; }\n getEnvironment(): Environment { return this.environment; }\n getQueueSize(): number { return offlineQueue.getSize(); }\n setofflineQueueEnabled(enabled: boolean): void { this.offlineQueueEnabled = enabled; }\n isofflineQueueEnabled(): boolean { return this.offlineQueueEnabled; }\n\n setEnvironment(environment: Environment): void {\n this.environment = environment;\n }\n\n setDebug(debug: boolean): void {\n this.debug = debug;\n this.httpClient.setDebug(debug);\n }\n\n async clearQueue(): Promise<void> { await offlineQueue.clear(); }\n\n async get<T>(path: string): Promise<HttpResponse<T>> {\n return this.httpClient.get<T>(path, { headers: { \"X-App-Key\": this.appKey } });\n }\n\n async post<T>(path: string, body: unknown, skipRetry = false): Promise<HttpResponse<T>> {\n return this.httpClient.post<T>(path, body, { headers: { \"X-App-Key\": this.appKey }, skipRetry });\n }\n\n async reportError(errorType: string, message: string, context?: Record<string, unknown>): Promise<void> {\n try {\n await this.post(\"/api/v1/sdk/errors\", {\n errorType, message, context,\n sdkVersion: SDK_VERSION,\n platform: Platform.OS,\n }, true);\n } catch (err) {\n if (this.debug) console.warn(\"[Paywallo:ApiClient] reportError failed\", err);\n }\n }\n\n async trackEvent(eventName: string, distinctId: string, properties?: UserProperties, timestamp?: number): Promise<void> {\n await this.postWithQueue(\"/api/v1/events\", {\n eventName, distinctId,\n properties: { ...properties, platform: Platform.OS },\n timestamp: timestamp ?? Date.now(),\n environment: this.environment.toLowerCase(),\n }, `event:${eventName}`);\n }\n\n async identify(distinctId: string, properties?: UserProperties, email?: string, deviceId?: string): Promise<void> {\n await this.postWithQueue(\"/api/v1/identify\", { distinctId, properties: properties ?? {}, email, platform: Platform.OS, ...(deviceId && { deviceId }) }, \"identify\");\n }\n\n async startSession(distinctId: string, sessionId: string, platform?: string): Promise<{ success: boolean }> {\n await this.postWithQueue(\"/api/v1/sessions/start\", {\n distinctId, sessionId, platform: platform ?? Platform.OS, environment: this.environment.toLowerCase(),\n }, `session.start:${sessionId}`);\n return { success: true };\n }\n\n async endSession(sessionId: string, durationSeconds: number): Promise<{ success: boolean }> {\n await this.postWithQueue(\"/api/v1/sessions/end\", { sessionId, durationSeconds }, `session.end:${sessionId}`);\n return { success: true };\n }\n\n async getVariant(flagKey: string, distinctId: string): Promise<FlagVariant> {\n const key = `${flagKey}:${distinctId}`;\n const hit = this.cache.getVariant(key);\n if (hit !== undefined) return hit;\n\n const persisted = await this.readFlagFromStorage(flagKey, distinctId);\n if (persisted !== null) {\n this.cache.setVariant(key, persisted);\n return persisted;\n }\n\n try {\n const res = await this.get<FlagVariant>(`/api/v1/flags/${flagKey}?distinctId=${encodeURIComponent(distinctId)}`);\n if (res.status === 404) {\n this.log(\"Flag not found (404):\", flagKey);\n const v: FlagVariant = { variant: null };\n this.cache.setVariant(key, v, this.cache.nullTTL);\n return v;\n }\n if (!res.ok) {\n this.log(\"Non-OK response for variant:\", flagKey, res.status);\n const stale = this.cache.getStaleVariant(key);\n if (stale !== undefined) return stale;\n return { variant: null };\n }\n this.cache.setVariant(key, res.data);\n await this.writeFlagToStorage(flagKey, distinctId, res.data);\n return res.data;\n } catch (error) {\n this.log(\"Failed to get variant:\", flagKey, error);\n const stale = this.cache.getStaleVariant(key);\n if (stale !== undefined) return stale;\n return { variant: null };\n }\n }\n\n async getPaywall(placement: string): Promise<PaywallConfig | null> {\n const hit = this.cache.getPaywall(placement);\n if (hit !== undefined) return hit;\n try {\n const res = await this.get<PaywallConfig>(`/api/v1/paywalls/${placement}`);\n if (res.status === 404) { this.log(\"Paywall not found (404):\", placement); this.cache.setPaywall(placement, null, this.cache.nullTTL); return null; }\n if (!res.ok) {\n this.log(\"Non-OK response for paywall:\", placement, res.status);\n const stale = this.cache.getStalePaywall(placement);\n if (stale !== undefined) return stale;\n return null;\n }\n this.cache.setPaywall(placement, res.data);\n return res.data;\n } catch (error) {\n this.log(\"Failed to get paywall:\", placement, error);\n const stale = this.cache.getStalePaywall(placement);\n if (stale !== undefined) return stale;\n return null;\n }\n }\n\n async getEmergencyPaywall(): Promise<EmergencyPaywallResponse> {\n const result = await getEmergencyPaywall(this);\n this.log(\"Got emergency paywall:\", result.enabled);\n return result;\n }\n\n async getCampaign(\n placement: string,\n distinctId: string,\n context?: Record<string, unknown>\n ): Promise<CampaignResponse | null> {\n const key = `${placement}:${distinctId}`;\n const hit = this.cache.getCampaign(key);\n if (hit !== undefined) return hit;\n try {\n const result = await getCampaignData(this, this.baseUrl, placement, distinctId, context);\n if (!result) {\n this.log(\"No campaign found for placement:\", placement);\n this.cache.setCampaign(key, null, this.cache.nullTTL);\n return null;\n }\n this.log(\"Got campaign:\", placement, result.variantKey);\n this.cache.setCampaign(key, result);\n return result;\n } catch (error) {\n this.log(\"Failed to get campaign:\", placement, error);\n const stale = this.cache.getStaleCampaign(key);\n if (stale !== undefined) return stale;\n return null;\n }\n }\n\n async getPrimaryCampaign(distinctId: string): Promise<CampaignResponse | null> {\n const key = `primary:${distinctId}`;\n const hit = this.cache.getCampaign(key);\n if (hit !== undefined) return hit;\n try {\n const res = await this.get<CampaignResponse>(`/campaigns/public/primary?distinctId=${encodeURIComponent(distinctId)}`);\n if (res.status === 404) {\n this.log(\"Primary campaign not found (404)\");\n this.cache.setCampaign(key, null, this.cache.nullTTL);\n return null;\n }\n if (!res.ok) {\n this.log(\"Non-OK response for primary campaign:\", res.status);\n const stale = this.cache.getStaleCampaign(key);\n if (stale !== undefined) return stale;\n return null;\n }\n this.log(\"Got primary campaign:\", res.data?.campaignId);\n this.cache.setCampaign(key, res.data);\n return res.data;\n } catch (error) {\n this.log(\"Failed to get primary campaign:\", error);\n const stale = this.cache.getStaleCampaign(key);\n if (stale !== undefined) return stale;\n return null;\n }\n }\n\n async validatePurchase(\n platform: \"ios\" | \"android\",\n receipt: string,\n productId: string,\n transactionId: string,\n priceLocal: number,\n currency: string,\n country: string,\n distinctId?: string,\n paywallPlacement?: string,\n variantKey?: string\n ): Promise<ValidatePurchaseResponse> {\n const result = await validatePurchase(\n this, this.appKey, platform, receipt, productId, transactionId,\n priceLocal, currency, country, distinctId, paywallPlacement, variantKey\n );\n this.log(\"Purchase validated:\", result.success);\n return result;\n }\n\n async getSubscriptionStatus(distinctId: string): Promise<SubscriptionStatusResponse> {\n const result = await getSubscriptionStatus(this, this.baseUrl, this.appKey, distinctId);\n this.log(\"Subscription status:\", result.hasActiveSubscription);\n return result;\n }\n\n async evaluateFlags(keys: string[], distinctId: string): Promise<Record<string, string | null>> {\n const query = keys.map(encodeURIComponent).join(\",\");\n const path = `/api/v1/flags/evaluate?keys=${query}`;\n try {\n const res = await this.httpClient.get<unknown>(path, {\n headers: { \"X-App-Key\": this.appKey, \"x-distinct-id\": distinctId },\n });\n if (!res.ok) {\n this.log(\"evaluateFlags failed:\", res.status, keys);\n return {};\n }\n const raw = res.data;\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) return {};\n const record = raw as Record<string, unknown>;\n const result: Record<string, string | null> = {};\n for (const key of Object.keys(record)) {\n const value = record[key];\n const variant: string | null = typeof value === \"boolean\" ? String(value) : typeof value === \"string\" ? value : null;\n result[key] = variant;\n const flagVariant: FlagVariant = { variant };\n this.cache.setVariant(`${key}:${distinctId}`, flagVariant);\n await this.writeFlagToStorage(key, distinctId, flagVariant);\n }\n return result;\n } catch (error) {\n this.log(\"Failed to evaluateFlags:\", error);\n return {};\n }\n }\n\n async getConditionalFlag(\n flagKey: string,\n context: ConditionalFlagContext\n ): Promise<ConditionalFlagResult> {\n try {\n const url = buildConditionalFlagUrl(this.baseUrl, flagKey, context);\n const response = await this.get<{ value: boolean }>(url);\n if (response.status === 404) return { value: false, flagKey };\n if (!response.ok) {\n this.log(\"Non-OK response for conditional flag:\", flagKey, response.status);\n return { value: false, flagKey };\n }\n this.log(\"Got conditional flag:\", flagKey, response.data.value);\n return { value: response.data.value, flagKey };\n } catch {\n this.log(\"Failed to get conditional flag:\", flagKey);\n return { value: false, flagKey };\n }\n }\n\n async getVariantFromCache(flagKey: string, distinctId: string): Promise<FlagVariant | null> {\n const key = `${flagKey}:${distinctId}`;\n const hit = this.cache.getVariant(key);\n if (hit !== undefined) return hit;\n const persisted = await this.readFlagFromStorage(flagKey, distinctId);\n if (persisted !== null) {\n this.cache.setVariant(key, persisted);\n return persisted;\n }\n return null;\n }\n\n private static readonly FLAG_MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000;\n\n private async readFlagFromStorage(flagKey: string, distinctId: string): Promise<FlagVariant | null> {\n try {\n const raw = await secureStorage.get(`flag:${flagKey}:${distinctId}`);\n if (!raw) return null;\n const parsed: unknown = JSON.parse(raw);\n if (\n typeof parsed !== \"object\" || parsed === null ||\n !(\"variant\" in parsed) || !(\"cachedAt\" in parsed) ||\n typeof (parsed as Record<string, unknown>).cachedAt !== \"number\"\n ) return null;\n const { variant, payload, cachedAt } = parsed as { variant: string | null; payload?: Record<string, unknown>; cachedAt: number };\n if (Date.now() - cachedAt > ApiClient.FLAG_MAX_AGE_MS) return null;\n return { variant, payload };\n } catch {\n return null;\n }\n }\n\n private async writeFlagToStorage(flagKey: string, distinctId: string, flag: FlagVariant): Promise<void> {\n try {\n const value = JSON.stringify({ variant: flag.variant, payload: flag.payload, cachedAt: Date.now() });\n await secureStorage.set(`flag:${flagKey}:${distinctId}`, value);\n } catch (err) {\n this.log(\"writeFlagToStorage failed\", err);\n }\n }\n\n private async postWithQueue(\n url: string,\n payload: Record<string, unknown>,\n label: string\n ): Promise<void> {\n if (this.offlineQueueEnabled && !networkMonitor.isOnline()) {\n await offlineQueue.enqueue(\"POST\", url, payload, { \"X-App-Key\": this.appKey });\n this.log(\"Queued for offline:\", label);\n return;\n }\n try {\n await this.post(url, payload);\n } catch (error) {\n this.log(\"Request failed:\", label, error);\n if (this.offlineQueueEnabled) {\n await offlineQueue.enqueue(\"POST\", url, payload, { \"X-App-Key\": this.appKey });\n this.log(\"Queued after failure:\", label);\n return;\n }\n throw error;\n }\n }\n\n private log(...args: unknown[]): void {\n if (this.debug) console.log(\"[Paywallo:ApiClient]\", ...args);\n }\n}\n","import type { ConditionalFlagContext } from \"../types\";\n\nconst DEFAULT_WEB_URL = \"https://paywallo.com.br\";\n\n/**\n * Derives the web (dashboard) URL from the API base URL.\n * - Local dev (192.168.x or localhost): same host, port 3000\n * - Production: uses DEFAULT_WEB_URL (paywallo.com.br)\n * - api.* → app.*\n */\nexport function deriveWebUrl(baseUrl: string): string {\n try {\n const url = new URL(baseUrl);\n if (url.hostname.startsWith(\"192.168\") || url.hostname === \"localhost\") {\n url.port = \"3000\";\n return url.toString().replace(/\\/$/, \"\");\n }\n if (url.hostname.startsWith(\"api.\")) {\n url.hostname = url.hostname.replace(\"api.\", \"app.\");\n return url.toString().replace(/\\/$/, \"\");\n }\n return DEFAULT_WEB_URL;\n } catch {\n return DEFAULT_WEB_URL;\n }\n}\n\n/** Builds a URL with optional query params appended. */\nexport function buildUrl(base: string, params?: Record<string, unknown>): string {\n if (!params) return base;\n const entries = Object.entries(params).filter(([, v]) => v !== undefined && v !== null);\n if (entries.length === 0) return base;\n const query = entries\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)\n .join(\"&\");\n return `${base}?${query}`;\n}\n\n/** Builds the URL for the conditional-flags endpoint including context query params. */\nexport function buildConditionalFlagUrl(\n baseUrl: string,\n flagKey: string,\n context: ConditionalFlagContext\n): string {\n const url = new URL(`${baseUrl}/api/v1/conditional-flags/${flagKey}`);\n if (context.platform) url.searchParams.set(\"platform\", context.platform);\n if (context.appVersion) url.searchParams.set(\"appVersion\", context.appVersion);\n if (context.country) url.searchParams.set(\"country\", context.country);\n if (context.distinctId) url.searchParams.set(\"distinctId\", context.distinctId);\n return url.toString();\n}\n","import type {\n CampaignResponse,\n EmergencyPaywallResponse,\n SubscriptionStatusResponse,\n ValidatePurchaseResponse,\n} from \"../../types\";\n\nimport type { ApiClient } from \"../../core/ApiClient\";\n\nexport async function validatePurchase(\n client: ApiClient,\n appKey: string,\n platform: \"ios\" | \"android\",\n receipt: string,\n productId: string,\n transactionId: string,\n priceLocal: number,\n currency: string,\n country: string,\n distinctId?: string,\n paywallPlacement?: string,\n variantKey?: string\n): Promise<ValidatePurchaseResponse> {\n const response = await client.post<ValidatePurchaseResponse>(\n `/purchases/validate/${appKey}`,\n {\n platform, receipt, productId, transactionId, priceLocal, currency, country, distinctId,\n ...(paywallPlacement !== undefined && { paywallPlacement }),\n ...(variantKey !== undefined && { variantKey }),\n },\n false\n );\n if (!response.ok) {\n throw new Error(`Server validation failed: HTTP ${response.status}`);\n }\n return response.data;\n}\n\nexport async function getSubscriptionStatus(\n client: ApiClient,\n baseUrl: string,\n appKey: string,\n distinctId: string\n): Promise<SubscriptionStatusResponse> {\n const url = new URL(`${baseUrl}/purchases/status/${appKey}`);\n url.searchParams.set(\"distinctId\", distinctId);\n const response = await client.get<SubscriptionStatusResponse>(url.toString());\n if (!response.ok) {\n throw new Error(`Subscription status check failed: HTTP ${response.status}`);\n }\n return response.data;\n}\n\nexport async function getEmergencyPaywall(\n client: ApiClient\n): Promise<EmergencyPaywallResponse> {\n try {\n const response = await client.get<EmergencyPaywallResponse>(\"/api/v1/emergency-paywall\");\n if (response.status === 404) return { enabled: false };\n return response.data;\n } catch {\n return { enabled: false };\n }\n}\n\nexport async function getCampaignData(\n client: ApiClient,\n baseUrl: string,\n placement: string,\n distinctId: string,\n context?: Record<string, unknown>\n): Promise<CampaignResponse | null> {\n const url = new URL(`${baseUrl}/api/v1/campaigns/${placement}`);\n url.searchParams.set(\"distinctId\", distinctId);\n if (context) url.searchParams.set(\"context\", JSON.stringify(context));\n\n const response = await client.get<CampaignResponse | { paywall: null }>(url.toString());\n if (response.status === 404) return null;\n\n const data = response.data;\n if (\"paywall\" in data && data.paywall === null && !(\"campaignId\" in data)) return null;\n return data as CampaignResponse;\n}\n","export interface RetryConfig {\n maxRetries: number;\n baseDelay: number;\n maxDelay: number;\n retryableStatusCodes: number[];\n}\n\nexport interface HttpClientConfig {\n baseUrl: string;\n timeout: number;\n retry: RetryConfig;\n debug: boolean;\n}\n\nexport interface RequestOptions {\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\";\n headers?: Record<string, string>;\n body?: unknown;\n skipRetry?: boolean;\n timeout?: number;\n}\n\nexport interface HttpResponse<T = unknown> {\n ok: boolean;\n status: number;\n data: T;\n headers: Record<string, string>;\n}\n\nexport interface RetryState {\n attempt: number;\n lastError: Error | null;\n}\n\nexport const DEFAULT_RETRY_CONFIG: RetryConfig = {\n maxRetries: 2,\n baseDelay: 500,\n maxDelay: 4000,\n retryableStatusCodes: [408, 429, 500, 502, 503, 504],\n};\n\nexport const DEFAULT_HTTP_CONFIG: Partial<HttpClientConfig> = {\n timeout: 10000,\n retry: DEFAULT_RETRY_CONFIG,\n debug: false,\n};\n","import { CLIENT_ERROR_CODES, ClientError } from \"../../errors/ClientError\";\nimport type {\n HttpClientConfig,\n HttpResponse,\n RequestOptions,\n RetryConfig,\n RetryState,\n} from \"./types\";\nimport { DEFAULT_HTTP_CONFIG, DEFAULT_RETRY_CONFIG } from \"./types\";\n\nexport class HttpClient {\n private config: HttpClientConfig;\n\n constructor(baseUrl: string, config?: Partial<Omit<HttpClientConfig, \"baseUrl\">>) {\n this.config = {\n baseUrl,\n timeout: config?.timeout ?? (DEFAULT_HTTP_CONFIG.timeout as number),\n retry: { ...DEFAULT_RETRY_CONFIG, ...config?.retry },\n debug: config?.debug ?? false,\n };\n }\n\n async get<T>(path: string, options?: Partial<RequestOptions>): Promise<HttpResponse<T>> {\n return this.request<T>(path, { ...options, method: \"GET\" });\n }\n\n async post<T>(\n path: string,\n body?: unknown,\n options?: Partial<RequestOptions>\n ): Promise<HttpResponse<T>> {\n return this.request<T>(path, { ...options, method: \"POST\", body });\n }\n\n async request<T>(path: string, options: RequestOptions): Promise<HttpResponse<T>> {\n const url = this.buildUrl(path);\n const fetchOptions = this.buildFetchOptions(options);\n const timeout = options.timeout ?? this.config.timeout;\n\n if (options.skipRetry) {\n return this.executeRequest<T>(url, fetchOptions, timeout);\n }\n\n return this.executeWithRetry<T>(url, fetchOptions, options);\n }\n\n private async executeWithRetry<T>(\n url: string,\n fetchOptions: RequestInit,\n options: RequestOptions\n ): Promise<HttpResponse<T>> {\n const retryConfig = this.config.retry;\n const timeout = options.timeout ?? this.config.timeout;\n const state: RetryState = { attempt: 0, lastError: null };\n\n while (state.attempt <= retryConfig.maxRetries) {\n try {\n const response = await this.executeRequest<T>(url, fetchOptions, timeout);\n\n if (this.shouldRetry(response.status, retryConfig)) {\n if (state.attempt < retryConfig.maxRetries) {\n state.attempt++;\n const delay = this.calculateDelay(state.attempt, retryConfig);\n await this.sleep(delay);\n continue;\n }\n }\n\n return response;\n } catch (error) {\n state.lastError = error instanceof Error ? error : new ClientError(CLIENT_ERROR_CODES.UNKNOWN, String(error));\n\n if (this.isNetworkError(state.lastError) && state.attempt < retryConfig.maxRetries) {\n state.attempt++;\n const delay = this.calculateDelay(state.attempt, retryConfig);\n await this.sleep(delay);\n continue;\n }\n\n throw state.lastError;\n }\n }\n\n throw state.lastError ?? new ClientError(CLIENT_ERROR_CODES.UNKNOWN, \"Max retries exceeded\");\n }\n\n private async executeRequest<T>(\n url: string,\n options: RequestInit,\n timeout: number\n ): Promise<HttpResponse<T>> {\n const controller = new AbortController();\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n let isCompleted = false;\n\n timeoutId = setTimeout(() => {\n if (!isCompleted) {\n controller.abort();\n }\n }, timeout);\n\n try {\n const response = await fetch(url, {\n ...options,\n signal: controller.signal,\n });\n\n isCompleted = true;\n\n let data: T;\n const contentType = response.headers.get(\"content-type\");\n\n if (contentType?.includes(\"application/json\")) {\n data = (await response.json()) as T;\n } else {\n const textData = await response.text();\n data = textData as unknown as T;\n }\n\n const headers: Record<string, string> = {};\n response.headers.forEach((value: string, key: string) => {\n headers[key] = value;\n });\n\n return {\n ok: response.ok,\n status: response.status,\n data,\n headers,\n };\n } catch (error) {\n this.log(\"Request failed\", {\n url,\n error: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n isCompleted = true;\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n }\n }\n\n private buildUrl(path: string): string {\n if (path.startsWith(\"http://\") || path.startsWith(\"https://\")) {\n return path;\n }\n return `${this.config.baseUrl}${path}`;\n }\n\n private buildFetchOptions(options: RequestOptions): RequestInit {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n };\n\n const fetchOptions: RequestInit = {\n method: options.method,\n headers,\n };\n\n if (options.body !== undefined) {\n fetchOptions.body = JSON.stringify(options.body);\n }\n\n return fetchOptions;\n }\n\n private shouldRetry(status: number, config: RetryConfig): boolean {\n return config.retryableStatusCodes.includes(status);\n }\n\n private isNetworkError(error: Error): boolean {\n const networkErrorPatterns = [\n \"network\",\n \"fetch\",\n \"ECONNREFUSED\",\n \"ETIMEDOUT\",\n \"ENOTFOUND\",\n \"aborted\",\n \"timeout\",\n ];\n\n const message = error.message.toLowerCase();\n return networkErrorPatterns.some((pattern) => message.includes(pattern.toLowerCase()));\n }\n\n private calculateDelay(attempt: number, config: RetryConfig): number {\n const exponentialDelay = config.baseDelay * Math.pow(2, attempt - 1);\n const jitter = Math.random() * 0.3 * exponentialDelay;\n return Math.min(exponentialDelay + jitter, config.maxDelay);\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n private log(...args: unknown[]): void {\n if (this.config.debug) console.log(\"[Paywallo:Http]\", ...args);\n }\n\n setDebug(debug: boolean): void {\n this.config.debug = debug;\n }\n\n getConfig(): Readonly<HttpClientConfig> {\n return { ...this.config };\n }\n}\n","import { AppState, AppStateStatus } from \"react-native\";\n\nimport type { NetworkListener, NetworkMonitorConfig, NetworkState } from \"./types\";\nimport { DEFAULT_NETWORK_CONFIG } from \"./types\";\n\nclass NetworkMonitorClass {\n private config: NetworkMonitorConfig = DEFAULT_NETWORK_CONFIG;\n private listeners: Set<NetworkListener> = new Set();\n private currentState: NetworkState = \"unknown\";\n private appStateSubscription: ReturnType<typeof AppState.addEventListener> | null = null;\n private initialized = false;\n private checkIntervalId: ReturnType<typeof setInterval> | null = null;\n\n async initialize(config?: Partial<NetworkMonitorConfig>): Promise<void> {\n if (this.initialized) {\n return;\n }\n\n this.config = { ...DEFAULT_NETWORK_CONFIG, ...config };\n\n this.currentState = \"unknown\";\n this.initialized = true;\n\n this.log(\"Initialized (state: unknown, awaiting first connectivity check)\");\n\n void this.setupFallbackDetection();\n this.setupAppStateListener();\n }\n\n private async setupFallbackDetection(): Promise<void> {\n await this.checkConnectivity();\n\n this.checkIntervalId = setInterval(() => {\n void this.checkConnectivity();\n }, this.config.checkInterval);\n }\n\n private setupAppStateListener(): void {\n this.appStateSubscription = AppState.addEventListener(\"change\", (state: AppStateStatus) => {\n if (state === \"active\") {\n void this.checkConnectivity();\n }\n });\n }\n\n private async checkConnectivity(): Promise<void> {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 5000);\n\n const response = await fetch(this.config.checkUrl, {\n method: \"HEAD\",\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n this.updateState(response.ok ? \"online\" : \"offline\");\n } catch {\n this.updateState(\"offline\");\n }\n }\n\n private updateState(newState: NetworkState): void {\n const previousState = this.currentState;\n if (previousState === newState) {\n return;\n }\n\n this.currentState = newState;\n this.log(\"Network state changed\", { from: previousState, to: newState });\n this.notifyListeners(newState);\n }\n\n private notifyListeners(state: NetworkState): void {\n for (const listener of this.listeners) {\n try {\n listener(state);\n } catch (error) {\n this.log(\"Listener error\", error);\n }\n }\n }\n\n isOnline(): boolean {\n if (!this.initialized || this.currentState === \"unknown\") {\n return true;\n }\n return this.currentState === \"online\";\n }\n\n getState(): NetworkState {\n return this.currentState;\n }\n\n isInitialized(): boolean {\n return this.initialized;\n }\n\n addListener(listener: NetworkListener): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n removeListener(listener: NetworkListener): void {\n this.listeners.delete(listener);\n }\n\n async forceCheck(): Promise<NetworkState> {\n await this.checkConnectivity();\n return this.currentState;\n }\n\n dispose(): void {\n if (this.appStateSubscription) {\n this.appStateSubscription.remove();\n this.appStateSubscription = null;\n }\n\n if (this.checkIntervalId) {\n clearInterval(this.checkIntervalId);\n this.checkIntervalId = null;\n }\n\n this.listeners.clear();\n this.initialized = false;\n this.currentState = \"unknown\";\n }\n\n private log(...args: unknown[]): void {\n if (this.config.debug) console.log(\"[Paywallo:Network]\", ...args);\n }\n\n setDebug(debug: boolean): void {\n this.config.debug = debug;\n }\n}\n\nexport const networkMonitor = new NetworkMonitorClass();\n/** @deprecated Use `networkMonitor` (camelCase) */\nexport const NetworkMonitor = networkMonitor;\n","export type NetworkState = \"online\" | \"offline\" | \"unknown\";\n\nexport type NetworkListener = (state: NetworkState) => void;\n\nexport interface NetworkMonitorConfig {\n debug: boolean;\n checkInterval: number;\n checkUrl: string;\n}\n\nexport const DEFAULT_NETWORK_CONFIG: NetworkMonitorConfig = {\n debug: false,\n checkInterval: 30000,\n checkUrl: \"https://clients3.google.com/generate_204\",\n};\n","import AsyncStorage from \"@react-native-async-storage/async-storage\";\n\nimport { CLIENT_ERROR_CODES, ClientError } from \"../../errors/ClientError\";\nimport { generateUUID } from \"../../utils/uuid\";\n\nimport { findDuplicateIndex } from \"./deduplication\";\nimport type { OfflineQueueConfig, QueueEvent, QueueItem, QueueListener } from \"./types\";\nimport { DEFAULT_QUEUE_CONFIG } from \"./types\";\n\nclass OfflineQueueClass {\n private config: OfflineQueueConfig = DEFAULT_QUEUE_CONFIG;\n private queue: QueueItem[] = [];\n private listeners: Set<QueueListener> = new Set();\n private initialized = false;\n private processing = false;\n private processingLock = false;\n private cleanupTimer: ReturnType<typeof setInterval> | null = null;\n\n async initialize(config?: Partial<OfflineQueueConfig>): Promise<void> {\n if (this.initialized) {\n return;\n }\n\n this.config = { ...DEFAULT_QUEUE_CONFIG, ...config };\n await this.loadFromStorage();\n this.cleanupExpired();\n\n this.cleanupTimer = setInterval(() => this.cleanupExpired(), 60 * 60 * 1000);\n\n this.initialized = true;\n }\n\n private async loadFromStorage(): Promise<void> {\n try {\n const stored = await AsyncStorage.getItem(this.config.storageKey);\n if (stored) {\n this.queue = JSON.parse(stored) as QueueItem[];\n }\n } catch {\n this.queue = [];\n }\n }\n\n private async saveToStorage(): Promise<boolean> {\n try {\n await AsyncStorage.setItem(this.config.storageKey, JSON.stringify(this.queue));\n return true;\n } catch (error) {\n this.log(\"Failed to save queue to storage\", error);\n this.emit({\n type: \"item:failed\",\n error: new ClientError(CLIENT_ERROR_CODES.UNKNOWN, \"Storage save failed - items may be lost on restart\"),\n queueSize: this.queue.length,\n });\n return false;\n }\n }\n\n private cleanupExpired(): void {\n const now = Date.now();\n const before = this.queue.length;\n\n this.queue = this.queue.filter((item) => Date.now() - item.timestamp < this.config.maxAge);\n\n if (before !== this.queue.length) {\n void this.saveToStorage();\n }\n }\n\n async enqueue(\n method: \"POST\" | \"PUT\",\n url: string,\n body: unknown,\n headers?: Record<string, string>,\n id?: string\n ): Promise<QueueItem> {\n const item: QueueItem = {\n id: id ?? generateUUID(),\n method,\n url,\n body,\n headers,\n timestamp: Date.now(),\n attempts: 0,\n maxAttempts: this.config.maxAttempts,\n };\n\n const existingIndex = this.findDuplicateIndex(item);\n if (existingIndex !== -1) {\n this.queue[existingIndex].timestamp = Date.now();\n await this.saveToStorage();\n return this.queue[existingIndex];\n }\n\n if (this.queue.length >= this.config.maxItems) {\n const removed = this.queue.shift();\n if (removed) {\n this.emit({ type: \"item:evicted\", item: removed, queueSize: this.queue.length });\n }\n }\n\n this.queue.push(item);\n await this.saveToStorage();\n\n this.emit({ type: \"item:added\", item, queueSize: this.queue.length });\n\n return item;\n }\n\n private findDuplicateIndex(item: QueueItem): number {\n return findDuplicateIndex(this.queue, item);\n }\n\n async dequeue(): Promise<QueueItem | null> {\n const item = this.queue.shift() ?? null;\n if (item) {\n await this.saveToStorage();\n this.emit({ type: \"item:removed\", item, queueSize: this.queue.length });\n }\n return item;\n }\n\n async removeItem(id: string): Promise<boolean> {\n const index = this.queue.findIndex((item) => item.id === id);\n if (index === -1) return false;\n const [item] = this.queue.splice(index, 1);\n await this.saveToStorage();\n this.emit({ type: \"item:removed\", item, queueSize: this.queue.length });\n return true;\n }\n\n async processQueue(\n processor: (item: QueueItem) => Promise<boolean | { success: boolean; permanent?: boolean }>,\n options?: { delayBetweenItems?: number }\n ): Promise<{ processed: number; failed: number }> {\n if (this.processingLock || this.queue.length === 0) {\n return { processed: 0, failed: 0 };\n }\n\n this.processingLock = true;\n this.processing = true;\n this.emit({ type: \"processing:start\", queueSize: this.queue.length });\n\n let processed = 0;\n let failed = 0;\n const delayMs = options?.delayBetweenItems ?? 100;\n\n const itemIds = this.queue.map((item) => item.id);\n\n for (let i = 0; i < itemIds.length; i++) {\n const item = this.queue.find((q) => q.id === itemIds[i]);\n if (!item) continue;\n\n item.attempts++;\n\n try {\n const result = await processor(item);\n const success = typeof result === \"boolean\" ? result : result.success;\n const permanent = typeof result === \"object\" ? (result.permanent ?? false) : false;\n\n if (success) {\n await this.removeItem(item.id);\n processed++;\n this.emit({ type: \"item:success\", item, queueSize: this.queue.length });\n } else {\n const didFail = await this.handleItemFailure(item, undefined, permanent);\n if (didFail) failed++;\n }\n } catch (error) {\n const err = error instanceof Error ? error : new ClientError(CLIENT_ERROR_CODES.UNKNOWN, String(error));\n const didFail = await this.handleItemFailure(item, err, false);\n if (didFail) failed++;\n }\n\n if (i < itemIds.length - 1 && delayMs > 0) await this.sleep(delayMs);\n }\n\n this.processing = false;\n this.processingLock = false;\n this.emit({ type: \"processing:end\", queueSize: this.queue.length });\n\n return { processed, failed };\n }\n\n private async handleItemFailure(item: QueueItem, error?: Error, permanent = false): Promise<boolean> {\n if (permanent || item.attempts >= item.maxAttempts) {\n await this.removeItem(item.id);\n this.emit({\n type: \"item:failed\",\n item,\n error: error ?? new ClientError(CLIENT_ERROR_CODES.UNKNOWN, permanent ? \"Permanent failure\" : \"Max attempts reached\"),\n queueSize: this.queue.length,\n });\n return true;\n }\n await this.saveToStorage();\n return false;\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n getQueue(): ReadonlyArray<QueueItem> {\n return [...this.queue];\n }\n\n getSize(): number {\n return this.queue.length;\n }\n\n isEmpty(): boolean {\n return this.queue.length === 0;\n }\n\n isProcessing(): boolean {\n return this.processing;\n }\n\n async clear(): Promise<void> {\n this.queue = [];\n await this.saveToStorage();\n }\n\n async clearItemsWithInvalidAppKey(validAppKey: string): Promise<number> {\n const before = this.queue.length;\n this.queue = this.queue.filter((item) => {\n const itemAppKey = item.headers?.[\"X-App-Key\"];\n return itemAppKey === validAppKey || !itemAppKey;\n });\n const removed = before - this.queue.length;\n if (removed > 0) {\n await this.saveToStorage();\n }\n return removed;\n }\n\n addListener(listener: QueueListener): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n removeListener(listener: QueueListener): void {\n this.listeners.delete(listener);\n }\n\n private emit(event: QueueEvent): void {\n for (const listener of this.listeners) {\n try {\n listener(event);\n } catch (error) {\n this.log(\"Listener error\", error);\n }\n }\n }\n\n private log(...args: unknown[]): void {\n if (this.config.debug) console.log(\"[Paywallo:Queue]\", ...args);\n }\n\n setDebug(debug: boolean): void {\n this.config.debug = debug;\n }\n\n dispose(): void {\n if (this.cleanupTimer) {\n clearInterval(this.cleanupTimer);\n this.cleanupTimer = null;\n }\n this.listeners.clear();\n this.queue = [];\n this.initialized = false;\n this.processing = false;\n this.processingLock = false;\n }\n}\n\nexport const offlineQueue = new OfflineQueueClass();\n/** @deprecated Use `offlineQueue` (camelCase) */\nexport const OfflineQueue = offlineQueue;\n","import type { QueueItem } from \"./types\";\n\nexport function normalizeForComparison(obj: unknown): string {\n if (obj === null || obj === undefined) {\n return String(obj);\n }\n\n if (typeof obj !== \"object\") {\n return JSON.stringify(obj);\n }\n\n if (Array.isArray(obj)) {\n return \"[\" + obj.map((item) => normalizeForComparison(item)).join(\",\") + \"]\";\n }\n\n const sortedKeys = Object.keys(obj as Record<string, unknown>).sort();\n const pairs = sortedKeys.map((key) => {\n const value = (obj as Record<string, unknown>)[key];\n return `${JSON.stringify(key)}:${normalizeForComparison(value)}`;\n });\n return \"{\" + pairs.join(\",\") + \"}\";\n}\n\nexport function findDuplicateIndex(queue: QueueItem[], item: QueueItem): number {\n const byId = queue.findIndex((existing) => existing.id === item.id);\n if (byId !== -1) return byId;\n\n const normalizedBody = normalizeForComparison(item.body);\n return queue.findIndex(\n (existing) =>\n existing.url === item.url && normalizeForComparison(existing.body) === normalizedBody\n );\n}\n","export interface QueueItem {\n id: string;\n method: \"POST\" | \"PUT\";\n url: string;\n body: unknown;\n headers?: Record<string, string>;\n timestamp: number;\n attempts: number;\n maxAttempts: number;\n}\n\nexport interface OfflineQueueConfig {\n maxItems: number;\n maxAge: number;\n maxAttempts: number;\n storageKey: string;\n debug: boolean;\n}\n\nexport type QueueEventType =\n | \"item:added\"\n | \"item:removed\"\n | \"item:success\"\n | \"item:failed\"\n | \"item:evicted\"\n | \"processing:start\"\n | \"processing:end\";\n\nexport interface QueueEvent {\n type: QueueEventType;\n item?: QueueItem;\n error?: Error;\n queueSize: number;\n}\n\nexport type QueueListener = (event: QueueEvent) => void;\n\nexport const DEFAULT_QUEUE_CONFIG: OfflineQueueConfig = {\n maxItems: 100,\n maxAge: 24 * 60 * 60 * 1000,\n maxAttempts: 3,\n storageKey: \"@paywallo:offline_queue\",\n debug: false,\n};\n","import { HttpClient } from \"../http\";\nimport { networkMonitor, type NetworkState } from \"../network\";\n\nimport { offlineQueue } from \"./OfflineQueue\";\nimport type { QueueItem } from \"./types\";\n\ninterface QueueItemResult {\n success: boolean;\n permanent?: boolean;\n status?: number;\n}\n\nexport interface QueueProcessorConfig {\n debounceMs: number;\n debug: boolean;\n}\n\nconst DEFAULT_PROCESSOR_CONFIG: QueueProcessorConfig = {\n debounceMs: 2000,\n debug: false,\n};\n\nclass QueueProcessorClass {\n private config: QueueProcessorConfig = DEFAULT_PROCESSOR_CONFIG;\n private httpClient: HttpClient | null = null;\n private networkUnsubscribe: (() => void) | null = null;\n private debounceTimeout: ReturnType<typeof setTimeout> | null = null;\n private retryIntervalId: ReturnType<typeof setInterval> | null = null;\n private initialized = false;\n\n initialize(httpClient: HttpClient, config?: Partial<QueueProcessorConfig>): void {\n if (this.initialized) {\n return;\n }\n\n this.httpClient = httpClient;\n this.config = { ...DEFAULT_PROCESSOR_CONFIG, ...config };\n\n this.networkUnsubscribe = networkMonitor.addListener((state: NetworkState) => {\n if (state === \"online\") {\n this.scheduleProcessing();\n }\n });\n\n if (networkMonitor.isOnline() && !offlineQueue.isEmpty()) {\n this.scheduleProcessing();\n }\n\n this.retryIntervalId = setInterval(() => {\n if (networkMonitor.isOnline() && !offlineQueue.isEmpty()) {\n this.scheduleProcessing();\n }\n }, 60000);\n\n this.initialized = true;\n this.log(\"QueueProcessor initialized\");\n }\n\n private scheduleProcessing(): void {\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n }\n\n this.debounceTimeout = setTimeout(() => {\n void this.processQueue();\n }, this.config.debounceMs);\n }\n\n async processQueue(): Promise<{ processed: number; failed: number }> {\n if (!this.httpClient) {\n this.log(\"HttpClient not initialized\");\n return { processed: 0, failed: 0 };\n }\n\n if (!networkMonitor.isOnline()) {\n this.log(\"Offline, skipping queue processing\");\n return { processed: 0, failed: 0 };\n }\n\n return offlineQueue.processQueue(async (item: QueueItem) => {\n return this.processItem(item);\n });\n }\n\n private async processItem(item: QueueItem): Promise<QueueItemResult> {\n if (!this.httpClient) {\n return { success: false, permanent: false };\n }\n\n this.log(\"Processing queue item\", {\n id: item.id,\n url: item.url,\n method: item.method,\n headers: item.headers,\n attempts: item.attempts,\n });\n\n const response = await this.httpClient.request(item.url, {\n method: item.method,\n body: item.body,\n headers: item.headers,\n skipRetry: false,\n });\n\n if (response.ok) {\n this.log(\"Queue item processed successfully\", { id: item.id });\n return { success: true, permanent: false };\n }\n\n if (response.status >= 400 && response.status < 500) {\n this.log(\"Request failed with permanent client error - removing from queue\", {\n id: item.id,\n url: item.url,\n status: response.status,\n appKeyInHeaders: item.headers?.[\"X-App-Key\"],\n });\n return { success: false, permanent: true, status: response.status };\n }\n\n this.log(\"Request failed with server error - will retry\", {\n id: item.id,\n status: response.status,\n });\n return { success: false, permanent: false, status: response.status };\n }\n\n async enqueueIfOffline(\n method: \"POST\" | \"PUT\",\n url: string,\n body: unknown,\n headers?: Record<string, string>\n ): Promise<{ queued: boolean; item?: QueueItem }> {\n if (networkMonitor.isOnline()) {\n return { queued: false };\n }\n\n const item = await offlineQueue.enqueue(method, url, body, headers);\n this.log(\"Request queued for offline\", { id: item.id, url });\n return { queued: true, item };\n }\n\n getQueueSize(): number {\n return offlineQueue.getSize();\n }\n\n async clearQueue(): Promise<void> {\n await offlineQueue.clear();\n }\n\n dispose(): void {\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n this.debounceTimeout = null;\n }\n\n if (this.retryIntervalId) {\n clearInterval(this.retryIntervalId);\n this.retryIntervalId = null;\n }\n\n if (this.networkUnsubscribe) {\n this.networkUnsubscribe();\n this.networkUnsubscribe = null;\n }\n\n this.httpClient = null;\n this.initialized = false;\n }\n\n private log(...args: unknown[]): void {\n if (this.config.debug) console.log(\"[Paywallo:QueueProcessor]\", ...args);\n }\n\n setDebug(debug: boolean): void {\n this.config.debug = debug;\n }\n}\n\nexport const queueProcessor = new QueueProcessorClass();\n/** @deprecated Use `queueProcessor` (camelCase) */\nexport const QueueProcessor = queueProcessor;\n","import type { CampaignResponse, FlagVariant, PaywallConfig } from \"../types\";\n\ntype CacheEntry<T> = { value: T; ts: number; ttl?: number };\n\nexport class ApiCache {\n private readonly CACHE_TTL = 300_000;\n private readonly CACHE_NULL_TTL = 30_000;\n private readonly MAX_SIZE = 200;\n private readonly STALE_WINDOW_MS = 86_400_000;\n\n private variantCache = new Map<string, CacheEntry<FlagVariant>>();\n private paywallCache = new Map<string, CacheEntry<PaywallConfig | null>>();\n private campaignCache = new Map<string, CacheEntry<CampaignResponse | null>>();\n\n getCached<T>(cache: Map<string, CacheEntry<T>>, key: string): T | undefined {\n const entry = cache.get(key);\n if (!entry) return undefined;\n const ttl = entry.ttl ?? this.CACHE_TTL;\n if (Date.now() - entry.ts < ttl) return entry.value;\n cache.delete(key);\n return undefined;\n }\n\n setCached<T>(\n cache: Map<string, CacheEntry<T>>,\n key: string,\n value: T,\n ttlOverride?: number\n ): void {\n const entry: CacheEntry<T> = { value, ts: Date.now() };\n if (ttlOverride !== undefined) entry.ttl = ttlOverride;\n cache.set(key, entry);\n }\n\n evictExpiredEntries<T>(cache: Map<string, CacheEntry<T>>): void {\n if (cache.size <= this.MAX_SIZE) return;\n const now = Date.now();\n for (const [key, entry] of cache) {\n const ttl = entry.ttl ?? this.CACHE_TTL;\n if (now - entry.ts > ttl) cache.delete(key);\n }\n }\n\n getVariant(key: string): FlagVariant | undefined {\n return this.getCached(this.variantCache, key);\n }\n\n setVariant(key: string, value: FlagVariant, ttlOverride?: number): void {\n this.setCached(this.variantCache, key, value, ttlOverride);\n this.evictExpiredEntries(this.variantCache);\n }\n\n get nullTTL(): number {\n return this.CACHE_NULL_TTL;\n }\n\n getStaleVariant(key: string): FlagVariant | undefined {\n const entry = this.variantCache.get(key);\n if (entry && Date.now() - entry.ts < this.STALE_WINDOW_MS) return entry.value;\n return undefined;\n }\n\n getPaywall(key: string): PaywallConfig | null | undefined {\n return this.getCached(this.paywallCache, key);\n }\n\n setPaywall(key: string, value: PaywallConfig | null, ttlOverride?: number): void {\n this.setCached(this.paywallCache, key, value, ttlOverride);\n this.evictExpiredEntries(this.paywallCache);\n }\n\n getStalePaywall(key: string): PaywallConfig | null | undefined {\n const entry = this.paywallCache.get(key);\n if (entry && Date.now() - entry.ts < this.STALE_WINDOW_MS) return entry.value;\n return undefined;\n }\n\n getCampaign(key: string): CampaignResponse | null | undefined {\n return this.getCached(this.campaignCache, key);\n }\n\n setCampaign(key: string, value: CampaignResponse | null, ttlOverride?: number): void {\n this.setCached(this.campaignCache, key, value, ttlOverride);\n this.evictExpiredEntries(this.campaignCache);\n }\n\n getStaleCampaign(key: string): CampaignResponse | null | undefined {\n const entry = this.campaignCache.get(key);\n if (entry && Date.now() - entry.ts < this.STALE_WINDOW_MS) return entry.value;\n return undefined;\n }\n}\n","import { PaywalloError } from \"../../errors/PaywalloError\";\n\nexport class CampaignError extends PaywalloError {\n constructor(code: string, message: string) {\n super(\"campaign\", code, message);\n this.name = \"CampaignError\";\n }\n}\n\nexport const CAMPAIGN_ERROR_CODES = {\n NOT_INITIALIZED: \"CAMPAIGN_NOT_INITIALIZED\",\n FETCH_FAILED: \"CAMPAIGN_FETCH_FAILED\",\n PRELOAD_FAILED: \"CAMPAIGN_PRELOAD_FAILED\",\n NOT_FOUND: \"CAMPAIGN_NOT_FOUND\",\n PRESENT_FAILED: \"CAMPAIGN_PRESENT_FAILED\",\n} as const;\n","import { CAMPAIGN_ERROR_CODES, CampaignError } from \"./CampaignError\";\nimport { PaywalloError } from \"../../errors/PaywalloError\";\nimport { PAYWALL_ERROR_CODES, PaywallError } from \"../paywall/PaywallError\";\nimport type { CampaignResponse, CampaignResult, PaywallResult } from \"../../types\";\n\nimport type { ApiClient } from \"../../core/ApiClient\";\nimport { PaywalloClient } from \"../../core/PaywalloClient\";\nimport { identityManager } from \"../identity/IdentityManager\";\nimport type { PreloadCampaignResult } from \"../../core/types\";\n\ntype PaywallPresenter = (placement: string) => Promise<PaywallResult>;\ntype CampaignPresenter = (campaign: CampaignResponse) => Promise<CampaignResult>;\n\nconst PRELOAD_CACHE_TTL_MS = 5 * 60 * 1000;\nconst PRELOAD_WAIT_MAX_MS = 2000;\nconst PRELOAD_WAIT_INTERVAL_MS = 100;\ninterface PreloadedCampaignCache { campaign: CampaignResponse; preloadedAt: number }\n\nexport class CampaignGateService {\n private readonly preloadedCampaigns: Map<string, PreloadedCampaignCache> = new Map();\n private readonly pendingPreloads: Set<string> = new Set();\n\n async getCampaign(apiClient: ApiClient, placement: string, context?: Record<string, unknown>): Promise<CampaignResponse | null> {\n const distinctId = identityManager.getDistinctId();\n if (!distinctId) return null;\n return apiClient.getCampaign(placement, distinctId, context);\n }\n\n private async waitForPreload(placement: string): Promise<void> {\n if (!this.pendingPreloads.has(placement)) return;\n const deadline = Date.now() + PRELOAD_WAIT_MAX_MS;\n await new Promise<void>((resolve) => {\n const check = () => {\n if (!this.pendingPreloads.has(placement) || Date.now() >= deadline) { resolve(); return; }\n setTimeout(check, PRELOAD_WAIT_INTERVAL_MS);\n };\n check();\n });\n }\n\n async presentCampaign(\n apiClient: ApiClient,\n placement: string,\n hasActive: () => Promise<boolean>,\n paywallPresenter: PaywallPresenter | null,\n campaignPresenter: CampaignPresenter | null,\n context?: Record<string, unknown>,\n ): Promise<CampaignResult> {\n await this.waitForPreload(placement);\n const preloaded = this.getPreloadedCampaign(placement);\n const campaign = preloaded ?? await this.getCampaign(apiClient, placement, context);\n if (!campaign) {\n return { presented: false, purchased: false, cancelled: false, restored: false, error: new CampaignError(CAMPAIGN_ERROR_CODES.NOT_FOUND, \"No campaign found\") };\n }\n if (!context?.forceShow) {\n const isActive = await hasActive();\n if (isActive) {\n return { presented: false, purchased: false, cancelled: false, restored: false, skippedReason: \"subscriber\" };\n }\n }\n if (campaignPresenter) return campaignPresenter(campaign);\n if (!paywallPresenter) throw new PaywallError(PAYWALL_ERROR_CODES.NOT_INITIALIZED, \"PaywalloProvider not mounted. Wrap your app with <PaywalloProvider>\");\n return { ...(await paywallPresenter(placement)), campaignId: campaign.campaignId, variantKey: campaign.variantKey };\n }\n\n async requireSubscriptionWithCampaign(\n apiClient: ApiClient,\n placement: string,\n hasActive: () => Promise<boolean>,\n paywallPresenter: PaywallPresenter | null,\n campaignPresenter: CampaignPresenter | null,\n context?: Record<string, unknown>,\n ): Promise<boolean> {\n const isActive = await hasActive();\n if (PaywalloClient.getConfig()?.debug) console.info(`[Paywallo] requireSubscription — hasActive: ${isActive}`);\n if (isActive) return true;\n const r = await this.presentCampaign(apiClient, placement, hasActive, paywallPresenter, campaignPresenter, context);\n return r.purchased || r.restored;\n }\n\n async preloadCampaign(apiClient: ApiClient, placement: string, context?: Record<string, unknown>): Promise<PreloadCampaignResult> {\n this.pendingPreloads.add(placement);\n try {\n const campaign = await this.getCampaign(apiClient, placement, context);\n if (!campaign?.paywall) {\n return { success: false, error: new CampaignError(CAMPAIGN_ERROR_CODES.NOT_FOUND, `Campaign or paywall not found: ${placement}`) };\n }\n this.preloadedCampaigns.set(placement, { campaign, preloadedAt: Date.now() });\n if (PaywalloClient.getConfig()?.debug) { console.info(`[Paywallo PRELOAD] data cached — placement: ${placement}`); }\n return { success: true };\n } catch (error) {\n return { success: false, error: error instanceof Error ? error : new PaywalloError(\"panel\", \"PANEL_UNKNOWN\", String(error)) };\n } finally {\n this.pendingPreloads.delete(placement);\n }\n }\n\n getPreloadedCampaign(placement: string): CampaignResponse | null {\n const cached = this.preloadedCampaigns.get(placement);\n if (!cached) return null;\n if (Date.now() - cached.preloadedAt >= PRELOAD_CACHE_TTL_MS) { this.preloadedCampaigns.delete(placement); return null; }\n return cached.campaign;\n }\n\n clearPreloaded(): void { this.preloadedCampaigns.clear(); this.pendingPreloads.clear(); }\n}\n\nexport const campaignGateService = new CampaignGateService();\n","import { Platform } from \"react-native\";\n\nconst ZERO_IDFA = \"00000000-0000-0000-0000-000000000000\";\n\nexport type AttStatus = \"granted\" | \"denied\" | \"restricted\" | \"undetermined\" | \"unavailable\";\n\nexport interface AdvertisingIdResult {\n idfv: string | null;\n idfa: string | null;\n gaid: string | null;\n attStatus: AttStatus;\n}\n\nexport class AdvertisingIdManager {\n private cached: AdvertisingIdResult | null = null;\n\n async collect(requestATT = false): Promise<AdvertisingIdResult> {\n if (this.cached) return this.cached;\n\n const fallback: AdvertisingIdResult = { idfv: null, idfa: null, gaid: null, attStatus: \"unavailable\" };\n\n try {\n const tracking = await import(\"expo-tracking-transparency\");\n\n if (Platform.OS === \"ios\") {\n if (!tracking.isAvailable()) {\n const idfv = await this.collectIdfv();\n this.cached = { ...fallback, idfv };\n return this.cached;\n }\n\n const current = await tracking.getTrackingPermissionsAsync();\n let status = current.status as AttStatus;\n let granted = current.granted;\n\n if (status === \"undetermined\" && requestATT) {\n const result = await tracking.requestTrackingPermissionsAsync();\n status = result.status as AttStatus;\n granted = result.granted;\n }\n\n const idfv = await this.collectIdfv();\n const idfa = granted ? this.sanitizeId(tracking.getAdvertisingId()) : null;\n this.cached = { idfv, idfa, gaid: null, attStatus: status };\n return this.cached;\n }\n\n if (Platform.OS === \"android\") {\n const androidStatus = await tracking.getTrackingPermissionsAsync();\n const optedIn = androidStatus.granted;\n const rawGaid = optedIn ? tracking.getAdvertisingId() : null;\n const gaid = this.sanitizeId(rawGaid);\n this.cached = { idfv: null, idfa: null, gaid, attStatus: \"unavailable\" };\n return this.cached;\n }\n\n this.cached = fallback;\n return this.cached;\n } catch {\n this.cached = fallback;\n return this.cached;\n }\n }\n\n private async collectIdfv(): Promise<string | null> {\n try {\n const app = await import(\"expo-application\");\n const idfv = await app.getIosIdForVendorAsync();\n return this.sanitizeId(idfv);\n } catch {\n return null;\n }\n }\n\n private sanitizeId(id: string | null | undefined): string | null {\n if (!id || id === ZERO_IDFA) return null;\n return id;\n }\n}\n","import { Dimensions, Platform } from \"react-native\";\nimport AsyncStorage from \"@react-native-async-storage/async-storage\";\nimport RNDeviceInfo from \"react-native-device-info\";\n\nimport type { ApiClient } from \"../../core/ApiClient\";\nimport { AdvertisingIdManager } from \"./AdvertisingIdManager\";\nimport { metaBridge } from \"./MetaBridge\";\nimport { identityManager } from \"./IdentityManager\";\nimport { installReferrerManager } from \"./InstallReferrerManager\";\nimport { sessionManager } from \"../session/SessionManager\";\nimport { SecureStorage } from \"../../core/storage/SecureStorage\";\n\ntype DeviceInfoType = {\n getModel: () => string;\n getSystemVersion: () => string;\n getVersion: () => string;\n getBuildNumber: () => string;\n getCarrier?: () => Promise<string>;\n getTotalDiskCapacity?: () => Promise<number>;\n getFreeDiskStorage?: () => Promise<number>;\n getTotalMemory?: () => Promise<number>;\n getBrand?: () => string;\n getInstallerPackageName?: () => Promise<string>;\n};\n\nexport class InstallTracker {\n private readonly debug: boolean;\n private readonly advertisingIdManager: AdvertisingIdManager;\n\n constructor(debug = false, advertisingIdManager?: AdvertisingIdManager) {\n this.debug = debug;\n this.advertisingIdManager = advertisingIdManager ?? new AdvertisingIdManager();\n }\n\n async trackIfNeeded(apiClient: ApiClient, requestATT = false): Promise<void> {\n const storage = new SecureStorage(this.debug);\n const alreadyTracked = await storage.get(\"@panel:install_tracked\");\n if (alreadyTracked) return;\n let fallbackTracked: string | null = null;\n try {\n fallbackTracked = await AsyncStorage.getItem(\"@paywallo:install_tracked\");\n } catch { /* AsyncStorage not available */ }\n if (fallbackTracked) return;\n\n const distinctId = identityManager.getDistinctId();\n const sessionId = sessionManager.getSessionId();\n const installedAt = Date.now();\n\n if (!distinctId) return;\n\n const deviceInfo: DeviceInfoType = RNDeviceInfo;\n\n let deviceData: Record<string, string | number> = {};\n try {\n const screen = Dimensions.get(\"screen\");\n const screenWidth = Math.round(screen.width ?? 0);\n const screenHeight = Math.round(screen.height ?? 0);\n const locale = Intl.DateTimeFormat().resolvedOptions().locale ?? \"unknown\";\n const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone ?? \"unknown\";\n const deviceModel = deviceInfo?.getModel() || \"unknown\";\n const osVersion = deviceInfo?.getSystemVersion() || \"unknown\";\n const appVersion = deviceInfo?.getVersion() || \"unknown\";\n const buildNumber = deviceInfo?.getBuildNumber() || \"0\";\n\n let carrier = \"unknown\";\n try { carrier = await deviceInfo?.getCarrier?.() ?? \"unknown\"; } catch { /* non-critical */ }\n\n let totalDisk = 0;\n try { totalDisk = Number(await deviceInfo?.getTotalDiskCapacity?.()) || 0; } catch { /* non-critical */ }\n\n let freeDisk = 0;\n try { freeDisk = Number(await deviceInfo?.getFreeDiskStorage?.()) || 0; } catch { /* non-critical */ }\n\n let totalRam = 0;\n try { totalRam = Number(await deviceInfo?.getTotalMemory?.()) || 0; } catch { /* non-critical */ }\n\n let brand = \"unknown\";\n try { brand = deviceInfo?.getBrand?.() ?? \"unknown\"; } catch { /* non-critical */ }\n\n let installerPackage: string | null = null;\n try {\n if (Platform.OS === \"android\") {\n installerPackage = await deviceInfo?.getInstallerPackageName?.() ?? null;\n }\n } catch { /* non-critical */ }\n\n deviceData = {\n deviceModel,\n osVersion,\n appVersion,\n buildNumber,\n ...(screenWidth > 0 && { screenWidth }),\n ...(screenHeight > 0 && { screenHeight }),\n timezone,\n locale,\n ...(carrier !== \"unknown\" && { carrier }),\n ...(totalDisk > 0 && { totalDisk }),\n ...(freeDisk > 0 && { freeDisk }),\n ...(totalRam > 0 && { totalRam }),\n ...(brand !== \"unknown\" && { brand }),\n ...(installerPackage && { installerPackage }),\n };\n } catch { /* non-critical */ }\n\n const [fbAnonId, referrer, adIds] = await Promise.all([\n metaBridge.getAnonymousID(),\n installReferrerManager.getReferrer(),\n this.advertisingIdManager.collect(requestATT),\n ]);\n\n let effectiveAnonId = fbAnonId;\n if (!effectiveAnonId) {\n const stored = await storage.get(\"@panel:anon_id\");\n if (stored) {\n effectiveAnonId = stored;\n } else {\n const { generateUUID } = await import(\"../../utils/uuid\");\n effectiveAnonId = `PW_${generateUUID()}`;\n await storage.set(\"@panel:anon_id\", effectiveAnonId).catch(() => {});\n }\n }\n\n try {\n await apiClient.trackEvent(\"$app_installed\", distinctId, {\n installedAt,\n platform: Platform.OS,\n ...(sessionId && { sessionId }),\n ...deviceData,\n ...(effectiveAnonId && { fbAnonId: effectiveAnonId }),\n ...(referrer.rawReferrer && { installReferrer: referrer.rawReferrer }),\n ...(referrer.trackingId && { referrerTrackingId: referrer.trackingId }),\n ...(referrer.fbclid && { referrerFbclid: referrer.fbclid }),\n ...(referrer.utmSource && { referrerUtmSource: referrer.utmSource }),\n ...(referrer.utmMedium && { referrerUtmMedium: referrer.utmMedium }),\n ...(referrer.utmCampaign && { referrerUtmCampaign: referrer.utmCampaign }),\n ...(adIds.idfa && { idfa: adIds.idfa }),\n ...(adIds.idfv && { idfv: adIds.idfv }),\n ...(adIds.gaid && { gaid: adIds.gaid }),\n attStatus: adIds.attStatus,\n });\n\n if (Platform.OS === \"ios\") {\n void this.callDeferredMatch(apiClient, deviceData, adIds, effectiveAnonId).catch(() => {});\n }\n\n await storage.set(\"@panel:install_tracked\", String(installedAt));\n try {\n await AsyncStorage.setItem(\"@paywallo:install_tracked\", String(installedAt));\n } catch { /* non-critical */ }\n } catch { /* non-critical */ }\n }\n\n private async callDeferredMatch(\n apiClient: ApiClient,\n deviceData: Record<string, string | number>,\n adIds: { idfv: string | null },\n anonId: string | null,\n ): Promise<void> {\n const storage = new SecureStorage(this.debug);\n const alreadyMatched = await storage.get(\"@panel:deferred_match_done\");\n if (alreadyMatched) return;\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), 5000);\n\n try {\n const baseUrl = apiClient.getBaseUrl();\n const appKey = (apiClient as unknown as { appKey: string }).appKey;\n\n await fetch(`${baseUrl}/api/v1/attribution/deferred-match`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", \"X-App-Key\": appKey },\n body: JSON.stringify({\n idfv: adIds.idfv,\n deviceModel: deviceData.deviceModel,\n osVersion: deviceData.osVersion,\n screenWidth: deviceData.screenWidth,\n screenHeight: deviceData.screenHeight,\n timezone: deviceData.timezone,\n locale: deviceData.locale,\n fbAnonId: anonId,\n }),\n signal: controller.signal,\n });\n\n await storage.set(\"@panel:deferred_match_done\", \"1\").catch(() => {});\n } catch {\n // Non-critical — deferred match is best-effort\n } finally {\n clearTimeout(timer);\n }\n }\n}\n","import { NativeModules } from \"react-native\";\n\nconst TIMEOUT_MS = 2000;\n\ninterface PaywalloFBBridgeModule {\n getAnonymousID(): Promise<string | null>;\n logEvent(name: string, params: Record<string, unknown>): Promise<void>;\n logPurchase(amount: number, currency: string, params: Record<string, unknown>): Promise<void>;\n setUserID(userId: string): void;\n flush(): void;\n}\n\nconst NativeBridge: PaywalloFBBridgeModule | null =\n NativeModules.PaywalloFBBridge ?? null;\n\nexport class MetaBridge {\n async getAnonymousID(): Promise<string | null> {\n if (!NativeBridge) return null;\n try {\n let timerId: ReturnType<typeof setTimeout> | undefined;\n const timeout = new Promise<null>((resolve) => {\n timerId = setTimeout(() => resolve(null), TIMEOUT_MS);\n });\n const result = await Promise.race([NativeBridge.getAnonymousID(), timeout]);\n clearTimeout(timerId);\n return result;\n } catch {\n return null;\n }\n }\n\n async logEvent(name: string, params: Record<string, unknown> = {}): Promise<void> {\n if (!NativeBridge) return;\n try {\n await NativeBridge.logEvent(name, params);\n } catch {\n // swallow silently\n }\n }\n\n async logPurchase(amount: number, currency: string, params: Record<string, unknown> = {}): Promise<void> {\n if (!NativeBridge) return;\n try {\n await NativeBridge.logPurchase(amount, currency, params);\n } catch {\n // swallow silently\n }\n }\n\n setUserID(userId: string): void {\n if (!NativeBridge) return;\n try {\n NativeBridge.setUserID(userId);\n } catch {\n // swallow silently\n }\n }\n\n flush(): void {\n if (!NativeBridge) return;\n try {\n NativeBridge.flush();\n } catch {\n // swallow silently\n }\n }\n}\n\nexport const metaBridge = new MetaBridge();\n","import { Platform } from \"react-native\";\n\nconst REFERRER_TIMEOUT_MS = 5000;\n\ninterface ReferrerResult {\n rawReferrer: string | null;\n trackingId: string | null;\n fbclid: string | null;\n utmSource: string | null;\n utmMedium: string | null;\n utmCampaign: string | null;\n}\n\nexport class InstallReferrerManager {\n async getReferrer(): Promise<ReferrerResult> {\n if (Platform.OS !== \"android\") {\n return this.emptyResult();\n }\n\n let timerId: ReturnType<typeof setTimeout> | undefined;\n const timeoutPromise = new Promise<ReferrerResult>((resolve) => {\n timerId = setTimeout(() => resolve(this.emptyResult()), REFERRER_TIMEOUT_MS);\n });\n\n const fetchPromise = this.fetchReferrer();\n\n const result = await Promise.race([fetchPromise, timeoutPromise]);\n clearTimeout(timerId);\n return result;\n }\n\n private async fetchReferrer(): Promise<ReferrerResult> {\n try {\n const Application = await import(\"expo-application\");\n const referrer = await Application.getInstallReferrerAsync();\n\n if (!referrer) return this.emptyResult();\n\n const capped = referrer.slice(0, 2048);\n const params = this.parseReferrer(capped);\n return {\n rawReferrer: capped,\n trackingId: params[\"tracking_id\"] || null,\n fbclid: params[\"fbclid\"] || null,\n utmSource: params[\"utm_source\"] || null,\n utmMedium: params[\"utm_medium\"] || null,\n utmCampaign: params[\"utm_campaign\"] || null,\n };\n } catch {\n return this.emptyResult();\n }\n }\n\n private parseReferrer(referrer: string): Record<string, string> {\n const result: Record<string, string> = {};\n for (const pair of referrer.split(\"&\")) {\n const eqIndex = pair.indexOf(\"=\");\n if (eqIndex === -1) continue;\n try {\n const key = decodeURIComponent(pair.slice(0, eqIndex).replace(/\\+/g, \" \"));\n const raw = pair.slice(eqIndex + 1).replace(/\\+/g, \" \");\n const value = decodeURIComponent(raw);\n if (key) result[key] = value;\n } catch {\n }\n }\n return result;\n }\n\n private emptyResult(): ReferrerResult {\n return {\n rawReferrer: null,\n trackingId: null,\n fbclid: null,\n utmSource: null,\n utmMedium: null,\n utmCampaign: null,\n };\n }\n}\n\nexport const installReferrerManager = new InstallReferrerManager();\n","import { AppState, AppStateStatus } from \"react-native\";\n\nimport { SESSION_ERROR_CODES, SessionError } from \"./SessionError\";\nimport { EmergencyPaywallHandler, SessionConfig, SessionState } from \"./types\";\nimport { generateUUID } from \"../../utils/uuid\";\n\nimport { ApiClient } from \"../../core/ApiClient\";\nimport {\n trackAppBackground,\n trackAppOpen,\n trackSessionEnd,\n trackSessionStart,\n} from \"./sessionTracking\";\nimport { SecureStorage } from \"../../core/storage/SecureStorage\";\n\nconst SESSION_ID_KEY = \"current_session_id\";\nconst SESSION_START_KEY = \"session_start\";\nconst EMERGENCY_PAYWALL_SHOWN_KEY = \"emergency_paywall_shown\";\nconst SESSION_TIMEOUT_MS = 30 * 60 * 1000;\n\nexport class SessionManager {\n private sessionId: string | null = null;\n private sessionStartedAt: Date | null = null;\n private appState: AppStateStatus = \"active\";\n private apiClient: ApiClient | null = null;\n private debug = false;\n private initialized = false;\n private config: SessionConfig = {};\n private backgroundTimestamp: number | null = null;\n private appStateSubscription: { remove: () => void } | null = null;\n private emergencyPaywallHandler: EmergencyPaywallHandler | null = null;\n private emergencyPaywallShownInSession = false;\n private secureStorage: SecureStorage | null = null;\n\n async initialize(apiClient: ApiClient, config: SessionConfig = {}, debug = false): Promise<void> {\n if (this.initialized) {\n return;\n }\n\n this.apiClient = apiClient;\n this.debug = debug;\n this.secureStorage = new SecureStorage(debug);\n this.config = {\n sessionTimeoutMs: config.sessionTimeoutMs ?? SESSION_TIMEOUT_MS,\n trackAppState: config.trackAppState ?? true,\n };\n\n await this.restoreSession();\n\n if (this.config.trackAppState) {\n this.setupAppStateListener();\n }\n\n this.initialized = true;\n }\n\n async startSession(): Promise<string> {\n this.ensureInitialized();\n\n if (this.sessionId) {\n await this.endSession();\n }\n\n this.sessionId = generateUUID();\n this.sessionStartedAt = new Date();\n this.emergencyPaywallShownInSession = false;\n\n await Promise.all([\n this.secureStorage!.set(SESSION_ID_KEY, this.sessionId),\n this.secureStorage!.set(SESSION_START_KEY, this.sessionStartedAt.toISOString()),\n this.secureStorage!.remove(EMERGENCY_PAYWALL_SHOWN_KEY),\n ]);\n\n await this.trackSessionStart();\n\n return this.sessionId;\n }\n\n async endSession(): Promise<void> {\n this.ensureInitialized();\n\n if (!this.sessionId || !this.sessionStartedAt) {\n return;\n }\n\n await this.trackSessionEnd();\n\n this.sessionId = null;\n this.sessionStartedAt = null;\n\n await Promise.all([\n this.secureStorage!.remove(SESSION_ID_KEY),\n this.secureStorage!.remove(SESSION_START_KEY),\n ]);\n }\n\n getSessionId(): string | null {\n return this.sessionId;\n }\n\n getSessionDuration(): number {\n if (!this.sessionStartedAt) {\n return 0;\n }\n return Math.floor((Date.now() - this.sessionStartedAt.getTime()) / 1000);\n }\n\n isSessionActive(): boolean {\n return this.sessionId !== null;\n }\n\n getState(): SessionState {\n return {\n sessionId: this.sessionId,\n startedAt: this.sessionStartedAt,\n isActive: this.isSessionActive(),\n duration: this.getSessionDuration(),\n };\n }\n\n destroy(): void {\n if (this.appStateSubscription) {\n this.appStateSubscription.remove();\n this.appStateSubscription = null;\n }\n this.initialized = false;\n }\n\n registerEmergencyPaywallHandler(handler: EmergencyPaywallHandler): void {\n this.emergencyPaywallHandler = handler;\n }\n\n private async restoreSession(): Promise<void> {\n const [sessionId, sessionStart] = await Promise.all([\n this.secureStorage!.get(SESSION_ID_KEY),\n this.secureStorage!.get(SESSION_START_KEY),\n ]).catch(() => [null, null]);\n\n if (sessionId && sessionStart) {\n const startedAt = new Date(sessionStart);\n const elapsed = Date.now() - startedAt.getTime();\n\n if (elapsed < (this.config.sessionTimeoutMs ?? SESSION_TIMEOUT_MS)) {\n this.sessionId = sessionId;\n this.sessionStartedAt = startedAt;\n return;\n }\n\n await Promise.all([\n this.secureStorage!.remove(SESSION_ID_KEY),\n this.secureStorage!.remove(SESSION_START_KEY),\n ]).catch(() => {});\n }\n }\n\n private setupAppStateListener(): void {\n if (this.appStateSubscription) {\n this.appStateSubscription.remove();\n }\n\n this.appStateSubscription = AppState.addEventListener(\"change\", this.handleAppStateChange);\n }\n\n private handleAppStateChange = async (nextAppState: AppStateStatus): Promise<void> => {\n const previousState = this.appState;\n this.appState = nextAppState;\n\n if (nextAppState === \"active\" && previousState !== \"active\") {\n await this.handleForeground();\n } else if (nextAppState === \"background\" && previousState === \"active\") {\n await this.handleBackground();\n }\n };\n\n private async handleForeground(): Promise<void> {\n if (this.backgroundTimestamp) {\n const elapsed = Date.now() - this.backgroundTimestamp;\n this.backgroundTimestamp = null;\n\n if (elapsed > (this.config.sessionTimeoutMs ?? SESSION_TIMEOUT_MS)) {\n await this.startSession();\n await this.trackAppOpen();\n await this.checkEmergencyPaywall();\n return;\n }\n }\n\n if (!this.sessionId) {\n await this.startSession();\n }\n\n await this.trackAppOpen();\n await this.checkEmergencyPaywall();\n }\n\n private async handleBackground(): Promise<void> {\n this.backgroundTimestamp = Date.now();\n await this.trackAppBackground();\n }\n\n private async checkEmergencyPaywall(): Promise<void> {\n if (!this.apiClient || !this.emergencyPaywallHandler) {\n return;\n }\n\n if (this.emergencyPaywallShownInSession) {\n return;\n }\n\n const response = await this.apiClient.getEmergencyPaywall().catch(() => null);\n\n if (response?.enabled && response.paywallId) {\n this.emergencyPaywallShownInSession = true;\n await this.secureStorage!.set(EMERGENCY_PAYWALL_SHOWN_KEY, \"true\");\n await this.emergencyPaywallHandler(response.paywallId);\n }\n }\n\n private async trackSessionStart(): Promise<void> {\n if (!this.apiClient || !this.sessionId) return;\n await trackSessionStart(this.apiClient, this.sessionId, this.sessionStartedAt);\n }\n\n private async trackSessionEnd(): Promise<void> {\n if (!this.apiClient || !this.sessionId) return;\n await trackSessionEnd(this.apiClient, this.sessionId, this.getSessionDuration(), this.sessionStartedAt);\n }\n\n private async trackAppOpen(): Promise<void> {\n if (!this.apiClient) return;\n await trackAppOpen(this.apiClient, this.sessionId);\n }\n\n private async trackAppBackground(): Promise<void> {\n if (!this.apiClient) return;\n await trackAppBackground(this.apiClient, this.sessionId, this.getSessionDuration());\n }\n\n private ensureInitialized(): void {\n if (!this.initialized) {\n throw new SessionError(\n SESSION_ERROR_CODES.NOT_INITIALIZED,\n \"SessionManager not initialized. Call initialize() first\"\n );\n }\n }\n\n private log(...args: unknown[]): void {\n if (this.debug) console.log(\"[Paywallo:Session]\", ...args);\n }\n}\n\nexport const sessionManager = new SessionManager();\n","import type { ApiClient } from \"../../core/ApiClient\";\nimport { identityManager } from \"../identity/IdentityManager\";\n\nexport async function trackSessionStart(\n apiClient: ApiClient,\n sessionId: string,\n sessionStartedAt: Date | null\n): Promise<void> {\n const distinctId = identityManager.getDistinctId();\n await apiClient\n .trackEvent(\"$session_start\", distinctId, {\n sessionId,\n timestamp: sessionStartedAt?.toISOString() ?? null,\n })\n .catch(() => {});\n}\n\nexport async function trackSessionEnd(\n apiClient: ApiClient,\n sessionId: string,\n durationSeconds: number,\n sessionStartedAt: Date | null\n): Promise<void> {\n const distinctId = identityManager.getDistinctId();\n await apiClient\n .trackEvent(\"$session_end\", distinctId, {\n sessionId,\n durationSeconds,\n startedAt: sessionStartedAt?.toISOString() ?? null,\n endedAt: new Date().toISOString(),\n })\n .catch(() => {});\n}\n\nexport async function trackAppOpen(\n apiClient: ApiClient,\n sessionId: string | null\n): Promise<void> {\n const distinctId = identityManager.getDistinctId();\n await apiClient\n .trackEvent(\"$app_open\", distinctId, {\n sessionId,\n timestamp: new Date().toISOString(),\n })\n .catch(() => {});\n}\n\nexport async function trackAppBackground(\n apiClient: ApiClient,\n sessionId: string | null,\n durationSeconds: number\n): Promise<void> {\n const distinctId = identityManager.getDistinctId();\n await apiClient\n .trackEvent(\"$app_background\", distinctId, {\n sessionId,\n durationSeconds,\n timestamp: new Date().toISOString(),\n })\n .catch(() => {});\n}\n","import { ANALYTICS_ERROR_CODES,AnalyticsError } from \"../domains/analytics\";\nimport { CLIENT_ERROR_CODES,ClientError } from \"../errors/ClientError\";\nimport { PAYWALL_ERROR_CODES,PaywallError } from \"../domains/paywall\";\nimport type {\n CampaignResponse,\n CampaignResult,\n ConditionalFlagContext,\n IdentifyOptions,\n PaywallResult,\n RestoreResult,\n Subscription,\n TrackEventOptions,\n UserProperties,\n} from \"../types\";\n\nimport { affiliateManager } from \"../domains/affiliate\";\nimport { subscriptionCache } from \"../domains/subscription/SubscriptionCache\";\nimport { subscriptionManager } from \"../domains/subscription/SubscriptionManager\";\nimport { ApiClient } from \"./ApiClient\";\nimport { campaignGateService } from \"../domains/campaign\";\nimport { identityManager } from \"../domains/identity\";\nimport { InstallTracker } from \"../domains/identity\";\nimport { networkMonitor } from \"./network\";\nimport { offlineQueue, queueProcessor } from \"./queue\";\nimport type { EmergencyPaywallHandler } from \"../domains/session/types\";\nimport { sessionManager } from \"../domains/session\";\nimport type { IPaywalloClient, PaywalloInitConfig, PreloadCampaignResult } from \"./types\";\n\nexport type { IPaywalloClient, PaywalloInitConfig, PreloadCampaignResult } from \"./types\";\n\ntype PaywallPresenter = (placement: string) => Promise<PaywallResult>;\ntype CampaignPresenter = (campaign: CampaignResponse) => Promise<CampaignResult>;\ntype SubscriptionGetter = () => Promise<Subscription | null>;\ntype ActiveChecker = () => Promise<boolean>;\ntype RestoreHandler = () => Promise<RestoreResult>;\n\nfunction isValidEventName(name: string): boolean {\n if (name.startsWith(\"$\")) return /^\\$[a-z][a-z0-9]*(_[a-z0-9]+)*$/.test(name);\n return /^[a-z][a-z0-9]*(_[a-z0-9]+)*$/.test(name);\n}\n\nclass PaywalloClientClass {\n private config: import(\"../types\").PaywalloConfig | null = null;\n private apiClient: ApiClient | null = null;\n private initPromise: Promise<void> | null = null;\n private readyPromise: Promise<void> | null = null;\n private resolveReady: (() => void) | null = null;\n private paywallPresenter: PaywallPresenter | null = null;\n private campaignPresenter: CampaignPresenter | null = null;\n private subscriptionGetter: SubscriptionGetter | null = null;\n private activeChecker: ActiveChecker | null = null;\n private restoreHandler: RestoreHandler | null = null;\n private lastOnboardingStepTimestamp: number | null = null;\n private pendingConfig: PaywalloInitConfig | null = null;\n private networkCleanup: (() => void) | null = null;\n private initAttempts = 0;\n private autoPreloadedPlacement: string | null = null;\n private autoPreloadPlacementPromise: Promise<string | null> | null = null;\n private readonly sessionFlagsMap: Map<string, string | null> = new Map();\n\n private static readonly MAX_INIT_RETRIES = 3;\n private static readonly RETRY_DELAYS = [2000, 5000, 10000];\n\n async init(config: PaywalloInitConfig): Promise<void> {\n if (!this.readyPromise) {\n this.readyPromise = new Promise<void>((resolve) => { this.resolveReady = resolve; });\n }\n if (this.config && this.apiClient) {\n return;\n }\n if (this.initPromise) {\n await this.initPromise;\n return;\n }\n if (!config.appKey) throw new ClientError(CLIENT_ERROR_CODES.MISSING_APP_KEY, \"appKey is required\");\n this.pendingConfig = config;\n this.initAttempts = 0;\n this.initPromise = this.initWithRetry(config);\n try {\n await this.initPromise;\n } catch (error) {\n this.initPromise = null;\n this.config = null;\n this.apiClient = null;\n this.reportInitFailure(config, error, \"ALL_RETRIES_EXHAUSTED\");\n this.setupNetworkRecovery(config);\n throw error;\n }\n }\n\n isReady(): boolean {\n return this.config !== null && this.apiClient !== null;\n }\n\n waitUntilReady(): Promise<void> {\n if (this.isReady()) return Promise.resolve();\n if (!this.readyPromise) {\n this.readyPromise = new Promise<void>((resolve) => { this.resolveReady = resolve; });\n }\n return this.readyPromise;\n }\n\n private async initWithRetry(config: PaywalloInitConfig): Promise<void> {\n while (this.initAttempts <= PaywalloClientClass.MAX_INIT_RETRIES) {\n try {\n await this.doInit(config);\n if (this.initAttempts > 0) {\n this.reportInitSuccess(config, this.initAttempts);\n }\n this.cleanupNetworkRecovery();\n this.pendingConfig = null;\n return;\n } catch (error) {\n this.initAttempts++;\n if (this.initAttempts > PaywalloClientClass.MAX_INIT_RETRIES) throw error;\n const delay = PaywalloClientClass.RETRY_DELAYS[this.initAttempts - 1] ?? 10000;\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n }\n\n private setupNetworkRecovery(config: PaywalloInitConfig): void {\n if (this.networkCleanup) return;\n if (!networkMonitor.isInitialized()) return;\n this.networkCleanup = networkMonitor.addListener((state) => {\n if (state !== \"online\") return;\n if (this.config && this.apiClient) return;\n if (this.initPromise) return;\n this.initPromise = this.initWithRetry(config);\n this.initPromise\n .catch(() => { this.reportInitFailure(config, null, \"NETWORK_RECOVERY_FAILED\"); })\n .finally(() => { if (!this.isReady()) this.initPromise = null; });\n });\n }\n\n private cleanupNetworkRecovery(): void {\n if (this.networkCleanup) { this.networkCleanup(); this.networkCleanup = null; }\n }\n\n private reportInitFailure(config: PaywalloInitConfig, error: unknown, reason: string): void {\n try {\n const tempClient = new ApiClient(config.appKey, config.apiUrl ?? \"https://paywallo.com.br\", config.debug);\n void tempClient.reportError(\"INIT_FAILED\", reason, {\n attempts: this.initAttempts,\n error: error instanceof Error ? error.message : String(error),\n });\n } catch (err) {\n if (config.debug) console.warn(\"[Paywallo] reportInitFailure error\", err);\n }\n }\n\n private reportInitSuccess(config: PaywalloInitConfig, attempts: number): void {\n try {\n if (this.apiClient) {\n void this.apiClient.reportError(\"INIT_RECOVERED\", `Succeeded after ${attempts} retries`, { attempts });\n }\n } catch (err) {\n if (config.debug) console.warn(\"[Paywallo] reportInitSuccess error\", err);\n }\n }\n\n private async resolveSessionFlags(keys: string[], apiClient: ApiClient, distinctId: string): Promise<void> {\n try {\n const results = await apiClient.evaluateFlags(keys, distinctId);\n this.sessionFlagsMap.clear();\n for (const key of keys) {\n this.sessionFlagsMap.set(key, key in results ? results[key] : null);\n }\n } catch (error) {\n for (const key of keys) {\n this.sessionFlagsMap.set(key, null);\n }\n }\n }\n\n private async doInit(config: PaywalloInitConfig): Promise<void> {\n const environment = config.environment ?? (typeof __DEV__ !== \"undefined\" && __DEV__ ? \"Sandbox\" : \"Production\");\n const offlineQueueEnabled = config.offlineQueueEnabled !== false;\n\n await Promise.all([\n networkMonitor.initialize({ debug: config.debug }),\n offlineQueue.initialize({ debug: config.debug }).then(() =>\n offlineQueue.clearItemsWithInvalidAppKey(config.appKey)\n ),\n ]);\n\n this.apiClient = new ApiClient(config.appKey, config.apiUrl ?? \"https://paywallo.com.br\", config.debug, environment, offlineQueueEnabled, config.timeout);\n queueProcessor.initialize(this.apiClient.getHttpClient(), { debug: config.debug });\n affiliateManager.initialize(this.apiClient, config.debug);\n subscriptionManager.init({\n serverUrl: this.apiClient.getBaseUrl(),\n appKey: config.appKey,\n cacheTTL: config.subscriptionCacheTTL,\n debug: config.debug,\n });\n\n await Promise.all([\n identityManager.initialize(this.apiClient, config.debug),\n sessionManager.initialize(this.apiClient, config.sessionConfig, config.debug),\n ]);\n const distinctId = identityManager.getDistinctId();\n\n if (config.autoStartSession !== false) {\n sessionManager.startSession().catch(() => {});\n }\n new InstallTracker(config.debug).trackIfNeeded(this.apiClient, config.requestATT === true).catch(() => {});\n\n if (config.sessionFlags && config.sessionFlags.length > 0) {\n await this.resolveSessionFlags(config.sessionFlags, this.apiClient, distinctId);\n }\n\n this.config = config;\n if (this.resolveReady) { this.resolveReady(); this.resolveReady = null; }\n if (config.debug) console.info(\"[Paywallo INIT] complete\");\n\n if (this.apiClient) {\n const apiClientRef = this.apiClient;\n if (config.autoPreloadCampaign) {\n this.autoPreloadedPlacement = config.autoPreloadCampaign;\n this.autoPreloadPlacementPromise = Promise.resolve(config.autoPreloadCampaign);\n if (config.debug) console.info(`[Paywallo PRELOAD] started — placement: ${config.autoPreloadCampaign}`);\n void campaignGateService.preloadCampaign(apiClientRef, config.autoPreloadCampaign).catch(() => {});\n } else {\n this.autoPreloadPlacementPromise = apiClientRef.getPrimaryCampaign(distinctId).then((primary) => {\n const placement = primary?.placement ?? primary?.paywall?.placement;\n if (placement) {\n this.autoPreloadedPlacement = placement;\n if (config.debug) console.info(`[Paywallo PRELOAD] started — placement: ${placement}`);\n void campaignGateService.preloadCampaign(apiClientRef, placement).catch(() => {});\n return placement;\n }\n return null;\n }).catch(() => null);\n }\n }\n }\n\n async identify(options?: IdentifyOptions | UserProperties): Promise<void> {\n this.ensureInitialized();\n if (this.config?.debug) console.info(\"[Paywallo IDENTIFY]\", options);\n await identityManager.identify(options);\n }\n async track(eventName: string, options?: TrackEventOptions): Promise<void> {\n const apiClient = this.getApiClientOrThrow();\n const distinctId = identityManager.getDistinctId();\n if (!distinctId) {\n if (this.config?.debug) console.info(`[Paywallo TRACK] ${eventName} skipped (no distinctId)`);\n return;\n }\n if (!isValidEventName(eventName)) {\n const msg = `Invalid event name: \"${eventName}\". Use snake_case or $reserved_name.`;\n throw new ClientError(CLIENT_ERROR_CODES.INVALID_EVENT_NAME, msg);\n }\n if (this.config?.debug && eventName.startsWith(\"$purchase\")) console.info(`[Paywallo TRACK] ${eventName}`, options?.properties ?? {});\n const sessionId = sessionManager.getSessionId();\n await apiClient.trackEvent(eventName, distinctId, {\n ...identityManager.getProperties(), ...options?.properties, ...(sessionId && { sessionId }),\n }, options?.timestamp);\n }\n\n async onboardingStep(index: number, name: string): Promise<void> {\n const apiClient = this.getApiClientOrThrow();\n const distinctId = identityManager.getDistinctId();\n if (!distinctId) {\n return;\n }\n if (!Number.isInteger(index) || index < 0) {\n const msg = `Invalid stepIndex: \"${index}\". Must be a non-negative integer.`;\n throw new AnalyticsError(ANALYTICS_ERROR_CODES.INVALID_STEP_INDEX, msg);\n }\n const now = Date.now();\n const timeOnPreviousStep = this.lastOnboardingStepTimestamp !== null\n ? Math.round((now - this.lastOnboardingStepTimestamp) / 1000)\n : 0;\n this.lastOnboardingStepTimestamp = now;\n await apiClient.trackEvent(\"$onboarding_step\", distinctId, {\n stepIndex: index,\n stepName: name,\n timeOnPreviousStep,\n });\n }\n\n async coreAction(actionName: string): Promise<void> {\n const apiClient = this.getApiClientOrThrow();\n const distinctId = identityManager.getDistinctId();\n if (!distinctId) {\n return;\n }\n if (!actionName || typeof actionName !== \"string\") {\n const msg = `Invalid actionName: \"${actionName}\". Must be a non-empty string.`;\n throw new AnalyticsError(ANALYTICS_ERROR_CODES.INVALID_ACTION_NAME, msg);\n }\n const sessionId = sessionManager.getSessionId();\n await apiClient.trackEvent(\"$core_action\", distinctId, {\n ...identityManager.getProperties(), actionName, timestamp: Date.now(), ...(sessionId && { sessionId }),\n });\n }\n\n async getVariantCached(flagKey: string, defaultValue?: string): Promise<import(\"../types\").FlagVariant> {\n this.ensureInitialized();\n const apiClient = this.getApiClientOrThrow();\n const distinctId = identityManager.getDistinctId();\n const result = await apiClient.getVariantFromCache(flagKey, distinctId);\n if (result) return result;\n void apiClient.getVariant(flagKey, distinctId).catch(() => {});\n return { variant: defaultValue ?? null, payload: undefined };\n }\n\n async getVariant(flagKey: string): Promise<import(\"../types\").FlagVariant> {\n try {\n const distinctId = identityManager.getDistinctId();\n if (!distinctId) {\n if (this.config?.debug) console.info(`[Paywallo FLAG] ${flagKey} → null (no distinctId)`);\n return { variant: null };\n }\n const result = await this.getApiClientOrThrow().getVariant(flagKey, distinctId);\n if (this.config?.debug) console.info(`[Paywallo FLAG] ${flagKey} →`, result.variant);\n return result;\n } catch (error) {\n if (this.config?.debug) console.warn(`[Paywallo FLAG] ${flagKey} → error`, error);\n if (this.apiClient) void this.apiClient.reportError(\"GET_VARIANT_FAILED\", error instanceof Error ? error.message : String(error));\n return { variant: null };\n }\n }\n async evaluateFlags(keys: string[]): Promise<Record<string, string | null>> {\n this.ensureInitialized();\n return this.getApiClientOrThrow().evaluateFlags(keys, identityManager.getDistinctId());\n }\n async getConditionalFlag(flagKey: string, context?: Partial<ConditionalFlagContext>): Promise<boolean> {\n try {\n const distinctId = identityManager.getDistinctId();\n if (!distinctId) return false;\n const result = await this.getApiClientOrThrow().getConditionalFlag(flagKey, { distinctId, ...context });\n return result.value;\n } catch (error) {\n if (this.apiClient) void this.apiClient.reportError(\"GET_CONDITIONAL_FLAG_FAILED\", error instanceof Error ? error.message : String(error));\n return false;\n }\n }\n async getPaywall(placement: string): Promise<import(\"../types\").PaywallConfig | null> {\n return this.getApiClientOrThrow().getPaywall(placement);\n }\n async presentPaywall(placement: string): Promise<PaywallResult> {\n this.ensureInitialized();\n if (!this.paywallPresenter) throw new PaywallError(PAYWALL_ERROR_CODES.NOT_INITIALIZED, \"PaywalloProvider not mounted. Wrap your app with <PaywalloProvider>\");\n return this.paywallPresenter(placement);\n }\n async getCampaign(placement: string, context?: Record<string, unknown>): Promise<CampaignResponse | null> {\n return campaignGateService.getCampaign(this.getApiClientOrThrow(), placement, context);\n }\n async presentCampaign(placement: string, context?: Record<string, unknown>): Promise<CampaignResult> {\n this.ensureInitialized();\n if (this.config?.debug) console.info(`[Paywallo CAMPAIGN] presenting ${placement}`);\n const result = await campaignGateService.presentCampaign(this.getApiClientOrThrow(), placement, () => this.hasActiveSubscription(), this.paywallPresenter, this.campaignPresenter, context);\n if (this.config?.debug) {\n if (result.error) console.warn(`[Paywallo CAMPAIGN] ${placement} error:`, result.error.message);\n else console.info(`[Paywallo CAMPAIGN] ${placement} result:`, { purchased: result.purchased, cancelled: result.cancelled, restored: result.restored, skippedReason: result.skippedReason });\n }\n return result;\n }\n async hasActiveSubscription(): Promise<boolean> {\n this.ensureInitialized();\n try {\n if (this.activeChecker) {\n const result = await this.activeChecker();\n const isActive = result === true;\n if (this.config?.debug) console.info(\"[Paywallo SUB] hasActiveSubscription (checker):\", isActive);\n return isActive;\n }\n const distinctId = identityManager.getDistinctId();\n if (!distinctId || !this.apiClient) {\n if (this.config?.debug) console.info(\"[Paywallo SUB] hasActiveSubscription: false (no distinctId/apiClient)\");\n return false;\n }\n const status = await this.apiClient.getSubscriptionStatus(distinctId);\n const isActive = status.hasActiveSubscription === true;\n if (this.config?.debug) console.info(\"[Paywallo SUB] hasActiveSubscription (server):\", isActive);\n return isActive;\n } catch (error) {\n if (this.config?.debug) console.warn(\"[Paywallo SUB] hasActiveSubscription error\", error);\n if (this.apiClient) void this.apiClient.reportError(\"SUBSCRIPTION_CHECK_FAILED\", error instanceof Error ? error.message : \"hasActiveSubscription failed\");\n return false;\n }\n }\n\n async getSubscription(): Promise<Subscription | null> {\n this.ensureInitialized();\n try {\n if (this.subscriptionGetter) return await this.subscriptionGetter();\n const distinctId = identityManager.getDistinctId();\n if (!distinctId || !this.apiClient) return null;\n const status = await this.apiClient.getSubscriptionStatus(distinctId);\n if (!status.subscription) return null;\n return { ...status.subscription, expiresAt: status.subscription.expiresAt ? new Date(status.subscription.expiresAt) : null };\n } catch {\n return null;\n }\n }\n\n async restorePurchases(): Promise<RestoreResult> {\n this.ensureInitialized();\n if (!this.restoreHandler) throw new PaywallError(PAYWALL_ERROR_CODES.NOT_INITIALIZED, \"PaywalloProvider not mounted. Wrap your app with <PaywalloProvider>\");\n if (this.config?.debug) console.info(\"[Paywallo RESTORE] starting\");\n const result = await this.restoreHandler();\n if (this.config?.debug) console.info(\"[Paywallo RESTORE] result:\", { success: result.success, restoredProducts: result.restoredProducts?.length ?? 0 });\n return result;\n }\n async reset(): Promise<void> {\n await identityManager.reset();\n await subscriptionCache.invalidateAll();\n }\n async fullReset(): Promise<void> {\n const wasDebug = this.config?.debug ?? false;\n await sessionManager.endSession();\n await identityManager.reset();\n await subscriptionCache.invalidateAll();\n queueProcessor.dispose(); offlineQueue.dispose(); networkMonitor.dispose();\n campaignGateService.clearPreloaded();\n this.cleanupNetworkRecovery();\n this.sessionFlagsMap.clear();\n this.apiClient = null; this.config = null; this.initPromise = null;\n this.readyPromise = null; this.resolveReady = null;\n this.pendingConfig = null; this.initAttempts = 0;\n this.paywallPresenter = null; this.campaignPresenter = null;\n this.subscriptionGetter = null; this.activeChecker = null; this.restoreHandler = null;\n this.lastOnboardingStepTimestamp = null; this.autoPreloadedPlacement = null; this.autoPreloadPlacementPromise = null;\n }\n\n getSessionFlag(key: string): string | null {\n if (!this.config || !this.apiClient) return null;\n const value = this.sessionFlagsMap.get(key);\n return value !== undefined ? value : null;\n }\n\n getConfig(): import(\"../types\").PaywalloConfig | null { return this.config; }\n getDistinctId(): string { return identityManager.getDistinctId(); }\n getDeviceId(): string | null { return identityManager.getDeviceId(); }\n getEmail(): string | null { return identityManager.getEmail(); }\n getEnvironment(): import(\"../types\").Environment { return this.apiClient?.getEnvironment() ?? \"Production\"; }\n setEnvironment(environment: import(\"../types\").Environment): void { this.apiClient?.setEnvironment(environment); }\n getApiClient(): ApiClient | null { return this.apiClient; }\n getWebUrl(): string | null { return this.apiClient?.getWebUrl() ?? null; }\n getIdentityState(): import(\"../domains/identity/IdentityManager\").IdentityState { return identityManager.getState(); }\n getSessionState(): import(\"../domains/session/types\").SessionState { return sessionManager.getState(); }\n getSessionId(): string | null { return sessionManager.getSessionId(); }\n async startSession(): Promise<string> { return sessionManager.startSession(); }\n async endSession(): Promise<void> { return sessionManager.endSession(); }\n registerPaywallPresenter(p: PaywallPresenter): void { this.paywallPresenter = p; }\n registerCampaignPresenter(p: CampaignPresenter): void { this.campaignPresenter = p; }\n registerSubscriptionGetter(g: SubscriptionGetter): void { this.subscriptionGetter = g; }\n registerActiveChecker(c: ActiveChecker): void { this.activeChecker = c; }\n registerRestoreHandler(h: RestoreHandler): void { this.restoreHandler = h; }\n registerEmergencyPaywallHandler(h: EmergencyPaywallHandler): void { sessionManager.registerEmergencyPaywallHandler(h); }\n\n async requireSubscription(paywallPlacement?: string): Promise<boolean> {\n this.ensureInitialized();\n if (await this.hasActiveSubscription()) return true;\n if (!paywallPlacement) return false;\n const r = await this.presentPaywall(paywallPlacement);\n return r.purchased || r.restored;\n }\n async requireSubscriptionWithCampaign(placement: string, context?: Record<string, unknown>): Promise<boolean> {\n this.ensureInitialized();\n return campaignGateService.requireSubscriptionWithCampaign(\n this.getApiClientOrThrow(), placement, () => this.hasActiveSubscription(),\n this.paywallPresenter, this.campaignPresenter, context,\n );\n }\n async gateContent<T>(content: () => T | Promise<T>, paywallPlacement?: string): Promise<T | null> {\n return (await this.requireSubscription(paywallPlacement)) ? content() : null;\n }\n async gateContentWithCampaign<T>(content: () => T | Promise<T>, placement: string, context?: Record<string, unknown>): Promise<T | null> {\n return (await this.requireSubscriptionWithCampaign(placement, context)) ? content() : null;\n }\n async preloadCampaign(placement: string, context?: Record<string, unknown>): Promise<PreloadCampaignResult> {\n return campaignGateService.preloadCampaign(this.getApiClientOrThrow(), placement, context);\n }\n getPreloadedCampaign(placement: string): CampaignResponse | null { return campaignGateService.getPreloadedCampaign(placement); }\n isPreloaded(placement: string): boolean { return campaignGateService.getPreloadedCampaign(placement) !== null; }\n getAutoPreloadedPlacement(): string | null { return this.autoPreloadedPlacement; }\n waitForAutoPreloadedPlacement(): Promise<string | null> { return this.autoPreloadPlacementPromise ?? Promise.resolve(null); }\n isOnline(): boolean { return networkMonitor.isOnline(); }\n getOfflineQueueSize(): number { return offlineQueue.getSize(); }\n async clearOfflineQueue(): Promise<void> { await offlineQueue.clear(); }\n async processOfflineQueue(): Promise<{ processed: number; failed: number }> { return queueProcessor.processQueue(); }\n\n private getApiClientOrThrow(): ApiClient {\n if (!this.config || !this.apiClient) throw new ClientError(CLIENT_ERROR_CODES.NOT_INITIALIZED, \"SDK not initialized. Call Paywallo.init() first\");\n return this.apiClient;\n }\n\n private ensureInitialized(): void {\n if (!this.config || !this.apiClient) throw new ClientError(CLIENT_ERROR_CODES.NOT_INITIALIZED, \"SDK not initialized. Call Paywallo.init() first\");\n }\n}\n\nexport const PaywalloClient: IPaywalloClient = new PaywalloClientClass();\n\nexport { PaywalloAffiliate } from \"../domains/affiliate\";\n","import { createContext } from \"react\";\n\nimport type {\n CampaignResult,\n PaywalloConfig,\n PaywallConfig,\n PaywallResult,\n Subscription,\n} from \"../types\";\nimport type { Product } from \"../types/purchase\";\n\nexport interface PreloadResult {\n success: boolean;\n error?: Error;\n}\n\nexport interface PaywalloContextValue {\n config: PaywalloConfig | null;\n isInitialized: boolean;\n isReady: boolean;\n initError: Error | null;\n distinctId: string | null;\n subscription: Subscription | null;\n products: Map<string, Product>;\n isLoadingProducts: boolean;\n presentPaywall: (placement: string) => Promise<PaywallResult>;\n presentCampaign: (\n placement: string,\n context?: Record<string, unknown>\n ) => Promise<CampaignResult>;\n preloadCampaign: (placement: string, context?: Record<string, unknown>) => Promise<PreloadResult>;\n hasActiveSubscription: () => Promise<boolean>;\n getSubscription: () => Promise<Subscription | null>;\n restorePurchases: () => Promise<{ success: boolean; error?: Error }>;\n getPaywallConfig: (placement: string) => Promise<PaywallConfig | null>;\n refreshProducts: (productIds: string[]) => Promise<void>;\n}\n\nexport const PaywalloContext = createContext<PaywalloContextValue | null>(null);\n","import { useContext } from \"react\";\n\nimport { PaywalloContext, PaywalloContextValue } from \"../context/PaywalloContext\";\nimport { CLIENT_ERROR_CODES,ClientError } from \"../errors/ClientError\";\n\nexport function usePaywallo(): PaywalloContextValue {\n const context = useContext(PaywalloContext);\n\n if (!context) {\n throw new ClientError(CLIENT_ERROR_CODES.PROVIDER_MISSING, \"usePaywallo must be used within a PaywalloProvider\");\n }\n\n return context;\n}\n","import { useCallback, useEffect, useState } from \"react\";\n\nimport { PURCHASE_ERROR_CODES, PurchaseError } from \"../domains/iap\";\nimport { getIAPService } from \"../domains/iap\";\nimport type { IAPProduct, ProductPriceInfo } from \"../domains/iap/types\";\nimport { mapToFormattedProduct, mapToIAPProduct } from \"../utils/productMappers\";\nimport type { FormattedProduct } from \"../utils/productMappers\";\n\ninterface UseProductsResult {\n products: IAPProduct[];\n formattedProducts: FormattedProduct[];\n isLoading: boolean;\n error: Error | null;\n loadProducts: (productIds: string[]) => Promise<void>;\n getProduct: (productId: string) => IAPProduct | undefined;\n getFormattedProduct: (productId: string) => FormattedProduct | undefined;\n getPriceInfo: (productId: string) => ProductPriceInfo | undefined;\n}\n\nexport function useProducts(initialProductIds?: string[]): UseProductsResult {\n const [products, setProducts] = useState<IAPProduct[]>([]);\n const [formattedProducts, setFormattedProducts] = useState<FormattedProduct[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const loadProducts = useCallback(async (productIds: string[]): Promise<void> => {\n setIsLoading(true);\n setError(null);\n\n try {\n const iapService = getIAPService();\n const storeProducts = await iapService.loadProducts(productIds);\n\n setProducts(storeProducts.map(mapToIAPProduct));\n setFormattedProducts(storeProducts.map(mapToFormattedProduct));\n } catch (err) {\n setError(err instanceof PurchaseError ? err : new PurchaseError(PURCHASE_ERROR_CODES.PURCHASE_FAILED, String(err)));\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n useEffect(() => {\n if (initialProductIds && initialProductIds.length > 0) {\n void loadProducts(initialProductIds);\n }\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n const getProduct = useCallback(\n (productId: string): IAPProduct | undefined => {\n return products.find((p) => p.productId === productId);\n },\n [products]\n );\n\n const getFormattedProduct = useCallback(\n (productId: string): FormattedProduct | undefined => {\n return formattedProducts.find((p) => p.productId === productId);\n },\n [formattedProducts]\n );\n\n const getPriceInfo = useCallback(\n (productId: string): ProductPriceInfo | undefined => {\n const p = formattedProducts.find((fp) => fp.productId === productId);\n if (!p) return undefined;\n return {\n price: p.price,\n priceValue: p.priceValue,\n currency: p.currency,\n localizedPrice: p.localizedPrice,\n pricePerMonth: p.pricePerMonth,\n pricePerWeek: p.pricePerWeek,\n pricePerDay: p.pricePerDay,\n };\n },\n [formattedProducts]\n );\n\n return {\n products,\n formattedProducts,\n isLoading,\n error,\n loadProducts,\n getProduct,\n getFormattedProduct,\n getPriceInfo,\n };\n}\n","import type { IAPProduct, ProductPriceInfo } from \"../domains/iap/types\";\n\ntype RawStoreProduct = {\n productId: string;\n title: string;\n description: string;\n price: string;\n priceValue: number;\n currency: string;\n localizedPrice: string;\n type: string;\n subscriptionPeriod?: string;\n introductoryPrice?: string;\n freeTrialPeriod?: string;\n trialDays?: number;\n pricePerMonth?: string;\n pricePerWeek?: string;\n pricePerDay?: string;\n};\n\nexport interface FormattedProduct extends ProductPriceInfo {\n productId: string;\n title: string;\n description: string;\n subscriptionPeriod?: string;\n introductoryPrice?: string;\n freeTrialPeriod?: string;\n trialDays: number;\n}\n\nexport function mapToIAPProduct(product: RawStoreProduct): IAPProduct {\n return {\n productId: product.productId,\n price: product.price,\n currency: product.currency,\n localizedPrice: product.localizedPrice,\n title: product.title,\n description: product.description,\n type: product.type === \"subscription\" ? \"subs\" : \"inapp\",\n subscriptionPeriodAndroid: product.subscriptionPeriod,\n introductoryPrice: product.introductoryPrice,\n freeTrialPeriodAndroid: product.freeTrialPeriod,\n trialDays: product.trialDays ?? 0,\n };\n}\n\nexport function mapToFormattedProduct(product: RawStoreProduct): FormattedProduct {\n return {\n productId: product.productId,\n title: product.title,\n description: product.description,\n price: product.price,\n priceValue: product.priceValue,\n currency: product.currency,\n localizedPrice: product.localizedPrice,\n subscriptionPeriod: product.subscriptionPeriod,\n introductoryPrice: product.introductoryPrice,\n freeTrialPeriod: product.freeTrialPeriod,\n trialDays: product.trialDays ?? 0,\n pricePerMonth: product.pricePerMonth,\n pricePerWeek: product.pricePerWeek,\n pricePerDay: product.pricePerDay,\n };\n}\n","import { useCallback, useState } from \"react\";\n\nimport { getIAPService } from \"../domains/iap\";\nimport { createPurchaseError, PURCHASE_ERROR_CODES, PurchaseError } from \"../domains/iap\";\nimport type { IAPPurchase, PurchaseState } from \"../domains/iap/types\";\n\nexport interface PurchaseOutcome {\n status: \"success\" | \"cancelled\" | \"failed\";\n purchase?: IAPPurchase;\n error?: PurchaseError;\n}\n\ninterface UsePurchaseResult {\n state: PurchaseState;\n purchase: (productId: string) => Promise<PurchaseOutcome>;\n restore: () => Promise<IAPPurchase[]>;\n error: PurchaseError | null;\n isPurchasing: boolean;\n isRestoring: boolean;\n}\n\nexport function usePurchase(): UsePurchaseResult {\n const [state, setState] = useState<PurchaseState>(\"idle\");\n const [error, setError] = useState<PurchaseError | null>(null);\n\n const purchase = useCallback(async (productId: string): Promise<PurchaseOutcome> => {\n setState(\"purchasing\");\n setError(null);\n\n try {\n const iapService = getIAPService();\n const result = await iapService.purchase(productId);\n\n if (result.success && result.purchase) {\n setState(\"idle\");\n return {\n status: \"success\",\n purchase: {\n productId: result.purchase.productId,\n transactionId: result.purchase.transactionId,\n transactionDate: result.purchase.transactionDate,\n transactionReceipt: result.purchase.receipt,\n },\n };\n }\n\n if (result.error) {\n setError(result.error);\n setState(\"error\");\n return { status: \"failed\", error: result.error };\n }\n\n setState(\"idle\");\n return { status: \"cancelled\" };\n } catch (err) {\n const purchaseError = err instanceof PurchaseError\n ? err\n : createPurchaseError(\"PURCHASE_FAILED\", err instanceof Error ? err.message : String(err));\n\n if (purchaseError.userCancelled) {\n setState(\"idle\");\n return { status: \"cancelled\" };\n }\n\n setError(purchaseError);\n setState(\"error\");\n return { status: \"failed\", error: purchaseError };\n }\n }, []);\n\n const restore = useCallback(async (): Promise<IAPPurchase[]> => {\n setState(\"restoring\");\n setError(null);\n\n try {\n const iapService = getIAPService();\n const transactions = await iapService.restore();\n\n setState(\"idle\");\n return transactions.map((tx) => ({\n productId: tx.productId,\n transactionId: tx.transactionId,\n transactionDate: tx.transactionDate,\n transactionReceipt: tx.receipt,\n }));\n } catch (err) {\n const e = err instanceof PurchaseError ? err : createPurchaseError(\"RESTORE_FAILED\", String(err));\n setError(e);\n setState(\"error\");\n throw e;\n }\n }, []);\n\n return {\n state,\n purchase,\n restore,\n error,\n isPurchasing: state === \"purchasing\",\n isRestoring: state === \"restoring\",\n };\n}\n","import { useCallback, useEffect, useState } from \"react\";\n\nimport { PURCHASE_ERROR_CODES, PurchaseError } from \"../domains/iap\";\nimport { subscriptionManager } from \"../domains/subscription/SubscriptionManager\";\nimport type { SubscriptionInfo, SubscriptionStatusResponse } from \"../domains/subscription/types\";\n\ninterface UseSubscriptionResult {\n subscription: SubscriptionInfo | null;\n isActive: boolean;\n isLoading: boolean;\n error: Error | null;\n entitlements: string[];\n refresh: () => Promise<void>;\n restore: () => Promise<void>;\n}\n\nexport function useSubscription(): UseSubscriptionResult {\n const [status, setStatus] = useState<SubscriptionStatusResponse | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const refresh = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const newStatus = await subscriptionManager.getSubscriptionStatus(true);\n setStatus(newStatus);\n } catch (err) {\n const e = err instanceof PurchaseError ? err : new PurchaseError(PURCHASE_ERROR_CODES.PURCHASE_FAILED, String(err));\n setError(e);\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n const restore = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const newStatus = await subscriptionManager.restorePurchases();\n setStatus(newStatus);\n } catch (err) {\n const e = err instanceof PurchaseError ? err : new PurchaseError(PURCHASE_ERROR_CODES.RESTORE_FAILED, String(err));\n setError(e);\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n useEffect(() => {\n void subscriptionManager.getSubscriptionStatus()\n .then((s) => {\n setStatus(s);\n setIsLoading(false);\n })\n .catch((err) => {\n setError(err instanceof Error ? err : new Error(String(err)));\n setIsLoading(false);\n });\n\n const removeListener = subscriptionManager.addListener((newStatus) => {\n setStatus(newStatus);\n });\n\n return () => {\n removeListener();\n };\n }, []);\n\n return {\n subscription: status?.subscription ?? null,\n isActive: status?.hasActiveSubscription ?? false,\n isLoading,\n error,\n entitlements: status?.entitlements ?? [],\n refresh,\n restore,\n };\n}\n","import React, { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport { Animated, Dimensions, Easing, StyleSheet } from \"react-native\";\nimport { PaywallErrorBoundary } from \"./domains/paywall\";\nimport { PaywallModal } from \"./domains/paywall\";\nimport { PaywallWebView } from \"./domains/paywall\";\nimport { PaywalloContext, PaywalloContextValue } from \"./context/PaywalloContext\";\nimport { getIAPService } from \"./domains/iap\";\nimport { PaywalloClient } from \"./core/PaywalloClient\";\nimport { useCampaignPreload } from \"./hooks/useCampaignPreload\";\nimport { usePaywallPresenter } from \"./domains/paywall\";\nimport { useProductLoader } from \"./hooks/useProductLoader\";\nimport { usePurchaseOrchestrator } from \"./hooks/usePurchaseOrchestrator\";\nimport { useSubscriptionSync } from \"./hooks/useSubscriptionSync\";\nimport { CAMPAIGN_ERROR_CODES, CampaignError } from \"./domains/campaign\";\nimport { CLIENT_ERROR_CODES, ClientError } from \"./errors/ClientError\";\nimport { PURCHASE_ERROR_CODES, PurchaseError } from \"./domains/iap\";\nimport type { CampaignResult, PaywalloConfig, PaywallConfig, PaywallResult, RestoreResult } from \"./types\";\nimport type { Product } from \"./types/purchase\";\nimport { initLocalization } from \"./utils/localization\";\n\nexport interface PaywalloProviderProps { children: React.ReactNode; config: PaywalloConfig; }\ninterface ActivePaywall {\n placement: string;\n resolver: (result: PaywallResult) => void;\n paywallConfig?: { id: string; placement: string; config: Record<string, unknown>; primaryProductId?: string; secondaryProductId?: string };\n preloadedProducts?: Map<string, Product>;\n variantKey?: string;\n campaignId?: string;\n}\nexport function PaywalloProvider({ children, config }: PaywalloProviderProps): React.ReactElement {\n const [isInitialized, setIsInitialized] = useState(false);\n const [initError, setInitError] = useState<Error | null>(null);\n const [distinctId, setDistinctId] = useState<string | null>(null);\n const [activePaywall, setActivePaywall] = useState<ActivePaywall | null>(null);\n\n const { products, isLoadingProducts, refreshProducts } = useProductLoader();\n const { subscription, hasActiveSubscription, getSubscription, invalidateCache } = useSubscriptionSync();\n const { preloadedWebView, setPreloadedWebView, preloadCampaign, consumePreloadedCampaign, isPreloadValid } = useCampaignPreload();\n const clearPreloadedWebView = useCallback((): void => setPreloadedWebView(null), [setPreloadedWebView]);\n const autoPreloadTriggeredRef = useRef(false);\n const preloadedWebViewRef = useRef(preloadedWebView);\n\n useEffect(() => { preloadedWebViewRef.current = preloadedWebView; }, [preloadedWebView]);\n\n const triggerRepreload = useCallback((placement: string): void => {\n void PaywalloClient.preloadCampaign(placement).catch(() => {});\n }, []);\n\n const { showingPreloadedWebView, presentPreloadedWebView, resolvePreloadedPaywall, handlePreloadedWebViewReady: baseHandlePreloadedWebViewReady, handlePreloadedClose: baseHandlePreloadedClose, setShowingPreloadedWebView, presentedAtRef } =\n usePaywallPresenter(preloadedWebView, setPreloadedWebView);\n\n const SCREEN_HEIGHT = useMemo(() => Dimensions.get(\"window\").height, []);\n const slideAnim = useRef(new Animated.Value(SCREEN_HEIGHT)).current;\n\n const handlePreloadedWebViewReady = useCallback((): void => {\n if (PaywalloClient.getConfig()?.debug) { console.info(`[Paywallo WEBVIEW] loaded — placement: ${preloadedWebView?.placement}`); }\n baseHandlePreloadedWebViewReady();\n }, [config?.debug, preloadedWebView?.placement, baseHandlePreloadedWebViewReady]);\n\n const handlePreloadedClose = useCallback((): void => {\n const placement = preloadedWebView?.placement;\n Animated.timing(slideAnim, { toValue: SCREEN_HEIGHT, duration: 200, easing: Easing.in(Easing.cubic), useNativeDriver: true }).start(() => {\n baseHandlePreloadedClose();\n if (placement) triggerRepreload(placement);\n });\n }, [baseHandlePreloadedClose, preloadedWebView, triggerRepreload, slideAnim, SCREEN_HEIGHT]);\n\n const { handlePreloadedPurchase: rawPreloadedPurchase, handlePreloadedRestore } = usePurchaseOrchestrator(\n preloadedWebView, resolvePreloadedPaywall, clearPreloadedWebView, setShowingPreloadedWebView, presentedAtRef, invalidateCache\n );\n const [isPreloadPurchasing, setIsPreloadPurchasing] = useState(false);\n const handlePreloadedPurchase = useCallback(async (productId: string) => {\n setIsPreloadPurchasing(true);\n try { await rawPreloadedPurchase(productId); } finally { setIsPreloadPurchasing(false); }\n }, [rawPreloadedPurchase]);\n\n useEffect(() => {\n initLocalization({ detectDevice: true });\n PaywalloClient.init(config)\n .then(async () => {\n setDistinctId(PaywalloClient.getDistinctId());\n setIsInitialized(true);\n if (!autoPreloadTriggeredRef.current) {\n autoPreloadTriggeredRef.current = true;\n const placement = await PaywalloClient.waitForAutoPreloadedPlacement();\n if (placement) void preloadCampaign(placement).catch(() => {});\n }\n })\n .catch((err: unknown) => { setInitError(err instanceof Error ? err : new ClientError(CLIENT_ERROR_CODES.NOT_INITIALIZED, String(err))); });\n }, [config, preloadCampaign]);\n\n const getPaywallConfig = useCallback(async (p: string): Promise<PaywallConfig | null> => {\n const api = PaywalloClient.getApiClient(); return api ? api.getPaywall(p) : null;\n }, []);\n\n const presentPaywall = useCallback((placement: string): Promise<PaywallResult> => {\n return new Promise<PaywallResult>((resolve) => setActivePaywall({ placement, resolver: resolve }));\n }, []);\n\n const trackCampaignImpression = useCallback((placement: string, variantKey: string, campaignId: string): void => {\n const api = PaywalloClient.getApiClient();\n if (!api) return;\n const sessionId = PaywalloClient.getSessionId();\n void api.trackEvent(\"$campaign_impression\", PaywalloClient.getDistinctId(), { placement, variantKey, campaignId, ...(sessionId && { sessionId }) }).catch(() => {});\n }, []);\n\n const presentCampaign = useCallback(\n async (placement: string, context?: Record<string, unknown>): Promise<CampaignResult> => {\n try {\n if (preloadedWebView?.placement === placement && preloadedWebView.loaded && isPreloadValid(placement)) {\n consumePreloadedCampaign(placement);\n const apiClient = PaywalloClient.getApiClient();\n if (apiClient) {\n const sessionId = PaywalloClient.getSessionId();\n void apiClient.trackEvent(\"$paywall_viewed\", PaywalloClient.getDistinctId(), {\n placement, paywallId: preloadedWebView.paywallId, preloaded: true,\n variantKey: preloadedWebView.variantKey ?? \"\", campaignId: preloadedWebView.campaignId ?? \"\",\n ...(sessionId && { sessionId }),\n });\n }\n trackCampaignImpression(placement, preloadedWebView.variantKey ?? \"\", preloadedWebView.campaignId ?? \"\");\n const r = await presentPreloadedWebView();\n return { ...r, campaignId: preloadedWebView.campaignId ?? \"\", variantKey: preloadedWebView.variantKey ?? \"\" };\n }\n const preloaded = consumePreloadedCampaign(placement);\n if (preloaded) {\n trackCampaignImpression(placement, preloaded.variantKey, preloaded.campaignId);\n const r = await new Promise<PaywallResult>((resolve) => setActivePaywall({\n placement: preloaded.paywall.placement, resolver: resolve,\n paywallConfig: preloaded.paywall, preloadedProducts: preloaded.products,\n variantKey: preloaded.variantKey, campaignId: preloaded.campaignId,\n }));\n return { ...r, campaignId: preloaded.campaignId, variantKey: preloaded.variantKey };\n }\n const campaign = PaywalloClient.getPreloadedCampaign(placement) ?? await PaywalloClient.getCampaign(placement, context);\n if (!campaign?.paywall) return { presented: false, purchased: false, cancelled: false, restored: false,\n error: new CampaignError(campaign ? CAMPAIGN_ERROR_CODES.PRELOAD_FAILED : CAMPAIGN_ERROR_CODES.NOT_FOUND, campaign ? `No paywall: ${placement}` : `Campaign not found: ${placement}`) };\n trackCampaignImpression(placement, campaign.variantKey, campaign.campaignId);\n const r = await new Promise<PaywallResult>((resolve) => setActivePaywall({\n placement: campaign.paywall.placement, resolver: resolve,\n paywallConfig: { id: campaign.paywall.id, placement: campaign.paywall.placement, config: campaign.paywall.config,\n primaryProductId: campaign.paywall.primaryProductId, secondaryProductId: campaign.paywall.secondaryProductId },\n variantKey: campaign.variantKey, campaignId: campaign.campaignId,\n }));\n return { ...r, campaignId: campaign.campaignId, variantKey: campaign.variantKey };\n } catch (error) {\n return { presented: false, purchased: false, cancelled: false, restored: false,\n error: error instanceof Error ? error : new CampaignError(CAMPAIGN_ERROR_CODES.PRESENT_FAILED, String(error)) };\n }\n },\n [preloadedWebView, isPreloadValid, consumePreloadedCampaign, presentPreloadedWebView, trackCampaignImpression]\n );\n\n const restorePurchases = useCallback(async (): Promise<RestoreResult> => {\n invalidateCache();\n try {\n const txs = await getIAPService().restore();\n return txs.length > 0 ? { success: true, restoredProducts: txs.map((tx) => tx.productId) } : { success: false, restoredProducts: [] };\n } catch (error) {\n return { success: false, restoredProducts: [], error: error instanceof Error ? error : new PurchaseError(PURCHASE_ERROR_CODES.RESTORE_FAILED, String(error)) };\n }\n }, [invalidateCache]);\n\n const handlePaywallResult = useCallback((result: PaywallResult): void => {\n if (activePaywall) { activePaywall.resolver(result); setActivePaywall(null); }\n }, [activePaywall]);\n\n const bridgePaywallPresenter = useCallback((placement: string): Promise<PaywallResult> => {\n if (PaywalloClient.getConfig()?.debug) { console.info(`[Paywallo PRESENT] called — preloaded: ${preloadedWebViewRef.current?.loaded === true} placement: ${placement}`); }\n if (preloadedWebViewRef.current?.placement === placement) {\n if (preloadedWebViewRef.current.loaded) {\n return presentPreloadedWebView();\n }\n return new Promise<PaywallResult>((resolve) => {\n let elapsed = 0;\n const poll = (): void => {\n if (preloadedWebViewRef.current?.loaded) { resolve(presentPreloadedWebView()); return; }\n elapsed += 100;\n if (elapsed >= 500) { resolve(presentCampaign(placement)); return; }\n setTimeout(poll, 100);\n };\n setTimeout(poll, 100);\n });\n }\n return presentCampaign(placement);\n }, [presentPreloadedWebView, presentCampaign]);\n\n useEffect(() => {\n if (!isInitialized) return;\n const onEmergency = async (id: string): Promise<void> => { try { await bridgePaywallPresenter(id); } catch { /* non-critical */ } };\n PaywalloClient.registerPaywallPresenter(bridgePaywallPresenter);\n PaywalloClient.registerSubscriptionGetter(getSubscription);\n PaywalloClient.registerActiveChecker(hasActiveSubscription);\n PaywalloClient.registerRestoreHandler(restorePurchases);\n PaywalloClient.registerEmergencyPaywallHandler(onEmergency);\n }, [isInitialized, bridgePaywallPresenter, getSubscription, hasActiveSubscription, restorePurchases]);\n\n\n const isReady = isInitialized && !isLoadingProducts;\n\n const noOp = useCallback(() => {}, []);\n const contextValue: PaywalloContextValue = useMemo(() => ({\n config: PaywalloClient.getConfig(), isInitialized, isReady, initError, distinctId, subscription, products, isLoadingProducts,\n presentPaywall, presentCampaign, preloadCampaign, hasActiveSubscription, getSubscription, restorePurchases, getPaywallConfig, refreshProducts,\n }), [isInitialized, isReady, initError, distinctId, subscription, products, isLoadingProducts,\n presentPaywall, presentCampaign, preloadCampaign, hasActiveSubscription, getSubscription, restorePurchases, getPaywallConfig, refreshProducts]);\n\n useLayoutEffect(() => {\n if (showingPreloadedWebView) {\n slideAnim.setValue(SCREEN_HEIGHT);\n Animated.timing(slideAnim, { toValue: 0, duration: 200, easing: Easing.out(Easing.cubic), useNativeDriver: true }).start();\n }\n }, [showingPreloadedWebView, slideAnim, SCREEN_HEIGHT]);\n\n const preloadStyle = [\n styles.preloadOverlay,\n showingPreloadedWebView ? styles.visible : styles.hidden,\n showingPreloadedWebView ? { transform: [{ translateY: slideAnim }] } : undefined,\n ];\n\n return (\n <PaywalloContext.Provider value={contextValue}>\n {children}\n <PaywallErrorBoundary>\n {!!preloadedWebView?.craftData && (\n <Animated.View style={preloadStyle} pointerEvents={showingPreloadedWebView ? \"auto\" : \"none\"}>\n <PaywallWebView\n paywallId={preloadedWebView.paywallId} craftData={preloadedWebView.craftData}\n products={preloadedWebView.products} primaryProductId={preloadedWebView.primaryProductId}\n secondaryProductId={preloadedWebView.secondaryProductId} isPurchasing={isPreloadPurchasing}\n webUrl={isInitialized ? PaywalloClient.getWebUrl() : null}\n onReady={handlePreloadedWebViewReady} onClose={showingPreloadedWebView ? handlePreloadedClose : noOp}\n onPurchase={showingPreloadedWebView ? handlePreloadedPurchase : noOp}\n onRestore={showingPreloadedWebView ? handlePreloadedRestore : noOp}\n />\n </Animated.View>\n )}\n </PaywallErrorBoundary>\n <PaywallErrorBoundary>\n {activePaywall && (\n <PaywallModal placement={activePaywall.placement} visible={true} onResult={handlePaywallResult}\n paywallConfig={activePaywall.paywallConfig} preloadedProducts={activePaywall.preloadedProducts}\n variantKey={activePaywall.variantKey} campaignId={activePaywall.campaignId} />\n )}\n </PaywallErrorBoundary>\n </PaywalloContext.Provider>\n );\n}\n\nconst styles = StyleSheet.create({\n preloadOverlay: { position: \"absolute\", top: 0, left: 0, right: 0, bottom: 0, backgroundColor: \"#ffffff\" },\n hidden: { zIndex: -1, opacity: 0, width: 1, height: 1, overflow: \"hidden\" },\n visible: { zIndex: 9999, opacity: 1 },\n});\n","import { useCallback, useRef, useState } from \"react\";\n\nimport type { PreloadResult } from \"../context/PaywalloContext\";\nimport { PaywalloClient } from \"../core/PaywalloClient\";\nimport { CAMPAIGN_ERROR_CODES, CampaignError } from \"../domains/campaign/CampaignError\";\nimport { loadCampaignProducts } from \"../utils/loadCampaignProducts\";\nimport {\n getCacheEntry,\n isCacheEntryValid,\n type PreloadedCampaign,\n type PreloadedWebView,\n} from \"../utils/preloadCache\";\n\nexport type { PreloadedCampaign, PreloadedWebView };\n\nexport function useCampaignPreload() {\n const [preloadedWebView, setPreloadedWebView] = useState<PreloadedWebView | null>(null);\n const preloadedCampaignsRef = useRef<Map<string, PreloadedCampaign>>(new Map());\n\n const isPreloadValid = useCallback(\n (placement: string): boolean => isCacheEntryValid(preloadedCampaignsRef.current.get(placement)),\n []\n );\n\n const consumePreloadedCampaign = useCallback(\n (placement: string): PreloadedCampaign | null =>\n getCacheEntry(preloadedCampaignsRef.current, placement),\n []\n );\n\n const preloadCampaign = useCallback(\n async (placement: string, context?: Record<string, unknown>): Promise<PreloadResult> => {\n try {\n const campaign = await PaywalloClient.getCampaign(placement, context);\n if (!campaign?.paywall) {\n return {\n success: false,\n error: new CampaignError(\n CAMPAIGN_ERROR_CODES.NOT_FOUND,\n `Campaign or paywall not found: ${placement}`\n ),\n };\n }\n\n const { paywall } = campaign;\n const serverProducts = [paywall.primaryProduct, paywall.secondaryProduct].filter(Boolean);\n const storeProductIds = serverProducts.map((p) => p!.storeProductId).filter(Boolean);\n const productsMap = await loadCampaignProducts(\n serverProducts.map((p) => p!),\n storeProductIds\n );\n\n preloadedCampaignsRef.current.set(placement, {\n campaignId: campaign.campaignId,\n variantKey: campaign.variantKey,\n paywall: {\n id: paywall.id,\n placement: paywall.placement,\n config: paywall.config,\n primaryProductId: paywall.primaryProductId,\n secondaryProductId: paywall.secondaryProductId,\n },\n products: productsMap,\n preloadedAt: Date.now(),\n });\n\n const craftData = (paywall.config as { craftData?: string })?.craftData ?? \"\";\n setPreloadedWebView({\n placement, paywallId: paywall.id, craftData, products: productsMap,\n primaryProductId: paywall.primaryProductId,\n secondaryProductId: paywall.secondaryProductId,\n loaded: false, campaignId: campaign.campaignId, variantKey: campaign.variantKey,\n });\n if (PaywalloClient.getConfig()?.debug) console.info(`[Paywallo WEBVIEW] mounting hidden — placement: ${placement}`);\n\n return { success: true };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error\n ? error\n : new CampaignError(CAMPAIGN_ERROR_CODES.FETCH_FAILED, String(error)),\n };\n }\n },\n []\n );\n\n return {\n preloadedCampaignsRef,\n preloadedWebView,\n setPreloadedWebView,\n preloadCampaign,\n consumePreloadedCampaign,\n isPreloadValid,\n };\n}\n","import type { ServerProductInfo } from \"../types/campaign\";\nimport type { Product } from \"../types/purchase\";\n\nconst PERIOD_MAP: Record<string, string> = {\n P1Y: \"ano\",\n P1M: \"mês\",\n P1W: \"semana\",\n P3M: \"trimestre\",\n P6M: \"semestre\",\n};\n\nexport function buildProductFromServerInfo(info: ServerProductInfo): Product {\n const period = PERIOD_MAP[info.billingPeriod ?? \"\"] ?? \"\";\n const priceStr = info.price != null ? `R$ ${info.price.toFixed(2).replace(\".\", \",\")}` : \"\";\n return {\n productId: info.storeProductId,\n title: info.name,\n description: \"\",\n price: priceStr,\n priceValue: info.price ?? 0,\n currency: \"BRL\",\n localizedPrice: priceStr,\n type: \"subscription\",\n subscriptionPeriod: period,\n freeTrialPeriod: info.trialDays ? `${info.trialDays} dias` : undefined,\n };\n}\n","import { getIAPService } from \"../domains/iap/IAPService\";\nimport { buildProductFromServerInfo } from \"./serverProduct\";\nimport type { ServerProductInfo } from \"../types/campaign\";\nimport type { Product } from \"../types/purchase\";\n\nexport async function loadCampaignProducts(\n serverProducts: ServerProductInfo[],\n storeProductIds: string[]\n): Promise<Map<string, Product>> {\n const productsMap = new Map<string, Product>();\n\n if (storeProductIds.length > 0) {\n for (let attempt = 1; attempt <= 3; attempt++) {\n try {\n const storeProducts = await getIAPService().loadProducts(storeProductIds);\n if (storeProducts.length > 0) {\n for (const p of storeProducts) productsMap.set(p.productId, p as never);\n }\n if (productsMap.size >= storeProductIds.length) break;\n if (attempt < 3) await new Promise(r => setTimeout(r, 250 * Math.pow(2, attempt)));\n } catch { if (attempt < 3) await new Promise(r => setTimeout(r, 250 * Math.pow(2, attempt))); }\n }\n }\n\n for (const sp of serverProducts) {\n if (!productsMap.has(sp.storeProductId)) {\n const prod = buildProductFromServerInfo(sp);\n productsMap.set(prod.productId, prod as never);\n }\n }\n\n return productsMap;\n}\n","import type { Product } from \"../types/purchase\";\n\nexport interface PreloadedCampaign {\n campaignId: string;\n variantKey: string;\n paywall: {\n id: string;\n placement: string;\n config: Record<string, unknown>;\n primaryProductId?: string;\n secondaryProductId?: string;\n };\n products: Map<string, Product>;\n preloadedAt: number;\n}\n\nexport interface PreloadedWebView {\n placement: string;\n paywallId: string;\n craftData: string;\n products: Map<string, Product>;\n primaryProductId?: string;\n secondaryProductId?: string;\n loaded: boolean;\n campaignId?: string;\n variantKey?: string;\n}\n\nconst CACHE_TTL_MS = 5 * 60 * 1000;\n\nexport function isCacheEntryValid(entry: PreloadedCampaign | undefined): boolean {\n return !!entry && Date.now() - entry.preloadedAt < CACHE_TTL_MS;\n}\n\nexport function getCacheEntry(\n cache: Map<string, PreloadedCampaign>,\n placement: string\n): PreloadedCampaign | null {\n const entry = cache.get(placement);\n if (!isCacheEntryValid(entry)) return null;\n return entry ?? null;\n}\n","import { useCallback, useState } from \"react\";\n\nimport { getIAPService } from \"../domains/iap\";\nimport { PaywalloClient } from \"../core/PaywalloClient\";\nimport type { Product } from \"../types/purchase\";\n\ninterface UseProductLoaderReturn {\n products: Map<string, Product>;\n isLoadingProducts: boolean;\n refreshProducts: (productIds: string[]) => Promise<void>;\n}\n\nexport function useProductLoader(): UseProductLoaderReturn {\n const [products, setProducts] = useState<Map<string, Product>>(new Map());\n const [isLoadingProducts, setIsLoadingProducts] = useState(false);\n\n const refreshProducts = useCallback(async (productIds: string[]): Promise<void> => {\n setIsLoadingProducts(true);\n try {\n const iapService = getIAPService();\n const loaded = await iapService.loadProducts(productIds);\n const map = new Map<string, Product>();\n for (const p of loaded) map.set(p.productId, p);\n setProducts(map);\n } catch (err) {\n if (PaywalloClient.getConfig()?.debug) console.warn(\"[Paywallo] refreshProducts failed\", err);\n } finally {\n setIsLoadingProducts(false);\n }\n }, []);\n\n return { products, isLoadingProducts, refreshProducts };\n}\n","import { useCallback } from \"react\";\nimport type React from \"react\";\n\nimport { getIAPService } from \"../domains/iap\";\nimport { PaywalloClient } from \"../core/PaywalloClient\";\nimport type { PaywallResult } from \"../types\";\n\nimport type { PreloadedWebView } from \"./useCampaignPreload\";\nimport { usePaywallTracking } from \"../domains/paywall\";\n\ninterface UsePurchaseOrchestratorReturn {\n handlePreloadedPurchase: (productId: string) => Promise<void>;\n handlePreloadedRestore: () => Promise<void>;\n}\n\nexport function usePurchaseOrchestrator(\n preloadedWebView: PreloadedWebView | null,\n resolvePreloadedPaywall: (result: PaywallResult) => void,\n clearPreloadedWebView: () => void,\n setShowingPreloadedWebView: React.Dispatch<React.SetStateAction<boolean>>,\n presentedAtRef: React.MutableRefObject<number>,\n invalidateSubscriptionCache: () => void\n): UsePurchaseOrchestratorReturn {\n const { trackDismissed, trackProductSelected, trackPurchased } = usePaywallTracking();\n\n const handlePreloadedPurchase = useCallback(\n async (productId: string): Promise<void> => {\n try {\n if (preloadedWebView) {\n trackProductSelected({ placement: preloadedWebView.placement, paywallId: preloadedWebView.paywallId, productId, variantKey: preloadedWebView.variantKey, campaignId: preloadedWebView.campaignId });\n }\n\n const result = await getIAPService().purchase(productId, {\n paywallPlacement: preloadedWebView?.placement,\n variantKey: preloadedWebView?.variantKey,\n });\n if (!result.success) {\n if (result.error) {\n setShowingPreloadedWebView(false);\n clearPreloadedWebView();\n resolvePreloadedPaywall({ presented: true, purchased: false, cancelled: false, restored: false });\n }\n return;\n }\n\n if (preloadedWebView) {\n const durationSeconds = Math.round((Date.now() - presentedAtRef.current) / 1000);\n await trackDismissed({ placement: preloadedWebView.placement, paywallId: preloadedWebView.paywallId, durationSeconds, action: \"purchase\", variantKey: preloadedWebView.variantKey, campaignId: preloadedWebView.campaignId });\n await trackPurchased({ placement: preloadedWebView.placement, paywallId: preloadedWebView.paywallId, productId, variantKey: preloadedWebView.variantKey, campaignId: preloadedWebView.campaignId });\n }\n\n invalidateSubscriptionCache();\n setShowingPreloadedWebView(false);\n clearPreloadedWebView();\n resolvePreloadedPaywall({ presented: true, purchased: true, cancelled: false, restored: false });\n } catch (error) {\n if (PaywalloClient.getConfig()?.debug) console.warn(\"[Paywallo] preloaded purchase failed\", error);\n setShowingPreloadedWebView(false);\n clearPreloadedWebView();\n resolvePreloadedPaywall({ presented: true, purchased: false, cancelled: false, restored: false });\n }\n },\n [preloadedWebView, resolvePreloadedPaywall, clearPreloadedWebView, setShowingPreloadedWebView, presentedAtRef, trackDismissed, trackProductSelected, trackPurchased, invalidateSubscriptionCache]\n );\n\n const handlePreloadedRestore = useCallback(async (): Promise<void> => {\n try {\n const transactions = await getIAPService().restore();\n if (transactions.length === 0) return;\n\n if (preloadedWebView) {\n const durationSeconds = Math.round((Date.now() - presentedAtRef.current) / 1000);\n await trackDismissed({ placement: preloadedWebView.placement, paywallId: preloadedWebView.paywallId, durationSeconds, action: \"restore\", variantKey: preloadedWebView.variantKey, campaignId: preloadedWebView.campaignId });\n }\n\n invalidateSubscriptionCache();\n setShowingPreloadedWebView(false);\n clearPreloadedWebView();\n resolvePreloadedPaywall({ presented: true, purchased: false, cancelled: false, restored: true });\n } catch (error) {\n if (PaywalloClient.getConfig()?.debug) console.warn(\"[Paywallo] preloaded restore failed\", error);\n setShowingPreloadedWebView(false);\n clearPreloadedWebView();\n resolvePreloadedPaywall({ presented: true, purchased: false, cancelled: false, restored: false });\n }\n }, [preloadedWebView, resolvePreloadedPaywall, clearPreloadedWebView, setShowingPreloadedWebView, presentedAtRef, trackDismissed, invalidateSubscriptionCache]);\n\n return { handlePreloadedPurchase, handlePreloadedRestore };\n}\n","import { useCallback, useRef, useState } from \"react\";\n\nimport { PaywalloClient } from \"../core/PaywalloClient\";\nimport { subscriptionCache } from \"../domains/subscription/SubscriptionCache\";\nimport type {\n SubscriptionInfo,\n SubscriptionStatusResponse as DomainStatusResponse,\n} from \"../domains/subscription/types\";\nimport type { Subscription, SubscriptionStatusResponse } from \"../types\";\n\nconst CACHE_TTL_MS = 5 * 60 * 1000;\n\ninterface CacheEntry {\n data: Subscription | null;\n expiresAt: number;\n}\n\nconst ACTIVE_STATUSES = [\"active\", \"grace_period\"];\n\ninterface UseSubscriptionSyncReturn {\n subscription: Subscription | null;\n hasActiveSubscription: () => Promise<boolean>;\n getSubscription: () => Promise<Subscription | null>;\n invalidateCache: () => void;\n}\n\nfunction toDomainSubscriptionInfo(sub: Subscription): SubscriptionInfo {\n return {\n id: \"\",\n productId: sub.productId,\n status: sub.status as SubscriptionInfo[\"status\"],\n expiresAt: sub.expiresAt ?? new Date(0),\n originalPurchaseDate: new Date(0),\n latestPurchaseDate: new Date(0),\n willRenew: sub.autoRenewEnabled,\n isTrial: false,\n isIntroductoryPeriod: false,\n platform: sub.platform,\n };\n}\n\nfunction toDomainResponse(status: SubscriptionStatusResponse): DomainStatusResponse {\n return {\n hasActiveSubscription: status.hasActiveSubscription,\n subscription: status.subscription\n ? toDomainSubscriptionInfo(status.subscription)\n : null,\n entitlements: [],\n };\n}\n\nfunction isSubscriptionStillActive(sub: { status: string; expiresAt: Date | null } | null): boolean {\n if (!sub) return false;\n if (!ACTIVE_STATUSES.includes(sub.status)) return false;\n if (sub.expiresAt && sub.expiresAt.getTime() !== 0 && sub.expiresAt < new Date()) return false;\n return true;\n}\n\nasync function resolveOfflineFromCache(distinctId: string): Promise<boolean> {\n try {\n const cached = await subscriptionCache.get(distinctId);\n if (!cached) return false;\n const sub = cached.data.subscription;\n return isSubscriptionStillActive(sub ? { status: sub.status, expiresAt: sub.expiresAt ?? null } : null);\n } catch {\n return false;\n }\n}\n\nfunction isActiveCacheEntry(entry: CacheEntry): boolean {\n return isSubscriptionStillActive(entry.data);\n}\n\nexport function useSubscriptionSync(): UseSubscriptionSyncReturn {\n const [subscription, setSubscription] = useState<Subscription | null>(null);\n const cacheRef = useRef<CacheEntry | null>(null);\n\n const invalidateCache = useCallback((): void => {\n cacheRef.current = null;\n const distinctId = PaywalloClient.getDistinctId();\n if (distinctId) void subscriptionCache.invalidate(distinctId);\n }, []);\n\n const fetchAndCache = useCallback(async (): Promise<Subscription | null> => {\n const apiClient = PaywalloClient.getApiClient();\n const distinctId = PaywalloClient.getDistinctId();\n if (!apiClient || !distinctId) return null;\n\n const status = await apiClient.getSubscriptionStatus(distinctId);\n const sub = status.subscription\n ? {\n ...status.subscription,\n expiresAt: status.subscription.expiresAt\n ? new Date(status.subscription.expiresAt)\n : null,\n }\n : null;\n\n cacheRef.current = { data: sub, expiresAt: Date.now() + CACHE_TTL_MS };\n setSubscription(sub);\n void subscriptionCache.set(distinctId, toDomainResponse(status));\n return sub;\n }, []);\n\n const hasActiveSubscription = useCallback(async (): Promise<boolean> => {\n const apiClient = PaywalloClient.getApiClient();\n const distinctId = PaywalloClient.getDistinctId();\n if (!apiClient || !distinctId) return false;\n\n const cached = cacheRef.current;\n if (cached && cached.expiresAt > Date.now()) {\n return isActiveCacheEntry(cached);\n }\n\n try {\n const persisted = await subscriptionCache.get(distinctId);\n if (persisted && !persisted.isStale) {\n const persistedSub = persisted.data.subscription;\n const sub = persistedSub\n ? {\n productId: persistedSub.productId,\n status: persistedSub.status as Subscription[\"status\"],\n expiresAt: persistedSub.expiresAt ?? null,\n platform: persistedSub.platform,\n autoRenewEnabled: persistedSub.willRenew,\n inGracePeriod: persistedSub.status === \"grace_period\",\n }\n : null;\n const stillActive = isSubscriptionStillActive(sub);\n if (stillActive) {\n cacheRef.current = { data: sub, expiresAt: Date.now() + CACHE_TTL_MS };\n setSubscription(sub);\n return true;\n }\n }\n } catch {\n }\n\n try {\n const status = await apiClient.getSubscriptionStatus(distinctId);\n const sub = status.subscription\n ? {\n ...status.subscription,\n expiresAt: status.subscription.expiresAt\n ? new Date(status.subscription.expiresAt)\n : null,\n }\n : null;\n cacheRef.current = { data: sub, expiresAt: Date.now() + CACHE_TTL_MS };\n setSubscription(sub);\n void subscriptionCache.set(distinctId, toDomainResponse(status));\n return status.hasActiveSubscription === true;\n } catch {\n return await resolveOfflineFromCache(distinctId);\n }\n }, []);\n\n const getSubscription = useCallback(async (): Promise<Subscription | null> => {\n const apiClient = PaywalloClient.getApiClient();\n const distinctId = PaywalloClient.getDistinctId();\n if (!apiClient || !distinctId) return null;\n\n const cached = cacheRef.current;\n if (cached && cached.expiresAt > Date.now()) return cached.data;\n\n try {\n return await fetchAndCache();\n } catch {\n try {\n const persisted = await subscriptionCache.get(distinctId);\n if (!persisted?.data.subscription) return null;\n const s = persisted.data.subscription;\n const normalisedStatus = (s.status as string) === \"grace_period\"\n ? \"in_grace_period\" as Subscription[\"status\"]\n : s.status as Subscription[\"status\"];\n return {\n productId: s.productId,\n status: normalisedStatus,\n expiresAt: s.expiresAt ?? null,\n platform: s.platform,\n autoRenewEnabled: s.willRenew,\n inGracePeriod: normalisedStatus === \"in_grace_period\",\n };\n } catch {\n return null;\n }\n }\n }, [fetchAndCache]);\n\n return { subscription, hasActiveSubscription, getSubscription, invalidateCache };\n}\n","import type { Product } from \"../types/purchase\";\nimport type { VariableContext } from \"./variableResolver\";\n\nexport function getProductVariable(product: Product | undefined, property: string): string {\n if (!product) return \"\";\n\n switch (property) {\n case \"id\": return product.productId;\n case \"name\": return product.title;\n case \"price\": return product.localizedPrice;\n case \"pricePerMonth\": return product.pricePerMonth ?? product.localizedPrice;\n case \"pricePerWeek\": return product.pricePerWeek ?? \"\";\n case \"pricePerDay\": return product.pricePerDay ?? \"\";\n case \"period\": return product.subscriptionPeriod ?? \"\";\n case \"trialPeriod\": return product.freeTrialPeriod ?? \"\";\n case \"introPrice\": return product.introductoryPrice ?? \"\";\n case \"savings\": return product.savings ?? \"\";\n case \"savingsPercent\": return product.savingsPercent ?? \"\";\n case \"hasFreeTrial\": return product.freeTrialPeriod ? \"true\" : \"false\";\n case \"hasIntroOffer\": return product.introductoryPrice ? \"true\" : \"false\";\n case \"renewalPeriod\": return product.subscriptionPeriod ?? \"\";\n default: return \"\";\n }\n}\n\nexport function resolveProductsVariable(parts: string[], context: VariableContext): string | null {\n if (parts[0] !== \"products\") return null;\n\n if (parts[1] === \"selected\" && context.selectedProductId) {\n return getProductVariable(context.products.get(context.selectedProductId), parts[2]);\n }\n if (parts[1] === \"primary\" && context.primaryProductId) {\n return getProductVariable(context.products.get(context.primaryProductId), parts[2]);\n }\n if (parts[1] === \"secondary\" && context.secondaryProductId) {\n return getProductVariable(context.products.get(context.secondaryProductId), parts[2]);\n }\n if (parts[1] === \"hasIntroductoryOffer\") {\n return Array.from(context.products.values()).some((p) => p.introductoryPrice) ? \"true\" : \"false\";\n }\n\n return null;\n}\n\nexport function resolveLegacyVariable(variableName: string, context: VariableContext): string | null {\n if (variableName === \"device_name\") return context.deviceInfo?.name ?? \"\";\n if (variableName === \"product_price\" && context.selectedProductId) {\n return context.products.get(context.selectedProductId)?.localizedPrice ?? \"\";\n }\n if (variableName === \"trial_period\" && context.selectedProductId) {\n return context.products.get(context.selectedProductId)?.freeTrialPeriod ?? \"\";\n }\n return null;\n}\n","import type { Product } from \"../types/purchase\";\nimport { resolveProductsVariable, resolveLegacyVariable } from \"./productVariableResolver\";\n\nexport interface VariableContext {\n selectedProductId?: string;\n primaryProductId?: string;\n secondaryProductId?: string;\n products: Map<string, Product>;\n customVariables?: Record<string, string>;\n deviceInfo?: {\n name?: string;\n model?: string;\n os?: string;\n osVersion?: string;\n locale?: string;\n };\n userInfo?: {\n id?: string;\n name?: string;\n email?: string;\n };\n}\n\nfunction resolveVariable(variableName: string, context: VariableContext): string {\n const parts = variableName.split(\".\");\n\n if (parts[0] === \"device\" && context.deviceInfo) {\n switch (parts[1]) {\n case \"name\": return context.deviceInfo.name ?? \"\";\n case \"model\": return context.deviceInfo.model ?? \"\";\n case \"os\": return context.deviceInfo.os ?? \"\";\n case \"osVersion\": return context.deviceInfo.osVersion ?? \"\";\n case \"locale\": return context.deviceInfo.locale ?? \"\";\n default: return \"\";\n }\n }\n\n if (parts[0] === \"user\" && context.userInfo) {\n switch (parts[1]) {\n case \"id\": return context.userInfo.id ?? \"\";\n case \"name\": return context.userInfo.name ?? \"\";\n case \"email\": return context.userInfo.email ?? \"\";\n default: return \"\";\n }\n }\n\n if (parts[0] === \"products\") {\n return resolveProductsVariable(parts, context) ?? \"\";\n }\n\n return resolveLegacyVariable(variableName, context) ?? context.customVariables?.[variableName] ?? \"\";\n}\n\nexport function resolveText(text: string, context: VariableContext): string {\n const regex = /\\{\\{([^}]+)\\}\\}/g;\n return text.replace(regex, (_, variableName: string) => {\n return resolveVariable(variableName.trim(), context);\n });\n}\n\nexport function parseVariables(text: string): string[] {\n const regex = /\\{\\{([^}]+)\\}\\}/g;\n const variables: string[] = [];\n let match;\n while ((match = regex.exec(text)) !== null) {\n variables.push(match[1].trim());\n }\n return variables;\n}\n\nexport function hasVariables(text: string): boolean {\n return /\\{\\{[^}]+\\}\\}/.test(text);\n}\n","import { PaywalloClient } from \"./core/PaywalloClient\";\n\nexport { PaywallModal } from \"./domains/paywall\";\nexport { PaywalloContext, type PreloadResult } from \"./context/PaywalloContext\";\nexport { PaywallContext, usePaywallContext } from \"./domains/paywall\";\nexport { AffiliateManager, affiliateManager } from \"./domains/affiliate\";\nexport { ApiClient, type ApiClientConfig } from \"./core/ApiClient\";\nexport {\n HttpClient,\n type HttpClientConfig,\n type HttpResponse,\n type RequestOptions,\n type RetryConfig,\n} from \"./core/http\";\nexport { getIAPService, IAPService } from \"./domains/iap\";\nexport { IdentityManager, identityManager, type IdentityState } from \"./domains/identity\";\nexport { MetaBridge, metaBridge } from \"./domains/identity\";\nexport { nativeStoreKit } from \"./domains/iap\";\nexport {\n type NetworkListener,\n networkMonitor,\n type NetworkMonitorConfig,\n type NetworkState,\n} from \"./core/network\";\nexport {\n type IPaywalloClient,\n PaywalloClient,\n type PaywalloInitConfig,\n type PreloadCampaignResult,\n} from \"./core/PaywalloClient\";\nexport { PaywalloAffiliate } from \"./domains/affiliate\";\nexport {\n offlineQueue,\n type OfflineQueueConfig,\n type QueueEvent,\n type QueueItem,\n type QueueListener,\n queueProcessor,\n type QueueProcessorConfig,\n} from \"./core/queue\";\nexport {\n type SessionConfig,\n SessionManager,\n sessionManager,\n type SessionState,\n} from \"./domains/session\";\nexport {\n AFFILIATE_ERROR_CODES,\n AffiliateError,\n ANALYTICS_ERROR_CODES,\n AnalyticsError,\n CAMPAIGN_ERROR_CODES,\n CampaignError,\n createPurchaseError,\n IDENTITY_ERROR_CODES,\n IdentityError,\n PaywalloError,\n PAYWALL_ERROR_CODES,\n PaywallError,\n PURCHASE_ERROR_CODES,\n PurchaseError,\n SESSION_ERROR_CODES,\n SessionError,\n} from \"./errors\";\nexport { usePaywallo } from \"./hooks/usePaywallo\";\nexport { useProducts } from \"./hooks/useProducts\";\nexport { usePurchase } from \"./hooks/usePurchase\";\nexport { useSubscription } from \"./hooks/useSubscription\";\nexport { PaywalloProvider, type PaywalloProviderProps } from \"./PaywalloProvider\";\nexport type {\n IAPProduct,\n IAPPurchase,\n ProductPriceInfo,\n PurchaseControllerConfig,\n PurchaseState,\n} from \"./domains/iap\";\nexport { ERROR_CODES } from \"./domains/iap\";\nexport type {\n CachedSubscription,\n SubscriptionInfo,\n SubscriptionManagerConfig,\n} from \"./domains/subscription\";\nexport { SubscriptionCache, subscriptionManager } from \"./domains/subscription\";\nexport type {\n AffiliateBalance,\n PaywallErrorStrings,\n AffiliateCommission,\n AffiliateCoupon,\n BlockType,\n BoxSpacing,\n CampaignPresentOptions,\n CampaignResponse,\n CampaignResult,\n ConditionalFlagContext,\n ConditionalFlagResult,\n Environment,\n FlagVariant,\n IdentifyOptions,\n LocalizedText,\n PaywalloConfig,\n PaywallBlockConfig,\n PaywallConfig,\n PaywallNode,\n PaywallPresentOptions,\n PaywallResult,\n PaywallState,\n Product,\n Purchase,\n PurchaseResult,\n RestoreResult,\n Subscription,\n SubscriptionPlatform,\n SubscriptionStatus,\n SubscriptionStatusResponse,\n TapBehavior,\n TrackEventOptions,\n UserProperties,\n ValidatePurchaseResponse,\n WithdrawalRequest,\n} from \"./types\";\nexport {\n detectDeviceLanguage,\n getCurrentLanguage,\n getDefaultLanguage,\n getLocalizedString,\n initLocalization,\n setCurrentLanguage,\n setDefaultLanguage,\n} from \"./utils/localization\";\nexport type { VariableContext } from \"./utils/variableResolver\";\nexport { hasVariables, parseVariables, resolveText } from \"./utils/variableResolver\";\n\nexport const Paywallo = PaywalloClient;\nexport default Paywallo;\n"],"mappings":"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","names":["useCallback","useEffect","useRef","useState","Animated","Dimensions","StyleSheet","View","useCallback","Platform","Platform","useCallback","useRef","useState","useState","useRef","NativeModules","Platform","useCallback","useEffect","useRef","useState","NativeModules","NativeModules","useRef","useState","useEffect","useCallback","jsx","SCREEN_HEIGHT","Dimensions","View","styles","useRef","Animated","useState","useCallback","useEffect","StyleSheet","useCallback","useEffect","useRef","useState","useState","useRef","useEffect","useCallback","Platform","Platform","Platform","AsyncStorage","AsyncStorage","item","Platform","Platform","idfv","Dimensions","Platform","AsyncStorage","NativeModules","Platform","AppState","AppState","AsyncStorage","Dimensions","Platform","generateUUID","isActive","createContext","useContext","useContext","useCallback","useEffect","useState","useState","useCallback","useEffect","useCallback","useState","useState","useCallback","useCallback","useEffect","useState","useState","useCallback","useEffect","useCallback","useEffect","useMemo","useRef","useState","Animated","Dimensions","Easing","StyleSheet","useCallback","useRef","useState","useState","useRef","useCallback","useCallback","useState","useState","useCallback","useCallback","useCallback","useCallback","useRef","useState","CACHE_TTL_MS","useState","useRef","useCallback","jsx","jsxs","useState","useCallback","useRef","useEffect","SCREEN_HEIGHT","useMemo","Dimensions","Animated","Easing","r","styles","StyleSheet"]}
|