react-native-nami-sdk 3.3.0-beta.7 → 3.3.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.
Files changed (106) hide show
  1. package/.prettierrc +4 -0
  2. package/README.md +9 -9
  3. package/android/README.md +3 -2
  4. package/android/build.gradle +27 -19
  5. package/android/gradle/wrapper/gradle-wrapper.properties +1 -1
  6. package/android/gradlew +0 -0
  7. package/android/src/main/AndroidManifest.xml +1 -1
  8. package/android/src/main/java/com/namiml/reactnative/Constants.kt +3 -0
  9. package/android/src/main/java/com/namiml/reactnative/NamiBridgeModule.kt +91 -0
  10. package/android/src/main/java/com/namiml/reactnative/NamiBridgePackage.java +140 -0
  11. package/android/src/main/java/com/{nami/reactlibrary → namiml/reactnative}/NamiCampaignManagerBridge.kt +24 -30
  12. package/android/src/main/java/com/{nami/reactlibrary → namiml/reactnative}/NamiCustomerManagerBridge.kt +14 -6
  13. package/android/src/main/java/com/{nami/reactlibrary/NamiEntitlementManagerBridgeModule.kt → namiml/reactnative/NamiEntitlementManagerBridge.kt} +18 -8
  14. package/android/src/main/java/com/namiml/reactnative/NamiFlowManagerBridge.kt +67 -0
  15. package/android/src/main/java/com/namiml/reactnative/NamiPaywallManagerBridgeModule.kt +196 -0
  16. package/android/src/main/java/com/namiml/reactnative/NamiPurchaseManagerBridge.kt +114 -0
  17. package/android/src/main/java/com/{nami/reactlibrary → namiml/reactnative}/NamiUtil.kt +26 -23
  18. package/{index.d.ts → dist/index.d.ts} +0 -2
  19. package/dist/specs/NativeNami.d.ts +15 -0
  20. package/dist/specs/NativeNamiCampaignManager.d.ts +82 -0
  21. package/dist/specs/NativeNamiCustomerManager.d.ts +29 -0
  22. package/dist/specs/NativeNamiEntitlementManager.d.ts +45 -0
  23. package/dist/specs/NativeNamiFlowManager.d.ts +8 -0
  24. package/dist/specs/NativeNamiPaywallManager.d.ts +71 -0
  25. package/dist/specs/NativeNamiPurchaseManager.d.ts +28 -0
  26. package/dist/src/Nami.d.ts +5 -0
  27. package/dist/src/NamiCampaignManager.d.ts +29 -0
  28. package/{src → dist/src}/NamiCustomerManager.d.ts +11 -13
  29. package/dist/src/NamiEntitlementManager.d.ts +13 -0
  30. package/dist/src/NamiFlowManager.d.ts +11 -0
  31. package/dist/src/NamiPaywallManager.d.ts +30 -0
  32. package/dist/src/NamiPurchaseManager.d.ts +17 -0
  33. package/dist/src/transformers.d.ts +3 -0
  34. package/{src → dist/src}/types.d.ts +35 -6
  35. package/dist/src/version.d.ts +5 -0
  36. package/index.ts +0 -2
  37. package/ios/Nami.m +8 -88
  38. package/ios/Nami.swift +85 -0
  39. package/ios/NamiCampaignManagerBridge.m +3 -3
  40. package/ios/NamiCampaignManagerBridge.swift +49 -61
  41. package/ios/NamiCustomerManager.m +2 -2
  42. package/ios/NamiCustomerManager.swift +13 -3
  43. package/ios/NamiEntitlementManagerBridge.m +2 -3
  44. package/ios/NamiEntitlementManagerBridge.swift +48 -39
  45. package/ios/NamiFlowManagerBridge.m +2 -2
  46. package/ios/NamiFlowManagerBridge.swift +10 -6
  47. package/ios/NamiPaywallManagerBridge.m +3 -3
  48. package/ios/NamiPaywallManagerBridge.swift +16 -6
  49. package/ios/NamiPurchaseManagerBridge.m +3 -2
  50. package/ios/NamiPurchaseManagerBridge.swift +15 -10
  51. package/ios/RNNami-Bridging-Header.h +1 -3
  52. package/package.json +20 -8
  53. package/react-native-config.js +9 -0
  54. package/react-native-nami-sdk.podspec +11 -3
  55. package/scripts/generate-version.ts +18 -0
  56. package/specs/NativeNami.ts +16 -0
  57. package/specs/NativeNamiCampaignManager.ts +94 -0
  58. package/specs/NativeNamiCustomerManager.ts +37 -0
  59. package/specs/NativeNamiEntitlementManager.ts +54 -0
  60. package/specs/NativeNamiFlowManager.ts +12 -0
  61. package/specs/NativeNamiPaywallManager.ts +85 -0
  62. package/specs/NativeNamiPurchaseManager.ts +33 -0
  63. package/src/Nami.ts +28 -18
  64. package/src/NamiCampaignManager.ts +57 -53
  65. package/src/NamiCustomerManager.ts +55 -81
  66. package/src/NamiEntitlementManager.ts +49 -36
  67. package/src/NamiFlowManager.ts +35 -45
  68. package/src/NamiPaywallManager.ts +84 -139
  69. package/src/NamiPurchaseManager.ts +69 -70
  70. package/src/transformers.ts +21 -0
  71. package/src/types.ts +39 -7
  72. package/src/version.ts +5 -0
  73. package/tsconfig.json +24 -22
  74. package/.eslintignore +0 -3
  75. package/.eslintrc.js +0 -52
  76. package/.github/workflows/CI.yaml +0 -341
  77. package/.github/workflows/app_prod.yaml +0 -387
  78. package/.github/workflows/app_stg.yaml +0 -398
  79. package/.github/workflows/build.yml +0 -70
  80. package/.pre-commit-config.yaml +0 -24
  81. package/.prettierrc.js +0 -7
  82. package/android/src/main/java/com/nami/reactlibrary/Constants.kt +0 -3
  83. package/android/src/main/java/com/nami/reactlibrary/NamiBridgeModule.kt +0 -141
  84. package/android/src/main/java/com/nami/reactlibrary/NamiBridgePackage.java +0 -51
  85. package/android/src/main/java/com/nami/reactlibrary/NamiFlowManagerBridge.kt +0 -58
  86. package/android/src/main/java/com/nami/reactlibrary/NamiMLManagerBridgeModule.kt +0 -58
  87. package/android/src/main/java/com/nami/reactlibrary/NamiManagerBridge.kt +0 -26
  88. package/android/src/main/java/com/nami/reactlibrary/NamiPaywallManagerBridgeModule.kt +0 -258
  89. package/android/src/main/java/com/nami/reactlibrary/NamiPurchaseManagerBridge.kt +0 -108
  90. package/build-utils/get_version_code.py +0 -140
  91. package/build-utils/preflight.py +0 -46
  92. package/ios/NamiMLManagerBridge.m +0 -93
  93. package/ios/NamiManager.m +0 -18
  94. package/ios/NamiManager.swift +0 -30
  95. package/ios/RNNami.h +0 -10
  96. package/ios/RNNami.m +0 -13
  97. package/src/Nami.d.ts +0 -8
  98. package/src/NamiCampaignManager.d.ts +0 -18
  99. package/src/NamiEntitlementManager.d.ts +0 -15
  100. package/src/NamiFlowManager.d.ts +0 -32
  101. package/src/NamiMLManager.d.ts +0 -7
  102. package/src/NamiMLManager.ts +0 -13
  103. package/src/NamiManager.d.ts +0 -5
  104. package/src/NamiManager.ts +0 -14
  105. package/src/NamiPaywallManager.d.ts +0 -34
  106. package/src/NamiPurchaseManager.d.ts +0 -20
