expo-helium 3.0.7 → 3.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/HeliumExperimentInfo.types.d.ts +92 -0
- package/build/HeliumExperimentInfo.types.d.ts.map +1 -0
- package/build/HeliumExperimentInfo.types.js +5 -0
- package/build/HeliumExperimentInfo.types.js.map +1 -0
- package/build/HeliumPaywallSdk.types.d.ts +26 -2
- package/build/HeliumPaywallSdk.types.d.ts.map +1 -1
- package/build/HeliumPaywallSdk.types.js.map +1 -1
- package/build/HeliumPaywallSdkModule.d.ts +7 -4
- package/build/HeliumPaywallSdkModule.d.ts.map +1 -1
- package/build/HeliumPaywallSdkModule.js.map +1 -1
- package/build/index.d.ts +23 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +65 -9
- package/build/index.js.map +1 -1
- package/ios/HeliumPaywallSdk.podspec +1 -1
- package/ios/HeliumPaywallSdkModule.swift +39 -46
- package/package.json +1 -1
- package/src/HeliumExperimentInfo.types.ts +109 -0
- package/src/HeliumPaywallSdk.types.ts +29 -2
- package/src/HeliumPaywallSdkModule.ts +15 -5
- package/src/index.ts +70 -13
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Experiment allocation information types
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Details about user hash bucketing for allocation
|
|
6
|
+
*/
|
|
7
|
+
export interface HashDetails {
|
|
8
|
+
/**
|
|
9
|
+
* User hash bucket (1-100) - used for consistent allocation
|
|
10
|
+
*/
|
|
11
|
+
hashedUserIdBucket1To100?: number;
|
|
12
|
+
/**
|
|
13
|
+
* User ID that was hashed for allocation
|
|
14
|
+
*/
|
|
15
|
+
hashedUserId?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Hash method used (e.g., "HASH_USER_ID", "HASH_HELIUM_PERSISTENT_ID")
|
|
18
|
+
*/
|
|
19
|
+
hashMethod?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Details about the chosen variant in an experiment
|
|
23
|
+
*/
|
|
24
|
+
export interface VariantDetails {
|
|
25
|
+
/**
|
|
26
|
+
* Name or identifier of the allocation/variant (e.g., paywall template name)
|
|
27
|
+
*/
|
|
28
|
+
allocationName?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Unique identifier for this allocation (paywall UUID)
|
|
31
|
+
*/
|
|
32
|
+
allocationId?: string;
|
|
33
|
+
/**
|
|
34
|
+
* Index of chosen variant (1 to len(variants))
|
|
35
|
+
*/
|
|
36
|
+
allocationIndex?: number;
|
|
37
|
+
/**
|
|
38
|
+
* Additional allocation metadata as a dictionary
|
|
39
|
+
*/
|
|
40
|
+
allocationMetadata?: Record<string, any>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Complete experiment allocation information for a user
|
|
44
|
+
*/
|
|
45
|
+
export interface ExperimentInfo {
|
|
46
|
+
/**
|
|
47
|
+
* Trigger name at which user was enrolled
|
|
48
|
+
*/
|
|
49
|
+
trigger: string;
|
|
50
|
+
/**
|
|
51
|
+
* Experiment name
|
|
52
|
+
*/
|
|
53
|
+
experimentName?: string;
|
|
54
|
+
/**
|
|
55
|
+
* Experiment ID
|
|
56
|
+
*/
|
|
57
|
+
experimentId?: string;
|
|
58
|
+
/**
|
|
59
|
+
* Experiment type (e.g., "A/B/n test")
|
|
60
|
+
*/
|
|
61
|
+
experimentType?: string;
|
|
62
|
+
/**
|
|
63
|
+
* Additional experiment metadata as a dictionary
|
|
64
|
+
*/
|
|
65
|
+
experimentMetadata?: Record<string, any>;
|
|
66
|
+
/**
|
|
67
|
+
* When the experiment started (ISO8601 string)
|
|
68
|
+
*/
|
|
69
|
+
startDate?: string;
|
|
70
|
+
/**
|
|
71
|
+
* When the experiment ends (ISO8601 string)
|
|
72
|
+
*/
|
|
73
|
+
endDate?: string;
|
|
74
|
+
/**
|
|
75
|
+
* Audience ID that user matched
|
|
76
|
+
*/
|
|
77
|
+
audienceId?: string;
|
|
78
|
+
/**
|
|
79
|
+
* Audience data as structured object
|
|
80
|
+
* Note: This may be returned as a string from native bridge, but will be parsed
|
|
81
|
+
*/
|
|
82
|
+
audienceData?: Record<string, any> | string;
|
|
83
|
+
/**
|
|
84
|
+
* Details about the chosen variant
|
|
85
|
+
*/
|
|
86
|
+
chosenVariantDetails?: VariantDetails;
|
|
87
|
+
/**
|
|
88
|
+
* Hash bucketing details
|
|
89
|
+
*/
|
|
90
|
+
hashDetails?: HashDetails;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=HeliumExperimentInfo.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HeliumExperimentInfo.types.d.ts","sourceRoot":"","sources":["../src/HeliumExperimentInfo.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAElC;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEzC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;IAE5C;;OAEG;IACH,oBAAoB,CAAC,EAAE,cAAc,CAAC;IAEtC;;OAEG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HeliumExperimentInfo.types.js","sourceRoot":"","sources":["../src/HeliumExperimentInfo.types.ts"],"names":[],"mappings":"AAAA;;GAEG","sourcesContent":["/**\n * Experiment allocation information types\n */\n\n/**\n * Details about user hash bucketing for allocation\n */\nexport interface HashDetails {\n /**\n * User hash bucket (1-100) - used for consistent allocation\n */\n hashedUserIdBucket1To100?: number;\n\n /**\n * User ID that was hashed for allocation\n */\n hashedUserId?: string;\n\n /**\n * Hash method used (e.g., \"HASH_USER_ID\", \"HASH_HELIUM_PERSISTENT_ID\")\n */\n hashMethod?: string;\n}\n\n/**\n * Details about the chosen variant in an experiment\n */\nexport interface VariantDetails {\n /**\n * Name or identifier of the allocation/variant (e.g., paywall template name)\n */\n allocationName?: string;\n\n /**\n * Unique identifier for this allocation (paywall UUID)\n */\n allocationId?: string;\n\n /**\n * Index of chosen variant (1 to len(variants))\n */\n allocationIndex?: number;\n\n /**\n * Additional allocation metadata as a dictionary\n */\n allocationMetadata?: Record<string, any>;\n}\n\n/**\n * Complete experiment allocation information for a user\n */\nexport interface ExperimentInfo {\n /**\n * Trigger name at which user was enrolled\n */\n trigger: string;\n\n /**\n * Experiment name\n */\n experimentName?: string;\n\n /**\n * Experiment ID\n */\n experimentId?: string;\n\n /**\n * Experiment type (e.g., \"A/B/n test\")\n */\n experimentType?: string;\n\n /**\n * Additional experiment metadata as a dictionary\n */\n experimentMetadata?: Record<string, any>;\n\n /**\n * When the experiment started (ISO8601 string)\n */\n startDate?: string;\n\n /**\n * When the experiment ends (ISO8601 string)\n */\n endDate?: string;\n\n /**\n * Audience ID that user matched\n */\n audienceId?: string;\n\n /**\n * Audience data as structured object\n * Note: This may be returned as a string from native bridge, but will be parsed\n */\n audienceData?: Record<string, any> | string;\n\n /**\n * Details about the chosen variant\n */\n chosenVariantDetails?: VariantDetails;\n\n /**\n * Hash bucketing details\n */\n hashDetails?: HashDetails;\n}\n"]}
|
|
@@ -8,7 +8,7 @@ export type HeliumPaywallSdkModuleEvents = {
|
|
|
8
8
|
paywallEventHandlers: (params: HeliumPaywallEvent) => void;
|
|
9
9
|
};
|
|
10
10
|
export type HeliumPaywallEvent = {
|
|
11
|
-
type: 'paywallOpen' | 'paywallClose' | 'paywallDismissed' | 'paywallOpenFailed' | 'paywallSkipped' | 'paywallButtonPressed' | 'productSelected' | 'purchasePressed' | 'purchaseSucceeded' | 'purchaseCancelled' | 'purchaseFailed' | 'purchaseRestored' | 'purchaseRestoreFailed' | 'purchasePending' | 'initializeStart' | 'paywallsDownloadSuccess' | 'paywallsDownloadError' | 'paywallWebViewRendered';
|
|
11
|
+
type: 'paywallOpen' | 'paywallClose' | 'paywallDismissed' | 'paywallOpenFailed' | 'paywallSkipped' | 'paywallButtonPressed' | 'productSelected' | 'purchasePressed' | 'purchaseSucceeded' | 'purchaseCancelled' | 'purchaseFailed' | 'purchaseRestored' | 'purchaseRestoreFailed' | 'purchasePending' | 'initializeStart' | 'paywallsDownloadSuccess' | 'paywallsDownloadError' | 'paywallWebViewRendered' | 'customPaywallAction' | 'userAllocated';
|
|
12
12
|
triggerName?: string;
|
|
13
13
|
paywallName?: string;
|
|
14
14
|
/**
|
|
@@ -43,6 +43,9 @@ export type HeliumPaywallEvent = {
|
|
|
43
43
|
* Unix timestamp in seconds
|
|
44
44
|
*/
|
|
45
45
|
timestamp?: number;
|
|
46
|
+
paywallUnavailableReason?: string;
|
|
47
|
+
customPaywallActionName?: string;
|
|
48
|
+
customPaywallActionParams?: Record<string, any>;
|
|
46
49
|
};
|
|
47
50
|
export type DelegateActionEvent = {
|
|
48
51
|
type: 'purchase' | 'restore';
|
|
@@ -100,7 +103,10 @@ export type HeliumPaywallLoadingConfig = {
|
|
|
100
103
|
export interface HeliumConfig {
|
|
101
104
|
/** Your Helium API Key */
|
|
102
105
|
apiKey: string;
|
|
103
|
-
/**
|
|
106
|
+
/**
|
|
107
|
+
* Configuration for handling purchases. Can be custom functions or a pre-built handler config.
|
|
108
|
+
* If not provided, Helium will handle purchases for you.
|
|
109
|
+
*/
|
|
104
110
|
purchaseConfig?: HeliumPurchaseConfig;
|
|
105
111
|
/** Callback for receiving all Helium paywall events. */
|
|
106
112
|
onHeliumPaywallEvent: (event: HeliumPaywallEvent) => void;
|
|
@@ -140,6 +146,8 @@ export interface PaywallEventHandlers {
|
|
|
140
146
|
onClose?: (event: PaywallCloseEvent) => void;
|
|
141
147
|
onDismissed?: (event: PaywallDismissedEvent) => void;
|
|
142
148
|
onPurchaseSucceeded?: (event: PurchaseSucceededEvent) => void;
|
|
149
|
+
onOpenFailed?: (event: PaywallOpenFailedEvent) => void;
|
|
150
|
+
onCustomPaywallAction?: (event: CustomPaywallActionEvent) => void;
|
|
143
151
|
}
|
|
144
152
|
export interface PaywallOpenEvent {
|
|
145
153
|
type: 'paywallOpen';
|
|
@@ -167,6 +175,22 @@ export interface PurchaseSucceededEvent {
|
|
|
167
175
|
paywallName: string;
|
|
168
176
|
isSecondTry: boolean;
|
|
169
177
|
}
|
|
178
|
+
export interface PaywallOpenFailedEvent {
|
|
179
|
+
type: 'paywallOpenFailed';
|
|
180
|
+
triggerName: string;
|
|
181
|
+
paywallName: string;
|
|
182
|
+
error: string;
|
|
183
|
+
paywallUnavailableReason?: string;
|
|
184
|
+
isSecondTry: boolean;
|
|
185
|
+
}
|
|
186
|
+
export interface CustomPaywallActionEvent {
|
|
187
|
+
type: 'customPaywallAction';
|
|
188
|
+
triggerName: string;
|
|
189
|
+
paywallName: string;
|
|
190
|
+
actionName: string;
|
|
191
|
+
params: Record<string, any>;
|
|
192
|
+
isSecondTry: boolean;
|
|
193
|
+
}
|
|
170
194
|
export declare const HELIUM_CTA_NAMES: {
|
|
171
195
|
SCHEDULE_CALL: string;
|
|
172
196
|
SUBSCRIBE_BUTTON: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeliumPaywallSdk.types.d.ts","sourceRoot":"","sources":["../src/HeliumPaywallSdk.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,oBAAoB,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC3D,qBAAqB,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC7D,oBAAoB,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAC5D,CAAC;AACF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,aAAa,GAAG,cAAc,GAAG,kBAAkB,GACvD,mBAAmB,GAAG,gBAAgB,GAAG,sBAAsB,GAC/D,iBAAiB,GAAG,iBAAiB,GAAG,mBAAmB,GAC3D,mBAAmB,GAAG,gBAAgB,GAAG,kBAAkB,GAC3D,uBAAuB,GAAG,iBAAiB,GAAG,iBAAiB,GAC/D,yBAAyB,GAAG,uBAAuB,GAAG,wBAAwB,CAAC;
|
|
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":"
|
|
1
|
+
{"version":3,"file":"HeliumPaywallSdk.types.js","sourceRoot":"","sources":["../src/HeliumPaywallSdk.types.ts"],"names":[],"mappings":"AAoFA,sDAAsD;AACtD,MAAM,UAAU,0BAA0B,CAAC,SAG1C;IACC,OAAO;QACL,YAAY,EAAE,SAAS,CAAC,YAAY;QACpC,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};\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};\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';\n\n// --- Purchase Configuration Types ---\n\n/** Interface for providing custom purchase handling logic. */\n\nexport interface HeliumPurchaseConfig {\n makePurchase: (productId: string) => Promise<HeliumPurchaseResult>;\n restorePurchases: () => Promise<boolean>;\n}\n\n// Helper function for creating Custom Purchase Config\nexport function createCustomPurchaseConfig(callbacks: {\n makePurchase: (productId: string) => Promise<HeliumPurchaseResult>;\n restorePurchases: () => Promise<boolean>;\n}): HeliumPurchaseConfig {\n return {\n makePurchase: callbacks.makePurchase,\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: 2.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; // Still mandatory\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 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}\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};\n\nexport interface PaywallInfo {\n paywallTemplateName: string;\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}\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,13 +1,13 @@
|
|
|
1
1
|
import { NativeModule } from "expo";
|
|
2
|
+
import { ExperimentInfo } from "./HeliumExperimentInfo.types";
|
|
2
3
|
import { HeliumDownloadStatus, HeliumPaywallSdkModuleEvents, HeliumTransactionStatus, NativeHeliumConfig } from "./HeliumPaywallSdk.types";
|
|
3
4
|
interface PaywallInfoResult {
|
|
4
5
|
errorMsg?: string;
|
|
5
6
|
templateName?: string;
|
|
6
7
|
shouldShow?: boolean;
|
|
7
8
|
}
|
|
8
|
-
interface
|
|
9
|
-
|
|
10
|
-
reason?: string;
|
|
9
|
+
interface ExperimentInfoResult extends Partial<ExperimentInfo> {
|
|
10
|
+
getExperimentInfoErrorMsg?: string;
|
|
11
11
|
}
|
|
12
12
|
declare class HeliumPaywallSdkModule extends NativeModule<HeliumPaywallSdkModuleEvents> {
|
|
13
13
|
initialize(config: NativeHeliumConfig): void;
|
|
@@ -15,7 +15,6 @@ declare class HeliumPaywallSdkModule extends NativeModule<HeliumPaywallSdkModule
|
|
|
15
15
|
hideUpsell(): void;
|
|
16
16
|
hideAllUpsells(): void;
|
|
17
17
|
getDownloadStatus(): HeliumDownloadStatus;
|
|
18
|
-
canPresentUpsell(trigger: string): CanPresentUpsellResult;
|
|
19
18
|
fallbackOpenOrCloseEvent(trigger: string, isOpen: boolean, viewType: string): void;
|
|
20
19
|
handlePurchaseResult(statusString: HeliumTransactionStatus, errorMsg?: string): void;
|
|
21
20
|
handleRestoreResult(success: boolean): void;
|
|
@@ -24,6 +23,10 @@ declare class HeliumPaywallSdkModule extends NativeModule<HeliumPaywallSdkModule
|
|
|
24
23
|
setRevenueCatAppUserId(rcAppUserId: string): void;
|
|
25
24
|
hasAnyActiveSubscription(): Promise<boolean>;
|
|
26
25
|
hasAnyEntitlement(): Promise<boolean>;
|
|
26
|
+
resetHelium(): void;
|
|
27
|
+
setCustomRestoreFailedStrings(customTitle?: string, customMessage?: string, customCloseButtonText?: string): void;
|
|
28
|
+
disableRestoreFailedDialog(): void;
|
|
29
|
+
getExperimentInfoForTrigger(trigger: string): ExperimentInfoResult;
|
|
27
30
|
}
|
|
28
31
|
declare const _default: HeliumPaywallSdkModule;
|
|
29
32
|
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeliumPaywallSdkModule.d.ts","sourceRoot":"","sources":["../src/HeliumPaywallSdkModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAuB,MAAM,MAAM,CAAC;AAEzD,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAElC,UAAU,iBAAiB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,
|
|
1
|
+
{"version":3,"file":"HeliumPaywallSdkModule.d.ts","sourceRoot":"","sources":["../src/HeliumPaywallSdkModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAuB,MAAM,MAAM,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAElC,UAAU,iBAAiB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,oBAAqB,SAAQ,OAAO,CAAC,cAAc,CAAC;IAC5D,yBAAyB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,OAAO,OAAO,sBAAuB,SAAQ,YAAY,CAAC,4BAA4B,CAAC;IACrF,UAAU,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAE5C,aAAa,CACX,WAAW,EAAE,MAAM,EACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACxC,IAAI;IAEP,UAAU,IAAI,IAAI;IAElB,cAAc,IAAI,IAAI;IAEtB,iBAAiB,IAAI,oBAAoB;IAEzC,wBAAwB,CACtB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,MAAM,GACf,IAAI;IAEP,oBAAoB,CAClB,YAAY,EAAE,uBAAuB,EACrC,QAAQ,CAAC,EAAE,MAAM,GAChB,IAAI;IAEP,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAE3C,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB;IAElD,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAE1C,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAEjD,wBAAwB,IAAI,OAAO,CAAC,OAAO,CAAC;IAE5C,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IAErC,WAAW,IAAI,IAAI;IAEnB,6BAA6B,CAC3B,WAAW,CAAC,EAAE,MAAM,EACpB,aAAa,CAAC,EAAE,MAAM,EACtB,qBAAqB,CAAC,EAAE,MAAM,GAC7B,IAAI;IAEP,0BAA0B,IAAI,IAAI;IAElC,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB;CACnE;;AAGD,wBAA+E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeliumPaywallSdkModule.js","sourceRoot":"","sources":["../src/HeliumPaywallSdkModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,mBAAmB,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"HeliumPaywallSdkModule.js","sourceRoot":"","sources":["../src/HeliumPaywallSdkModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAsEzD,yDAAyD;AACzD,eAAe,mBAAmB,CAAyB,kBAAkB,CAAC,CAAC","sourcesContent":["import { NativeModule, requireNativeModule } from \"expo\";\n\nimport { ExperimentInfo } from \"./HeliumExperimentInfo.types\";\nimport {\n HeliumDownloadStatus,\n HeliumPaywallSdkModuleEvents,\n HeliumTransactionStatus,\n NativeHeliumConfig,\n} from \"./HeliumPaywallSdk.types\";\n\ninterface PaywallInfoResult {\n errorMsg?: string;\n templateName?: string;\n shouldShow?: boolean;\n}\n\ninterface ExperimentInfoResult extends Partial<ExperimentInfo> {\n getExperimentInfoErrorMsg?: string;\n}\n\ndeclare class HeliumPaywallSdkModule extends NativeModule<HeliumPaywallSdkModuleEvents> {\n initialize(config: NativeHeliumConfig): void;\n\n presentUpsell(\n triggerName: string,\n customPaywallTraits?: Record<string, any>,\n ): void;\n\n hideUpsell(): void;\n\n hideAllUpsells(): void;\n\n getDownloadStatus(): HeliumDownloadStatus;\n\n fallbackOpenOrCloseEvent(\n trigger: string,\n isOpen: boolean,\n viewType: string,\n ): void;\n\n handlePurchaseResult(\n statusString: HeliumTransactionStatus,\n errorMsg?: string,\n ): void;\n\n handleRestoreResult(success: boolean): void;\n\n getPaywallInfo(trigger: string): PaywallInfoResult;\n\n handleDeepLink(urlString: string): boolean;\n\n setRevenueCatAppUserId(rcAppUserId: string): void;\n\n hasAnyActiveSubscription(): Promise<boolean>;\n\n hasAnyEntitlement(): Promise<boolean>;\n\n resetHelium(): void;\n\n setCustomRestoreFailedStrings(\n customTitle?: string,\n customMessage?: string,\n customCloseButtonText?: string,\n ): void;\n\n disableRestoreFailedDialog(): void;\n\n getExperimentInfoForTrigger(trigger: string): ExperimentInfoResult;\n}\n\n// This call loads the native module object from the JSI.\nexport default requireNativeModule<HeliumPaywallSdkModule>(\"HeliumPaywallSdk\");\n"]}
|
package/build/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { HeliumConfig, PaywallInfo, PresentUpsellParams } from "./HeliumPaywallSdk.types";
|
|
2
|
+
import { ExperimentInfo } from "./HeliumExperimentInfo.types";
|
|
2
3
|
export { default } from './HeliumPaywallSdkModule';
|
|
3
4
|
export * from './HeliumPaywallSdk.types';
|
|
5
|
+
export * from './HeliumExperimentInfo.types';
|
|
4
6
|
export declare const initialize: (config: HeliumConfig) => void;
|
|
5
7
|
export declare const presentUpsell: ({ triggerName, onFallback, eventHandlers, customPaywallTraits, }: PresentUpsellParams) => void;
|
|
6
8
|
export declare const hideUpsell: () => void;
|
|
@@ -15,6 +17,27 @@ export declare const hasAnyActiveSubscription: () => Promise<boolean>;
|
|
|
15
17
|
* Checks if the user has any entitlement
|
|
16
18
|
*/
|
|
17
19
|
export declare const hasAnyEntitlement: () => Promise<boolean>;
|
|
20
|
+
/**
|
|
21
|
+
* Reset Helium entirely so you can call initialize again. Only for advanced use cases.
|
|
22
|
+
*/
|
|
23
|
+
export declare const resetHelium: () => void;
|
|
24
|
+
/**
|
|
25
|
+
* Set custom strings to show in the dialog that Helium will display if a "Restore Purchases" action is not successful.
|
|
26
|
+
* Note that these strings will not be localized by Helium for you.
|
|
27
|
+
*/
|
|
28
|
+
export declare const setCustomRestoreFailedStrings: (customTitle?: string, customMessage?: string, customCloseButtonText?: string) => void;
|
|
29
|
+
/**
|
|
30
|
+
* Disable the default dialog that Helium will display if a "Restore Purchases" action is not successful.
|
|
31
|
+
* You can handle this yourself if desired by listening for the PurchaseRestoreFailedEvent.
|
|
32
|
+
*/
|
|
33
|
+
export declare const disableRestoreFailedDialog: () => void;
|
|
34
|
+
/**
|
|
35
|
+
* Get experiment allocation info for a specific trigger
|
|
36
|
+
*
|
|
37
|
+
* @param trigger The trigger name to get experiment info for
|
|
38
|
+
* @returns ExperimentInfo if the trigger has experiment data, undefined otherwise
|
|
39
|
+
*/
|
|
40
|
+
export declare const getExperimentInfoForTrigger: (trigger: string) => ExperimentInfo | undefined;
|
|
18
41
|
export declare const getPaywallInfo: (trigger: string) => PaywallInfo | undefined;
|
|
19
42
|
export declare const handleDeepLink: (url: string | null) => boolean;
|
|
20
43
|
export { createCustomPurchaseConfig, HELIUM_CTA_NAMES } from './HeliumPaywallSdk.types';
|
package/build/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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;AAK9D,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEnD,cAAe,0BAA0B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAe7C,eAAO,MAAM,UAAU,GAAI,QAAQ,YAAY,SAmD9C,CAAC;AA6CF,eAAO,MAAM,aAAa,GAAI,kEAKG,mBAAmB,SAYnD,CAAC;AAyFF,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,wBAAwB,wBAAkD,CAAC;AAExF;;GAEG;AACH,eAAO,MAAM,iBAAiB,wBAA2C,CAAC;AAE1E;;GAEG;AACH,eAAO,MAAM,WAAW,YAAqC,CAAC;AAE9D;;;GAGG;AACH,eAAO,MAAM,6BAA6B,wFAAuD,CAAC;AAElG;;;GAGG;AACH,eAAO,MAAM,0BAA0B,YAAoD,CAAC;AAE5F;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,GAAI,SAAS,MAAM,KAAG,cAAc,GAAG,SAe9E,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
|
@@ -3,6 +3,7 @@ import * as ExpoFileSystem from 'expo-file-system';
|
|
|
3
3
|
export { default } from './HeliumPaywallSdkModule';
|
|
4
4
|
// export { default as HeliumPaywallSdkView } from './HeliumPaywallSdkView';
|
|
5
5
|
export * from './HeliumPaywallSdk.types';
|
|
6
|
+
export * from './HeliumExperimentInfo.types';
|
|
6
7
|
function addHeliumPaywallEventListener(listener) {
|
|
7
8
|
return HeliumPaywallSdkModule.addListener('onHeliumPaywallEvent', listener);
|
|
8
9
|
}
|
|
@@ -99,20 +100,13 @@ const nativeInitializeAsync = async (config) => {
|
|
|
99
100
|
let paywallEventHandlers;
|
|
100
101
|
let presentOnFallback;
|
|
101
102
|
export const presentUpsell = ({ triggerName, onFallback, eventHandlers, customPaywallTraits, }) => {
|
|
102
|
-
const { canPresent, reason } = HeliumPaywallSdkModule.canPresentUpsell(triggerName);
|
|
103
|
-
if (!canPresent) {
|
|
104
|
-
console.log(`[Helium] Cannot present trigger "${triggerName}". Reason: ${reason}`);
|
|
105
|
-
onFallback?.();
|
|
106
|
-
HeliumPaywallSdkModule.fallbackOpenOrCloseEvent(triggerName, true, 'presented');
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
103
|
try {
|
|
110
104
|
paywallEventHandlers = eventHandlers;
|
|
111
105
|
presentOnFallback = onFallback;
|
|
112
106
|
HeliumPaywallSdkModule.presentUpsell(triggerName, convertBooleansToMarkers(customPaywallTraits));
|
|
113
107
|
}
|
|
114
108
|
catch (error) {
|
|
115
|
-
console.log('Helium
|
|
109
|
+
console.log('[Helium] presentUpsell error', error);
|
|
116
110
|
paywallEventHandlers = undefined;
|
|
117
111
|
presentOnFallback = undefined;
|
|
118
112
|
onFallback?.();
|
|
@@ -156,6 +150,26 @@ function callPaywallEventHandlers(event) {
|
|
|
156
150
|
isSecondTry: event.isSecondTry ?? false,
|
|
157
151
|
});
|
|
158
152
|
break;
|
|
153
|
+
case 'paywallOpenFailed':
|
|
154
|
+
paywallEventHandlers?.onOpenFailed?.({
|
|
155
|
+
type: 'paywallOpenFailed',
|
|
156
|
+
triggerName: event.triggerName ?? 'unknown',
|
|
157
|
+
paywallName: event.paywallName ?? 'unknown',
|
|
158
|
+
error: event.error ?? 'Unknown error',
|
|
159
|
+
paywallUnavailableReason: event.paywallUnavailableReason,
|
|
160
|
+
isSecondTry: event.isSecondTry ?? false,
|
|
161
|
+
});
|
|
162
|
+
break;
|
|
163
|
+
case 'customPaywallAction':
|
|
164
|
+
paywallEventHandlers?.onCustomPaywallAction?.({
|
|
165
|
+
type: 'customPaywallAction',
|
|
166
|
+
triggerName: event.triggerName ?? 'unknown',
|
|
167
|
+
paywallName: event.paywallName ?? 'unknown',
|
|
168
|
+
actionName: event.customPaywallActionName ?? 'unknown',
|
|
169
|
+
params: event.customPaywallActionParams ?? {},
|
|
170
|
+
isSecondTry: event.isSecondTry ?? false,
|
|
171
|
+
});
|
|
172
|
+
break;
|
|
159
173
|
}
|
|
160
174
|
}
|
|
161
175
|
}
|
|
@@ -173,7 +187,13 @@ function handlePaywallEvent(event) {
|
|
|
173
187
|
break;
|
|
174
188
|
case 'paywallOpenFailed':
|
|
175
189
|
paywallEventHandlers = undefined;
|
|
176
|
-
|
|
190
|
+
const unavailableReason = event.paywallUnavailableReason;
|
|
191
|
+
if (event.triggerName
|
|
192
|
+
&& unavailableReason !== "alreadyPresented"
|
|
193
|
+
&& unavailableReason !== "secondTryNoMatch") {
|
|
194
|
+
console.log('[Helium] paywall open failed', unavailableReason);
|
|
195
|
+
presentOnFallback?.();
|
|
196
|
+
}
|
|
177
197
|
presentOnFallback = undefined;
|
|
178
198
|
break;
|
|
179
199
|
}
|
|
@@ -190,6 +210,42 @@ export const hasAnyActiveSubscription = HeliumPaywallSdkModule.hasAnyActiveSubsc
|
|
|
190
210
|
* Checks if the user has any entitlement
|
|
191
211
|
*/
|
|
192
212
|
export const hasAnyEntitlement = HeliumPaywallSdkModule.hasAnyEntitlement;
|
|
213
|
+
/**
|
|
214
|
+
* Reset Helium entirely so you can call initialize again. Only for advanced use cases.
|
|
215
|
+
*/
|
|
216
|
+
export const resetHelium = HeliumPaywallSdkModule.resetHelium;
|
|
217
|
+
/**
|
|
218
|
+
* Set custom strings to show in the dialog that Helium will display if a "Restore Purchases" action is not successful.
|
|
219
|
+
* Note that these strings will not be localized by Helium for you.
|
|
220
|
+
*/
|
|
221
|
+
export const setCustomRestoreFailedStrings = HeliumPaywallSdkModule.setCustomRestoreFailedStrings;
|
|
222
|
+
/**
|
|
223
|
+
* Disable the default dialog that Helium will display if a "Restore Purchases" action is not successful.
|
|
224
|
+
* You can handle this yourself if desired by listening for the PurchaseRestoreFailedEvent.
|
|
225
|
+
*/
|
|
226
|
+
export const disableRestoreFailedDialog = HeliumPaywallSdkModule.disableRestoreFailedDialog;
|
|
227
|
+
/**
|
|
228
|
+
* Get experiment allocation info for a specific trigger
|
|
229
|
+
*
|
|
230
|
+
* @param trigger The trigger name to get experiment info for
|
|
231
|
+
* @returns ExperimentInfo if the trigger has experiment data, undefined otherwise
|
|
232
|
+
*/
|
|
233
|
+
export const getExperimentInfoForTrigger = (trigger) => {
|
|
234
|
+
const result = HeliumPaywallSdkModule.getExperimentInfoForTrigger(trigger);
|
|
235
|
+
if (!result) {
|
|
236
|
+
console.log('[Helium] getExperimentInfoForTrigger unexpected error.');
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
if (result.getExperimentInfoErrorMsg) {
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
// Validate required field exists before casting
|
|
243
|
+
if (!result.trigger) {
|
|
244
|
+
console.log('[Helium] getExperimentInfoForTrigger returned data without required trigger field.');
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
return result;
|
|
248
|
+
};
|
|
193
249
|
export const getPaywallInfo = (trigger) => {
|
|
194
250
|
const result = HeliumPaywallSdkModule.getPaywallInfo(trigger);
|
|
195
251
|
if (!result) {
|
package/build/index.js.map
CHANGED
|
@@ -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 HeliumPaywallSdkModule from \"./HeliumPaywallSdkModule\";\nimport { EventSubscription } from 'expo-modules-core';\nimport * as ExpoFileSystem from 'expo-file-system';\n\nexport { default } from './HeliumPaywallSdkModule';\n// export { default as HeliumPaywallSdkView } from './HeliumPaywallSdkView';\nexport * from './HeliumPaywallSdk.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 = (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 const result = await purchaseConfig.makePurchase(event.productId);\n HeliumPaywallSdkModule.handlePurchaseResult(result.status, result.error);\n } else {\n HeliumPaywallSdkModule.handlePurchaseResult('failed', 'No product ID for purchase event.');\n }\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 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 // Write to documents directory\n fallbackBundleUrlString = `${ExpoFileSystem.documentDirectory}helium-fallback.json`;\n // This is ASYNC but that's ok because helium initialize in swift code is async anyways.\n await ExpoFileSystem.writeAsStringAsync(\n fallbackBundleUrlString,\n jsonContent\n );\n } catch (error) {\n // Fallback to string approach if unexpected error occurs\n console.log(\n '[Helium] expo-file-system not available, attempting to pass 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 };\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 }: PresentUpsellParams) => {\n const {canPresent, reason} = HeliumPaywallSdkModule.canPresentUpsell(triggerName);\n\n if (!canPresent) {\n console.log(\n `[Helium] Cannot present trigger \"${triggerName}\". Reason: ${reason}`\n );\n onFallback?.();\n HeliumPaywallSdkModule.fallbackOpenOrCloseEvent(triggerName, true, 'presented');\n return;\n }\n\n try {\n paywallEventHandlers = eventHandlers;\n presentOnFallback = onFallback;\n HeliumPaywallSdkModule.presentUpsell(triggerName, convertBooleansToMarkers(customPaywallTraits));\n } catch (error) {\n console.log('Helium present 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 }\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 presentOnFallback?.();\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 * 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\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 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';\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 = (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 const result = await purchaseConfig.makePurchase(event.productId);\n HeliumPaywallSdkModule.handlePurchaseResult(result.status, result.error);\n } else {\n HeliumPaywallSdkModule.handlePurchaseResult('failed', 'No product ID for purchase event.');\n }\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 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 // Write to documents directory\n fallbackBundleUrlString = `${ExpoFileSystem.documentDirectory}helium-fallback.json`;\n // This is ASYNC but that's ok because helium initialize in swift code is async anyways.\n await ExpoFileSystem.writeAsStringAsync(\n fallbackBundleUrlString,\n jsonContent\n );\n } catch (error) {\n // Fallback to string approach if unexpected error occurs\n console.log(\n '[Helium] expo-file-system not available, attempting to pass 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 };\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 }: PresentUpsellParams) => {\n try {\n paywallEventHandlers = eventHandlers;\n presentOnFallback = onFallback;\n HeliumPaywallSdkModule.presentUpsell(triggerName, convertBooleansToMarkers(customPaywallTraits));\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 }\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 * 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 = HeliumPaywallSdkModule.resetHelium;\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 * 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 return;\n }\n // Validate required field exists before casting\n if (!result.trigger) {\n console.log('[Helium] getExperimentInfoForTrigger returned data without required trigger 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"]}
|
|
@@ -28,13 +28,6 @@ struct PaywallInfoResult: Record {
|
|
|
28
28
|
var shouldShow: Bool? = nil
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
struct CanPresentPaywallResult: Record {
|
|
32
|
-
@Field
|
|
33
|
-
var canPresent: Bool = false
|
|
34
|
-
@Field
|
|
35
|
-
var reason: String? = nil
|
|
36
|
-
}
|
|
37
|
-
|
|
38
31
|
public class HeliumPaywallSdkModule: Module {
|
|
39
32
|
// Single continuations for ongoing operations
|
|
40
33
|
private var currentProductId: String? = nil
|
|
@@ -232,6 +225,12 @@ public class HeliumPaywallSdkModule: Module {
|
|
|
232
225
|
},
|
|
233
226
|
onPurchaseSucceeded: { [weak self] event in
|
|
234
227
|
self?.sendEvent("paywallEventHandlers", event.toDictionary())
|
|
228
|
+
},
|
|
229
|
+
onOpenFailed: { [weak self] event in
|
|
230
|
+
self?.sendEvent("paywallEventHandlers", event.toDictionary())
|
|
231
|
+
},
|
|
232
|
+
onCustomPaywallAction: { [weak self] event in
|
|
233
|
+
self?.sendEvent("paywallEventHandlers", event.toDictionary())
|
|
235
234
|
}
|
|
236
235
|
),
|
|
237
236
|
customPaywallTraits: convertMarkersToBooleans(customPaywallTraits)
|
|
@@ -251,7 +250,7 @@ public class HeliumPaywallSdkModule: Module {
|
|
|
251
250
|
}
|
|
252
251
|
|
|
253
252
|
Function("fallbackOpenOrCloseEvent") { (trigger: String?, isOpen: Bool, viewType: String?) in
|
|
254
|
-
HeliumPaywallDelegateWrapper.shared.onFallbackOpenCloseEvent(trigger: trigger, isOpen: isOpen, viewType: viewType)
|
|
253
|
+
HeliumPaywallDelegateWrapper.shared.onFallbackOpenCloseEvent(trigger: trigger, isOpen: isOpen, viewType: viewType, fallbackReason: .bridgingError)
|
|
255
254
|
}
|
|
256
255
|
|
|
257
256
|
Function("getPaywallInfo") { (trigger: String) in
|
|
@@ -270,44 +269,6 @@ public class HeliumPaywallSdkModule: Module {
|
|
|
270
269
|
)
|
|
271
270
|
}
|
|
272
271
|
|
|
273
|
-
Function("canPresentUpsell") { (trigger: String) in
|
|
274
|
-
// Check if paywalls are downloaded successfully
|
|
275
|
-
let paywallsLoaded = Helium.shared.paywallsLoaded()
|
|
276
|
-
|
|
277
|
-
// Check if trigger exists in fetched triggers
|
|
278
|
-
let triggerNames = HeliumFetchedConfigManager.shared.getFetchedTriggerNames()
|
|
279
|
-
let hasTrigger = triggerNames.contains(trigger)
|
|
280
|
-
|
|
281
|
-
let canPresent: Bool
|
|
282
|
-
let reason: String
|
|
283
|
-
|
|
284
|
-
let useLoading = Helium.shared.loadingStateEnabledFor(trigger: trigger)
|
|
285
|
-
let downloadInProgress = Helium.shared.getDownloadStatus() == .inProgress
|
|
286
|
-
|
|
287
|
-
if paywallsLoaded && hasTrigger {
|
|
288
|
-
// Normal case - paywall is ready
|
|
289
|
-
canPresent = true
|
|
290
|
-
reason = "ready"
|
|
291
|
-
} else if downloadInProgress && useLoading {
|
|
292
|
-
// Loading case - paywall still downloading
|
|
293
|
-
canPresent = true
|
|
294
|
-
reason = "loading"
|
|
295
|
-
} else if HeliumFallbackViewManager.shared.getFallbackInfo(trigger: trigger) != nil {
|
|
296
|
-
// Fallback is available (via downloaded bundle)
|
|
297
|
-
canPresent = true
|
|
298
|
-
reason = "fallback_ready"
|
|
299
|
-
} else {
|
|
300
|
-
// No paywall and no fallback bundle
|
|
301
|
-
canPresent = false
|
|
302
|
-
reason = !paywallsLoaded ? "download status - \(Helium.shared.getDownloadStatus().rawValue)" : "trigger_not_found"
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
return CanPresentPaywallResult(
|
|
306
|
-
canPresent: canPresent,
|
|
307
|
-
reason: reason
|
|
308
|
-
)
|
|
309
|
-
}
|
|
310
|
-
|
|
311
272
|
Function("setRevenueCatAppUserId") { (rcAppUserId: String) in
|
|
312
273
|
Helium.shared.setRevenueCatAppUserId(rcAppUserId)
|
|
313
274
|
}
|
|
@@ -328,6 +289,38 @@ public class HeliumPaywallSdkModule: Module {
|
|
|
328
289
|
return Helium.shared.handleDeepLink(url)
|
|
329
290
|
}
|
|
330
291
|
|
|
292
|
+
Function("getExperimentInfoForTrigger") { (trigger: String) -> [String: Any] in
|
|
293
|
+
guard let experimentInfo = Helium.shared.getExperimentInfoForTrigger(trigger) else {
|
|
294
|
+
return ["getExperimentInfoErrorMsg": "No experiment info found for trigger: \(trigger)"]
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// Convert ExperimentInfo to dictionary using JSONEncoder
|
|
298
|
+
let encoder = JSONEncoder()
|
|
299
|
+
guard let jsonData = try? encoder.encode(experimentInfo),
|
|
300
|
+
var dictionary = try? JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any] else {
|
|
301
|
+
return ["getExperimentInfoErrorMsg": "Failed to serialize experiment info"]
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
// Return the dictionary directly - it contains all ExperimentInfo fields
|
|
305
|
+
return dictionary
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
Function("disableRestoreFailedDialog") {
|
|
309
|
+
Helium.restorePurchaseConfig.disableRestoreFailedDialog()
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
Function("setCustomRestoreFailedStrings") { (customTitle: String?, customMessage: String?, customCloseButtonText: String?) in
|
|
313
|
+
Helium.restorePurchaseConfig.setCustomRestoreFailedStrings(
|
|
314
|
+
customTitle: customTitle,
|
|
315
|
+
customMessage: customMessage,
|
|
316
|
+
customCloseButtonText: customCloseButtonText
|
|
317
|
+
)
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
Function("resetHelium") {
|
|
321
|
+
Helium.resetHelium()
|
|
322
|
+
}
|
|
323
|
+
|
|
331
324
|
// Enables the module to be used as a native view. Definition components that are accepted as part of the
|
|
332
325
|
// view definition: Prop, Events.
|
|
333
326
|
View(HeliumPaywallSdkView.self) {
|
package/package.json
CHANGED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Experiment allocation information types
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Details about user hash bucketing for allocation
|
|
7
|
+
*/
|
|
8
|
+
export interface HashDetails {
|
|
9
|
+
/**
|
|
10
|
+
* User hash bucket (1-100) - used for consistent allocation
|
|
11
|
+
*/
|
|
12
|
+
hashedUserIdBucket1To100?: number;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* User ID that was hashed for allocation
|
|
16
|
+
*/
|
|
17
|
+
hashedUserId?: string;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Hash method used (e.g., "HASH_USER_ID", "HASH_HELIUM_PERSISTENT_ID")
|
|
21
|
+
*/
|
|
22
|
+
hashMethod?: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Details about the chosen variant in an experiment
|
|
27
|
+
*/
|
|
28
|
+
export interface VariantDetails {
|
|
29
|
+
/**
|
|
30
|
+
* Name or identifier of the allocation/variant (e.g., paywall template name)
|
|
31
|
+
*/
|
|
32
|
+
allocationName?: string;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Unique identifier for this allocation (paywall UUID)
|
|
36
|
+
*/
|
|
37
|
+
allocationId?: string;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Index of chosen variant (1 to len(variants))
|
|
41
|
+
*/
|
|
42
|
+
allocationIndex?: number;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Additional allocation metadata as a dictionary
|
|
46
|
+
*/
|
|
47
|
+
allocationMetadata?: Record<string, any>;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Complete experiment allocation information for a user
|
|
52
|
+
*/
|
|
53
|
+
export interface ExperimentInfo {
|
|
54
|
+
/**
|
|
55
|
+
* Trigger name at which user was enrolled
|
|
56
|
+
*/
|
|
57
|
+
trigger: string;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Experiment name
|
|
61
|
+
*/
|
|
62
|
+
experimentName?: string;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Experiment ID
|
|
66
|
+
*/
|
|
67
|
+
experimentId?: string;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Experiment type (e.g., "A/B/n test")
|
|
71
|
+
*/
|
|
72
|
+
experimentType?: string;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Additional experiment metadata as a dictionary
|
|
76
|
+
*/
|
|
77
|
+
experimentMetadata?: Record<string, any>;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* When the experiment started (ISO8601 string)
|
|
81
|
+
*/
|
|
82
|
+
startDate?: string;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* When the experiment ends (ISO8601 string)
|
|
86
|
+
*/
|
|
87
|
+
endDate?: string;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Audience ID that user matched
|
|
91
|
+
*/
|
|
92
|
+
audienceId?: string;
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Audience data as structured object
|
|
96
|
+
* Note: This may be returned as a string from native bridge, but will be parsed
|
|
97
|
+
*/
|
|
98
|
+
audienceData?: Record<string, any> | string;
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Details about the chosen variant
|
|
102
|
+
*/
|
|
103
|
+
chosenVariantDetails?: VariantDetails;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Hash bucketing details
|
|
107
|
+
*/
|
|
108
|
+
hashDetails?: HashDetails;
|
|
109
|
+
}
|
|
@@ -15,7 +15,8 @@ export type HeliumPaywallEvent = {
|
|
|
15
15
|
'productSelected' | 'purchasePressed' | 'purchaseSucceeded' |
|
|
16
16
|
'purchaseCancelled' | 'purchaseFailed' | 'purchaseRestored' |
|
|
17
17
|
'purchaseRestoreFailed' | 'purchasePending' | 'initializeStart' |
|
|
18
|
-
'paywallsDownloadSuccess' | 'paywallsDownloadError' | 'paywallWebViewRendered'
|
|
18
|
+
'paywallsDownloadSuccess' | 'paywallsDownloadError' | 'paywallWebViewRendered' |
|
|
19
|
+
'customPaywallAction' | 'userAllocated';
|
|
19
20
|
triggerName?: string;
|
|
20
21
|
paywallName?: string;
|
|
21
22
|
/**
|
|
@@ -50,6 +51,9 @@ export type HeliumPaywallEvent = {
|
|
|
50
51
|
* Unix timestamp in seconds
|
|
51
52
|
*/
|
|
52
53
|
timestamp?: number;
|
|
54
|
+
paywallUnavailableReason?: string;
|
|
55
|
+
customPaywallActionName?: string;
|
|
56
|
+
customPaywallActionParams?: Record<string, any>;
|
|
53
57
|
};
|
|
54
58
|
export type DelegateActionEvent = {
|
|
55
59
|
type: 'purchase' | 'restore';
|
|
@@ -121,7 +125,10 @@ export type HeliumPaywallLoadingConfig = {
|
|
|
121
125
|
export interface HeliumConfig {
|
|
122
126
|
/** Your Helium API Key */
|
|
123
127
|
apiKey: string;
|
|
124
|
-
/**
|
|
128
|
+
/**
|
|
129
|
+
* Configuration for handling purchases. Can be custom functions or a pre-built handler config.
|
|
130
|
+
* If not provided, Helium will handle purchases for you.
|
|
131
|
+
*/
|
|
125
132
|
purchaseConfig?: HeliumPurchaseConfig;
|
|
126
133
|
/** Callback for receiving all Helium paywall events. */
|
|
127
134
|
onHeliumPaywallEvent: (event: HeliumPaywallEvent) => void; // Still mandatory
|
|
@@ -168,6 +175,8 @@ export interface PaywallEventHandlers {
|
|
|
168
175
|
onClose?: (event: PaywallCloseEvent) => void;
|
|
169
176
|
onDismissed?: (event: PaywallDismissedEvent) => void;
|
|
170
177
|
onPurchaseSucceeded?: (event: PurchaseSucceededEvent) => void;
|
|
178
|
+
onOpenFailed?: (event: PaywallOpenFailedEvent) => void;
|
|
179
|
+
onCustomPaywallAction?: (event: CustomPaywallActionEvent) => void;
|
|
171
180
|
}
|
|
172
181
|
|
|
173
182
|
// Typed event interfaces
|
|
@@ -201,6 +210,24 @@ export interface PurchaseSucceededEvent {
|
|
|
201
210
|
isSecondTry: boolean;
|
|
202
211
|
}
|
|
203
212
|
|
|
213
|
+
export interface PaywallOpenFailedEvent {
|
|
214
|
+
type: 'paywallOpenFailed';
|
|
215
|
+
triggerName: string;
|
|
216
|
+
paywallName: string;
|
|
217
|
+
error: string;
|
|
218
|
+
paywallUnavailableReason?: string;
|
|
219
|
+
isSecondTry: boolean;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
export interface CustomPaywallActionEvent {
|
|
223
|
+
type: 'customPaywallAction';
|
|
224
|
+
triggerName: string;
|
|
225
|
+
paywallName: string;
|
|
226
|
+
actionName: string;
|
|
227
|
+
params: Record<string, any>;
|
|
228
|
+
isSecondTry: boolean;
|
|
229
|
+
}
|
|
230
|
+
|
|
204
231
|
export const HELIUM_CTA_NAMES = {
|
|
205
232
|
SCHEDULE_CALL: 'schedule_call',
|
|
206
233
|
SUBSCRIBE_BUTTON: 'subscribe_button',
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { NativeModule, requireNativeModule } from "expo";
|
|
2
2
|
|
|
3
|
+
import { ExperimentInfo } from "./HeliumExperimentInfo.types";
|
|
3
4
|
import {
|
|
4
5
|
HeliumDownloadStatus,
|
|
5
6
|
HeliumPaywallSdkModuleEvents,
|
|
@@ -13,9 +14,8 @@ interface PaywallInfoResult {
|
|
|
13
14
|
shouldShow?: boolean;
|
|
14
15
|
}
|
|
15
16
|
|
|
16
|
-
interface
|
|
17
|
-
|
|
18
|
-
reason?: string;
|
|
17
|
+
interface ExperimentInfoResult extends Partial<ExperimentInfo> {
|
|
18
|
+
getExperimentInfoErrorMsg?: string;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
declare class HeliumPaywallSdkModule extends NativeModule<HeliumPaywallSdkModuleEvents> {
|
|
@@ -32,8 +32,6 @@ declare class HeliumPaywallSdkModule extends NativeModule<HeliumPaywallSdkModule
|
|
|
32
32
|
|
|
33
33
|
getDownloadStatus(): HeliumDownloadStatus;
|
|
34
34
|
|
|
35
|
-
canPresentUpsell(trigger: string): CanPresentUpsellResult;
|
|
36
|
-
|
|
37
35
|
fallbackOpenOrCloseEvent(
|
|
38
36
|
trigger: string,
|
|
39
37
|
isOpen: boolean,
|
|
@@ -56,6 +54,18 @@ declare class HeliumPaywallSdkModule extends NativeModule<HeliumPaywallSdkModule
|
|
|
56
54
|
hasAnyActiveSubscription(): Promise<boolean>;
|
|
57
55
|
|
|
58
56
|
hasAnyEntitlement(): Promise<boolean>;
|
|
57
|
+
|
|
58
|
+
resetHelium(): void;
|
|
59
|
+
|
|
60
|
+
setCustomRestoreFailedStrings(
|
|
61
|
+
customTitle?: string,
|
|
62
|
+
customMessage?: string,
|
|
63
|
+
customCloseButtonText?: string,
|
|
64
|
+
): void;
|
|
65
|
+
|
|
66
|
+
disableRestoreFailedDialog(): void;
|
|
67
|
+
|
|
68
|
+
getExperimentInfoForTrigger(trigger: string): ExperimentInfoResult;
|
|
59
69
|
}
|
|
60
70
|
|
|
61
71
|
// This call loads the native module object from the JSI.
|
package/src/index.ts
CHANGED
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
HeliumPaywallEvent,
|
|
5
5
|
NativeHeliumConfig, PaywallEventHandlers, PaywallInfo, PresentUpsellParams,
|
|
6
6
|
} from "./HeliumPaywallSdk.types";
|
|
7
|
+
import { ExperimentInfo } from "./HeliumExperimentInfo.types";
|
|
7
8
|
import HeliumPaywallSdkModule from "./HeliumPaywallSdkModule";
|
|
8
9
|
import { EventSubscription } from 'expo-modules-core';
|
|
9
10
|
import * as ExpoFileSystem from 'expo-file-system';
|
|
@@ -11,6 +12,7 @@ import * as ExpoFileSystem from 'expo-file-system';
|
|
|
11
12
|
export { default } from './HeliumPaywallSdkModule';
|
|
12
13
|
// export { default as HeliumPaywallSdkView } from './HeliumPaywallSdkView';
|
|
13
14
|
export * from './HeliumPaywallSdk.types';
|
|
15
|
+
export * from './HeliumExperimentInfo.types';
|
|
14
16
|
|
|
15
17
|
function addHeliumPaywallEventListener(listener: (event: HeliumPaywallEvent) => void): EventSubscription {
|
|
16
18
|
return HeliumPaywallSdkModule.addListener('onHeliumPaywallEvent', listener);
|
|
@@ -127,23 +129,12 @@ export const presentUpsell = ({
|
|
|
127
129
|
eventHandlers,
|
|
128
130
|
customPaywallTraits,
|
|
129
131
|
}: PresentUpsellParams) => {
|
|
130
|
-
const {canPresent, reason} = HeliumPaywallSdkModule.canPresentUpsell(triggerName);
|
|
131
|
-
|
|
132
|
-
if (!canPresent) {
|
|
133
|
-
console.log(
|
|
134
|
-
`[Helium] Cannot present trigger "${triggerName}". Reason: ${reason}`
|
|
135
|
-
);
|
|
136
|
-
onFallback?.();
|
|
137
|
-
HeliumPaywallSdkModule.fallbackOpenOrCloseEvent(triggerName, true, 'presented');
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
132
|
try {
|
|
142
133
|
paywallEventHandlers = eventHandlers;
|
|
143
134
|
presentOnFallback = onFallback;
|
|
144
135
|
HeliumPaywallSdkModule.presentUpsell(triggerName, convertBooleansToMarkers(customPaywallTraits));
|
|
145
136
|
} catch (error) {
|
|
146
|
-
console.log('Helium
|
|
137
|
+
console.log('[Helium] presentUpsell error', error);
|
|
147
138
|
paywallEventHandlers = undefined;
|
|
148
139
|
presentOnFallback = undefined;
|
|
149
140
|
onFallback?.();
|
|
@@ -188,6 +179,26 @@ function callPaywallEventHandlers(event: HeliumPaywallEvent) {
|
|
|
188
179
|
isSecondTry: event.isSecondTry ?? false,
|
|
189
180
|
});
|
|
190
181
|
break;
|
|
182
|
+
case 'paywallOpenFailed':
|
|
183
|
+
paywallEventHandlers?.onOpenFailed?.({
|
|
184
|
+
type: 'paywallOpenFailed',
|
|
185
|
+
triggerName: event.triggerName ?? 'unknown',
|
|
186
|
+
paywallName: event.paywallName ?? 'unknown',
|
|
187
|
+
error: event.error ?? 'Unknown error',
|
|
188
|
+
paywallUnavailableReason: event.paywallUnavailableReason,
|
|
189
|
+
isSecondTry: event.isSecondTry ?? false,
|
|
190
|
+
});
|
|
191
|
+
break;
|
|
192
|
+
case 'customPaywallAction':
|
|
193
|
+
paywallEventHandlers?.onCustomPaywallAction?.({
|
|
194
|
+
type: 'customPaywallAction',
|
|
195
|
+
triggerName: event.triggerName ?? 'unknown',
|
|
196
|
+
paywallName: event.paywallName ?? 'unknown',
|
|
197
|
+
actionName: event.customPaywallActionName ?? 'unknown',
|
|
198
|
+
params: event.customPaywallActionParams ?? {},
|
|
199
|
+
isSecondTry: event.isSecondTry ?? false,
|
|
200
|
+
});
|
|
201
|
+
break;
|
|
191
202
|
}
|
|
192
203
|
}
|
|
193
204
|
}
|
|
@@ -206,7 +217,13 @@ function handlePaywallEvent(event: HeliumPaywallEvent) {
|
|
|
206
217
|
break;
|
|
207
218
|
case 'paywallOpenFailed':
|
|
208
219
|
paywallEventHandlers = undefined;
|
|
209
|
-
|
|
220
|
+
const unavailableReason = event.paywallUnavailableReason;
|
|
221
|
+
if (event.triggerName
|
|
222
|
+
&& unavailableReason !== "alreadyPresented"
|
|
223
|
+
&& unavailableReason !== "secondTryNoMatch") {
|
|
224
|
+
console.log('[Helium] paywall open failed', unavailableReason);
|
|
225
|
+
presentOnFallback?.();
|
|
226
|
+
}
|
|
210
227
|
presentOnFallback = undefined;
|
|
211
228
|
break;
|
|
212
229
|
}
|
|
@@ -227,6 +244,46 @@ export const hasAnyActiveSubscription = HeliumPaywallSdkModule.hasAnyActiveSubsc
|
|
|
227
244
|
*/
|
|
228
245
|
export const hasAnyEntitlement = HeliumPaywallSdkModule.hasAnyEntitlement;
|
|
229
246
|
|
|
247
|
+
/**
|
|
248
|
+
* Reset Helium entirely so you can call initialize again. Only for advanced use cases.
|
|
249
|
+
*/
|
|
250
|
+
export const resetHelium = HeliumPaywallSdkModule.resetHelium;
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Set custom strings to show in the dialog that Helium will display if a "Restore Purchases" action is not successful.
|
|
254
|
+
* Note that these strings will not be localized by Helium for you.
|
|
255
|
+
*/
|
|
256
|
+
export const setCustomRestoreFailedStrings = HeliumPaywallSdkModule.setCustomRestoreFailedStrings;
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Disable the default dialog that Helium will display if a "Restore Purchases" action is not successful.
|
|
260
|
+
* You can handle this yourself if desired by listening for the PurchaseRestoreFailedEvent.
|
|
261
|
+
*/
|
|
262
|
+
export const disableRestoreFailedDialog = HeliumPaywallSdkModule.disableRestoreFailedDialog;
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* Get experiment allocation info for a specific trigger
|
|
266
|
+
*
|
|
267
|
+
* @param trigger The trigger name to get experiment info for
|
|
268
|
+
* @returns ExperimentInfo if the trigger has experiment data, undefined otherwise
|
|
269
|
+
*/
|
|
270
|
+
export const getExperimentInfoForTrigger = (trigger: string): ExperimentInfo | undefined => {
|
|
271
|
+
const result = HeliumPaywallSdkModule.getExperimentInfoForTrigger(trigger);
|
|
272
|
+
if (!result) {
|
|
273
|
+
console.log('[Helium] getExperimentInfoForTrigger unexpected error.');
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
if (result.getExperimentInfoErrorMsg) {
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
// Validate required field exists before casting
|
|
280
|
+
if (!result.trigger) {
|
|
281
|
+
console.log('[Helium] getExperimentInfoForTrigger returned data without required trigger field.');
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
return result as ExperimentInfo;
|
|
285
|
+
};
|
|
286
|
+
|
|
230
287
|
export const getPaywallInfo = (trigger: string): PaywallInfo | undefined => {
|
|
231
288
|
const result = HeliumPaywallSdkModule.getPaywallInfo(trigger);
|
|
232
289
|
if (!result) {
|