react-native-nami-sdk 3.2.11 → 3.3.0-beta.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.
@@ -210,10 +210,12 @@ jobs:
210
210
  pod install --repo-update
211
211
  working-directory: source/examples/Basic/ios
212
212
 
213
- # - name: Apply Patches
214
- # run: |
215
- # patch -p0 < *.patch
216
- # working-directory: source/examples/Basic/patches
213
+ - name: Add initial config
214
+ run: |
215
+ echo $INITIAL_CONFIG_APPLE_STG > nami_initial_config_apple_stg.json
216
+ working-directory: source/examples/Basic
217
+ env:
218
+ INITIAL_CONFIG_APPLE_STG: '${{ secrets.INITIAL_CONFIG_APPLE_STG }}'
217
219
 
218
220
  - name: Build resolve Swift dependencies
219
221
  run: |
@@ -106,7 +106,7 @@ class NamiBridgeModule(reactContext: ReactApplicationContext) :
106
106
  } else {
107
107
  Arguments.createArray()
108
108
  }
109
- val settingsList = mutableListOf("extendedClientInfo:react-native:3.2.11")
109
+ val settingsList = mutableListOf("extendedClientInfo:react-native:3.3.0-beta.2")
110
110
  namiCommandsReact?.toArrayList()?.filterIsInstance<String>()?.let { commandsFromReact ->
111
111
  settingsList.addAll(commandsFromReact)
112
112
  }
@@ -27,6 +27,7 @@ public class NamiBridgePackage implements ReactPackage {
27
27
  moduleList.add(new NamiManagerBridgeModule(reactContext));
28
28
  moduleList.add(new NamiCustomerManagerBridgeModule(reactContext));
29
29
  moduleList.add(new NamiCampaignManagerBridgeModule(reactContext));
30
+ moduleList.add(new NamiFlowManagerBridgeModule(reactContext));
30
31
 
31
32
  return moduleList;
32
33
  }
@@ -0,0 +1,36 @@
1
+ package com.nami.reactlibrary
2
+
3
+ import com.facebook.react.bridge.*
4
+ import com.facebook.react.modules.core.DeviceEventManagerModule
5
+ //import com.namiml.customer.NamiFlowManager
6
+
7
+ class NamiFlowManagerBridgeModule(reactContext: ReactApplicationContext) :
8
+ ReactContextBaseJavaModule(reactContext) {
9
+
10
+ override fun getName(): String {
11
+ return "RNNamiFlowManager"
12
+ }
13
+
14
+ @ReactMethod
15
+ fun registerStepHandoff() {
16
+ //NamiFlowManager.registerStepHandoff { handoffTag, handoffData ->
17
+ // val payload = Arguments.createMap().apply {
18
+ // putString("handoffTag", handoffTag)
19
+ // putString("handoffData", handoffData)
20
+ // }
21
+ //
22
+ // sendEvent("RegisterStepHandoff", payload)
23
+ //}
24
+ }
25
+
26
+ @ReactMethod
27
+ fun resume() {
28
+ //NamiFlowManager.resume()
29
+ }
30
+
31
+ private fun sendEvent(eventName: String, params: WritableMap?) {
32
+ reactApplicationContext
33
+ .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
34
+ .emit(eventName, params)
35
+ }
36
+ }
package/index.d.ts CHANGED
@@ -6,4 +6,5 @@ export { NamiEntitlementManager } from './src/NamiEntitlementManager';
6
6
  export { NamiManager } from './src/NamiManager';
7
7
  export { NamiPurchaseManager } from './src/NamiPurchaseManager';
8
8
  export { NamiPaywallManager } from './src/NamiPaywallManager';
9
+ export { NamiFlowManager } from './src/NamiFlowManager';
9
10
  export * from './src/types';
package/index.ts CHANGED
@@ -6,4 +6,5 @@ export { NamiEntitlementManager } from './src/NamiEntitlementManager';
6
6
  export { NamiManager } from './src/NamiManager';
7
7
  export { NamiPurchaseManager } from './src/NamiPurchaseManager';
8
8
  export { NamiPaywallManager } from './src/NamiPaywallManager';
