expo-helium 3.1.13 → 3.2.0

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.
@@ -43,7 +43,7 @@ android {
43
43
  }
44
44
 
45
45
  dependencies {
46
- implementation("com.tryhelium.paywall:core:0.1.23")
46
+ implementation("com.tryhelium.paywall:core:4.0.1")
47
47
  implementation("com.google.code.gson:gson:2.10.1")
48
48
  implementation("com.android.billingclient:billing:8.0.0")
49
49
  implementation("org.jetbrains.kotlin:kotlin-reflect")
@@ -15,15 +15,14 @@ import com.tryhelium.paywall.core.HeliumEnvironment
15
15
  import com.tryhelium.paywall.core.event.HeliumEvent
16
16
  import com.tryhelium.paywall.core.event.HeliumEventDictionaryMapper
17
17
  import com.tryhelium.paywall.core.event.PaywallEventHandlers
18
- import com.tryhelium.paywall.core.HeliumFallbackConfig
19
- import com.tryhelium.paywall.core.HeliumIdentityManager
20
18
  import com.tryhelium.paywall.core.HeliumUserTraits
21
19
  import com.tryhelium.paywall.core.HeliumUserTraitsArgument
22
20
  import com.tryhelium.paywall.core.HeliumPaywallTransactionStatus
23
21
  import com.tryhelium.paywall.core.HeliumLightDarkMode
24
- import com.tryhelium.paywall.core.HeliumSdkConfig
22
+ import com.tryhelium.paywall.core.PaywallPresentationConfig
25
23
  import com.tryhelium.paywall.delegate.HeliumPaywallDelegate
26
24
  import com.tryhelium.paywall.delegate.PlayStorePaywallDelegate
25
+ import com.tryhelium.paywall.core.logger.HeliumLogger
27
26
  import com.android.billingclient.api.ProductDetails
28
27
  import kotlinx.coroutines.suspendCancellableCoroutine
29
28
  import java.lang.ref.WeakReference
@@ -165,7 +164,7 @@ class HeliumPaywallSdkModule : Module() {
165
164
  }
166
165
 
167
166
  // Defines event names that the module can send to JavaScript
168
- Events("onHeliumPaywallEvent", "onDelegateActionEvent", "paywallEventHandlers")
167
+ Events("onHeliumPaywallEvent", "onDelegateActionEvent", "paywallEventHandlers", "onHeliumLogEvent")
169
168
 
170
169
  // Lifecycle event to cache Activity reference for hot reload resilience
171
170
  OnActivityEntersForeground {
@@ -193,12 +192,15 @@ class HeliumPaywallSdkModule : Module() {
193
192
 
194
193
  @Suppress("UNCHECKED_CAST")
195
194
  val paywallLoadingConfigMap = convertMarkersToBooleans(config["paywallLoadingConfig"] as? Map<String, Any?>)
196
- val fallbackConfig = convertToHeliumFallbackConfig(
197
- paywallLoadingConfigMap,
198
- fallbackBundleUrlString,
199
- fallbackBundleString,
200
- appContext.reactContext
201
- )
195
+ val useLoadingState = paywallLoadingConfigMap?.get("useLoadingState") as? Boolean ?: true
196
+ val loadingBudgetSeconds = (paywallLoadingConfigMap?.get("loadingBudget") as? Number)?.toDouble()
197
+ val loadingBudgetMs = loadingBudgetSeconds?.let { (it * 1000).toLong() } ?: DEFAULT_LOADING_BUDGET_MS
198
+ if (!useLoadingState) {
199
+ // Setting <= 0 will disable loading state
200
+ Helium.config.defaultLoadingBudgetInMs = -1
201
+ } else {
202
+ Helium.config.defaultLoadingBudgetInMs = loadingBudgetMs ?: DEFAULT_LOADING_BUDGET_MS
203
+ }
202
204
 
203
205
  // Parse environment parameter, defaulting to PRODUCTION
204
206
  val environmentString = config["environment"] as? String
@@ -221,7 +223,10 @@ class HeliumPaywallSdkModule : Module() {
221
223
  }
222
224
 
223
225
  val wrapperSdkVersion = config["wrapperSdkVersion"] as? String ?: "unknown"
224
- HeliumSdkConfig.setWrapperSdkInfo(sdk = "expo", version = wrapperSdkVersion)
226
+ Helium.config.setWrapperSdkInfo(sdk = "expo", version = wrapperSdkVersion)
227
+
228
+ // Set up bridging logger to forward native SDK logs to JavaScript
229
+ Helium.config.logger = BridgingLogger()
225
230
 
226
231
  val delegateType = config["delegateType"] as? String ?: "custom"
227
232
 
@@ -238,20 +243,23 @@ class HeliumPaywallSdkModule : Module() {
238
243
  CustomPaywallDelegate(delegateType, delegateEventHandler)
239
244
  }
240
245
 
246
+ customUserId?.let { Helium.identity.userId = it }
247
+ customUserTraits?.let { Helium.identity.setUserTraits(it) }
248
+ revenueCatAppUserId?.let { Helium.identity.revenueCatAppUserId = it }
249
+
250
+ Helium.config.heliumPaywallDelegate = delegate
251
+ customAPIEndpoint?.let { Helium.config.customApiEndpoint = it }
252
+
253
+ setupFallbackBundle(context, fallbackBundleUrlString, fallbackBundleString)
254
+
241
255
  Helium.initialize(
242
256
  context = context,
243
257
  apiKey = apiKey,
244
- heliumPaywallDelegate = delegate,
245
- customUserId = customUserId,
246
- customApiEndpoint = customAPIEndpoint,
247
- customUserTraits = customUserTraits,
248
- revenueCatAppUserId = revenueCatAppUserId,
249
- fallbackConfig = fallbackConfig,
250
- environment = environment
258
+ environment = environment,
251
259
  )
252
260
  } catch (e: Exception) {
253
261
  // Log error but don't throw - initialization errors will be handled by SDK
254
- android.util.Log.e("HeliumPaywallSdk", "Failed to initialize: ${e.message}", e)
262
+ Helium.config.logger?.e("Failed to initialize: ${e.message}")
255
263
  }
256
264
  }
257
265
 
@@ -316,23 +324,28 @@ class HeliumPaywallSdkModule : Module() {
316
324
  onCustomPaywallAction = { event -> sendPaywallEvent(event) }
317
325
  )
318
326
 
319
- Helium.presentUpsell(
327
+ Helium.presentPaywall(
320
328
  trigger = trigger,
321
- activityContext = activity,
322
- dontShowIfAlreadyEntitled = dontShowIfAlreadyEntitled,
323
- customPaywallTraits = convertedTraits,
324
- eventListener = eventHandlers
329
+ config = PaywallPresentationConfig(
330
+ fromActivityContext = activity,
331
+ customPaywallTraits = convertedTraits,
332
+ dontShowIfAlreadyEntitled = dontShowIfAlreadyEntitled ?: false
333
+ ),
334
+ eventListener = eventHandlers,
335
+ onPaywallNotShown = { _ ->
336
+ // nothing for now
337
+ }
325
338
  )
326
339
  }
327
340
 
328
341
  // Hide the current upsell
329
342
  Function("hideUpsell") {
330
- Helium.hideUpsell()
343
+ Helium.hidePaywall()
331
344
  }
332
345
 
333
346
  // Hide all upsells
334
347
  Function("hideAllUpsells") {
335
- Helium.hideAllUpsells()
348
+ Helium.hideAllPaywalls()
336
349
  }
337
350
 
338
351
  // Get download status of paywall assets
@@ -375,17 +388,17 @@ class HeliumPaywallSdkModule : Module() {
375
388
 
376
389
  // Set RevenueCat app user ID
377
390
  Function("setRevenueCatAppUserId") { rcAppUserId: String ->
378
- HeliumIdentityManager.shared.setRevenueCatAppUserId(rcAppUserId)
391
+ Helium.identity.revenueCatAppUserId = rcAppUserId
379
392
  }
380
393
 
381
394
  // Set custom user ID
382
395
  Function("setCustomUserId") { newUserId: String ->
383
- Helium.shared.overrideUserId(customUserId = newUserId, customUserTraits = null)
396
+ Helium.identity.userId = newUserId
384
397
  }
385
398
 
386
399
  // Check if user has entitlement for a specific paywall
387
400
  AsyncFunction("hasEntitlementForPaywall") Coroutine { trigger: String ->
388
- val result = Helium.shared.hasEntitlementForPaywall(trigger)
401
+ val result = Helium.entitlements.hasEntitlementForPaywall(trigger)
389
402
  return@Coroutine HasEntitlementResult().apply {
390
403
  hasEntitlement = result
391
404
  }
@@ -393,12 +406,12 @@ class HeliumPaywallSdkModule : Module() {
393
406
 
394
407
  // Check if user has any active subscription
395
408
  AsyncFunction("hasAnyActiveSubscription") Coroutine { ->
396
- return@Coroutine Helium.shared.hasAnyActiveSubscription()
409
+ return@Coroutine Helium.entitlements.hasAnyActiveSubscription()
397
410
  }
398
411
 
399
412
  // Check if user has any entitlement
400
413
  AsyncFunction("hasAnyEntitlement") Coroutine { ->
401
- return@Coroutine Helium.shared.hasAnyEntitlement()
414
+ return@Coroutine Helium.entitlements.hasAnyEntitlement()
402
415
  }
403
416
 
404
417
  // Handle deep link
@@ -409,7 +422,7 @@ class HeliumPaywallSdkModule : Module() {
409
422
 
410
423
  // Get experiment info for a trigger
411
424
  Function("getExperimentInfoForTrigger") { trigger: String ->
412
- val experimentInfo = Helium.shared.getExperimentInfoForTrigger(trigger)
425
+ val experimentInfo = Helium.experiments.getExperimentInfoForTrigger(trigger)
413
426
 
414
427
  return@Function if (experimentInfo == null) {
415
428
  mapOf<String, Any?>(
@@ -445,6 +458,8 @@ class HeliumPaywallSdkModule : Module() {
445
458
 
446
459
  // Reset Helium SDK
447
460
  Function("resetHelium") {
461
+ // Reset logger back to default stdout logger
462
+ Helium.config.logger = HeliumLogger.Stdout
448
463
  Helium.resetHelium()
449
464
  }
450
465
 
@@ -535,69 +550,36 @@ class HeliumPaywallSdkModule : Module() {
535
550
  }
536
551
  }
537
552
 
538
- private fun convertToHeliumFallbackConfig(
539
- paywallLoadingConfig: Map<String, Any?>?,
553
+ /**
554
+ * Sets up the fallback bundle by writing it to the helium_local directory where the SDK expects it.
555
+ * Accepts either a URL string pointing to an existing file, or a JSON string to write directly.
556
+ */
557
+ private fun setupFallbackBundle(
558
+ context: android.content.Context,
540
559
  fallbackBundleUrlString: String?,
541
- fallbackBundleString: String?,
542
- context: android.content.Context?
543
- ): HeliumFallbackConfig? {
544
- // Extract loading config settings
545
- val useLoadingState = paywallLoadingConfig?.get("useLoadingState") as? Boolean ?: true
546
- val loadingBudgetSeconds = (paywallLoadingConfig?.get("loadingBudget") as? Number)?.toDouble()
547
- val loadingBudget = loadingBudgetSeconds?.let { (it * 1000).toLong() } ?: DEFAULT_LOADING_BUDGET_MS
548
-
549
- // Parse perTriggerLoadingConfig if present
550
- var perTriggerLoadingConfig: Map<String, HeliumFallbackConfig>? = null
551
- val perTriggerDict = paywallLoadingConfig?.get("perTriggerLoadingConfig") as? Map<*, *>
552
- if (perTriggerDict != null) {
553
- @Suppress("UNCHECKED_CAST")
554
- perTriggerLoadingConfig = perTriggerDict.mapNotNull { (key, value) ->
555
- if (key is String && value is Map<*, *>) {
556
- val config = value as? Map<String, Any?>
557
- val triggerUseLoadingState = config?.get("useLoadingState") as? Boolean
558
- val triggerLoadingBudgetSeconds = (config?.get("loadingBudget") as? Number)?.toDouble()
559
- val triggerLoadingBudget = triggerLoadingBudgetSeconds?.let { (it * 1000).toLong() }
560
- key to HeliumFallbackConfig(
561
- useLoadingState = triggerUseLoadingState ?: true,
562
- loadingBudgetInMs = triggerLoadingBudget ?: DEFAULT_LOADING_BUDGET_MS
563
- )
564
- } else {
565
- null
566
- }
567
- }.toMap() as? Map<String, HeliumFallbackConfig>
568
- }
560
+ fallbackBundleString: String?
561
+ ) {
562
+ if (fallbackBundleUrlString == null && fallbackBundleString == null) return
569
563
 
570
- // Handle fallback bundle - write to helium_local directory where SDK expects it
571
- var fallbackBundleName: String? = null
572
- if (context != null && (fallbackBundleUrlString != null || fallbackBundleString != null)) {
573
- try {
574
- val heliumLocalDir = context.getDir("helium_local", android.content.Context.MODE_PRIVATE)
575
- val destinationFile = java.io.File(heliumLocalDir, "helium-fallback.json")
576
-
577
- if (fallbackBundleUrlString != null) {
578
- // Copy file from Expo's document directory to helium_local
579
- val sourceFile = java.io.File(java.net.URI.create(fallbackBundleUrlString))
580
- if (sourceFile.exists()) {
581
- sourceFile.copyTo(destinationFile, overwrite = true)
582
- fallbackBundleName = "helium-fallback.json"
583
- }
584
- } else if (fallbackBundleString != null) {
585
- // Write fallback bundle string to file
586
- destinationFile.writeText(fallbackBundleString)
587
- fallbackBundleName = "helium-fallback.json"
564
+ try {
565
+ val heliumLocalDir = context.getDir("helium_local", android.content.Context.MODE_PRIVATE)
566
+ val destinationFile = java.io.File(heliumLocalDir, "helium-expo-fallbacks.json")
567
+
568
+ if (fallbackBundleUrlString != null) {
569
+ // Copy file from Expo's document directory to helium_local
570
+ val sourceFile = java.io.File(java.net.URI.create(fallbackBundleUrlString))
571
+ if (sourceFile.exists()) {
572
+ sourceFile.copyTo(destinationFile, overwrite = true)
588
573
  }
589
- } catch (e: Exception) {
590
- // Silently fail for now
574
+ } else if (fallbackBundleString != null) {
575
+ // Write fallback bundle string to file
576
+ destinationFile.writeText(fallbackBundleString)
591
577
  }
578
+ } catch (e: Exception) {
579
+ Helium.config.logger?.e("Failed to write fallback bundle: ${e.message}")
592
580
  }
593
-
594
- return HeliumFallbackConfig(
595
- useLoadingState = useLoadingState,
596
- loadingBudgetInMs = loadingBudget,
597
- perTriggerLoadingConfig = perTriggerLoadingConfig,
598
- fallbackBundleName = fallbackBundleName
599
- )
600
581
  }
582
+
601
583
  }
602
584
 
603
585
  /**
@@ -688,3 +670,61 @@ class DefaultPaywallDelegate(
688
670
  eventHandler(event)
689
671
  }
690
672
  }
673
+
674
+ /**
675
+ * Bridging logger that forwards native SDK logs to JavaScript while also
676
+ * logging to stdout (logcat) for local debugging.
677
+ *
678
+ * Log level mapping to match iOS:
679
+ * - e (error) -> level 1
680
+ * - w (warn) -> level 2
681
+ * - i (info) -> level 3
682
+ * - d (debug) -> level 4
683
+ * - v (verbose/trace) -> level 5
684
+ */
685
+ class BridgingLogger : HeliumLogger {
686
+ override val logTag: String = "Helium"
687
+
688
+ // Also log to stdout so logcat still works
689
+ private val stdoutLogger = HeliumLogger.Stdout
690
+
691
+ override fun e(message: String) {
692
+ stdoutLogger.e(message)
693
+ sendLogEvent(level = 1, message = message)
694
+ }
695
+
696
+ override fun w(message: String) {
697
+ stdoutLogger.w(message)
698
+ sendLogEvent(level = 2, message = message)
699
+ }
700
+
701
+ override fun i(message: String) {
702
+ stdoutLogger.i(message)
703
+ sendLogEvent(level = 3, message = message)
704
+ }
705
+
706
+ override fun d(message: String) {
707
+ stdoutLogger.d(message)
708
+ sendLogEvent(level = 4, message = message)
709
+ }
710
+
711
+ override fun v(message: String) {
712
+ stdoutLogger.v(message)
713
+ sendLogEvent(level = 5, message = message)
714
+ }
715
+
716
+ private fun sendLogEvent(level: Int, message: String) {
717
+ // Drop log events if no module is available - don't queue them.
718
+ // Logs could be high-volume and could evict critical events (purchase/restore).
719
+ // Plus they're already going to logcat via stdoutLogger anyway.
720
+ if (NativeModuleManager.currentModule == null) return
721
+
722
+ val eventData = mapOf(
723
+ "level" to level,
724
+ "category" to logTag,
725
+ "message" to "[$logTag] $message",
726
+ "metadata" to emptyMap<String, String>()
727
+ )
728
+ NativeModuleManager.safeSendEvent("onHeliumLogEvent", eventData)
729
+ }
730
+ }
@@ -6,7 +6,19 @@ export type HeliumPaywallSdkModuleEvents = {
6
6
  onHeliumPaywallEvent: (params: HeliumPaywallEvent) => void;
7
7
  onDelegateActionEvent: (params: DelegateActionEvent) => void;
8
8
  paywallEventHandlers: (params: HeliumPaywallEvent) => void;
9
+ onHeliumLogEvent: (params: HeliumLogEvent) => void;
9
10
  };
11
+ /** A log event emitted by the Helium SDK. */
12
+ export interface HeliumLogEvent {
13
+ /** Numeric log level (1=error, 2=warn, 3=info, 4=debug, 5=trace). */
14
+ level: number;
15
+ /** The category/subsystem that generated this log (iOS) or tag (Android). */
16
+ category: string;
17
+ /** The log message (prefixed with "[Helium] "). */
18
+ message: string;
19
+ /** Key-value metadata associated with this log event (iOS only, empty on Android). */
20
+ metadata: Record<string, string>;
21
+ }
10
22
  export type HeliumPaywallEvent = {
11
23
  type: 'paywallOpen' | 'paywallClose' | 'paywallDismissed' | 'paywallOpenFailed' | 'paywallSkipped' | 'paywallButtonPressed' | 'productSelected' | 'purchasePressed' | 'purchaseSucceeded' | 'purchaseCancelled' | 'purchaseFailed' | 'purchaseRestored' | 'purchaseRestoreFailed' | 'purchasePending' | 'initializeStart' | 'paywallsDownloadSuccess' | 'paywallsDownloadError' | 'paywallWebViewRendered' | 'customPaywallAction' | 'userAllocated';
12
24
  triggerName?: string;
@@ -92,12 +104,6 @@ export declare function createCustomPurchaseConfig(callbacks: {
92
104
  makePurchaseAndroid?: (productId: string, basePlanId?: string, offerId?: string) => Promise<HeliumPurchaseResult>;
93
105
  restorePurchases: () => Promise<boolean>;
94
106
  }): HeliumPurchaseConfig;
95
- export type TriggerLoadingConfig = {
96
- /** Whether to show loading state for this trigger. Set to nil to use the global `useLoadingState` setting. */
97
- useLoadingState?: boolean;
98
- /** Maximum seconds to show loading for this trigger. Set to nil to use the global `loadingBudget` setting. */
99
- loadingBudget?: number;
100
- };
101
107
  export type HeliumPaywallLoadingConfig = {
102
108
  /**
103
109
  * Whether to show a loading state while fetching paywall configuration.
@@ -111,13 +117,6 @@ export type HeliumPaywallLoadingConfig = {
111
117
  * Default: 7.0 seconds
112
118
  */
113
119
  loadingBudget?: number;
114
- /**
115
- * Optional per-trigger loading configuration overrides.
116
- * Use this to customize loading behavior for specific triggers.
117
- * Keys are trigger names, values are TriggerLoadingConfig instances.
118
- * Example: Disable loading for "onboarding" trigger while keeping it for others.
119
- */
120
- perTriggerLoadingConfig?: Record<string, TriggerLoadingConfig>;
121
120
  };
122
121
  export interface HeliumConfig {
123
122
  /** Your Helium API Key */
@@ -1 +1 @@
1
- {"version":3,"file":"HeliumPaywallSdk.types.d.ts","sourceRoot":"","sources":["../src/HeliumPaywallSdk.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HeliumPaywallSdk.types.d.ts","sourceRoot":"","sources":["../src/HeliumPaywallSdk.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"HeliumPaywallSdk.types.js","sourceRoot":"","sources":["../src/HeliumPaywallSdk.types.ts"],"names":[],"mappings":"AAuGA,sDAAsD;AACtD,MAAM,UAAU,0BAA0B,CAAC,SAM1C;IACC,OAAO;QACL,YAAY,EAAE,SAAS,CAAC,YAAY;QACpC,eAAe,EAAE,SAAS,CAAC,eAAe;QAC1C,mBAAmB,EAAE,SAAS,CAAC,mBAAmB;QAClD,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;KAC7C,CAAC;AACJ,CAAC;AAuJD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,aAAa,EAAE,eAAe;IAC9B,gBAAgB,EAAE,kBAAkB;CACrC,CAAA","sourcesContent":["import type { StyleProp, ViewStyle } from 'react-native';\n\nexport type OnLoadEventPayload = {\n url: string;\n};\n\nexport type HeliumPaywallSdkModuleEvents = {\n onHeliumPaywallEvent: (params: HeliumPaywallEvent) => void;\n onDelegateActionEvent: (params: DelegateActionEvent) => void;\n paywallEventHandlers: (params: HeliumPaywallEvent) => void;\n};\nexport type HeliumPaywallEvent = {\n type: 'paywallOpen' | 'paywallClose' | 'paywallDismissed' |\n 'paywallOpenFailed' | 'paywallSkipped' | 'paywallButtonPressed' |\n 'productSelected' | 'purchasePressed' | 'purchaseSucceeded' |\n 'purchaseCancelled' | 'purchaseFailed' | 'purchaseRestored' |\n 'purchaseRestoreFailed' | 'purchasePending' | 'initializeStart' |\n 'paywallsDownloadSuccess' | 'paywallsDownloadError' | 'paywallWebViewRendered' |\n 'customPaywallAction' | 'userAllocated';\n triggerName?: string;\n paywallName?: string;\n /**\n * @deprecated Use `paywallName` instead.\n */\n paywallTemplateName?: string;\n productId?: string;\n /**\n * @deprecated Use `productId` instead.\n */\n productKey?: string;\n buttonName?: string;\n /**\n * @deprecated Use `buttonName` instead.\n */\n ctaName?: string;\n configId?: string;\n numAttempts?: number;\n downloadTimeTakenMS?: number;\n webviewRenderTimeTakenMS?: number;\n imagesDownloadTimeTakenMS?: number;\n fontsDownloadTimeTakenMS?: number;\n bundleDownloadTimeMS?: number;\n dismissAll?: boolean;\n isSecondTry?: boolean;\n error?: string;\n /**\n * @deprecated Use `error` instead.\n */\n errorDescription?: string;\n /**\n * Unix timestamp in seconds\n */\n timestamp?: number;\n paywallUnavailableReason?: string;\n customPaywallActionName?: string;\n customPaywallActionParams?: Record<string, any>;\n};\nexport type DelegateActionEvent = {\n type: 'purchase' | 'restore';\n productId?: string;\n /** Android-specific: Base plan ID for subscriptions */\n basePlanId?: string;\n /** Android-specific: Offer ID for promotional offers */\n offerId?: string;\n};\n\nexport type HeliumPaywallSdkViewProps = {\n url: string;\n onLoad: (event: { nativeEvent: OnLoadEventPayload }) => void;\n style?: StyleProp<ViewStyle>;\n};\n\nexport type HeliumTransactionStatus = 'purchased' | 'failed' | 'cancelled' | 'pending' | 'restored';\nexport type HeliumPurchaseResult = {\n status: HeliumTransactionStatus;\n error?: string; // Optional error message\n};\nexport type HeliumDownloadStatus = 'downloadSuccess' | 'downloadFailure' | 'inProgress' | 'notDownloadedYet';\nexport type HeliumLightDarkMode = 'light' | 'dark' | 'system';\nexport type HeliumEnvironment = 'sandbox' | 'production';\n\n// --- Purchase Configuration Types ---\n\n/** Interface for providing custom purchase handling logic. */\nexport interface HeliumPurchaseConfig {\n /**\n * @deprecated Use makePurchaseIOS / makePurchaseAndroid instead for platform-specific handling.\n * This method will continue to work for backward compatibility but doesn't provide Android subscription parameters.\n */\n makePurchase?: (productId: string) => Promise<HeliumPurchaseResult>;\n\n /** iOS-specific purchase handler. Receives a simple product ID string. */\n makePurchaseIOS?: (productId: string) => Promise<HeliumPurchaseResult>;\n\n /** Android-specific purchase handler. Receives product ID and optional subscription parameters. */\n makePurchaseAndroid?: (productId: string, basePlanId?: string, offerId?: string) => Promise<HeliumPurchaseResult>;\n\n restorePurchases: () => Promise<boolean>;\n\n /** @internal Used to identify the purchase delegate type for analytics. */\n _delegateType?: string;\n}\n\n// Helper function for creating Custom Purchase Config\nexport function createCustomPurchaseConfig(callbacks: {\n /** @deprecated Use makePurchaseIOS or makePurchaseAndroid instead */\n makePurchase?: (productId: string) => Promise<HeliumPurchaseResult>;\n makePurchaseIOS?: (productId: string) => Promise<HeliumPurchaseResult>;\n makePurchaseAndroid?: (productId: string, basePlanId?: string, offerId?: string) => Promise<HeliumPurchaseResult>;\n restorePurchases: () => Promise<boolean>;\n}): HeliumPurchaseConfig {\n return {\n makePurchase: callbacks.makePurchase,\n makePurchaseIOS: callbacks.makePurchaseIOS,\n makePurchaseAndroid: callbacks.makePurchaseAndroid,\n restorePurchases: callbacks.restorePurchases,\n };\n}\n\nexport type TriggerLoadingConfig = {\n /** Whether to show loading state for this trigger. Set to nil to use the global `useLoadingState` setting. */\n useLoadingState?: boolean;\n /** Maximum seconds to show loading for this trigger. Set to nil to use the global `loadingBudget` setting. */\n loadingBudget?: number;\n};\n\nexport type HeliumPaywallLoadingConfig = {\n /**\n * Whether to show a loading state while fetching paywall configuration.\n * When true, shows a loading view for up to `loadingBudget` seconds before falling back.\n * Default: true\n */\n useLoadingState?: boolean;\n /**\n * Maximum time (in seconds) to show the loading state before displaying fallback.\n * After this timeout, the fallback view will be shown even if the paywall is still downloading.\n * Default: 7.0 seconds\n */\n loadingBudget?: number;\n /**\n * Optional per-trigger loading configuration overrides.\n * Use this to customize loading behavior for specific triggers.\n * Keys are trigger names, values are TriggerLoadingConfig instances.\n * Example: Disable loading for \"onboarding\" trigger while keeping it for others.\n */\n perTriggerLoadingConfig?: Record<string, TriggerLoadingConfig>;\n};\n\nexport interface HeliumConfig {\n /** Your Helium API Key */\n apiKey: string;\n /**\n * Configuration for handling purchases. Can be custom functions or a pre-built handler config.\n * If not provided, Helium will handle purchases for you.\n */\n purchaseConfig?: HeliumPurchaseConfig;\n /** Callback for receiving all Helium paywall events. */\n onHeliumPaywallEvent?: (event: HeliumPaywallEvent) => void;\n\n // Optional configurations\n /** Fallback bundle in the rare situation that paywall is not ready to be shown. Highly recommended. See docs at https://docs.tryhelium.com/guides/fallback-bundle#react-native */\n fallbackBundle?: object;\n /** Configure loading behavior for paywalls that are mid-download. */\n paywallLoadingConfig?: HeliumPaywallLoadingConfig;\n /** Environment to use for Android. (iOS auto-detects this.)\n * If not specified, Android environment will be \"sandbox\" if app is a debug build, \"production\" otherwise.\n * Recommended to pass in \"sandbox\" for QA builds that behave like a production build but are actually just for testing.\n */\n environment?: HeliumEnvironment;\n customUserId?: string;\n customAPIEndpoint?: string;\n customUserTraits?: Record<string, any>;\n revenueCatAppUserId?: string;\n}\n\nexport interface NativeHeliumConfig {\n apiKey: string;\n customUserId?: string;\n customAPIEndpoint?: string;\n customUserTraits?: Record<string, any>;\n revenueCatAppUserId?: string;\n fallbackBundleUrlString?: string;\n fallbackBundleString?: string;\n paywallLoadingConfig?: HeliumPaywallLoadingConfig;\n useDefaultDelegate?: boolean;\n environment?: string;\n wrapperSdkVersion?: string;\n delegateType?: string;\n}\n\nexport type PresentUpsellParams = {\n triggerName: string;\n /** Optional. This will be called when paywall fails to show due to an unsuccessful paywall download or if an invalid trigger is provided. */\n onFallback?: () => void;\n eventHandlers?: PaywallEventHandlers;\n customPaywallTraits?: Record<string, any>;\n /** Optional. If true, the paywall will not be shown if the user already has an entitlement for a product in the paywall. */\n dontShowIfAlreadyEntitled?: boolean;\n};\n\nexport interface PaywallInfo {\n /** Name of the paywall. */\n paywallTemplateName: string;\n /** Will be false if the paywall should not be shown due to targeting or workflow configuration (Helium handles this for you in presentUpsell) */\n shouldShow: boolean;\n}\n\n// Event handler types for per-presentation event handling\nexport interface PaywallEventHandlers {\n onOpen?: (event: PaywallOpenEvent) => void;\n onClose?: (event: PaywallCloseEvent) => void;\n onDismissed?: (event: PaywallDismissedEvent) => void;\n onPurchaseSucceeded?: (event: PurchaseSucceededEvent) => void;\n onOpenFailed?: (event: PaywallOpenFailedEvent) => void;\n onCustomPaywallAction?: (event: CustomPaywallActionEvent) => void;\n /** A handler that will fire for any paywall-related event. */\n onAnyEvent?: (event: HeliumPaywallEvent) => void;\n}\n\n// Typed event interfaces\nexport interface PaywallOpenEvent {\n type: 'paywallOpen';\n triggerName: string;\n paywallName: string;\n isSecondTry: boolean;\n viewType?: 'presented' | 'embedded' | 'triggered';\n}\n\nexport interface PaywallCloseEvent {\n type: 'paywallClose';\n triggerName: string;\n paywallName: string;\n isSecondTry: boolean;\n}\n\nexport interface PaywallDismissedEvent {\n type: 'paywallDismissed';\n triggerName: string;\n paywallName: string;\n isSecondTry: boolean;\n}\n\nexport interface PurchaseSucceededEvent {\n type: 'purchaseSucceeded';\n productId: string;\n triggerName: string;\n paywallName: string;\n isSecondTry: boolean;\n}\n\nexport interface PaywallOpenFailedEvent {\n type: 'paywallOpenFailed';\n triggerName: string;\n paywallName: string;\n error: string;\n paywallUnavailableReason?: string;\n isSecondTry: boolean;\n}\n\nexport interface CustomPaywallActionEvent {\n type: 'customPaywallAction';\n triggerName: string;\n paywallName: string;\n actionName: string;\n params: Record<string, any>;\n isSecondTry: boolean;\n}\n\nexport const HELIUM_CTA_NAMES = {\n SCHEDULE_CALL: 'schedule_call',\n SUBSCRIBE_BUTTON: 'subscribe_button',\n}\n"]}
1
+ {"version":3,"file":"HeliumPaywallSdk.types.js","sourceRoot":"","sources":["../src/HeliumPaywallSdk.types.ts"],"names":[],"mappings":"AAoHA,sDAAsD;AACtD,MAAM,UAAU,0BAA0B,CAAC,SAM1C;IACC,OAAO;QACL,YAAY,EAAE,SAAS,CAAC,YAAY;QACpC,eAAe,EAAE,SAAS,CAAC,eAAe;QAC1C,mBAAmB,EAAE,SAAS,CAAC,mBAAmB;QAClD,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;KAC7C,CAAC;AACJ,CAAC;AAyID,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,aAAa,EAAE,eAAe;IAC9B,gBAAgB,EAAE,kBAAkB;CACrC,CAAA","sourcesContent":["import type { StyleProp, ViewStyle } from 'react-native';\n\nexport type OnLoadEventPayload = {\n url: string;\n};\n\nexport type HeliumPaywallSdkModuleEvents = {\n onHeliumPaywallEvent: (params: HeliumPaywallEvent) => void;\n onDelegateActionEvent: (params: DelegateActionEvent) => void;\n paywallEventHandlers: (params: HeliumPaywallEvent) => void;\n onHeliumLogEvent: (params: HeliumLogEvent) => void;\n};\n\n/** A log event emitted by the Helium SDK. */\nexport interface HeliumLogEvent {\n /** Numeric log level (1=error, 2=warn, 3=info, 4=debug, 5=trace). */\n level: number;\n /** The category/subsystem that generated this log (iOS) or tag (Android). */\n category: string;\n /** The log message (prefixed with \"[Helium] \"). */\n message: string;\n /** Key-value metadata associated with this log event (iOS only, empty on Android). */\n metadata: Record<string, string>;\n}\nexport type HeliumPaywallEvent = {\n type: 'paywallOpen' | 'paywallClose' | 'paywallDismissed' |\n 'paywallOpenFailed' | 'paywallSkipped' | 'paywallButtonPressed' |\n 'productSelected' | 'purchasePressed' | 'purchaseSucceeded' |\n 'purchaseCancelled' | 'purchaseFailed' | 'purchaseRestored' |\n 'purchaseRestoreFailed' | 'purchasePending' | 'initializeStart' |\n 'paywallsDownloadSuccess' | 'paywallsDownloadError' | 'paywallWebViewRendered' |\n 'customPaywallAction' | 'userAllocated';\n triggerName?: string;\n paywallName?: string;\n /**\n * @deprecated Use `paywallName` instead.\n */\n paywallTemplateName?: string;\n productId?: string;\n /**\n * @deprecated Use `productId` instead.\n */\n productKey?: string;\n buttonName?: string;\n /**\n * @deprecated Use `buttonName` instead.\n */\n ctaName?: string;\n configId?: string;\n numAttempts?: number;\n downloadTimeTakenMS?: number;\n webviewRenderTimeTakenMS?: number;\n imagesDownloadTimeTakenMS?: number;\n fontsDownloadTimeTakenMS?: number;\n bundleDownloadTimeMS?: number;\n dismissAll?: boolean;\n isSecondTry?: boolean;\n error?: string;\n /**\n * @deprecated Use `error` instead.\n */\n errorDescription?: string;\n /**\n * Unix timestamp in seconds\n */\n timestamp?: number;\n paywallUnavailableReason?: string;\n customPaywallActionName?: string;\n customPaywallActionParams?: Record<string, any>;\n};\nexport type DelegateActionEvent = {\n type: 'purchase' | 'restore';\n productId?: string;\n /** Android-specific: Base plan ID for subscriptions */\n basePlanId?: string;\n /** Android-specific: Offer ID for promotional offers */\n offerId?: string;\n};\n\nexport type HeliumPaywallSdkViewProps = {\n url: string;\n onLoad: (event: { nativeEvent: OnLoadEventPayload }) => void;\n style?: StyleProp<ViewStyle>;\n};\n\nexport type HeliumTransactionStatus = 'purchased' | 'failed' | 'cancelled' | 'pending' | 'restored';\nexport type HeliumPurchaseResult = {\n status: HeliumTransactionStatus;\n error?: string; // Optional error message\n};\nexport type HeliumDownloadStatus = 'downloadSuccess' | 'downloadFailure' | 'inProgress' | 'notDownloadedYet';\nexport type HeliumLightDarkMode = 'light' | 'dark' | 'system';\nexport type HeliumEnvironment = 'sandbox' | 'production';\n\n// --- Purchase Configuration Types ---\n\n/** Interface for providing custom purchase handling logic. */\nexport interface HeliumPurchaseConfig {\n /**\n * @deprecated Use makePurchaseIOS / makePurchaseAndroid instead for platform-specific handling.\n * This method will continue to work for backward compatibility but doesn't provide Android subscription parameters.\n */\n makePurchase?: (productId: string) => Promise<HeliumPurchaseResult>;\n\n /** iOS-specific purchase handler. Receives a simple product ID string. */\n makePurchaseIOS?: (productId: string) => Promise<HeliumPurchaseResult>;\n\n /** Android-specific purchase handler. Receives product ID and optional subscription parameters. */\n makePurchaseAndroid?: (productId: string, basePlanId?: string, offerId?: string) => Promise<HeliumPurchaseResult>;\n\n restorePurchases: () => Promise<boolean>;\n\n /** @internal Used to identify the purchase delegate type for analytics. */\n _delegateType?: string;\n}\n\n// Helper function for creating Custom Purchase Config\nexport function createCustomPurchaseConfig(callbacks: {\n /** @deprecated Use makePurchaseIOS or makePurchaseAndroid instead */\n makePurchase?: (productId: string) => Promise<HeliumPurchaseResult>;\n makePurchaseIOS?: (productId: string) => Promise<HeliumPurchaseResult>;\n makePurchaseAndroid?: (productId: string, basePlanId?: string, offerId?: string) => Promise<HeliumPurchaseResult>;\n restorePurchases: () => Promise<boolean>;\n}): HeliumPurchaseConfig {\n return {\n makePurchase: callbacks.makePurchase,\n makePurchaseIOS: callbacks.makePurchaseIOS,\n makePurchaseAndroid: callbacks.makePurchaseAndroid,\n restorePurchases: callbacks.restorePurchases,\n };\n}\n\nexport type HeliumPaywallLoadingConfig = {\n /**\n * Whether to show a loading state while fetching paywall configuration.\n * When true, shows a loading view for up to `loadingBudget` seconds before falling back.\n * Default: true\n */\n useLoadingState?: boolean;\n /**\n * Maximum time (in seconds) to show the loading state before displaying fallback.\n * After this timeout, the fallback view will be shown even if the paywall is still downloading.\n * Default: 7.0 seconds\n */\n loadingBudget?: number;\n};\n\nexport interface HeliumConfig {\n /** Your Helium API Key */\n apiKey: string;\n /**\n * Configuration for handling purchases. Can be custom functions or a pre-built handler config.\n * If not provided, Helium will handle purchases for you.\n */\n purchaseConfig?: HeliumPurchaseConfig;\n /** Callback for receiving all Helium paywall events. */\n onHeliumPaywallEvent?: (event: HeliumPaywallEvent) => void;\n\n // Optional configurations\n /** Fallback bundle in the rare situation that paywall is not ready to be shown. Highly recommended. See docs at https://docs.tryhelium.com/guides/fallback-bundle#react-native */\n fallbackBundle?: object;\n /** Configure loading behavior for paywalls that are mid-download. */\n paywallLoadingConfig?: HeliumPaywallLoadingConfig;\n /** Environment to use for Android. (iOS auto-detects this.)\n * If not specified, Android environment will be \"sandbox\" if app is a debug build, \"production\" otherwise.\n * Recommended to pass in \"sandbox\" for QA builds that behave like a production build but are actually just for testing.\n */\n environment?: HeliumEnvironment;\n customUserId?: string;\n customAPIEndpoint?: string;\n customUserTraits?: Record<string, any>;\n revenueCatAppUserId?: string;\n}\n\nexport interface NativeHeliumConfig {\n apiKey: string;\n customUserId?: string;\n customAPIEndpoint?: string;\n customUserTraits?: Record<string, any>;\n revenueCatAppUserId?: string;\n fallbackBundleUrlString?: string;\n fallbackBundleString?: string;\n paywallLoadingConfig?: HeliumPaywallLoadingConfig;\n useDefaultDelegate?: boolean;\n environment?: string;\n wrapperSdkVersion?: string;\n delegateType?: string;\n}\n\nexport type PresentUpsellParams = {\n triggerName: string;\n /** Optional. This will be called when paywall fails to show due to an unsuccessful paywall download or if an invalid trigger is provided. */\n onFallback?: () => void;\n eventHandlers?: PaywallEventHandlers;\n customPaywallTraits?: Record<string, any>;\n /** Optional. If true, the paywall will not be shown if the user already has an entitlement for a product in the paywall. */\n dontShowIfAlreadyEntitled?: boolean;\n};\n\nexport interface PaywallInfo {\n /** Name of the paywall. */\n paywallTemplateName: string;\n /** Will be false if the paywall should not be shown due to targeting or workflow configuration (Helium handles this for you in presentUpsell) */\n shouldShow: boolean;\n}\n\n// Event handler types for per-presentation event handling\nexport interface PaywallEventHandlers {\n onOpen?: (event: PaywallOpenEvent) => void;\n onClose?: (event: PaywallCloseEvent) => void;\n onDismissed?: (event: PaywallDismissedEvent) => void;\n onPurchaseSucceeded?: (event: PurchaseSucceededEvent) => void;\n onOpenFailed?: (event: PaywallOpenFailedEvent) => void;\n onCustomPaywallAction?: (event: CustomPaywallActionEvent) => void;\n /** A handler that will fire for any paywall-related event. */\n onAnyEvent?: (event: HeliumPaywallEvent) => void;\n}\n\n// Typed event interfaces\nexport interface PaywallOpenEvent {\n type: 'paywallOpen';\n triggerName: string;\n paywallName: string;\n isSecondTry: boolean;\n viewType?: 'presented' | 'embedded' | 'triggered';\n}\n\nexport interface PaywallCloseEvent {\n type: 'paywallClose';\n triggerName: string;\n paywallName: string;\n isSecondTry: boolean;\n}\n\nexport interface PaywallDismissedEvent {\n type: 'paywallDismissed';\n triggerName: string;\n paywallName: string;\n isSecondTry: boolean;\n}\n\nexport interface PurchaseSucceededEvent {\n type: 'purchaseSucceeded';\n productId: string;\n triggerName: string;\n paywallName: string;\n isSecondTry: boolean;\n}\n\nexport interface PaywallOpenFailedEvent {\n type: 'paywallOpenFailed';\n triggerName: string;\n paywallName: string;\n error: string;\n paywallUnavailableReason?: string;\n isSecondTry: boolean;\n}\n\nexport interface CustomPaywallActionEvent {\n type: 'customPaywallAction';\n triggerName: string;\n paywallName: string;\n actionName: string;\n params: Record<string, any>;\n isSecondTry: boolean;\n}\n\nexport const HELIUM_CTA_NAMES = {\n SCHEDULE_CALL: 'schedule_call',\n SUBSCRIBE_BUTTON: 'subscribe_button',\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,YAAY,EAE8B,WAAW,EAAE,mBAAmB,EAC3E,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAa9D,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEnD,cAAe,0BAA0B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAe7C,eAAO,MAAM,UAAU,GAAU,QAAQ,YAAY,kBAmFpD,CAAC;AAiEF,eAAO,MAAM,aAAa,GAAI,6FAMG,mBAAmB,SAYnD,CAAC;AA0FF,eAAO,MAAM,UAAU,YAAoC,CAAC;AAC5D,eAAO,MAAM,cAAc,YAAwC,CAAC;AACpE,eAAO,MAAM,iBAAiB,+DAA2C,CAAC;AAC1E,eAAO,MAAM,sBAAsB,+BAAgD,CAAC;AAEpF;;GAEG;AACH,eAAO,MAAM,eAAe,6BAAyC,CAAC;AAEtE;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAG3F,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,wBAAkD,CAAC;AAExF;;GAEG;AACH,eAAO,MAAM,iBAAiB,wBAA2C,CAAC;AAE1E;;GAEG;AACH,eAAO,MAAM,WAAW,YAQvB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,6BAA6B,wFAAuD,CAAC;AAElG;;;GAGG;AACH,eAAO,MAAM,0BAA0B,YAAoD,CAAC;AAE5F;;;GAGG;AACH,eAAO,MAAM,wBAAwB,wEAAkD,CAAC;AAExF;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,GAAI,SAAS,MAAM,KAAG,cAAc,GAAG,SAgB9E,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,KAAG,WAAW,GAAG,SAc9D,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,GAAG,IAAI,YAOhD,CAAC;AAmCF,OAAO,EAAC,0BAA0B,EAAE,gBAAgB,EAAC,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,YAAY,EAG8B,WAAW,EAAE,mBAAmB,EAC3E,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAa9D,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEnD,cAAe,0BAA0B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAmB7C,eAAO,MAAM,UAAU,GAAU,QAAQ,YAAY,kBAyFpD,CAAC;AAiEF,eAAO,MAAM,aAAa,GAAI,6FAMG,mBAAmB,SAYnD,CAAC;AAqHF,eAAO,MAAM,UAAU,YAAoC,CAAC;AAC5D,eAAO,MAAM,cAAc,YAAwC,CAAC;AACpE,eAAO,MAAM,iBAAiB,+DAA2C,CAAC;AAC1E,eAAO,MAAM,sBAAsB,+BAAgD,CAAC;AAEpF;;GAEG;AACH,eAAO,MAAM,eAAe,6BAAyC,CAAC;AAEtE;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAG3F,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,wBAAkD,CAAC;AAExF;;GAEG;AACH,eAAO,MAAM,iBAAiB,wBAA2C,CAAC;AAE1E;;GAEG;AACH,eAAO,MAAM,WAAW,YASvB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,6BAA6B,wFAAuD,CAAC;AAElG;;;GAGG;AACH,eAAO,MAAM,0BAA0B,YAAoD,CAAC;AAE5F;;;GAGG;AACH,eAAO,MAAM,wBAAwB,wEAAkD,CAAC;AAExF;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,GAAI,SAAS,MAAM,KAAG,cAAc,GAAG,SAgB9E,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,KAAG,WAAW,GAAG,SAc9D,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,GAAG,IAAI,YAOhD,CAAC;AAmCF,OAAO,EAAC,0BAA0B,EAAE,gBAAgB,EAAC,MAAM,0BAA0B,CAAC"}
package/build/index.js CHANGED
@@ -21,6 +21,9 @@ function addDelegateActionEventListener(listener) {
21
21
  function addPaywallEventHandlersListener(listener) {
22
22
  return HeliumPaywallSdkModule.addListener('paywallEventHandlers', listener);
23
23
  }
24
+ function addHeliumLogEventListener(listener) {
25
+ return HeliumPaywallSdkModule.addListener('onHeliumLogEvent', listener);
26
+ }
24
27
  let isInitialized = false;
25
28
  export const initialize = async (config) => {
26
29
  if (isInitialized) {
@@ -30,6 +33,7 @@ export const initialize = async (config) => {
30
33
  HeliumPaywallSdkModule.removeAllListeners('onHeliumPaywallEvent');
31
34
  HeliumPaywallSdkModule.removeAllListeners('onDelegateActionEvent');
32
35
  HeliumPaywallSdkModule.removeAllListeners('paywallEventHandlers');
36
+ HeliumPaywallSdkModule.removeAllListeners('onHeliumLogEvent');
33
37
  // Set up listener for paywall events
34
38
  addHeliumPaywallEventListener((event) => {
35
39
  handlePaywallEvent(event);
@@ -98,6 +102,10 @@ export const initialize = async (config) => {
98
102
  addPaywallEventHandlersListener((event) => {
99
103
  callPaywallEventHandlers(event);
100
104
  });
105
+ // Set up listener for native SDK logs
106
+ addHeliumLogEventListener((event) => {
107
+ logHeliumEvent(event);
108
+ });
101
109
  await nativeInitializeAsync(config).catch(error => {
102
110
  console.error('[Helium] Initialization failed:', error);
103
111
  });
@@ -118,14 +126,14 @@ const nativeInitializeAsync = async (config) => {
118
126
  if (hasLegacyApi) {
119
127
  // Expo 52/53 - use legacy API
120
128
  // @ts-ignore - documentDirectory only exists in Expo 52/53 types
121
- fallbackBundleUrlString = `${ExpoFileSystem.documentDirectory}helium-fallback.json`;
129
+ fallbackBundleUrlString = `${ExpoFileSystem.documentDirectory}helium-expo-fallbacks.json`;
122
130
  // @ts-ignore - writeAsStringAsync only exists in Expo 52/53 types
123
131
  await ExpoFileSystem.writeAsStringAsync(fallbackBundleUrlString, jsonContent);
124
132
  }
125
133
  else if (hasNewApi) {
126
134
  // Expo 54+ - use new class-based API
127
135
  // @ts-ignore - Types may not be available in older Expo versions
128
- const file = new ExpoFileSystem.File(ExpoFileSystem.Paths.document, 'helium-fallback.json');
136
+ const file = new ExpoFileSystem.File(ExpoFileSystem.Paths.document, 'helium-expo-fallbacks.json');
129
137
  file.create({ overwrite: true });
130
138
  file.write(jsonContent);
131
139
  fallbackBundleUrlString = file.uri;
@@ -260,6 +268,31 @@ function handlePaywallEvent(event) {
260
268
  break;
261
269
  }
262
270
  }
271
+ /**
272
+ * Routes native SDK log events to the appropriate console method.
273
+ * Log levels: 1=error, 2=warn, 3=info, 4=debug, 5=trace
274
+ */
275
+ function logHeliumEvent(event) {
276
+ const { level, message } = event;
277
+ const metadata = event.metadata ?? {};
278
+ const hasMetadata = Object.keys(metadata).length > 0;
279
+ switch (level) {
280
+ case 1: // error
281
+ hasMetadata ? console.error(message, metadata) : console.error(message);
282
+ break;
283
+ case 2: // warn
284
+ hasMetadata ? console.warn(message, metadata) : console.warn(message);
285
+ break;
286
+ case 3: // info
287
+ hasMetadata ? console.info(message, metadata) : console.info(message);
288
+ break;
289
+ case 4: // debug
290
+ case 5: // trace
291
+ default:
292
+ hasMetadata ? console.debug(message, metadata) : console.debug(message);
293
+ break;
294
+ }
295
+ }
263
296
  export const hideUpsell = HeliumPaywallSdkModule.hideUpsell;
264
297
  export const hideAllUpsells = HeliumPaywallSdkModule.hideAllUpsells;
265
298
  export const getDownloadStatus = HeliumPaywallSdkModule.getDownloadStatus;
@@ -294,6 +327,7 @@ export const resetHelium = () => {
294
327
  HeliumPaywallSdkModule.removeAllListeners('onHeliumPaywallEvent');
295
328
  HeliumPaywallSdkModule.removeAllListeners('onDelegateActionEvent');
296
329
  HeliumPaywallSdkModule.removeAllListeners('paywallEventHandlers');
330
+ HeliumPaywallSdkModule.removeAllListeners('onHeliumLogEvent');
297
331
  HeliumPaywallSdkModule.resetHelium();
298
332
  isInitialized = false;
299
333
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DelegateActionEvent,\n HeliumConfig,\n HeliumPaywallEvent,\n NativeHeliumConfig, PaywallEventHandlers, PaywallInfo, PresentUpsellParams,\n} from \"./HeliumPaywallSdk.types\";\nimport { ExperimentInfo } from \"./HeliumExperimentInfo.types\";\nimport HeliumPaywallSdkModule from \"./HeliumPaywallSdkModule\";\nimport { EventSubscription } from 'expo-modules-core';\nimport * as ExpoFileSystem from 'expo-file-system';\nimport { Platform } from 'react-native';\n\nlet SDK_VERSION = 'unknown';\ntry {\n SDK_VERSION = require('../package.json').version;\n} catch {\n // package.json can't be loaded, accept that we won't get wrapper sdk version\n}\n\nexport { default } from './HeliumPaywallSdkModule';\n// export { default as HeliumPaywallSdkView } from './HeliumPaywallSdkView';\nexport * from './HeliumPaywallSdk.types';\nexport * from './HeliumExperimentInfo.types';\n\nfunction addHeliumPaywallEventListener(listener: (event: HeliumPaywallEvent) => void): EventSubscription {\n return HeliumPaywallSdkModule.addListener('onHeliumPaywallEvent', listener);\n}\n\nfunction addDelegateActionEventListener(listener: (event: DelegateActionEvent) => void): EventSubscription {\n return HeliumPaywallSdkModule.addListener('onDelegateActionEvent', listener);\n}\n\nfunction addPaywallEventHandlersListener(listener: (event: HeliumPaywallEvent) => void): EventSubscription {\n return HeliumPaywallSdkModule.addListener('paywallEventHandlers', listener);\n}\n\nlet isInitialized = false;\nexport const initialize = async (config: HeliumConfig) => {\n if (isInitialized) {\n return;\n }\n isInitialized = true;\n\n HeliumPaywallSdkModule.removeAllListeners('onHeliumPaywallEvent');\n HeliumPaywallSdkModule.removeAllListeners('onDelegateActionEvent');\n HeliumPaywallSdkModule.removeAllListeners('paywallEventHandlers');\n\n // Set up listener for paywall events\n addHeliumPaywallEventListener((event) => {\n handlePaywallEvent(event);\n config.onHeliumPaywallEvent?.(event);\n });\n\n // Set up delegate action listener for purchase and restore operations\n const purchaseConfig = config.purchaseConfig;\n if (purchaseConfig) {\n addDelegateActionEventListener(async (event) => {\n try {\n if (event.type === 'purchase') {\n if (!event.productId) {\n HeliumPaywallSdkModule.handlePurchaseResult('failed', 'No product ID for purchase event.');\n return;\n }\n\n let result;\n\n // Platform-specific purchase handling\n if (Platform.OS === 'ios') {\n // iOS: Use makePurchaseIOS if available, otherwise use deprecated makePurchase\n if (purchaseConfig.makePurchaseIOS) {\n result = await purchaseConfig.makePurchaseIOS(event.productId);\n } else if (purchaseConfig.makePurchase) {\n result = await purchaseConfig.makePurchase(event.productId);\n } else {\n console.log('[Helium] No iOS purchase handler configured.');\n HeliumPaywallSdkModule.handlePurchaseResult('failed', 'No iOS purchase handler configured.');\n return;\n }\n } else if (Platform.OS === 'android') {\n // Android: Use makePurchaseAndroid if available\n if (purchaseConfig.makePurchaseAndroid) {\n result = await purchaseConfig.makePurchaseAndroid(\n event.productId,\n event.basePlanId,\n event.offerId\n );\n } else {\n console.log('[Helium] No Android purchase handler configured.');\n HeliumPaywallSdkModule.handlePurchaseResult('failed', 'No Android purchase handler configured.');\n return;\n }\n } else {\n HeliumPaywallSdkModule.handlePurchaseResult('failed', 'Unsupported platform.');\n return;\n }\n\n HeliumPaywallSdkModule.handlePurchaseResult(result.status, result.error);\n } else if (event.type === 'restore') {\n const success = await purchaseConfig.restorePurchases();\n HeliumPaywallSdkModule.handleRestoreResult(success);\n }\n } catch (error) {\n // Send failure result based on action type\n if (event.type === 'purchase') {\n console.log('[Helium] Unexpected error: ', error);\n HeliumPaywallSdkModule.handlePurchaseResult('failed');\n } else if (event.type === 'restore') {\n HeliumPaywallSdkModule.handleRestoreResult(false);\n }\n }\n });\n }\n\n addPaywallEventHandlersListener((event) => {\n callPaywallEventHandlers(event);\n });\n\n await nativeInitializeAsync(config).catch(error => {\n console.error('[Helium] Initialization failed:', error);\n });\n};\n\nconst nativeInitializeAsync = async (config: HeliumConfig) => {\n let fallbackBundleUrlString;\n let fallbackBundleString;\n if (config.fallbackBundle) {\n try {\n const jsonContent = JSON.stringify(config.fallbackBundle);\n\n // Feature detection: check which expo-file-system API is available\n // Expo 52/53 has documentDirectory + writeAsStringAsync\n // Expo 54+ has File + Paths (new class-based API)\n // @ts-ignore - documentDirectory only exists in Expo 52/53 types\n const hasLegacyApi = typeof ExpoFileSystem.documentDirectory === 'string'\n && typeof ExpoFileSystem.writeAsStringAsync === 'function';\n const hasNewApi = 'File' in ExpoFileSystem && 'Paths' in ExpoFileSystem;\n\n if (hasLegacyApi) {\n // Expo 52/53 - use legacy API\n // @ts-ignore - documentDirectory only exists in Expo 52/53 types\n fallbackBundleUrlString = `${ExpoFileSystem.documentDirectory}helium-fallback.json`;\n // @ts-ignore - writeAsStringAsync only exists in Expo 52/53 types\n await ExpoFileSystem.writeAsStringAsync(fallbackBundleUrlString, jsonContent);\n } else if (hasNewApi) {\n // Expo 54+ - use new class-based API\n // @ts-ignore - Types may not be available in older Expo versions\n const file = new ExpoFileSystem.File(ExpoFileSystem.Paths.document, 'helium-fallback.json');\n file.create({ overwrite: true });\n file.write(jsonContent);\n fallbackBundleUrlString = file.uri;\n } else {\n throw new Error('No compatible expo-file-system API found');\n }\n } catch (error) {\n // Just use string approach if expo-file-system is unavailable or fails\n console.log(\n '[Helium] expo-file-system not available, passing fallback bundle as string.'\n );\n fallbackBundleString = JSON.stringify(config.fallbackBundle);\n }\n }\n\n\n // Create native config object\n const nativeConfig: NativeHeliumConfig = {\n apiKey: config.apiKey,\n customUserId: config.customUserId,\n customAPIEndpoint: config.customAPIEndpoint,\n customUserTraits: convertBooleansToMarkers(config.customUserTraits),\n revenueCatAppUserId: config.revenueCatAppUserId,\n fallbackBundleUrlString: fallbackBundleUrlString,\n fallbackBundleString: fallbackBundleString,\n paywallLoadingConfig: convertBooleansToMarkers(config.paywallLoadingConfig),\n useDefaultDelegate: !config.purchaseConfig,\n environment: config.environment,\n wrapperSdkVersion: SDK_VERSION,\n delegateType: config.purchaseConfig?._delegateType,\n };\n\n // Initialize the native module\n HeliumPaywallSdkModule.initialize(nativeConfig);\n};\n\nlet paywallEventHandlers: PaywallEventHandlers | undefined;\nlet presentOnFallback: (() => void) | undefined;\nexport const presentUpsell = ({\n triggerName,\n onFallback,\n eventHandlers,\n customPaywallTraits,\n dontShowIfAlreadyEntitled,\n }: PresentUpsellParams) => {\n try {\n paywallEventHandlers = eventHandlers;\n presentOnFallback = onFallback;\n HeliumPaywallSdkModule.presentUpsell(triggerName, convertBooleansToMarkers(customPaywallTraits), dontShowIfAlreadyEntitled);\n } catch (error) {\n console.log('[Helium] presentUpsell error', error);\n paywallEventHandlers = undefined;\n presentOnFallback = undefined;\n onFallback?.();\n HeliumPaywallSdkModule.fallbackOpenOrCloseEvent(triggerName, true, 'presented');\n }\n};\n\nfunction callPaywallEventHandlers(event: HeliumPaywallEvent) {\n if (paywallEventHandlers) {\n switch (event.type) {\n case 'paywallOpen':\n paywallEventHandlers?.onOpen?.({\n type: 'paywallOpen',\n triggerName: event.triggerName ?? 'unknown',\n paywallName: event.paywallName ?? 'unknown',\n isSecondTry: event.isSecondTry ?? false,\n viewType: 'presented',\n });\n break;\n case 'paywallClose':\n paywallEventHandlers?.onClose?.({\n type: 'paywallClose',\n triggerName: event.triggerName ?? 'unknown',\n paywallName: event.paywallName ?? 'unknown',\n isSecondTry: event.isSecondTry ?? false,\n });\n break;\n case 'paywallDismissed':\n paywallEventHandlers?.onDismissed?.({\n type: 'paywallDismissed',\n triggerName: event.triggerName ?? 'unknown',\n paywallName: event.paywallName ?? 'unknown',\n isSecondTry: event.isSecondTry ?? false,\n });\n break;\n case 'purchaseSucceeded':\n paywallEventHandlers?.onPurchaseSucceeded?.({\n type: 'purchaseSucceeded',\n productId: event.productId ?? 'unknown',\n triggerName: event.triggerName ?? 'unknown',\n paywallName: event.paywallName ?? 'unknown',\n isSecondTry: event.isSecondTry ?? false,\n });\n break;\n case 'paywallOpenFailed':\n paywallEventHandlers?.onOpenFailed?.({\n type: 'paywallOpenFailed',\n triggerName: event.triggerName ?? 'unknown',\n paywallName: event.paywallName ?? 'unknown',\n error: event.error ?? 'Unknown error',\n paywallUnavailableReason: event.paywallUnavailableReason,\n isSecondTry: event.isSecondTry ?? false,\n });\n break;\n case 'customPaywallAction':\n paywallEventHandlers?.onCustomPaywallAction?.({\n type: 'customPaywallAction',\n triggerName: event.triggerName ?? 'unknown',\n paywallName: event.paywallName ?? 'unknown',\n actionName: event.customPaywallActionName ?? 'unknown',\n params: event.customPaywallActionParams ?? {},\n isSecondTry: event.isSecondTry ?? false,\n });\n break;\n }\n paywallEventHandlers?.onAnyEvent?.(event);\n }\n}\n\nfunction handlePaywallEvent(event: HeliumPaywallEvent) {\n switch (event.type) {\n case 'paywallClose':\n if (!event.isSecondTry) {\n paywallEventHandlers = undefined;\n }\n presentOnFallback = undefined;\n break;\n case 'paywallSkipped':\n paywallEventHandlers = undefined;\n presentOnFallback = undefined;\n break;\n case 'paywallOpenFailed':\n paywallEventHandlers = undefined;\n const unavailableReason = event.paywallUnavailableReason;\n if (event.triggerName\n && unavailableReason !== \"alreadyPresented\"\n && unavailableReason !== \"secondTryNoMatch\") {\n console.log('[Helium] paywall open failed', unavailableReason);\n presentOnFallback?.();\n }\n presentOnFallback = undefined;\n break;\n }\n}\n\nexport const hideUpsell = HeliumPaywallSdkModule.hideUpsell;\nexport const hideAllUpsells = HeliumPaywallSdkModule.hideAllUpsells;\nexport const getDownloadStatus = HeliumPaywallSdkModule.getDownloadStatus;\nexport const setRevenueCatAppUserId = HeliumPaywallSdkModule.setRevenueCatAppUserId;\n\n/**\n * Set a custom user ID for the current user\n */\nexport const setCustomUserId = HeliumPaywallSdkModule.setCustomUserId;\n\n/**\n * Checks if the user has an active entitlement for any product attached to the paywall that will show for provided trigger.\n * @param trigger The trigger name to check entitlement for\n * @returns Promise resolving to true if entitled, false if not, or undefined if not known (i.e. the paywall is not downloaded yet)\n */\nexport const hasEntitlementForPaywall = async (trigger: string): Promise<boolean | undefined> => {\n const result = await HeliumPaywallSdkModule.hasEntitlementForPaywall(trigger);\n return result?.hasEntitlement;\n};\n\n/**\n * Checks if the user has any active subscription (including non-renewable)\n */\nexport const hasAnyActiveSubscription = HeliumPaywallSdkModule.hasAnyActiveSubscription;\n\n/**\n * Checks if the user has any entitlement\n */\nexport const hasAnyEntitlement = HeliumPaywallSdkModule.hasAnyEntitlement;\n\n/**\n * Reset Helium entirely so you can call initialize again. Only for advanced use cases.\n */\nexport const resetHelium = () => {\n paywallEventHandlers = undefined;\n presentOnFallback = undefined;\n HeliumPaywallSdkModule.removeAllListeners('onHeliumPaywallEvent');\n HeliumPaywallSdkModule.removeAllListeners('onDelegateActionEvent');\n HeliumPaywallSdkModule.removeAllListeners('paywallEventHandlers');\n HeliumPaywallSdkModule.resetHelium();\n isInitialized = false;\n};\n\n/**\n * Set custom strings to show in the dialog that Helium will display if a \"Restore Purchases\" action is not successful.\n * Note that these strings will not be localized by Helium for you.\n */\nexport const setCustomRestoreFailedStrings = HeliumPaywallSdkModule.setCustomRestoreFailedStrings;\n\n/**\n * Disable the default dialog that Helium will display if a \"Restore Purchases\" action is not successful.\n * You can handle this yourself if desired by listening for the PurchaseRestoreFailedEvent.\n */\nexport const disableRestoreFailedDialog = HeliumPaywallSdkModule.disableRestoreFailedDialog;\n\n/**\n * Override the light/dark mode for Helium paywalls\n * @param mode The mode to set: 'light', 'dark', or 'system' (follows device setting)\n */\nexport const setLightDarkModeOverride = HeliumPaywallSdkModule.setLightDarkModeOverride;\n\n/**\n * Get experiment allocation info for a specific trigger\n *\n * @param trigger The trigger name to get experiment info for\n * @returns ExperimentInfo if the trigger has experiment data, undefined otherwise\n */\nexport const getExperimentInfoForTrigger = (trigger: string): ExperimentInfo | undefined => {\n const result = HeliumPaywallSdkModule.getExperimentInfoForTrigger(trigger);\n if (!result) {\n console.log('[Helium] getExperimentInfoForTrigger unexpected error.');\n return;\n }\n if (result.getExperimentInfoErrorMsg) {\n console.log(`[Helium] ${result.getExperimentInfoErrorMsg}`);\n return;\n }\n // Validate required field exists before casting\n if (!result.experimentId) {\n console.log('[Helium] getExperimentInfoForTrigger returned data without required experimentId field.');\n return;\n }\n return result as ExperimentInfo;\n};\n\nexport const getPaywallInfo = (trigger: string): PaywallInfo | undefined => {\n const result = HeliumPaywallSdkModule.getPaywallInfo(trigger);\n if (!result) {\n console.log('[Helium] getPaywallInfo unexpected error.');\n return;\n }\n if (result.errorMsg) {\n console.log(`[Helium] ${result.errorMsg}`);\n return;\n }\n return {\n paywallTemplateName: result.templateName ?? 'unknown template',\n shouldShow: result.shouldShow ?? true,\n };\n};\n\nexport const handleDeepLink = (url: string | null) => {\n if (url) {\n const handled = HeliumPaywallSdkModule.handleDeepLink(url);\n console.log('[Helium] Handled deep link:', handled);\n return handled;\n }\n return false;\n};\n\n/**\n * Recursively converts boolean values to special marker strings to preserve\n * type information when passing through native bridge.\n *\n * Native bridge converts booleans to NSNumber (0/1), making them\n * indistinguishable from actual numeric values. This helper converts:\n * - true -> \"__helium_rn_bool_true__\"\n * - false -> \"__helium_rn_bool_false__\"\n * - All other values remain unchanged\n */\nfunction convertBooleansToMarkers(input: Record<string, any> | undefined): Record<string, any> | undefined {\n if (!input) return undefined;\n\n const result: Record<string, any> = {};\n for (const [key, value] of Object.entries(input)) {\n result[key] = convertValueBooleansToMarkers(value);\n }\n return result;\n}\n/**\n * Helper to recursively convert booleans in any value type\n */\nfunction convertValueBooleansToMarkers(value: any): any {\n if (typeof value === 'boolean') {\n return value ? \"__helium_rn_bool_true__\" : \"__helium_rn_bool_false__\";\n } else if (value && typeof value === 'object' && !Array.isArray(value)) {\n return convertBooleansToMarkers(value);\n } else if (value && Array.isArray(value)) {\n return value.map(convertValueBooleansToMarkers);\n }\n return value;\n}\n\nexport {createCustomPurchaseConfig, HELIUM_CTA_NAMES} from './HeliumPaywallSdk.types';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DelegateActionEvent,\n HeliumConfig,\n HeliumLogEvent,\n HeliumPaywallEvent,\n NativeHeliumConfig, PaywallEventHandlers, PaywallInfo, PresentUpsellParams,\n} from \"./HeliumPaywallSdk.types\";\nimport { ExperimentInfo } from \"./HeliumExperimentInfo.types\";\nimport HeliumPaywallSdkModule from \"./HeliumPaywallSdkModule\";\nimport { EventSubscription } from 'expo-modules-core';\nimport * as ExpoFileSystem from 'expo-file-system';\nimport { Platform } from 'react-native';\n\nlet SDK_VERSION = 'unknown';\ntry {\n SDK_VERSION = require('../package.json').version;\n} catch {\n // package.json can't be loaded, accept that we won't get wrapper sdk version\n}\n\nexport { default } from './HeliumPaywallSdkModule';\n// export { default as HeliumPaywallSdkView } from './HeliumPaywallSdkView';\nexport * from './HeliumPaywallSdk.types';\nexport * from './HeliumExperimentInfo.types';\n\nfunction addHeliumPaywallEventListener(listener: (event: HeliumPaywallEvent) => void): EventSubscription {\n return HeliumPaywallSdkModule.addListener('onHeliumPaywallEvent', listener);\n}\n\nfunction addDelegateActionEventListener(listener: (event: DelegateActionEvent) => void): EventSubscription {\n return HeliumPaywallSdkModule.addListener('onDelegateActionEvent', listener);\n}\n\nfunction addPaywallEventHandlersListener(listener: (event: HeliumPaywallEvent) => void): EventSubscription {\n return HeliumPaywallSdkModule.addListener('paywallEventHandlers', listener);\n}\n\nfunction addHeliumLogEventListener(listener: (event: HeliumLogEvent) => void): EventSubscription {\n return HeliumPaywallSdkModule.addListener('onHeliumLogEvent', listener);\n}\n\nlet isInitialized = false;\nexport const initialize = async (config: HeliumConfig) => {\n if (isInitialized) {\n return;\n }\n isInitialized = true;\n\n HeliumPaywallSdkModule.removeAllListeners('onHeliumPaywallEvent');\n HeliumPaywallSdkModule.removeAllListeners('onDelegateActionEvent');\n HeliumPaywallSdkModule.removeAllListeners('paywallEventHandlers');\n HeliumPaywallSdkModule.removeAllListeners('onHeliumLogEvent');\n\n // Set up listener for paywall events\n addHeliumPaywallEventListener((event) => {\n handlePaywallEvent(event);\n config.onHeliumPaywallEvent?.(event);\n });\n\n // Set up delegate action listener for purchase and restore operations\n const purchaseConfig = config.purchaseConfig;\n if (purchaseConfig) {\n addDelegateActionEventListener(async (event) => {\n try {\n if (event.type === 'purchase') {\n if (!event.productId) {\n HeliumPaywallSdkModule.handlePurchaseResult('failed', 'No product ID for purchase event.');\n return;\n }\n\n let result;\n\n // Platform-specific purchase handling\n if (Platform.OS === 'ios') {\n // iOS: Use makePurchaseIOS if available, otherwise use deprecated makePurchase\n if (purchaseConfig.makePurchaseIOS) {\n result = await purchaseConfig.makePurchaseIOS(event.productId);\n } else if (purchaseConfig.makePurchase) {\n result = await purchaseConfig.makePurchase(event.productId);\n } else {\n console.log('[Helium] No iOS purchase handler configured.');\n HeliumPaywallSdkModule.handlePurchaseResult('failed', 'No iOS purchase handler configured.');\n return;\n }\n } else if (Platform.OS === 'android') {\n // Android: Use makePurchaseAndroid if available\n if (purchaseConfig.makePurchaseAndroid) {\n result = await purchaseConfig.makePurchaseAndroid(\n event.productId,\n event.basePlanId,\n event.offerId\n );\n } else {\n console.log('[Helium] No Android purchase handler configured.');\n HeliumPaywallSdkModule.handlePurchaseResult('failed', 'No Android purchase handler configured.');\n return;\n }\n } else {\n HeliumPaywallSdkModule.handlePurchaseResult('failed', 'Unsupported platform.');\n return;\n }\n\n HeliumPaywallSdkModule.handlePurchaseResult(result.status, result.error);\n } else if (event.type === 'restore') {\n const success = await purchaseConfig.restorePurchases();\n HeliumPaywallSdkModule.handleRestoreResult(success);\n }\n } catch (error) {\n // Send failure result based on action type\n if (event.type === 'purchase') {\n console.log('[Helium] Unexpected error: ', error);\n HeliumPaywallSdkModule.handlePurchaseResult('failed');\n } else if (event.type === 'restore') {\n HeliumPaywallSdkModule.handleRestoreResult(false);\n }\n }\n });\n }\n\n addPaywallEventHandlersListener((event) => {\n callPaywallEventHandlers(event);\n });\n\n // Set up listener for native SDK logs\n addHeliumLogEventListener((event) => {\n logHeliumEvent(event);\n });\n\n await nativeInitializeAsync(config).catch(error => {\n console.error('[Helium] Initialization failed:', error);\n });\n};\n\nconst nativeInitializeAsync = async (config: HeliumConfig) => {\n let fallbackBundleUrlString;\n let fallbackBundleString;\n if (config.fallbackBundle) {\n try {\n const jsonContent = JSON.stringify(config.fallbackBundle);\n\n // Feature detection: check which expo-file-system API is available\n // Expo 52/53 has documentDirectory + writeAsStringAsync\n // Expo 54+ has File + Paths (new class-based API)\n // @ts-ignore - documentDirectory only exists in Expo 52/53 types\n const hasLegacyApi = typeof ExpoFileSystem.documentDirectory === 'string'\n && typeof ExpoFileSystem.writeAsStringAsync === 'function';\n const hasNewApi = 'File' in ExpoFileSystem && 'Paths' in ExpoFileSystem;\n\n if (hasLegacyApi) {\n // Expo 52/53 - use legacy API\n // @ts-ignore - documentDirectory only exists in Expo 52/53 types\n fallbackBundleUrlString = `${ExpoFileSystem.documentDirectory}helium-expo-fallbacks.json`;\n // @ts-ignore - writeAsStringAsync only exists in Expo 52/53 types\n await ExpoFileSystem.writeAsStringAsync(fallbackBundleUrlString, jsonContent);\n } else if (hasNewApi) {\n // Expo 54+ - use new class-based API\n // @ts-ignore - Types may not be available in older Expo versions\n const file = new ExpoFileSystem.File(ExpoFileSystem.Paths.document, 'helium-expo-fallbacks.json');\n file.create({ overwrite: true });\n file.write(jsonContent);\n fallbackBundleUrlString = file.uri;\n } else {\n throw new Error('No compatible expo-file-system API found');\n }\n } catch (error) {\n // Just use string approach if expo-file-system is unavailable or fails\n console.log(\n '[Helium] expo-file-system not available, passing fallback bundle as string.'\n );\n fallbackBundleString = JSON.stringify(config.fallbackBundle);\n }\n }\n\n\n // Create native config object\n const nativeConfig: NativeHeliumConfig = {\n apiKey: config.apiKey,\n customUserId: config.customUserId,\n customAPIEndpoint: config.customAPIEndpoint,\n customUserTraits: convertBooleansToMarkers(config.customUserTraits),\n revenueCatAppUserId: config.revenueCatAppUserId,\n fallbackBundleUrlString: fallbackBundleUrlString,\n fallbackBundleString: fallbackBundleString,\n paywallLoadingConfig: convertBooleansToMarkers(config.paywallLoadingConfig),\n useDefaultDelegate: !config.purchaseConfig,\n environment: config.environment,\n wrapperSdkVersion: SDK_VERSION,\n delegateType: config.purchaseConfig?._delegateType,\n };\n\n // Initialize the native module\n HeliumPaywallSdkModule.initialize(nativeConfig);\n};\n\nlet paywallEventHandlers: PaywallEventHandlers | undefined;\nlet presentOnFallback: (() => void) | undefined;\nexport const presentUpsell = ({\n triggerName,\n onFallback,\n eventHandlers,\n customPaywallTraits,\n dontShowIfAlreadyEntitled,\n }: PresentUpsellParams) => {\n try {\n paywallEventHandlers = eventHandlers;\n presentOnFallback = onFallback;\n HeliumPaywallSdkModule.presentUpsell(triggerName, convertBooleansToMarkers(customPaywallTraits), dontShowIfAlreadyEntitled);\n } catch (error) {\n console.log('[Helium] presentUpsell error', error);\n paywallEventHandlers = undefined;\n presentOnFallback = undefined;\n onFallback?.();\n HeliumPaywallSdkModule.fallbackOpenOrCloseEvent(triggerName, true, 'presented');\n }\n};\n\nfunction callPaywallEventHandlers(event: HeliumPaywallEvent) {\n if (paywallEventHandlers) {\n switch (event.type) {\n case 'paywallOpen':\n paywallEventHandlers?.onOpen?.({\n type: 'paywallOpen',\n triggerName: event.triggerName ?? 'unknown',\n paywallName: event.paywallName ?? 'unknown',\n isSecondTry: event.isSecondTry ?? false,\n viewType: 'presented',\n });\n break;\n case 'paywallClose':\n paywallEventHandlers?.onClose?.({\n type: 'paywallClose',\n triggerName: event.triggerName ?? 'unknown',\n paywallName: event.paywallName ?? 'unknown',\n isSecondTry: event.isSecondTry ?? false,\n });\n break;\n case 'paywallDismissed':\n paywallEventHandlers?.onDismissed?.({\n type: 'paywallDismissed',\n triggerName: event.triggerName ?? 'unknown',\n paywallName: event.paywallName ?? 'unknown',\n isSecondTry: event.isSecondTry ?? false,\n });\n break;\n case 'purchaseSucceeded':\n paywallEventHandlers?.onPurchaseSucceeded?.({\n type: 'purchaseSucceeded',\n productId: event.productId ?? 'unknown',\n triggerName: event.triggerName ?? 'unknown',\n paywallName: event.paywallName ?? 'unknown',\n isSecondTry: event.isSecondTry ?? false,\n });\n break;\n case 'paywallOpenFailed':\n paywallEventHandlers?.onOpenFailed?.({\n type: 'paywallOpenFailed',\n triggerName: event.triggerName ?? 'unknown',\n paywallName: event.paywallName ?? 'unknown',\n error: event.error ?? 'Unknown error',\n paywallUnavailableReason: event.paywallUnavailableReason,\n isSecondTry: event.isSecondTry ?? false,\n });\n break;\n case 'customPaywallAction':\n paywallEventHandlers?.onCustomPaywallAction?.({\n type: 'customPaywallAction',\n triggerName: event.triggerName ?? 'unknown',\n paywallName: event.paywallName ?? 'unknown',\n actionName: event.customPaywallActionName ?? 'unknown',\n params: event.customPaywallActionParams ?? {},\n isSecondTry: event.isSecondTry ?? false,\n });\n break;\n }\n paywallEventHandlers?.onAnyEvent?.(event);\n }\n}\n\nfunction handlePaywallEvent(event: HeliumPaywallEvent) {\n switch (event.type) {\n case 'paywallClose':\n if (!event.isSecondTry) {\n paywallEventHandlers = undefined;\n }\n presentOnFallback = undefined;\n break;\n case 'paywallSkipped':\n paywallEventHandlers = undefined;\n presentOnFallback = undefined;\n break;\n case 'paywallOpenFailed':\n paywallEventHandlers = undefined;\n const unavailableReason = event.paywallUnavailableReason;\n if (event.triggerName\n && unavailableReason !== \"alreadyPresented\"\n && unavailableReason !== \"secondTryNoMatch\") {\n console.log('[Helium] paywall open failed', unavailableReason);\n presentOnFallback?.();\n }\n presentOnFallback = undefined;\n break;\n }\n}\n\n/**\n * Routes native SDK log events to the appropriate console method.\n * Log levels: 1=error, 2=warn, 3=info, 4=debug, 5=trace\n */\nfunction logHeliumEvent(event: HeliumLogEvent) {\n const { level, message } = event;\n const metadata = event.metadata ?? {};\n const hasMetadata = Object.keys(metadata).length > 0;\n\n switch (level) {\n case 1: // error\n hasMetadata ? console.error(message, metadata) : console.error(message);\n break;\n case 2: // warn\n hasMetadata ? console.warn(message, metadata) : console.warn(message);\n break;\n case 3: // info\n hasMetadata ? console.info(message, metadata) : console.info(message);\n break;\n case 4: // debug\n case 5: // trace\n default:\n hasMetadata ? console.debug(message, metadata) : console.debug(message);\n break;\n }\n}\n\nexport const hideUpsell = HeliumPaywallSdkModule.hideUpsell;\nexport const hideAllUpsells = HeliumPaywallSdkModule.hideAllUpsells;\nexport const getDownloadStatus = HeliumPaywallSdkModule.getDownloadStatus;\nexport const setRevenueCatAppUserId = HeliumPaywallSdkModule.setRevenueCatAppUserId;\n\n/**\n * Set a custom user ID for the current user\n */\nexport const setCustomUserId = HeliumPaywallSdkModule.setCustomUserId;\n\n/**\n * Checks if the user has an active entitlement for any product attached to the paywall that will show for provided trigger.\n * @param trigger The trigger name to check entitlement for\n * @returns Promise resolving to true if entitled, false if not, or undefined if not known (i.e. the paywall is not downloaded yet)\n */\nexport const hasEntitlementForPaywall = async (trigger: string): Promise<boolean | undefined> => {\n const result = await HeliumPaywallSdkModule.hasEntitlementForPaywall(trigger);\n return result?.hasEntitlement;\n};\n\n/**\n * Checks if the user has any active subscription (including non-renewable)\n */\nexport const hasAnyActiveSubscription = HeliumPaywallSdkModule.hasAnyActiveSubscription;\n\n/**\n * Checks if the user has any entitlement\n */\nexport const hasAnyEntitlement = HeliumPaywallSdkModule.hasAnyEntitlement;\n\n/**\n * Reset Helium entirely so you can call initialize again. Only for advanced use cases.\n */\nexport const resetHelium = () => {\n paywallEventHandlers = undefined;\n presentOnFallback = undefined;\n HeliumPaywallSdkModule.removeAllListeners('onHeliumPaywallEvent');\n HeliumPaywallSdkModule.removeAllListeners('onDelegateActionEvent');\n HeliumPaywallSdkModule.removeAllListeners('paywallEventHandlers');\n HeliumPaywallSdkModule.removeAllListeners('onHeliumLogEvent');\n HeliumPaywallSdkModule.resetHelium();\n isInitialized = false;\n};\n\n/**\n * Set custom strings to show in the dialog that Helium will display if a \"Restore Purchases\" action is not successful.\n * Note that these strings will not be localized by Helium for you.\n */\nexport const setCustomRestoreFailedStrings = HeliumPaywallSdkModule.setCustomRestoreFailedStrings;\n\n/**\n * Disable the default dialog that Helium will display if a \"Restore Purchases\" action is not successful.\n * You can handle this yourself if desired by listening for the PurchaseRestoreFailedEvent.\n */\nexport const disableRestoreFailedDialog = HeliumPaywallSdkModule.disableRestoreFailedDialog;\n\n/**\n * Override the light/dark mode for Helium paywalls\n * @param mode The mode to set: 'light', 'dark', or 'system' (follows device setting)\n */\nexport const setLightDarkModeOverride = HeliumPaywallSdkModule.setLightDarkModeOverride;\n\n/**\n * Get experiment allocation info for a specific trigger\n *\n * @param trigger The trigger name to get experiment info for\n * @returns ExperimentInfo if the trigger has experiment data, undefined otherwise\n */\nexport const getExperimentInfoForTrigger = (trigger: string): ExperimentInfo | undefined => {\n const result = HeliumPaywallSdkModule.getExperimentInfoForTrigger(trigger);\n if (!result) {\n console.log('[Helium] getExperimentInfoForTrigger unexpected error.');\n return;\n }\n if (result.getExperimentInfoErrorMsg) {\n console.log(`[Helium] ${result.getExperimentInfoErrorMsg}`);\n return;\n }\n // Validate required field exists before casting\n if (!result.experimentId) {\n console.log('[Helium] getExperimentInfoForTrigger returned data without required experimentId field.');\n return;\n }\n return result as ExperimentInfo;\n};\n\nexport const getPaywallInfo = (trigger: string): PaywallInfo | undefined => {\n const result = HeliumPaywallSdkModule.getPaywallInfo(trigger);\n if (!result) {\n console.log('[Helium] getPaywallInfo unexpected error.');\n return;\n }\n if (result.errorMsg) {\n console.log(`[Helium] ${result.errorMsg}`);\n return;\n }\n return {\n paywallTemplateName: result.templateName ?? 'unknown template',\n shouldShow: result.shouldShow ?? true,\n };\n};\n\nexport const handleDeepLink = (url: string | null) => {\n if (url) {\n const handled = HeliumPaywallSdkModule.handleDeepLink(url);\n console.log('[Helium] Handled deep link:', handled);\n return handled;\n }\n return false;\n};\n\n/**\n * Recursively converts boolean values to special marker strings to preserve\n * type information when passing through native bridge.\n *\n * Native bridge converts booleans to NSNumber (0/1), making them\n * indistinguishable from actual numeric values. This helper converts:\n * - true -> \"__helium_rn_bool_true__\"\n * - false -> \"__helium_rn_bool_false__\"\n * - All other values remain unchanged\n */\nfunction convertBooleansToMarkers(input: Record<string, any> | undefined): Record<string, any> | undefined {\n if (!input) return undefined;\n\n const result: Record<string, any> = {};\n for (const [key, value] of Object.entries(input)) {\n result[key] = convertValueBooleansToMarkers(value);\n }\n return result;\n}\n/**\n * Helper to recursively convert booleans in any value type\n */\nfunction convertValueBooleansToMarkers(value: any): any {\n if (typeof value === 'boolean') {\n return value ? \"__helium_rn_bool_true__\" : \"__helium_rn_bool_false__\";\n } else if (value && typeof value === 'object' && !Array.isArray(value)) {\n return convertBooleansToMarkers(value);\n } else if (value && Array.isArray(value)) {\n return value.map(convertValueBooleansToMarkers);\n }\n return value;\n}\n\nexport {createCustomPurchaseConfig, HELIUM_CTA_NAMES} from './HeliumPaywallSdk.types';\n"]}
@@ -14,12 +14,12 @@ Pod::Spec.new do |s|
14
14
  :ios => '15.1',
15
15
  :tvos => '15.1'
16
16
  }
17
- s.swift_version = '5.4'
17
+ s.swift_version = '5.7'
18
18
  s.source = { git: 'https://github.com/cloudcaptainai/helium-expo-sdk' }
19
19
  s.static_framework = true
20
20
 
21
21
  s.dependency 'ExpoModulesCore'
22
- s.dependency 'Helium', '3.1.4'
22
+ s.dependency 'Helium', '4.1.2'
23
23
 
24
24
  # Swift/Objective-C compatibility
25
25
  s.pod_target_xcconfig = {
@@ -38,7 +38,7 @@ private class NativeModuleManager {
38
38
  static let shared = NativeModuleManager()
39
39
 
40
40
  private let maxQueuedEvents = 30
41
- private let eventExpirationSeconds: TimeInterval = 30.0
41
+ private let eventExpirationSeconds: TimeInterval = 10.0
42
42
 
43
43
  // Always keep reference to the current module
44
44
  var currentModule: HeliumPaywallSdkModule?
@@ -47,6 +47,9 @@ private class NativeModuleManager {
47
47
  var activePurchaseContinuation: CheckedContinuation<HeliumPaywallTransactionStatus, Never>?
48
48
  var activeRestoreContinuation: CheckedContinuation<Bool, Never>?
49
49
 
50
+ // Log listener token - stored here so it survives module recreation
51
+ var logListenerToken: HeliumLogListenerToken?
52
+
50
53
  // Event queue for when no module is available or sendEvent fails
51
54
  private struct PendingEvent {
52
55
  let eventName: String
@@ -147,7 +150,7 @@ public class HeliumPaywallSdkModule: Module {
147
150
  // ])
148
151
 
149
152
  // Defines event names that the module can send to JavaScript.
150
- Events("onHeliumPaywallEvent", "onDelegateActionEvent", "paywallEventHandlers")
153
+ Events("onHeliumPaywallEvent", "onDelegateActionEvent", "paywallEventHandlers", "onHeliumLogEvent")
151
154
 
152
155
  // todo use Record here? https://docs.expo.dev/modules/module-api/#records
153
156
  Function("initialize") { (config: [String : Any]) in
@@ -157,21 +160,15 @@ public class HeliumPaywallSdkModule: Module {
157
160
  let userTraitsMap = convertMarkersToBooleans(config["customUserTraits"] as? [String : Any])
158
161
  let fallbackBundleURLString = config["fallbackBundleUrlString"] as? String
159
162
  let fallbackBundleString = config["fallbackBundleString"] as? String
160
-
163
+
161
164
  let paywallLoadingConfig = convertMarkersToBooleans(config["paywallLoadingConfig"] as? [String: Any])
162
165
  let useLoadingState = paywallLoadingConfig?["useLoadingState"] as? Bool ?? true
163
- let loadingBudget = paywallLoadingConfig?["loadingBudget"] as? TimeInterval ?? 2.0
164
-
165
- var perTriggerLoadingConfig: [String: TriggerLoadingConfig]? = nil
166
- if let perTriggerDict = paywallLoadingConfig?["perTriggerLoadingConfig"] as? [String: [String: Any]] {
167
- var triggerConfigs: [String: TriggerLoadingConfig] = [:]
168
- for (trigger, config) in perTriggerDict {
169
- triggerConfigs[trigger] = TriggerLoadingConfig(
170
- useLoadingState: config["useLoadingState"] as? Bool,
171
- loadingBudget: config["loadingBudget"] as? TimeInterval
172
- )
173
- }
174
- perTriggerLoadingConfig = triggerConfigs
166
+ let loadingBudget = paywallLoadingConfig?["loadingBudget"] as? TimeInterval
167
+ if !useLoadingState {
168
+ // Setting <= 0 will disable loading state
169
+ Helium.config.defaultLoadingBudget = -1
170
+ } else {
171
+ Helium.config.defaultLoadingBudget = loadingBudget ?? 7.0
175
172
  }
176
173
 
177
174
  let useDefaultDelegate = config["useDefaultDelegate"] as? Bool ?? false
@@ -243,7 +240,7 @@ public class HeliumPaywallSdkModule: Module {
243
240
  } else if let jsonString = fallbackBundleString {
244
241
  // write the string to a temp file
245
242
  let tempURL = FileManager.default.temporaryDirectory
246
- .appendingPathComponent("helium-fallback.json")
243
+ .appendingPathComponent("helium-expo-fallbacks.json")
247
244
 
248
245
  if let data = jsonString.data(using: .utf8) {
249
246
  try? data.write(to: tempURL)
@@ -254,23 +251,42 @@ public class HeliumPaywallSdkModule: Module {
254
251
  let wrapperSdkVersion = config["wrapperSdkVersion"] as? String ?? "unknown"
255
252
  HeliumSdkConfig.shared.setWrapperSdkInfo(sdk: "expo", version: wrapperSdkVersion)
256
253
 
257
- Helium.shared.initialize(
258
- apiKey: config["apiKey"] as? String ?? "",
259
- heliumPaywallDelegate: useDefaultDelegate ? defaultDelegate : internalDelegate,
260
- fallbackConfig: HeliumFallbackConfig.withMultipleFallbacks(
261
- // As a workaround for required fallback check in iOS, supply empty fallbackPerTrigger
262
- // since currently iOS requires some type of fallback but RN does not.
263
- fallbackPerTrigger: [:],
264
- fallbackBundle: fallbackBundleURL,
265
- useLoadingState: useLoadingState,
266
- loadingBudget: loadingBudget,
267
- perTriggerLoadingConfig: perTriggerLoadingConfig
268
- ),
269
- customUserId: config["customUserId"] as? String,
270
- customAPIEndpoint: config["customAPIEndpoint"] as? String,
271
- customUserTraits: userTraitsMap != nil ? HeliumUserTraits(userTraitsMap!) : nil,
272
- revenueCatAppUserId: config["revenueCatAppUserId"] as? String
273
- )
254
+ if let customUserId = config["customUserId"] as? String {
255
+ Helium.identify.userId = customUserId
256
+ }
257
+ if let userTraitsMap {
258
+ Helium.identify.setUserTraits(HeliumUserTraits(userTraitsMap))
259
+ }
260
+ if let rcAppUserId = config["revenueCatAppUserId"] as? String {
261
+ Helium.identify.revenueCatAppUserId = rcAppUserId
262
+ }
263
+
264
+ Helium.config.purchaseDelegate = useDefaultDelegate ? defaultDelegate : internalDelegate
265
+ if let fallbackBundleURL {
266
+ Helium.config.customFallbacksURL = fallbackBundleURL
267
+ }
268
+ if let customAPIEndpoint = config["customAPIEndpoint"] as? String {
269
+ Helium.config.customAPIEndpoint = customAPIEndpoint
270
+ }
271
+
272
+ Helium.shared.initialize(apiKey: config["apiKey"] as? String ?? "")
273
+
274
+ // Set up log listener if not already registered
275
+ if NativeModuleManager.shared.logListenerToken == nil {
276
+ NativeModuleManager.shared.logListenerToken = HeliumLogger.addLogListener { event in
277
+ // Drop log events if no module is available - don't queue them.
278
+ // Logs could be high-volume and could evict critical events (purchase/restore).
279
+ guard NativeModuleManager.shared.currentModule != nil else { return }
280
+
281
+ let eventData: [String: Any] = [
282
+ "level": event.level.rawValue,
283
+ "category": event.category.rawValue,
284
+ "message": event.message,
285
+ "metadata": event.metadata
286
+ ]
287
+ NativeModuleManager.shared.safeSendEvent(eventName: "onHeliumLogEvent", eventData: eventData)
288
+ }
289
+ }
274
290
  }
275
291
 
276
292
  // Function for JavaScript to provide purchase result
@@ -315,24 +331,28 @@ public class HeliumPaywallSdkModule: Module {
315
331
 
316
332
  Function("presentUpsell") { (trigger: String, customPaywallTraits: [String: Any]?, dontShowIfAlreadyEntitled: Bool?) in
317
333
  NativeModuleManager.shared.currentModule = self // extra redundancy to update to latest live module
318
- Helium.shared.presentUpsell(
334
+ Helium.shared.presentPaywall(
319
335
  trigger: trigger,
336
+ config: PaywallPresentationConfig(
337
+ customPaywallTraits: convertMarkersToBooleans(customPaywallTraits),
338
+ dontShowIfAlreadyEntitled: dontShowIfAlreadyEntitled ?? false
339
+ ),
320
340
  eventHandlers: PaywallEventHandlers.withHandlers(
321
341
  onAnyEvent: { event in
322
342
  NativeModuleManager.shared.safeSendEvent(eventName: "paywallEventHandlers", eventData: event.toDictionary())
323
343
  }
324
- ),
325
- customPaywallTraits: convertMarkersToBooleans(customPaywallTraits),
326
- dontShowIfAlreadyEntitled: dontShowIfAlreadyEntitled ?? false
327
- )
344
+ )
345
+ ) { paywallNotShownReason in
346
+ // nothing for now
347
+ }
328
348
  }
329
349
 
330
350
  Function("hideUpsell") {
331
- let _ = Helium.shared.hideUpsell()
351
+ let _ = Helium.shared.hidePaywall()
332
352
  }
333
353
 
334
354
  Function("hideAllUpsells") {
335
- Helium.shared.hideAllUpsells()
355
+ Helium.shared.hideAllPaywalls()
336
356
  }
337
357
 
338
358
  Function("getDownloadStatus") {
@@ -362,24 +382,24 @@ public class HeliumPaywallSdkModule: Module {
362
382
  }
363
383
 
364
384
  Function("setRevenueCatAppUserId") { (rcAppUserId: String) in
365
- Helium.shared.setRevenueCatAppUserId(rcAppUserId)
385
+ Helium.identify.revenueCatAppUserId = rcAppUserId
366
386
  }
367
387
 
368
388
  Function("setCustomUserId") { (newUserId: String) in
369
- Helium.shared.overrideUserId(newUserId: newUserId)
389
+ Helium.identify.userId = newUserId
370
390
  }
371
391
 
372
392
  AsyncFunction("hasEntitlementForPaywall") { (trigger: String) in
373
- let hasEntitlement = await Helium.shared.hasEntitlementForPaywall(trigger: trigger)
393
+ let hasEntitlement = await Helium.entitlements.hasEntitlementForPaywall(trigger: trigger)
374
394
  return HasEntitlementResult(hasEntitlement: hasEntitlement)
375
395
  }
376
396
 
377
397
  AsyncFunction("hasAnyActiveSubscription") {
378
- return await Helium.shared.hasAnyActiveSubscription()
398
+ return await Helium.entitlements.hasAnyActiveSubscription()
379
399
  }
380
400
 
381
401
  AsyncFunction("hasAnyEntitlement") {
382
- return await Helium.shared.hasAnyEntitlement()
402
+ return await Helium.entitlements.hasAny()
383
403
  }
384
404
 
385
405
  Function("handleDeepLink") { (urlString: String) in
@@ -391,7 +411,7 @@ public class HeliumPaywallSdkModule: Module {
391
411
  }
392
412
 
393
413
  Function("getExperimentInfoForTrigger") { (trigger: String) -> [String: Any] in
394
- guard let experimentInfo = Helium.shared.getExperimentInfoForTrigger(trigger) else {
414
+ guard let experimentInfo = Helium.experiments.infoForTrigger(trigger) else {
395
415
  return ["getExperimentInfoErrorMsg": "No experiment info found for trigger: \(trigger)"]
396
416
  }
397
417
 
@@ -407,11 +427,11 @@ public class HeliumPaywallSdkModule: Module {
407
427
  }
408
428
 
409
429
  Function("disableRestoreFailedDialog") {
410
- Helium.restorePurchaseConfig.disableRestoreFailedDialog()
430
+ Helium.config.restorePurchasesDialog.disableRestoreFailedDialog()
411
431
  }
412
432
 
413
433
  Function("setCustomRestoreFailedStrings") { (customTitle: String?, customMessage: String?, customCloseButtonText: String?) in
414
- Helium.restorePurchaseConfig.setCustomRestoreFailedStrings(
434
+ Helium.config.restorePurchasesDialog.setCustomRestoreFailedStrings(
415
435
  customTitle: customTitle,
416
436
  customMessage: customMessage,
417
437
  customCloseButtonText: customCloseButtonText
@@ -419,6 +439,9 @@ public class HeliumPaywallSdkModule: Module {
419
439
  }
420
440
 
421
441
  Function("resetHelium") {
442
+ // Clean up log listener
443
+ NativeModuleManager.shared.logListenerToken?.remove()
444
+ NativeModuleManager.shared.logListenerToken = nil
422
445
  Helium.resetHelium()
423
446
  }
424
447
 
@@ -435,7 +458,7 @@ public class HeliumPaywallSdkModule: Module {
435
458
  print("[Helium] Invalid mode: \(mode), defaulting to system")
436
459
  heliumMode = .system
437
460
  }
438
- Helium.shared.setLightDarkModeOverride(heliumMode)
461
+ Helium.config.lightDarkModeOverride = heliumMode
439
462
  }
440
463
 
441
464
  // Enables the module to be used as a native view. Definition components that are accepted as part of the
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-helium",
3
- "version": "3.1.13",
3
+ "version": "3.2.0",
4
4
  "description": "Helium paywalls expo sdk",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -8,7 +8,20 @@ export type HeliumPaywallSdkModuleEvents = {
8
8
  onHeliumPaywallEvent: (params: HeliumPaywallEvent) => void;
9
9
  onDelegateActionEvent: (params: DelegateActionEvent) => void;
10
10
  paywallEventHandlers: (params: HeliumPaywallEvent) => void;
11
+ onHeliumLogEvent: (params: HeliumLogEvent) => void;
11
12
  };
13
+
14
+ /** A log event emitted by the Helium SDK. */
15
+ export interface HeliumLogEvent {
16
+ /** Numeric log level (1=error, 2=warn, 3=info, 4=debug, 5=trace). */
17
+ level: number;
18
+ /** The category/subsystem that generated this log (iOS) or tag (Android). */
19
+ category: string;
20
+ /** The log message (prefixed with "[Helium] "). */
21
+ message: string;
22
+ /** Key-value metadata associated with this log event (iOS only, empty on Android). */
23
+ metadata: Record<string, string>;
24
+ }
12
25
  export type HeliumPaywallEvent = {
13
26
  type: 'paywallOpen' | 'paywallClose' | 'paywallDismissed' |
14
27
  'paywallOpenFailed' | 'paywallSkipped' | 'paywallButtonPressed' |
@@ -117,13 +130,6 @@ export function createCustomPurchaseConfig(callbacks: {
117
130
  };
118
131
  }
119
132
 
120
- export type TriggerLoadingConfig = {
121
- /** Whether to show loading state for this trigger. Set to nil to use the global `useLoadingState` setting. */
122
- useLoadingState?: boolean;
123
- /** Maximum seconds to show loading for this trigger. Set to nil to use the global `loadingBudget` setting. */
124
- loadingBudget?: number;
125
- };
126
-
127
133
  export type HeliumPaywallLoadingConfig = {
128
134
  /**
129
135
  * Whether to show a loading state while fetching paywall configuration.
@@ -137,13 +143,6 @@ export type HeliumPaywallLoadingConfig = {
137
143
  * Default: 7.0 seconds
138
144
  */
139
145
  loadingBudget?: number;
140
- /**
141
- * Optional per-trigger loading configuration overrides.
142
- * Use this to customize loading behavior for specific triggers.
143
- * Keys are trigger names, values are TriggerLoadingConfig instances.
144
- * Example: Disable loading for "onboarding" trigger while keeping it for others.
145
- */
146
- perTriggerLoadingConfig?: Record<string, TriggerLoadingConfig>;
147
146
  };
148
147
 
149
148
  export interface HeliumConfig {
package/src/index.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  DelegateActionEvent,
3
3
  HeliumConfig,
4
+ HeliumLogEvent,
4
5
  HeliumPaywallEvent,
5
6
  NativeHeliumConfig, PaywallEventHandlers, PaywallInfo, PresentUpsellParams,
6
7
  } from "./HeliumPaywallSdk.types";
@@ -34,6 +35,10 @@ function addPaywallEventHandlersListener(listener: (event: HeliumPaywallEvent) =
34
35
  return HeliumPaywallSdkModule.addListener('paywallEventHandlers', listener);
35
36
  }
36
37
 
38
+ function addHeliumLogEventListener(listener: (event: HeliumLogEvent) => void): EventSubscription {
39
+ return HeliumPaywallSdkModule.addListener('onHeliumLogEvent', listener);
40
+ }
41
+
37
42
  let isInitialized = false;
38
43
  export const initialize = async (config: HeliumConfig) => {
39
44
  if (isInitialized) {
@@ -44,6 +49,7 @@ export const initialize = async (config: HeliumConfig) => {
44
49
  HeliumPaywallSdkModule.removeAllListeners('onHeliumPaywallEvent');
45
50
  HeliumPaywallSdkModule.removeAllListeners('onDelegateActionEvent');
46
51
  HeliumPaywallSdkModule.removeAllListeners('paywallEventHandlers');
52
+ HeliumPaywallSdkModule.removeAllListeners('onHeliumLogEvent');
47
53
 
48
54
  // Set up listener for paywall events
49
55
  addHeliumPaywallEventListener((event) => {
@@ -115,6 +121,11 @@ export const initialize = async (config: HeliumConfig) => {
115
121
  callPaywallEventHandlers(event);
116
122
  });
117
123
 
124
+ // Set up listener for native SDK logs
125
+ addHeliumLogEventListener((event) => {
126
+ logHeliumEvent(event);
127
+ });
128
+
118
129
  await nativeInitializeAsync(config).catch(error => {
119
130
  console.error('[Helium] Initialization failed:', error);
120
131
  });
@@ -138,13 +149,13 @@ const nativeInitializeAsync = async (config: HeliumConfig) => {
138
149
  if (hasLegacyApi) {
139
150
  // Expo 52/53 - use legacy API
140
151
  // @ts-ignore - documentDirectory only exists in Expo 52/53 types
141
- fallbackBundleUrlString = `${ExpoFileSystem.documentDirectory}helium-fallback.json`;
152
+ fallbackBundleUrlString = `${ExpoFileSystem.documentDirectory}helium-expo-fallbacks.json`;
142
153
  // @ts-ignore - writeAsStringAsync only exists in Expo 52/53 types
143
154
  await ExpoFileSystem.writeAsStringAsync(fallbackBundleUrlString, jsonContent);
144
155
  } else if (hasNewApi) {
145
156
  // Expo 54+ - use new class-based API
146
157
  // @ts-ignore - Types may not be available in older Expo versions
147
- const file = new ExpoFileSystem.File(ExpoFileSystem.Paths.document, 'helium-fallback.json');
158
+ const file = new ExpoFileSystem.File(ExpoFileSystem.Paths.document, 'helium-expo-fallbacks.json');
148
159
  file.create({ overwrite: true });
149
160
  file.write(jsonContent);
150
161
  fallbackBundleUrlString = file.uri;
@@ -291,6 +302,33 @@ function handlePaywallEvent(event: HeliumPaywallEvent) {
291
302
  }
292
303
  }
293
304
 
305
+ /**
306
+ * Routes native SDK log events to the appropriate console method.
307
+ * Log levels: 1=error, 2=warn, 3=info, 4=debug, 5=trace
308
+ */
309
+ function logHeliumEvent(event: HeliumLogEvent) {
310
+ const { level, message } = event;
311
+ const metadata = event.metadata ?? {};
312
+ const hasMetadata = Object.keys(metadata).length > 0;
313
+
314
+ switch (level) {
315
+ case 1: // error
316
+ hasMetadata ? console.error(message, metadata) : console.error(message);
317
+ break;
318
+ case 2: // warn
319
+ hasMetadata ? console.warn(message, metadata) : console.warn(message);
320
+ break;
321
+ case 3: // info
322
+ hasMetadata ? console.info(message, metadata) : console.info(message);
323
+ break;
324
+ case 4: // debug
325
+ case 5: // trace
326
+ default:
327
+ hasMetadata ? console.debug(message, metadata) : console.debug(message);
328
+ break;
329
+ }
330
+ }
331
+
294
332
  export const hideUpsell = HeliumPaywallSdkModule.hideUpsell;
295
333
  export const hideAllUpsells = HeliumPaywallSdkModule.hideAllUpsells;
296
334
  export const getDownloadStatus = HeliumPaywallSdkModule.getDownloadStatus;
@@ -330,6 +368,7 @@ export const resetHelium = () => {
330
368
  HeliumPaywallSdkModule.removeAllListeners('onHeliumPaywallEvent');
331
369
  HeliumPaywallSdkModule.removeAllListeners('onDelegateActionEvent');
332
370
  HeliumPaywallSdkModule.removeAllListeners('paywallEventHandlers');
371
+ HeliumPaywallSdkModule.removeAllListeners('onHeliumLogEvent');
333
372
  HeliumPaywallSdkModule.resetHelium();
334
373
  isInitialized = false;
335
374
  };