@@ -0,0 +1,18 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+
4
+ const pkgPath = path.resolve(__dirname, '../package.json');
5
+ const versionFilePath = path.resolve(__dirname, '../src/version.ts');
6
+
7
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
8
+ const version = pkg.version;
9
+
10
+ const fileContent = `/**
11
+ * Auto-generated file. Do not edit manually.
12
+ * React Native Nami SDK version.
13
+ */
14
+ export const NAMI_REACT_NATIVE_VERSION = '${version}';
15
+ `;
16
+
17
+ fs.writeFileSync(versionFilePath, fileContent, 'utf8');
18
+ console.log(`Generated version.ts with version ${version}`);
@@ -0,0 +1,16 @@
1
+ import type { TurboModule } from 'react-native';
2
+ import { TurboModuleRegistry } from 'react-native';
3
+
4
+ export interface Spec extends TurboModule {
5
+ configure(config: {
6
+ appPlatformID: string;
7
+ logLevel: string;
8
+ namiCommands?: string[];
9
+ namiLanguageCode?: string;
10
+ initialConfig?: string;
11
+ }): Promise<{ success: boolean }>;
12
+
13
+ sdkConfigured(): Promise<boolean>;
14
+ }
15
+
16
+ export default TurboModuleRegistry.getEnforcing<Spec>('RNNami');
@@ -0,0 +1,94 @@
1
+ import type { TurboModule } from 'react-native';
2
+ import { TurboModuleRegistry } from 'react-native';
3
+
4
+ export interface Spec extends TurboModule {
5
+ launch(
6
+ label: string | null,
7
+ withUrl: string | null,
8
+ context: {
9
+ productGroups?: string[];
10
+ customAttributes?: { [key: string]: string };
11
+ customObject?: { [key: string]: unknown };
12
+ } | null,
13
+ completion: (successAction: boolean, error: number | null) => void,
14
+ paywallCompletion: (event: {
15
+ campaignId?: string;
16
+ campaignName?: string;
17
+ campaignType?: string;
18
+ campaignLabel?: string;
19
+ campaignUrl?: string;
20
+ paywallId?: string;
21
+ paywallName?: string;
22
+ segmentId?: string;
23
+ externalSegmentId?: string;
24
+ action: string;
25
+ sku?: {
26
+ id?: string;
27
+ name?: string;
28
+ skuId?: string;
29
+ type?: string;
30
+ promoId?: string;
31
+ promoToken?: string;
32
+ };
33
+ purchaseError?: string;
34
+ purchases?: Array<{
35
+ sku?: {
36
+ id: string;
37
+ skuId: string;
38
+ name: string;
39
+ type: string;
40
+ };
41
+ skuId: string;
42
+ transactionIdentifier?: string;
43
+ purchaseToken?: string;
44
+ expires?: number; // timestamp (ms)
45
+ purchaseInitiatedTimestamp: number; // timestamp (ms)
46
+ purchaseSource?: 'CAMPAIGN' | 'MARKETPLACE' | 'UNKNOWN';
47
+ }>;
48
+ deeplinkUrl?: string;
49
+ componentChange?: {
50
+ id?: string;
51
+ name?: string;
52
+ };
53
+ videoMetadata?: {
54
+ id?: string;
55
+ name?: string;
56
+ url?: string;
57
+ loopVideo?: boolean;
58
+ muteByDefault?: boolean;
59
+ autoplayVideo?: boolean;
60
+ contentTimecode?: string;
61
+ contentDuration?: string;
62
+ };
63
+ timeSpentOnPaywall?: number;
64
+ }) => void,
65
+ ): void;
66
+
67
+ allCampaigns(): Promise<
68
+ {
69
+ id?: string;
70
+ rule?: string;
71
+ segment?: string;
72
+ paywall?: string;
73
+ type: string;
74
+ value?: string;
75
+ }[]
76
+ >;
77
+
78
+ isCampaignAvailable(source?: string): Promise<boolean>;
79
+
80
+ refresh(): Promise<
81
+ {
82
+ id?: string;
83
+ rule?: string;
84
+ segment?: string;
85
+ paywall?: string;
86
+ type: string;
87
+ value?: string;
88
+ }[]
89
+ >;
90
+
91
+ registerAvailableCampaignsHandler(): void;
92
+ }
93
+
94
+ export default TurboModuleRegistry.getEnforcing<Spec>('RNNamiCampaignManager');
@@ -0,0 +1,37 @@
1
+ import type { TurboModule } from 'react-native';
2
+ import { TurboModuleRegistry } from 'react-native';
3
+
4
+ export interface Spec extends TurboModule {
5
+ setCustomerAttribute(key: string, value: string): void;
6
+ getCustomerAttribute(key: string): Promise<string | null>;
7
+ clearCustomerAttribute(key: string): void;
8
+ clearAllCustomerAttributes(): void;
9
+
10
+ setCustomerDataPlatformId(platformId: string): void;
11
+ clearCustomerDataPlatformId(): void;
12
+
13
+ setAnonymousMode(anonymousMode: boolean): void;
14
+ inAnonymousMode(): Promise<boolean>;
15
+
16
+ journeyState(): Promise<{
17
+ formerSubscriber: boolean;
18
+ inGracePeriod: boolean;
19
+ inTrialPeriod: boolean;
20
+ inIntroOfferPeriod: boolean;
21
+ isCancelled: boolean;
22
+ inPause: boolean;
23
+ inAccountHold: boolean;
24
+ }>;
25
+
26
+ isLoggedIn(): Promise<boolean>;
27
+ loggedInId(): Promise<string | null>;
28
+ deviceId(): Promise<string>;
29
+
30
+ login(customerId: string): void;
31
+ logout(): void;
32
+
33
+ registerJourneyStateHandler(): void;
34
+ registerAccountStateHandler(): void;
35
+ }
36
+
37
+ export default TurboModuleRegistry.getEnforcing<Spec>('RNNamiCustomerManager');
@@ -0,0 +1,54 @@
1
+ import type { TurboModule } from 'react-native';
2
+ import { TurboModuleRegistry } from 'react-native';
3
+
4
+ export interface Spec extends TurboModule {
5
+ isEntitlementActive(referenceId?: string): Promise<boolean>;
6
+ active(): Promise<
7
+ Array<{
8
+ referenceId: string;
9
+ desc?: string;
10
+ name?: string;
11
+ purchasedSkus: Array<{
12
+ id: string;
13
+ skuId: string;
14
+ name?: string;
15
+ type: string;
16
+ promoId?: string;
17
+ promoToken?: string;
18
+ }>;
19
+ relatedSkus: Array<{
20
+ id: string;
21
+ skuId: string;
22
+ name?: string;
23
+ type: string;
24
+ promoId?: string;
25
+ promoToken?: string;
26
+ }>;
27
+ activePurchases: Array<{
28
+ skuId: string;
29
+ transactionIdentifier?: string;
30
+ expires?: string;
31
+ purchaseInitiatedTimestamp: string;
32
+ purchaseSource?: string;
33
+ sku?: {
34
+ id: string;
35
+ skuId: string;
36
+ name?: string;
37
+ type: string;
38
+ promoId?: string;
39
+ promoToken?: string;
40
+ };
41
+ }>;
42
+ }>
43
+ >;
44
+
45
+ refresh(): void;
46
+
47
+ registerActiveEntitlementsHandler(): void;
48
+
49
+ clearProvisionalEntitlementGrants(): void;
50
+ }
51
+
52
+ export default TurboModuleRegistry.getEnforcing<Spec>(
53
+ 'RNNamiEntitlementManager',
54
+ );
@@ -0,0 +1,12 @@
1
+ import type { TurboModule } from 'react-native';
2
+ import { TurboModuleRegistry } from 'react-native';
3
+
4
+ export interface Spec extends TurboModule {
5
+ registerStepHandoff(): void;
6
+
7
+ resume(): void;
8
+
9
+ registerEventHandler(): void;
10
+ }
11
+
12
+ export default TurboModuleRegistry.getEnforcing<Spec>('RNNamiFlowManager');
@@ -0,0 +1,85 @@
1
+ import type { TurboModule } from 'react-native';
2
+ import { TurboModuleRegistry } from 'react-native';
3
+
4
+ export interface Spec extends TurboModule {
5
+ // Unified purchase success handler
6
+ buySkuComplete(purchase: {
7
+ product: {
8
+ id: string;
9
+ skuId: string;
10
+ name?: string;
11
+ type: string;
12
+ };
13
+ transactionID?: string;
14
+ originalTransactionID?: string;
15
+ orderId?: string;
16
+ purchaseToken?: string;
17
+ receiptId?: string;
18
+ localizedPrice?: string;
19
+ userId?: string;
20
+ marketplace?: string;
21
+ price?: string;
22
+ currencyCode?: string;
23
+ }): void;
24
+
25
+ // Backward compatibility methods
26
+ buySkuCompleteApple(purchase: {
27
+ product: {
28
+ id: string;
29
+ skuId: string;
30
+ name?: string;
31
+ type: string;
32
+ };
33
+ transactionID: string;
34
+ originalTransactionID: string;
35
+ price: string;
36
+ currencyCode: string;
37
+ }): void;
38
+
39
+ buySkuCompleteAmazon(purchase: {
40
+ product: {
41
+ id: string;
42
+ skuId: string;
43
+ name?: string;
44
+ type: string;
45
+ };
46
+ receiptId: string;
47
+ localizedPrice: string;
48
+ userId: string;
49
+ marketplace: string;
50
+ }): void;
51
+
52
+ buySkuCompleteGooglePlay(purchase: {
53
+ product: {
54
+ id: string;
55
+ skuId: string;
56
+ name?: string;
57
+ type: string;
58
+ };
59
+ orderId: string;
60
+ purchaseToken: string;
61
+ }): void;
62
+
63
+ registerBuySkuHandler(): void;
64
+ registerCloseHandler(): void;
65
+ registerSignInHandler(): void;
66
+ registerRestoreHandler(): void;
67
+ registerDeeplinkActionHandler(): void;
68
+
69
+ dismiss(): Promise<void>;
70
+ show(): void;
71
+ hide(): void;
72
+
73
+ isHidden(): Promise<boolean>;
74
+ isPaywallOpen(): Promise<boolean>;
75
+
76
+ buySkuCancel(): void;
77
+
78
+ setProductDetails(productDetails: string, allowOffers?: boolean): void;
79
+
80
+ setAppSuppliedVideoDetails(url: string, name?: string): void;
81
+
82
+ allowUserInteraction(allowed: boolean): void;
83
+ }
84
+
85
+ export default TurboModuleRegistry.getEnforcing<Spec>('RNNamiPaywallManager');
@@ -0,0 +1,33 @@
1
+ import type { TurboModule } from 'react-native';
2
+ import { TurboModuleRegistry } from 'react-native';
3
+
4
+ export interface Spec extends TurboModule {
5
+ allPurchases(): Promise<
6
+ Array<{
7
+ skuId: string;
8
+ sku?: {
9
+ id: string;
10
+ skuId: string;
11
+ name?: string;
12
+ type: string;
13
+ promoId?: string;
14
+ promoToken?: string;
15
+ };
16
+ transactionIdentifier?: string;
17
+ purchaseToken?: string;
18
+ expires?: number; // timestamp in milliseconds
19
+ purchaseInitiatedTimestamp: number; // timestamp in milliseconds
20
+ purchaseSource?: 'CAMPAIGN' | 'MARKETPLACE' | 'UNKNOWN';
21
+ }>
22
+ >;
23
+
24
+ skuPurchased(skuId: string): Promise<boolean>;
25
+ anySkuPurchased(skuIds: string[]): Promise<boolean>;
26
+ consumePurchasedSku(skuId: string): void;
27
+ presentCodeRedemptionSheet(): void;
28
+ restorePurchases(): void;
29
+ registerPurchasesChangedHandler(): void;
30
+ registerRestorePurchasesHandler(): void;
31
+ }
32
+
33
+ export default TurboModuleRegistry.getEnforcing<Spec>('RNNamiPurchaseManager');
package/src/Nami.ts CHANGED
@@ -1,24 +1,34 @@
1
- import { NativeModules } from 'react-native';
2
- import { NamiConfiguration } from './types';
1
+ import type { Spec } from '../specs/NativeNami';
2
+ import { TurboModuleRegistry, NativeModules } from 'react-native';
3
+ import type { NamiConfiguration } from './types';
3
4
 