9
+ export { NamiFlowManager } from './src/NamiFlowManager';
9
10
  export * from './src/types';
package/ios/Nami.m CHANGED
@@ -50,7 +50,7 @@ RCT_EXPORT_METHOD(configure: (NSDictionary *)configDict completion: (RCTResponse
50
50
  }
51
51
 
52
52
  // Start commands with header iformation for Nami to let them know this is a React client.
53
- NSMutableArray *namiCommandStrings = [NSMutableArray arrayWithArray:@[@"extendedClientInfo:react-native:3.2.11"]];
53
+ NSMutableArray *namiCommandStrings = [NSMutableArray arrayWithArray:@[@"extendedClientInfo:react-native:3.3.0-beta.2"]];
54
54
 
55
55
  // Add additional namiCommands app may have sent in.
56
56
  NSObject *appCommandStrings = configDict[@"namiCommands"];
@@ -266,7 +266,7 @@ class RNNamiCampaignManager: RCTEventEmitter {
266
266
  isCampaignAvailable = NamiCampaignManager.isCampaignAvailable(label: source)
267
267
  }
268
268
  } else {
269
- isCampaignAvailable = NamiCampaignManager.isCampaignAvailable()
269
+ isCampaignAvailable = false
270
270
  }
271
271
  resolve(isCampaignAvailable)
272
272
  }
