react-native-nami-sdk 3.2.11 → 3.3.0-2
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/.prettierrc +4 -0
- package/README.md +9 -9
- package/android/README.md +3 -2
- package/android/build.gradle +27 -19
- package/android/gradle/wrapper/gradle-wrapper.properties +1 -1
- package/android/gradlew +0 -0
- package/android/src/main/AndroidManifest.xml +1 -1
- package/android/src/main/java/com/namiml/reactnative/Constants.kt +3 -0
- package/android/src/main/java/com/namiml/reactnative/NamiBridgeModule.kt +91 -0
- package/android/src/main/java/com/namiml/reactnative/NamiBridgePackage.java +140 -0
- package/android/src/main/java/com/{nami/reactlibrary → namiml/reactnative}/NamiCampaignManagerBridge.kt +26 -32
- package/android/src/main/java/com/{nami/reactlibrary → namiml/reactnative}/NamiCustomerManagerBridge.kt +14 -6
- package/android/src/main/java/com/{nami/reactlibrary/NamiEntitlementManagerBridgeModule.kt → namiml/reactnative/NamiEntitlementManagerBridge.kt} +18 -8
- package/android/src/main/java/com/namiml/reactnative/NamiFlowManagerBridge.kt +67 -0
- package/android/src/main/java/com/namiml/reactnative/NamiPaywallManagerBridgeModule.kt +196 -0
- package/android/src/main/java/com/namiml/reactnative/NamiPurchaseManagerBridge.kt +114 -0
- package/android/src/main/java/com/{nami/reactlibrary → namiml/reactnative}/NamiUtil.kt +26 -23
- package/{index.d.ts → dist/index.d.ts} +1 -2
- package/dist/specs/NativeNami.d.ts +15 -0
- package/dist/specs/NativeNamiCampaignManager.d.ts +82 -0
- package/dist/specs/NativeNamiCustomerManager.d.ts +29 -0
- package/dist/specs/NativeNamiEntitlementManager.d.ts +45 -0
- package/dist/specs/NativeNamiFlowManager.d.ts +8 -0
- package/dist/specs/NativeNamiPaywallManager.d.ts +71 -0
- package/dist/specs/NativeNamiPurchaseManager.d.ts +28 -0
- package/dist/src/Nami.d.ts +5 -0
- package/dist/src/NamiCampaignManager.d.ts +29 -0
- package/{src → dist/src}/NamiCustomerManager.d.ts +11 -13
- package/dist/src/NamiEntitlementManager.d.ts +13 -0
- package/dist/src/NamiFlowManager.d.ts +11 -0
- package/dist/src/NamiPaywallManager.d.ts +30 -0
- package/dist/src/NamiPurchaseManager.d.ts +17 -0
- package/dist/src/transformers.d.ts +3 -0
- package/{src → dist/src}/types.d.ts +41 -11
- package/dist/src/version.d.ts +5 -0
- package/index.ts +1 -2
- package/ios/Nami.m +8 -88
- package/ios/Nami.swift +85 -0
- package/ios/NamiCampaignManagerBridge.m +3 -3
- package/ios/NamiCampaignManagerBridge.swift +50 -62
- package/ios/NamiCustomerManager.m +2 -2
- package/ios/NamiCustomerManager.swift +13 -3
- package/ios/NamiEntitlementManagerBridge.m +2 -3
- package/ios/NamiEntitlementManagerBridge.swift +48 -39
- package/ios/NamiFlowManagerBridge.m +20 -0
- package/ios/NamiFlowManagerBridge.swift +57 -0
- package/ios/NamiPaywallManagerBridge.m +3 -3
- package/ios/NamiPaywallManagerBridge.swift +16 -6
- package/ios/NamiPurchaseManagerBridge.m +3 -2
- package/ios/NamiPurchaseManagerBridge.swift +15 -10
- package/ios/RNNami-Bridging-Header.h +1 -3
- package/package.json +20 -8
- package/react-native-config.js +9 -0
- package/react-native-nami-sdk.podspec +11 -3
- package/scripts/generate-version.ts +18 -0
- package/specs/NativeNami.ts +16 -0
- package/specs/NativeNamiCampaignManager.ts +94 -0
- package/specs/NativeNamiCustomerManager.ts +37 -0
- package/specs/NativeNamiEntitlementManager.ts +54 -0
- package/specs/NativeNamiFlowManager.ts +12 -0
- package/specs/NativeNamiPaywallManager.ts +85 -0
- package/specs/NativeNamiPurchaseManager.ts +33 -0
- package/src/Nami.ts +28 -18
- package/src/NamiCampaignManager.ts +57 -53
- package/src/NamiCustomerManager.ts +68 -58
- package/src/NamiEntitlementManager.ts +49 -36
- package/src/NamiFlowManager.ts +56 -0
- package/src/NamiPaywallManager.ts +84 -139
- package/src/NamiPurchaseManager.ts +69 -70
- package/src/transformers.ts +21 -0
- package/src/types.ts +39 -7
- package/src/version.ts +5 -0
- package/tsconfig.json +24 -22
- package/.eslintignore +0 -3
- package/.eslintrc.js +0 -52
- package/.github/workflows/CI.yaml +0 -341
- package/.github/workflows/app_prod.yaml +0 -387
- package/.github/workflows/app_stg.yaml +0 -386
- package/.github/workflows/build.yml +0 -70
- package/.pre-commit-config.yaml +0 -24
- package/.prettierrc.js +0 -7
- package/android/.project +0 -17
- package/android/.settings/org.eclipse.buildship.core.prefs +0 -13
- package/android/src/main/java/com/nami/reactlibrary/Constants.kt +0 -3
- package/android/src/main/java/com/nami/reactlibrary/NamiBridgeModule.kt +0 -141
- package/android/src/main/java/com/nami/reactlibrary/NamiBridgePackage.java +0 -50
- package/android/src/main/java/com/nami/reactlibrary/NamiMLManagerBridgeModule.kt +0 -58
- package/android/src/main/java/com/nami/reactlibrary/NamiManagerBridge.kt +0 -26
- package/android/src/main/java/com/nami/reactlibrary/NamiPaywallManagerBridgeModule.kt +0 -258
- package/android/src/main/java/com/nami/reactlibrary/NamiPurchaseManagerBridge.kt +0 -108
- package/build-utils/get_version_code.py +0 -140
- package/build-utils/preflight.py +0 -46
- package/ios/NamiMLManagerBridge.m +0 -93
- package/ios/NamiManager.m +0 -18
- package/ios/NamiManager.swift +0 -30
- package/ios/RNNami.h +0 -10
- package/ios/RNNami.m +0 -13
- package/ios/RNNami.xcodeproj/project.pbxproj +0 -365
- package/ios/RNNami.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- package/ios/RNNami.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- package/ios/RNNami.xcodeproj/xcshareddata/xcschemes/RNNami.xcscheme +0 -67
- package/ios/RNNami.xcworkspace/contents.xcworkspacedata +0 -7
- package/ios/RNNami.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- package/src/Nami.d.ts +0 -8
- package/src/NamiCampaignManager.d.ts +0 -18
- package/src/NamiEntitlementManager.d.ts +0 -15
- package/src/NamiMLManager.d.ts +0 -7
- package/src/NamiMLManager.ts +0 -13
- package/src/NamiManager.d.ts +0 -5
- package/src/NamiManager.ts +0 -14
- package/src/NamiPaywallManager.d.ts +0 -34
- package/src/NamiPurchaseManager.d.ts +0 -20
|
@@ -1,89 +1,99 @@
|
|
|
1
1
|
import {
|
|
2
|
+
TurboModuleRegistry,
|
|
2
3
|
NativeModules,
|
|
3
4
|
NativeEventEmitter,
|
|
4
5
|
EmitterSubscription,
|
|
5
6
|
} from 'react-native';
|
|
6
|
-
import {
|
|
7
|
+
import type { Spec } from '../specs/NativeNamiCustomerManager';
|
|
8
|
+
import type {
|
|
9
|
+
AccountStateAction,
|
|
10
|
+
CustomerJourneyState,
|
|
11
|
+
NamiAccountStateEvent,
|
|
12
|
+
} from './types';
|
|
7
13
|
|
|
8
|
-
|
|
14
|
+
const RNNamiCustomerManager: Spec =
|
|
15
|
+
TurboModuleRegistry.getEnforcing?.<Spec>('RNNamiCustomerManager') ??
|
|
16
|
+
NativeModules.RNNamiCustomerManager;
|
|
17
|
+
|
|
18
|
+
const emitter = new NativeEventEmitter(NativeModules.RNNamiCustomerManager);
|
|
9
19
|
|
|
10
20
|
export enum NamiCustomerManagerEvents {
|
|
11
21
|
JourneyStateChanged = 'JourneyStateChanged',
|
|
12
22
|
AccountStateChanged = 'AccountStateChanged',
|
|
13
23
|
}
|
|
14
24
|
|
|
15
|
-
export
|
|
16
|
-
emitter
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
deviceId: () => Promise<string>;
|
|
25
|
-
login: (customerId: string) => void;
|
|
26
|
-
logout: () => void;
|
|
27
|
-
registerJourneyStateHandler: (
|
|
28
|
-
callback: (journeyState: CustomerJourneyState) => void,
|
|
29
|
-
) => EmitterSubscription['remove'];
|
|
30
|
-
registerAccountStateHandler: (
|
|
31
|
-
callback: (
|
|
32
|
-
action: AccountStateAction,
|
|
33
|
-
success: boolean,
|
|
34
|
-
error?: number,
|
|
35
|
-
) => void,
|
|
36
|
-
) => EmitterSubscription['remove'];
|
|
37
|
-
clearCustomerDataPlatformId: () => void;
|
|
38
|
-
setCustomerDataPlatformId: (platformId: string) => void;
|
|
39
|
-
setAnonymousMode: (anonymousMode: boolean) => void;
|
|
40
|
-
inAnonymousMode: () => Promise<boolean>;
|
|
41
|
-
}
|
|
25
|
+
export const NamiCustomerManager = {
|
|
26
|
+
emitter,
|
|
27
|
+
|
|
28
|
+
login: (customerId: string) => RNNamiCustomerManager.login(customerId),
|
|
29
|
+
|
|
30
|
+
logout: () => RNNamiCustomerManager.logout(),
|
|
31
|
+
|
|
32
|
+
setCustomerAttribute: (key: string, value: string) =>
|
|
33
|
+
RNNamiCustomerManager.setCustomerAttribute(key, value),
|
|
42
34
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
login: customerId => {
|
|
47
|
-
RNNamiCustomerManager.login(customerId);
|
|
35
|
+
getCustomerAttribute: async (key: string): Promise<string | undefined> => {
|
|
36
|
+
const value = await RNNamiCustomerManager.getCustomerAttribute(key);
|
|
37
|
+
return value ?? undefined;
|
|
48
38
|
},
|
|
49
|
-
|
|
50
|
-
|
|
39
|
+
|
|
40
|
+
clearCustomerAttribute: (key: string) =>
|
|
41
|
+
RNNamiCustomerManager.clearCustomerAttribute(key),
|
|
42
|
+
|
|
43
|
+
clearAllCustomerAttributes: () =>
|
|
44
|
+
RNNamiCustomerManager.clearAllCustomerAttributes(),
|
|
45
|
+
|
|
46
|
+
journeyState: async (): Promise<CustomerJourneyState> =>
|
|
47
|
+
RNNamiCustomerManager.journeyState() as Promise<CustomerJourneyState>,
|
|
48
|
+
|
|
49
|
+
isLoggedIn: async (): Promise<boolean> => RNNamiCustomerManager.isLoggedIn(),
|
|
50
|
+
|
|
51
|
+
loggedInId: async (): Promise<string | undefined> => {
|
|
52
|
+
const id = await RNNamiCustomerManager.loggedInId();
|
|
53
|
+
return id ?? undefined;
|
|
54
|
+
},
|
|
55
|
+
setCustomerDataPlatformId: (platformId) => {
|
|
56
|
+
RNNamiCustomerManager.setCustomerDataPlatformId(platformId);
|
|
57
|
+
},
|
|
58
|
+
clearCustomerDataPlatformId: () => {
|
|
59
|
+
RNNamiCustomerManager.clearCustomerDataPlatformId();
|
|
60
|
+
},
|
|
61
|
+
setAnonymousMode: (anonymousMode) => {
|
|
62
|
+
RNNamiCustomerManager.setAnonymousMode(anonymousMode);
|
|
63
|
+
},
|
|
64
|
+
deviceId: async () => {
|
|
65
|
+
return RNNamiCustomerManager.deviceId();
|
|
66
|
+
},
|
|
67
|
+
inAnonymousMode: async () => {
|
|
68
|
+
return RNNamiCustomerManager.inAnonymousMode();
|
|
51
69
|
},
|
|
52
70
|
registerJourneyStateHandler: (
|
|
53
|
-
callback: (
|
|
54
|
-
) => {
|
|
55
|
-
const subscription =
|
|
71
|
+
callback: (state: CustomerJourneyState) => void,
|
|
72
|
+
): EmitterSubscription['remove'] => {
|
|
73
|
+
const subscription = emitter.addListener(
|
|
56
74
|
NamiCustomerManagerEvents.JourneyStateChanged,
|
|
57
75
|
callback,
|
|
58
76
|
);
|
|
59
|
-
RNNamiCustomerManager.registerJourneyStateHandler();
|
|
60
|
-
return () =>
|
|
61
|
-
if (subscription) {
|
|
62
|
-
subscription.remove();
|
|
63
|
-
}
|
|
64
|
-
};
|
|
77
|
+
RNNamiCustomerManager.registerJourneyStateHandler?.();
|
|
78
|
+
return () => subscription.remove();
|
|
65
79
|
},
|
|
80
|
+
|
|
66
81
|
registerAccountStateHandler: (
|
|
67
82
|
callback: (
|
|
68
83
|
action: AccountStateAction,
|
|
69
84
|
success: boolean,
|
|
70
85
|
error?: number,
|
|
71
86
|
) => void,
|
|
72
|
-
) => {
|
|
73
|
-
const subscription =
|
|
87
|
+
): EmitterSubscription['remove'] => {
|
|
88
|
+
const subscription = emitter.addListener(
|
|
74
89
|
NamiCustomerManagerEvents.AccountStateChanged,
|
|
75
|
-
(body:
|
|
76
|
-
const action: AccountStateAction =
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
callback(action, success, error);
|
|
90
|
+
(body: NamiAccountStateEvent) => {
|
|
91
|
+
const action: AccountStateAction =
|
|
92
|
+
body.action.toLowerCase() as AccountStateAction;
|
|
93
|
+
callback(action, body.success, body.error);
|
|
80
94
|
},
|
|
81
95
|
);
|
|
82
|
-
RNNamiCustomerManager.registerAccountStateHandler();
|
|
83
|
-
return () =>
|
|
84
|
-
if (subscription) {
|
|
85
|
-
subscription.remove();
|
|
86
|
-
}
|
|
87
|
-
};
|
|
96
|
+
RNNamiCustomerManager.registerAccountStateHandler?.();
|
|
97
|
+
return () => subscription.remove();
|
|
88
98
|
},
|
|
89
99
|
};
|
|
@@ -1,53 +1,66 @@
|
|
|
1
1
|
import {
|
|
2
|
+
TurboModuleRegistry,
|
|
2
3
|
NativeModules,
|
|
3
4
|
NativeEventEmitter,
|
|
4
|
-
Platform,
|
|
5
5
|
EmitterSubscription,
|
|
6
6
|
} from 'react-native';
|
|
7
|
-
import {
|
|
7
|
+
import type { Spec } from '../specs/NativeNamiEntitlementManager';
|
|
8
|
+
import type { NamiEntitlement } from './types';
|
|
9
|
+
import { parsePurchaseDates } from './transformers';
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
const RNNamiEntitlementManager: Spec =
|
|
12
|
+
TurboModuleRegistry.getEnforcing?.<Spec>('RNNamiEntitlementManager') ??
|
|
13
|
+
NativeModules.RNNamiEntitlementManager;
|
|
14
|
+
|
|
15
|
+
const emitter = new NativeEventEmitter(NativeModules.RNNamiEntitlementManager);
|
|
10
16
|
|
|
11
17
|
export enum NamiEntitlementManagerEvents {
|
|
12
18
|
EntitlementsChanged = 'EntitlementsChanged',
|
|
13
19
|
}
|
|
14
20
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
)
|
|
22
|
-
registerActiveEntitlementsHandler: (
|
|
23
|
-
callback: (activeEntitlements: NamiEntitlement[]) => void,
|
|
24
|
-
) => EmitterSubscription['remove'];
|
|
25
|
-
clearProvisionalEntitlementGrants: () => void;
|
|
21
|
+
function parseEntitlements(entitlements: any[]): NamiEntitlement[] {
|
|
22
|
+
return entitlements.map((ent) => ({
|
|
23
|
+
...ent,
|
|
24
|
+
activePurchases: ent.activePurchases.map(parsePurchaseDates),
|
|
25
|
+
relatedSkus: ent.relatedSkus ?? [],
|
|
26
|
+
purchasedSkus: ent.purchasedSkus ?? [],
|
|
27
|
+
}));
|
|
26
28
|
}
|
|
27
29
|
|
|
28
|
-
export const NamiEntitlementManager
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
30
|
+
export const NamiEntitlementManager = {
|
|
31
|
+
emitter,
|
|
32
|
+
|
|
33
|
+
active: async (): Promise<NamiEntitlement[]> => {
|
|
34
|
+
const raw = await RNNamiEntitlementManager.active();
|
|
35
|
+
return parseEntitlements(raw);
|
|
36
|
+
},
|
|
37
|
+
|
|
38
|
+
isEntitlementActive: async (entitlementId: string): Promise<boolean> => {
|
|
39
|
+
return await RNNamiEntitlementManager.isEntitlementActive(entitlementId);
|
|
37
40
|
},
|
|
41
|
+
|
|
42
|
+
refresh: (
|
|
43
|
+
callback: (entitlements: NamiEntitlement[]) => void,
|
|
44
|
+
): EmitterSubscription['remove'] => {
|
|
45
|
+
const subscription = emitter.addListener(
|
|
46
|
+
NamiEntitlementManagerEvents.EntitlementsChanged,
|
|
47
|
+
callback,
|
|
48
|
+
);
|
|
49
|
+
RNNamiEntitlementManager.refresh?.();
|
|
50
|
+
return () => subscription.remove();
|
|
51
|
+
},
|
|
52
|
+
|
|
38
53
|
registerActiveEntitlementsHandler: (
|
|
39
|
-
callback: (
|
|
40
|
-
) => {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
return () => {
|
|
48
|
-
if (subscription) {
|
|
49
|
-
subscription.remove();
|
|
50
|
-
}
|
|
51
|
-
};
|
|
54
|
+
callback: (entitlements: NamiEntitlement[]) => void,
|
|
55
|
+
): EmitterSubscription['remove'] => {
|
|
56
|
+
const subscription = emitter.addListener(
|
|
57
|
+
NamiEntitlementManagerEvents.EntitlementsChanged,
|
|
58
|
+
callback,
|
|
59
|
+
);
|
|
60
|
+
RNNamiEntitlementManager.registerActiveEntitlementsHandler?.();
|
|
61
|
+
return () => subscription.remove();
|
|
52
62
|
},
|
|
63
|
+
|
|
64
|
+
clearProvisionalEntitlementGrants: (): void =>
|
|
65
|
+
RNNamiEntitlementManager.clearProvisionalEntitlementGrants(),
|
|
53
66
|
};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import {
|
|
2
|
+
TurboModuleRegistry,
|
|
3
|
+
NativeModules,
|
|
4
|
+
NativeEventEmitter,
|
|
5
|
+
} from 'react-native';
|
|
6
|
+
import type { Spec } from '../specs/NativeNamiFlowManager';
|
|
7
|
+
import type { NamiFlowHandoffPayload } from '../src/types';
|
|
8
|
+
|
|
9
|
+
const RNNamiFlowManager: Spec =
|
|
10
|
+
TurboModuleRegistry.getEnforcing?.<Spec>('RNNamiFlowManager') ??
|
|
11
|
+
NativeModules.RNNamiFlowManager;
|
|
12
|
+
|
|
13
|
+
const emitter = new NativeEventEmitter(NativeModules.RNNamiFlowManager);
|
|
14
|
+
|
|
15
|
+
export enum NamiFlowManagerEvents {
|
|
16
|
+
Handoff = 'Handoff',
|
|
17
|
+
FlowEvent = 'FlowEvent',
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export const NamiFlowManager = {
|
|
21
|
+
emitter,
|
|
22
|
+
|
|
23
|
+
registerStepHandoff: (
|
|
24
|
+
callback: (
|
|
25
|
+
handoffTag: string,
|
|
26
|
+
handoffData?: Record<string, unknown>,
|
|
27
|
+
) => void,
|
|
28
|
+
): (() => void) => {
|
|
29
|
+
console.info('[NamiFlowManager] Registering step handoff listener...');
|
|
30
|
+
|
|
31
|
+
const sub = emitter.addListener(
|
|
32
|
+
NamiFlowManagerEvents.Handoff,
|
|
33
|
+
(event: NamiFlowHandoffPayload) => {
|
|
34
|
+
console.info('[NamiFlowManager] Received handoff event:', event);
|
|
35
|
+
callback(event.handoffTag, event.handoffData);
|
|
36
|
+
},
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
RNNamiFlowManager.registerStepHandoff?.();
|
|
40
|
+
|
|
41
|
+
return () => sub.remove();
|
|
42
|
+
},
|
|
43
|
+
|
|
44
|
+
resume: (): void => {
|
|
45
|
+
console.info('[NamiFlowManager] resume from handoff requested');
|
|
46
|
+
RNNamiFlowManager.resume?.();
|
|
47
|
+
},
|
|
48
|
+
|
|
49
|
+
registerEventHandler: (
|
|
50
|
+
callback: (payload: Record<string, unknown>) => void,
|
|
51
|
+
): (() => void) => {
|
|
52
|
+
const sub = emitter.addListener(NamiFlowManagerEvents.FlowEvent, callback);
|
|
53
|
+
RNNamiFlowManager.registerEventHandler?.();
|
|
54
|
+
return () => sub.remove();
|
|
55
|
+
},
|
|
56
|
+
};
|
|
@@ -1,175 +1,120 @@
|
|
|
1
1
|
import {
|
|
2
|
+
TurboModuleRegistry,
|
|
2
3
|
NativeModules,
|
|
3
4
|
NativeEventEmitter,
|
|
4
|
-
EmitterSubscription,
|
|
5
5
|
} from 'react-native';
|
|
6
|
-
import {
|
|
7
|
-
|
|
6
|
+
import type { Spec } from '../specs/NativeNamiPaywallManager';
|
|
7
|
+
import type {
|
|
8
|
+
NamiPurchaseDetails,
|
|
8
9
|
NamiPurchaseSuccessApple,
|
|
10
|
+
NamiPurchaseSuccessAmazon,
|
|
9
11
|
NamiPurchaseSuccessGooglePlay,
|
|
10
12
|
NamiSKU,
|
|
11
|
-
} from '
|
|
13
|
+
} from '../src/types';
|
|
14
|
+
const RNNamiPaywallManager: Spec =
|
|
15
|
+
TurboModuleRegistry.getEnforcing?.<Spec>('RNNamiPaywallManager') ??
|
|
16
|
+
NativeModules.RNNamiPaywallManager;
|
|
17
|
+
|
|
18
|
+
const emitter = new NativeEventEmitter(NativeModules.RNNamiPaywallManager);
|
|
12
19
|
|
|
13
20
|
export enum NamiPaywallManagerEvents {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
21
|
+
BuySku = 'RegisterBuySKU',
|
|
22
|
+
Close = 'PaywallCloseRequested',
|
|
23
|
+
SignIn = 'PaywallSignInRequested',
|
|
24
|
+
Restore = 'PaywallRestoreRequested',
|
|
25
|
+
DeeplinkAction = 'PaywallDeeplinkAction',
|
|
19
26
|
}
|
|
20
27
|
|
|
21
|
-
export
|
|
22
|
-
|
|
23
|
-
GooglePlay = 'GooglePlay',
|
|
24
|
-
}
|
|
28
|
+
export const NamiPaywallManager = {
|
|
29
|
+
emitter,
|
|
25
30
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
buySkuCompleteGooglePlay: (
|
|
31
|
-
purchaseSuccess: NamiPurchaseSuccessGooglePlay,
|
|
32
|
-
) => void;
|
|
33
|
-
buySkuCancel: () => void;
|
|
34
|
-
registerBuySkuHandler: (
|
|
35
|
-
callback: (sku: NamiSKU) => void,
|
|
36
|
-
) => EmitterSubscription['remove'];
|
|
37
|
-
registerCloseHandler: (callback: () => void) => EmitterSubscription['remove'];
|
|
38
|
-
registerSignInHandler: (
|
|
39
|
-
callback: () => void,
|
|
40
|
-
) => EmitterSubscription['remove'];
|
|
41
|
-
registerRestoreHandler: (
|
|
42
|
-
callback: () => void,
|
|
43
|
-
) => EmitterSubscription['remove'];
|
|
44
|
-
registerDeeplinkActionHandler: (
|
|
45
|
-
callback: (url: string) => void,
|
|
46
|
-
) => EmitterSubscription['remove'];
|
|
47
|
-
dismiss: () => Promise<boolean>;
|
|
48
|
-
show: () => void;
|
|
49
|
-
hide: () => void;
|
|
50
|
-
isHidden: () => Promise<boolean>;
|
|
51
|
-
isPaywallOpen: () => Promise<boolean>;
|
|
52
|
-
setProductDetails: (productDetails: string, allowOffers: boolean) => void;
|
|
53
|
-
setAppSuppliedVideoDetails: (url: string, name?: string) => void;
|
|
54
|
-
allowUserInteraction: (allowed: boolean) => void;
|
|
55
|
-
}
|
|
31
|
+
// New unified purchase success handler
|
|
32
|
+
buySkuComplete: (purchase: NamiPurchaseDetails): void => {
|
|
33
|
+
RNNamiPaywallManager.buySkuComplete(purchase);
|
|
34
|
+
},
|
|
56
35
|
|
|
57
|
-
|
|
36
|
+
// Compatibility shims
|
|
37
|
+
buySkuCompleteApple: (purchase: NamiPurchaseSuccessApple): void => {
|
|
38
|
+
RNNamiPaywallManager.buySkuCompleteApple(purchase);
|
|
39
|
+
},
|
|
58
40
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
...RNNamiPaywallManager,
|
|
62
|
-
...NamiPaywallManagerBridge,
|
|
63
|
-
buySkuCompleteApple: (purchaseSuccess: NamiPurchaseSuccessApple) => {
|
|
64
|
-
RNNamiPaywallManager.buySkuComplete(purchaseSuccess);
|
|
41
|
+
buySkuCompleteAmazon: (purchase: NamiPurchaseSuccessAmazon): void => {
|
|
42
|
+
RNNamiPaywallManager.buySkuCompleteAmazon(purchase);
|
|
65
43
|
},
|
|
66
|
-
|
|
67
|
-
|
|
44
|
+
|
|
45
|
+
buySkuCompleteGooglePlay: (purchase: NamiPurchaseSuccessGooglePlay): void => {
|
|
46
|
+
RNNamiPaywallManager.buySkuCompleteGooglePlay(purchase);
|
|
68
47
|
},
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
RNNamiPaywallManager.
|
|
73
|
-
|
|
74
|
-
ServicesEnum.GooglePlay,
|
|
75
|
-
);
|
|
48
|
+
|
|
49
|
+
registerBuySkuHandler: (callback: (sku: NamiSKU) => void): (() => void) => {
|
|
50
|
+
const sub = emitter.addListener(NamiPaywallManagerEvents.BuySku, callback);
|
|
51
|
+
RNNamiPaywallManager.registerBuySkuHandler?.();
|
|
52
|
+
return () => sub.remove();
|
|
76
53
|
},
|
|
77
|
-
|
|
78
|
-
|
|
54
|
+
|
|
55
|
+
registerCloseHandler: (callback: () => void): (() => void) => {
|
|
56
|
+
const sub = emitter.addListener(NamiPaywallManagerEvents.Close, callback);
|
|
57
|
+
RNNamiPaywallManager.registerCloseHandler?.();
|
|
58
|
+
return () => sub.remove();
|
|
79
59
|
},
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
},
|
|
100
|
-
);
|
|
101
|
-
RNNamiPaywallManager.registerCloseHandler();
|
|
102
|
-
return () => {
|
|
103
|
-
if (subscription) {
|
|
104
|
-
subscription.remove();
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
|
-
},
|
|
108
|
-
registerSignInHandler(callback) {
|
|
109
|
-
let subscription = NamiPaywallManager.paywallEmitter.addListener(
|
|
110
|
-
NamiPaywallManagerEvents.PaywallSignInRequested,
|
|
111
|
-
() => {
|
|
112
|
-
callback();
|
|
113
|
-
},
|
|
114
|
-
);
|
|
115
|
-
RNNamiPaywallManager.registerSignInHandler();
|
|
116
|
-
|
|
117
|
-
return () => {
|
|
118
|
-
if (subscription) {
|
|
119
|
-
subscription.remove();
|
|
120
|
-
}
|
|
121
|
-
};
|
|
122
|
-
},
|
|
123
|
-
registerRestoreHandler(callback) {
|
|
124
|
-
let subscription = NamiPaywallManager.paywallEmitter.addListener(
|
|
125
|
-
NamiPaywallManagerEvents.PaywallRestoreRequested,
|
|
126
|
-
() => {
|
|
127
|
-
callback();
|
|
128
|
-
},
|
|
129
|
-
);
|
|
130
|
-
RNNamiPaywallManager.registerRestoreHandler();
|
|
131
|
-
return () => {
|
|
132
|
-
if (subscription) {
|
|
133
|
-
subscription.remove();
|
|
134
|
-
}
|
|
135
|
-
};
|
|
136
|
-
},
|
|
137
|
-
registerDeeplinkActionHandler: (callback: (url: string) => void) => {
|
|
138
|
-
let subscription = NamiPaywallManager.paywallEmitter.addListener(
|
|
139
|
-
NamiPaywallManagerEvents.PaywallDeeplinkAction,
|
|
140
|
-
url => {
|
|
141
|
-
callback(url);
|
|
142
|
-
},
|
|
60
|
+
|
|
61
|
+
registerSignInHandler: (callback: () => void): (() => void) => {
|
|
62
|
+
const sub = emitter.addListener(NamiPaywallManagerEvents.SignIn, callback);
|
|
63
|
+
RNNamiPaywallManager.registerSignInHandler?.();
|
|
64
|
+
return () => sub.remove();
|
|
65
|
+
},
|
|
66
|
+
|
|
67
|
+
registerRestoreHandler: (callback: () => void): (() => void) => {
|
|
68
|
+
const sub = emitter.addListener(NamiPaywallManagerEvents.Restore, callback);
|
|
69
|
+
RNNamiPaywallManager.registerRestoreHandler?.();
|
|
70
|
+
return () => sub.remove();
|
|
71
|
+
},
|
|
72
|
+
|
|
73
|
+
registerDeeplinkActionHandler: (
|
|
74
|
+
callback: (url: string) => void,
|
|
75
|
+
): (() => void) => {
|
|
76
|
+
const sub = emitter.addListener(
|
|
77
|
+
NamiPaywallManagerEvents.DeeplinkAction,
|
|
78
|
+
callback,
|
|
143
79
|
);
|
|
144
|
-
RNNamiPaywallManager.registerDeeplinkActionHandler();
|
|
145
|
-
return () =>
|
|
146
|
-
if (subscription) {
|
|
147
|
-
subscription.remove();
|
|
148
|
-
}
|
|
149
|
-
};
|
|
80
|
+
RNNamiPaywallManager.registerDeeplinkActionHandler?.();
|
|
81
|
+
return () => sub.remove();
|
|
150
82
|
},
|
|
151
|
-
|
|
152
|
-
|
|
83
|
+
|
|
84
|
+
dismiss: async (): Promise<boolean> => {
|
|
85
|
+
await RNNamiPaywallManager.dismiss();
|
|
86
|
+
return true;
|
|
153
87
|
},
|
|
154
|
-
|
|
88
|
+
|
|
89
|
+
show: (): void => {
|
|
155
90
|
RNNamiPaywallManager.show();
|
|
156
91
|
},
|
|
157
|
-
|
|
92
|
+
|
|
93
|
+
hide: (): void => {
|
|
158
94
|
RNNamiPaywallManager.hide();
|
|
159
95
|
},
|
|
160
|
-
|
|
96
|
+
|
|
97
|
+
isHidden: async (): Promise<boolean> => {
|
|
161
98
|
return RNNamiPaywallManager.isHidden();
|
|
162
99
|
},
|
|
163
|
-
|
|
100
|
+
|
|
101
|
+
isPaywallOpen: async (): Promise<boolean> => {
|
|
164
102
|
return RNNamiPaywallManager.isPaywallOpen();
|
|
165
103
|
},
|
|
166
|
-
|
|
104
|
+
|
|
105
|
+
buySkuCancel: (): void => {
|
|
106
|
+
RNNamiPaywallManager.buySkuCancel();
|
|
107
|
+
},
|
|
108
|
+
|
|
109
|
+
setProductDetails: (productDetails: string, allowOffers?: boolean): void => {
|
|
167
110
|
RNNamiPaywallManager.setProductDetails(productDetails, allowOffers);
|
|
168
111
|
},
|
|
169
|
-
|
|
112
|
+
|
|
113
|
+
setAppSuppliedVideoDetails: (url: string, name?: string): void => {
|
|
170
114
|
RNNamiPaywallManager.setAppSuppliedVideoDetails(url, name);
|
|
171
115
|
},
|
|
172
|
-
|
|
116
|
+
|
|
117
|
+
allowUserInteraction: (allowed: boolean): void => {
|
|
173
118
|
RNNamiPaywallManager.allowUserInteraction(allowed);
|
|
174
119
|
},
|
|
175
120
|
};
|