4
- export const { NamiBridge, NamiManager } = NativeModules;
5
+ const RNNami: Spec =
6
+ TurboModuleRegistry.getEnforcing<Spec>('RNNami') ?? NativeModules.RNNami;
5
7
 
6
- export interface INami {
7
- configure: (config: NamiConfiguration) => Promise<{ success: boolean }>;
8
- }
8
+ import { NAMI_REACT_NATIVE_VERSION } from './version';
9
9
 
10
- export const Nami: INami = {
11
- ...NamiBridge,
12
- configure: (
13
- configureObj: NamiConfiguration,
14
- ): Promise<{ success: boolean }> => {
15
- return new Promise(resolve => {
16
- NamiBridge.configure(
17
- configureObj,
18
- (resultObject: { success: boolean }) => {
19
- resolve(resultObject);
20
- },
21
- );
10
+ export const Nami = {
11
+ configure: async (config: NamiConfiguration): Promise<boolean> => {
12
+ const result = await RNNami.configure({
13
+ ...config,
14
+ namiCommands: [
15
+ ...(config.namiCommands ?? []),
16
+ `extendedClientInfo:react-native:${NAMI_REACT_NATIVE_VERSION}`,
17
+ ],
22
18
  });
19
+
20
+ // Treat 'already configured' as success
21
+ if (result?.success === false) {
22
+ const alreadyConfigured = await RNNami.sdkConfigured?.();
23
+ if (alreadyConfigured) {
24
+ return true;
25
+ }
26
+ }
27
+
28
+ return result?.success ?? false;
29
+ },
30
+
31
+ sdkConfigured: async (): Promise<boolean> => {
32
+ return await RNNami.sdkConfigured?.();
23
33
  },
24
34
  };
@@ -1,62 +1,61 @@
1
+ import type { Spec } from '../specs/NativeNamiCampaignManager';
1
2
  import {
3
+ TurboModuleRegistry,
2
4
  NativeModules,
3
5
  NativeEventEmitter,
4
- EmitterSubscription,
5
6
  } from 'react-native';
6
- import {
7
- LaunchCampaignError,
8
- NamiCampaign,
9
- NamiPaywallActionHandler,
7
+ import type {
10
8
  NamiPaywallEvent,
11
9
  PaywallLaunchContext,
10
+ NamiCampaign,
12
11
  } from './types';
12
+ import { NamiPaywallAction } from './types';
13
13
 
14
- export const { RNNamiCampaignManager } = NativeModules;
14
+ const RNNamiCampaignManager: Spec =
15
+ TurboModuleRegistry.getEnforcing<Spec>('RNNamiCampaignManager') ??
16
+ NativeModules.RNNamiCampaignManager;
15
17
 
16
18
  export enum NamiCampaignManagerEvents {
17
- ResultCampaign = 'ResultCampaign',
18
19
  AvailableCampaignsChanged = 'AvailableCampaignsChanged',
20
+ NamiPaywallEvent = 'NamiPaywallEvent',
19
21
  }
20
22
 
21
- const searchString_Nami = 'NAMI_';
23
+ const validPaywallActions = new Set(
24
+ Object.values(NamiPaywallAction) as NamiPaywallAction[],
25
+ );
22
26
 
23
- interface ICampaignManager {
24
- launchSubscription: EmitterSubscription | undefined;
25
- emitter: NativeEventEmitter;
26
- allCampaigns: () => Promise<Array<NamiCampaign>>;
27
- isCampaignAvailable(campaignSource: string | null): Promise<boolean>;
28
- launch: (
29
- label?: string,
30
- withUrl?: string,
31
- context?: PaywallLaunchContext,
32
- resultCallback?: (success: boolean, error?: LaunchCampaignError) => void,
33
- actionCallback?: NamiPaywallActionHandler,
34
- ) => void;
35
- refresh: () => Promise<Array<NamiCampaign>>;
36
- registerAvailableCampaignsHandler: (
37
- callback: (availableCampaigns: NamiCampaign[]) => void,
38
- ) => EmitterSubscription['remove'];
27
+ function mapToNamiPaywallAction(action: string): NamiPaywallAction {
28
+ return validPaywallActions.has(action as NamiPaywallAction)
29
+ ? (action as NamiPaywallAction)
30
+ : NamiPaywallAction.UNKNOWN;
39
31
  }
40
32
 
41
- export const NamiCampaignManager: ICampaignManager = {
42
- launchSubscription: undefined,
43
- emitter: new NativeEventEmitter(RNNamiCampaignManager),
44
- ...RNNamiCampaignManager,
45
- launch(label, withUrl, context, resultCallback, actionCallback) {
33
+ const emitter = new NativeEventEmitter(NativeModules.RNNamiCampaignManager);
34
+
35
+ export const NamiCampaignManager = {
36
+ emitter,
37
+
38
+ launchSubscription: undefined as
39
+ | ReturnType<NativeEventEmitter['addListener']>
40
+ | undefined,
41
+
42
+ launch(
43
+ label: string | null,
44
+ withUrl: string | null,
45
+ context: PaywallLaunchContext | null,
46
+ resultCallback?: (success: boolean, errorCode?: number | null) => void,
47
+ actionCallback?: (event: any) => void,
48
+ ): void {
46
49
  if (this.launchSubscription) {
47
50
  this.launchSubscription.remove();
48
51
  }
49
52
 
50
53
  this.launchSubscription = this.emitter.addListener(
51
- NamiCampaignManagerEvents.ResultCampaign,
52
- body => {
53
- body.action = body.action.startsWith(searchString_Nami)
54
- ? body.action.substring(5, body.action.length)
55
- : body.action;
56
-
54
+ NamiCampaignManagerEvents.NamiPaywallEvent,
55
+ (body: any) => {
57
56
  if (actionCallback) {
58
57
  const paywallEvent: NamiPaywallEvent = {
59
- action: body.action,
58
+ action: mapToNamiPaywallAction(body.action),
60
59
  campaignId: body.campaignId,
61
60
  campaignName: body.campaignName,
62
61
  campaignType: body.campaignType,
@@ -78,33 +77,38 @@ export const NamiCampaignManager: ICampaignManager = {
78
77
  }
79
78
  },
80
79
  );
80
+
81
81
  RNNamiCampaignManager.launch(
82
- label ?? null,
83
- withUrl ?? null,
84
- context ?? null,
82
+ label,
83
+ withUrl,
84
+ context,
85
85
  resultCallback ?? (() => {}),
86
86
  actionCallback ?? (() => {}),
87
87
  );
88
88
  },
89
89
 
90
- isCampaignAvailable: campaignSource => {
91
- return RNNamiCampaignManager.isCampaignAvailable(campaignSource ?? null);
90
+ allCampaigns: async () => {
91
+ return await RNNamiCampaignManager.allCampaigns();
92
92
  },
93
93
 
94
- registerAvailableCampaignsHandler(callback) {
95
- if (typeof callback !== 'function') {
96
- throw new Error('Expected callback to be a function.');
97
- }
98
- const subscription = this.emitter.addListener(
94
+ isCampaignAvailable: async (campaignName: string | null) => {
95
+ return await RNNamiCampaignManager.isCampaignAvailable(
96
+ campaignName ?? undefined,
97
+ );
98
+ },
99
+
100
+ refresh: async () => {
101
+ return await RNNamiCampaignManager.refresh();
102
+ },
103
+
104
+ registerAvailableCampaignsHandler: (
105
+ callback: (campaigns: NamiCampaign[]) => void,
106
+ ): (() => void) => {
107
+ const sub = emitter.addListener(
99
108
  NamiCampaignManagerEvents.AvailableCampaignsChanged,
100
109
  callback,
101
110
  );
102
-
103
- RNNamiCampaignManager.registerAvailableCampaignsHandler();
104
- return () => {
105
- if (subscription) {
106
- subscription.remove();
107
- }
108
- };
111
+ RNNamiCampaignManager.registerAvailableCampaignsHandler?.();
112
+ return () => sub.remove();
109
113
  },
110
114
  };