@@ -0,0 +1,19 @@
1
+ //
2
+ // NamiFlowManagerBridge.m
3
+ // RNNami
4
+ //
5
+ // Copyright © 2025 Nami ML Inc.. All rights reserved.
6
+ //
7
+
8
+ #import <React/RCTBridgeModule.h>
9
+ #import <React/RCTEventEmitter.h>
10
+
11
+ @interface RCT_EXTERN_MODULE(RNNamiFlowManager, RCTEventEmitter)
12
+ RCT_EXTERN_METHOD(registerStepHandoff)
13
+ RCT_EXTERN_METHOD(resume)
14
+
15
+ + (BOOL)requiresMainQueueSetup {
16
+ return YES;
17
+ }
18
+
19
+ @end
@@ -0,0 +1,45 @@
1
+ //
2
+ // NamiFlowManagerBridge.swift
3
+ // RNNami
4
+ //
5
+ // Copyright © 2025 Nami ML Inc.. All rights reserved.
6
+ //
7
+
8
+ import Foundation
9
+ import NamiApple
10
+ import React
11
+
12
+ @objc(RNNamiFlowManager)
13
+ class RNNamiFlowManager: RCTEventEmitter {
14
+ public static var shared: RNNamiFlowManager?
15
+
16
+ override init() {
17
+ super.init()
18
+ RNNamiFlowManager.shared = self
19
+ }
20
+
21
+ override static func requiresMainQueueSetup() -> Bool {
22
+ return true
23
+ }
24
+
25
+ override func supportedEvents() -> [String]! {
26
+ return ["RegisterStepHandoff"]
27
+ }
28
+
29
+ @objc func registerStepHandoff() {
30
+ NamiFlowManager.registerStepHandoff { tag, data in
31
+ let payload: [String: Any] = [
32
+ "handoffTag": tag,
33
+ "handoffData": data ?? "",
34
+ ]
35
+ print("handoff native \(tag) \(data)")
36
+ RNNamiFlowManager.shared?.sendEvent(withName: "RegisterStepHandoff", body: payload)
37
+ }
38
+ }
39
+
40
+ @objc func resume() {
41
+ DispatchQueue.main.async {
42
+ NamiFlowManager.resume()
43
+ }
44
+ }
45
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-nami-sdk",
3
- "version": "3.2.11",
3
+ "version": "3.3.0-beta.2",
4
4
  "description": "React Native Module for Nami - Easy subscriptions & in-app purchases, with powerful built-in paywalls and A/B testing.",
5
5
  "main": "index.ts",
6
6
  "types": "index.d.ts",
@@ -20,7 +20,7 @@ Pod::Spec.new do |s|
20
20
  s.source_files = "ios/**/*.{h,m,swift}"
21
21
  s.requires_arc = true
22
22
 
23
- s.dependency 'Nami', '3.2.11'
23
+ s.dependency 'Nami', '3.3.0-beta.02'
24
24
  s.dependency 'React'
25
25
 
26
26
  end
@@ -0,0 +1,8 @@
1
+ export declare enum NamiFlowManagerEvents {
2
+ RegisterStepHandoff = "RegisterStepHandoff"
3
+ }
4
+ export interface INamiFlowManager {
5
+ registerStepHandoff: (callback: (handoffTag: string, handoffData?: string) => void) => () => void;
6
+ resume: () => void;
7
+ }
8
+ export declare const NamiFlowManager: INamiFlowManager;
@@ -0,0 +1,59 @@
1
+ import {
2
+ NativeModules,
3
+ NativeEventEmitter,
4
+ EmitterSubscription,
5
+ } from 'react-native';
6
+
7
+ const { RNNamiFlowManager } = NativeModules;
8
+
9
+ export enum NamiFlowManagerEvents {
10
+ RegisterStepHandoff = 'RegisterStepHandoff',
11
+ }
12
+
13
+ export interface INamiFlowManager {
14
+ registerStepHandoff: (
15
+ callback: (handoffTag: string, handoffData?: string) => void,
16
+ ) => () => void;
17
+ resume: () => void;
18
+ }
19
+
20
+ if (typeof RNNamiFlowManager?.addListener !== 'function') {
21
+ RNNamiFlowManager.addListener = () => {};
22
+ }
23
+ if (typeof RNNamiFlowManager?.removeListeners !== 'function') {
24
+ RNNamiFlowManager.removeListeners = () => {};
25
+ }
26
+
27
+ const flowEmitter = new NativeEventEmitter(RNNamiFlowManager);
28
+
29
+ export const NamiFlowManager: INamiFlowManager = {
30
+ registerStepHandoff: (callback) => {
31
+ console.log('[NamiFlowManager] Registering handoff listener...');
32
+
33
+ const subscription: EmitterSubscription = flowEmitter.addListener(
34
+ NamiFlowManagerEvents.RegisterStepHandoff,
35
+ (event: { handoffTag: string; handoffData?: string }) => {
36
+ console.log('[NamiFlowManager] Received handoff event:', event);
37
+ callback(event.handoffTag, event.handoffData);
38
+ }
39
+ );
40
+
41
+ if (RNNamiFlowManager?.registerStepHandoff) {
42
+ RNNamiFlowManager.registerStepHandoff();
43
+ } else {
44
+ console.warn('[NamiFlowManager] Native method registerStepHandoff is not available.');
45
+ }
46
+
47
+ return () => {
48
+ subscription.remove();
49
+ };
50
+ },
51
+
52
+ resume: () => {
53
+ if (RNNamiFlowManager?.resume) {
54
+ RNNamiFlowManager.resume();
55
+ } else {
56
+ console.warn('[NamiFlowManager] Native method resume is not available.');
57
+ }
58
+ },
59
+ };
package/src/types.d.ts CHANGED
@@ -56,17 +56,17 @@ export type NamiCampaign = {
56
56
  form_factors: NamiFormFactor[];
57
57
  external_segment: string | null;
58
58
  };
59
- type NamiFormFactor = {
60
- form_factor: string;
61
- supports_portrait?: boolean;
62
- supports_landscape?: boolean;
63
- }
64
59
  export declare enum NamiCampaignRuleType {
65
60
  DEFAULT = "default",
66
61
  LABEL = "label",
67
62
  UNKNOWN = "unknown",
68
63
  URL = "url"
69
64
  }
65
+ type NamiFormFactor = {
66
+ form_factor?: string;
67
+ supports_portrait?: boolean;
68
+ supports_landscape?: boolean;
69
+ };
70
70
  export declare enum LaunchCampaignError {
71
71
  DEFAULT_CAMPAIGN_NOT_FOUND = 0,
72
72
  LABELED_CAMPAIGN_NOT_FOUND = 1,
@@ -205,3 +205,4 @@ export type NamiPaywallEventVideoMetadata = {
205
205
  contentTimecode?: number;
206
206
  contentDuration?: number;
207
207
  };
208
+ export {};