react-native-nami-sdk 3.3.2-1 → 3.3.2-4

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.
@@ -85,8 +85,8 @@ dependencies {
85
85
  implementation fileTree(dir: 'libs', include: ['*.jar'])
86
86
  implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
87
87
 
88
- playImplementation "com.namiml:sdk-android:3.3.2.2"
89
- amazonImplementation "com.namiml:sdk-amazon:3.3.2.2"
88
+ playImplementation "com.namiml:sdk-android:3.3.2.3"
89
+ amazonImplementation "com.namiml:sdk-amazon:3.3.2.3"
90
90
 
91
91
  implementation "com.facebook.react:react-native:+" // From node_modules
92
92
  coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:2.0.4"
@@ -2,4 +2,4 @@
2
2
  * Auto-generated file. Do not edit manually.
3
3
  * React Native Nami SDK version.
4
4
  */
5
- export declare const NAMI_REACT_NATIVE_VERSION = "3.3.2-1";
5
+ export declare const NAMI_REACT_NATIVE_VERSION = "3.3.2-4";
package/ios/Nami.swift CHANGED
@@ -63,20 +63,37 @@ class RNNami: NSObject {
63
63
  config.initialConfig = initialConfig
64
64
  }
65
65
 
66
+ var didCallBack = false
66
67
  Nami.configure(with: config) { sdkConfigured in
67
- resolve(["success": sdkConfigured])
68
+ didCallBack = true
69
+ NSLog("RNNami: configure() completion called, sdkConfigured: \(sdkConfigured)")
70
+ DispatchQueue.main.async {
71
+ resolve(["success": sdkConfigured])
72
+ }
73
+ }
74
+
75
+ DispatchQueue.main.asyncAfter(deadline: .now() + 10) {
76
+ if !didCallBack {
77
+ NSLog("RNNami: configure() completion NEVER CALLED, reporting failure.")
78
+ resolve(["success": false])
79
+ }
68
80
  }
69
81
  }
70
82
 
71
83
  @objc
72
- func sdkConfigured(_ resolve: RCTPromiseResolveBlock, rejecter _: RCTPromiseRejectBlock) {
73
- resolve(Nami.sdkConfigured())
84
+ func sdkConfigured(_ resolve: @escaping RCTPromiseResolveBlock, rejecter _: RCTPromiseRejectBlock) {
85
+ let sdkConfigured = Nami.sdkConfigured()
86
+ DispatchQueue.main.async {
87
+ resolve(sdkConfigured)
88
+ }
74
89
  }
75
90
 
76
91
  @objc(sdkVersion:rejecter:)
77
92
  func sdkVersion(resolve: @escaping RCTPromiseResolveBlock, reject _: @escaping RCTPromiseRejectBlock) {
78
93
  let version = Nami.sdkVersion()
79
- resolve(version)
94
+ DispatchQueue.main.async {
95
+ resolve(version)
96
+ }
80
97
  }
81
98
 
82
99
  func isNewArchitectureEnabled() -> Bool {
@@ -6,8 +6,9 @@
6
6
  //
7
7
 
8
8
  #import <React/RCTBridgeModule.h>
9
+ #import <React/RCTEventEmitter.h>
9
10
 
10
- @interface RCT_EXTERN_MODULE(RNNamiCampaignManager, NSObject)
11
+ @interface RCT_EXTERN_MODULE(RNNamiCampaignManager, RCTEventEmitter)
11
12
 
12
13
  RCT_EXTERN_METHOD(launch:(nullable NSString *)label withUrl:(nullable NSString *)withUrl context:(nullable NSDictionary *)context completion:(RCTResponseSenderBlock)callback paywallCompletion:(RCTResponseSenderBlock)paywallCallback);
13
14
 
@@ -20,7 +21,7 @@ RCT_EXTERN_METHOD(refresh:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRe
20
21
  RCT_EXTERN_METHOD(registerAvailableCampaignsHandler)
21
22
 
22
23
  + (BOOL)requiresMainQueueSetup {
23
- return NO;
24
+ return YES;
24
25
  }
25
26
 
26
27
  @end
@@ -20,7 +20,20 @@ class RNNamiCampaignManager: RCTEventEmitter {
20
20
 
21
21
  override init() {
22
22
  super.init()
23
- RNNamiCampaignManager.shared = self
23
+ }
24
+
25
+ override class func requiresMainQueueSetup() -> Bool { true }
26
+
27
+ private var hasListeners = false
28
+ override func startObserving() { hasListeners = true }
29
+ override func stopObserving() { hasListeners = false }
30
+
31
+ private func safeSend(withName name: String, body: Any?) {
32
+ guard hasListeners else {
33
+ print("[RNNamiCampaignManager] Warning: no listeners, so event not being sent to JS.")
34
+ return
35
+ } // optional but avoids warnings
36
+ sendEvent(withName: name, body: body)
24
37
  }
25
38
 
26
39
  override func supportedEvents() -> [String]! {
@@ -138,9 +151,7 @@ class RNNamiCampaignManager: RCTEventEmitter {
138
151
  "timeSpentOnPaywall": paywallEvent.timeSpentOnPaywall,
139
152
  ]
140
153
 
141
- DispatchQueue.main.async {
142
- RNNamiCampaignManager.shared?.sendEvent(withName: "NamiPaywallEvent", body: payload)
143
- }
154
+ safeSend(withName: "NamiPaywallEvent", body: payload)
144
155
  }
145
156
 
146
157
  func handleLaunch(callback: RCTResponseSenderBlock?, success: Bool, error: Error?) {
@@ -294,9 +305,7 @@ class RNNamiCampaignManager: RCTEventEmitter {
294
305
  func registerForAvailableCampaigns() {
295
306
  NamiCampaignManager.registerAvailableCampaignsHandler { availableCampaigns in
296
307
  let dictionaries = availableCampaigns.map { campaign in self.campaignInToDictionary(campaign) }
297
- DispatchQueue.main.async {
298
- RNNamiCampaignManager.shared?.sendEvent(withName: "AvailableCampaignsChanged", body: dictionaries)
299
- }
308
+ self.safeSend(withName: "AvailableCampaignsChanged", body: dictionaries)
300
309
  }
301
310
  }
302
311
  }
@@ -6,8 +6,9 @@
6
6
  //
7
7
 
8
8
  #import <React/RCTBridgeModule.h>
9
+ #import <React/RCTEventEmitter.h>
9
10
 
10
- @interface RCT_EXTERN_MODULE(RNNamiCustomerManager, NSObject)
11
+ @interface RCT_EXTERN_MODULE(RNNamiCustomerManager, RCTEventEmitter)
11
12
 
12
13
  RCT_EXTERN_METHOD(setCustomerAttribute:(NSString *)key value:(NSString *)value)
13
14
 
@@ -43,7 +44,7 @@ RCT_EXTERN_METHOD(registerAccountStateHandler)
43
44
 
44
45
 
45
46
  + (BOOL)requiresMainQueueSetup {
46
- return NO;
47
+ return YES;
47
48
  }
48
49
 
49
50
  @end
@@ -19,7 +19,20 @@ class RNNamiCustomerManager: RCTEventEmitter {
19
19
 
20
20
  override init() {
21
21
  super.init()
22
- RNNamiCustomerManager.shared = self
22
+ }
23
+
24
+ override class func requiresMainQueueSetup() -> Bool { true }
25
+
26
+ private var hasListeners = false
27
+ override func startObserving() { hasListeners = true }
28
+ override func stopObserving() { hasListeners = false }
29
+
30
+ private func safeSend(withName name: String, body: Any?) {
31
+ guard hasListeners else {
32
+ print("[RNNamiCustomerManager] Warning: no listeners, so event not being sent to JS.")
33
+ return
34
+ } // optional but avoids warnings
35
+ sendEvent(withName: name, body: body)
23
36
  }
24
37
 
25
38
  override func supportedEvents() -> [String]! {
@@ -46,8 +59,10 @@ class RNNamiCustomerManager: RCTEventEmitter {
46
59
 
47
60
  @objc(getCustomerAttribute:resolver:rejecter:)
48
61
  func getCustomerAttribute(key: String, resolve: @escaping RCTPromiseResolveBlock, reject _: @escaping RCTPromiseRejectBlock) {
49
- let customerAttribute = NamiCustomerManager.getCustomerAttribute(key: key)
50
- resolve(customerAttribute)
62
+ DispatchQueue.main.async {
63
+ let customerAttribute = NamiCustomerManager.getCustomerAttribute(key: key)
64
+ resolve(customerAttribute)
65
+ }
51
66
  }
52
67
 
53
68
  @objc(clearCustomerAttribute:)
@@ -78,54 +93,68 @@ class RNNamiCustomerManager: RCTEventEmitter {
78
93
  @objc(inAnonymousMode:rejecter:)
79
94
  func inAnonymousMode(resolve: @escaping RCTPromiseResolveBlock, reject _: @escaping RCTPromiseRejectBlock) {
80
95
  let inAnonymousMode: Bool = NamiCustomerManager.inAnonymousMode()
81
- resolve(inAnonymousMode)
96
+ DispatchQueue.main.async {
97
+ resolve(inAnonymousMode)
98
+ }
82
99
  }
83
100
 
84
101
  @objc(journeyState:rejecter:)
85
102
  func journeyState(resolve: @escaping RCTPromiseResolveBlock, reject _: @escaping RCTPromiseRejectBlock) {
86
103
  if let journeyState = NamiCustomerManager.journeyState() {
87
104
  let dictionary = journeyStateToDictionary(journeyState)
88
- resolve(dictionary)
105
+ DispatchQueue.main.async {
106
+ resolve(dictionary)
107
+ }
89
108
  } else {
90
- resolve(nil)
109
+ DispatchQueue.main.async {
110
+ resolve(nil)
111
+ }
91
112
  }
92
113
  }
93
114
 
94
115
  @objc(isLoggedIn:rejecter:)
95
116
  func isLoggedIn(resolve: @escaping RCTPromiseResolveBlock, reject _: @escaping RCTPromiseRejectBlock) {
96
117
  let isLoggedIn = NamiCustomerManager.isLoggedIn()
97
- resolve(isLoggedIn)
118
+ DispatchQueue.main.async {
119
+ resolve(isLoggedIn)
120
+ }
98
121
  }
99
122
 
100
123
  @objc(loggedInId:rejecter:)
101
124
  func loggedInId(resolve: @escaping RCTPromiseResolveBlock, reject _: @escaping RCTPromiseRejectBlock) {
102
125
  let id = NamiCustomerManager.loggedInId()
103
- resolve(id)
126
+ DispatchQueue.main.async {
127
+ resolve(id)
128
+ }
104
129
  }
105
130
 
106
131
  @objc(deviceId:rejecter:)
107
132
  func deviceId(resolve: @escaping RCTPromiseResolveBlock, reject _: @escaping RCTPromiseRejectBlock) {
108
133
  let id = NamiCustomerManager.deviceId()
109
- resolve(id)
134
+ DispatchQueue.main.async {
135
+ resolve(id)
136
+ }
110
137
  }
111
138
 
112
139
  @objc(login:)
113
140
  func login(customerId: String) {
114
- NamiCustomerManager.login(withId: customerId)
141
+ DispatchQueue.main.async {
142
+ NamiCustomerManager.login(withId: customerId)
143
+ }
115
144
  }
116
145
 
117
146
  @objc(logout)
118
147
  func logout() {
119
- NamiCustomerManager.logout()
148
+ DispatchQueue.main.async {
149
+ NamiCustomerManager.logout()
150
+ }
120
151
  }
121
152
 
122
153
  @objc(registerJourneyStateHandler)
123
154
  func registerJourneyStateHandler() {
124
155
  NamiCustomerManager.registerJourneyStateHandler { journeyState in
125
156
  let dictionary = self.journeyStateToDictionary(journeyState)
126
- DispatchQueue.main.async {
127
- RNNamiCustomerManager.shared?.sendEvent(withName: "JourneyStateChanged", body: dictionary)
128
- }
157
+ self.safeSend(withName: "JourneyStateChanged", body: dictionary)
129
158
  }
130
159
  }
131
160
 
@@ -166,9 +195,7 @@ class RNNamiCustomerManager: RCTEventEmitter {
166
195
  "success": success,
167
196
  "error": error?._code as Any,
168
197
  ]
169
- DispatchQueue.main.async {
170
- RNNamiCustomerManager.shared?.sendEvent(withName: "AccountStateChanged", body: payload)
171
- }
198
+ self.safeSend(withName: "AccountStateChanged", body: payload)
172
199
  }
173
200
  }
174
201
  }
@@ -6,8 +6,9 @@
6
6
  //
7
7
 
8
8
  #import <React/RCTBridgeModule.h>
9
+ #import <React/RCTEventEmitter.h>
9
10
 
10
- @interface RCT_EXTERN_MODULE(RNNamiEntitlementManager, NSObject)
11
+ @interface RCT_EXTERN_MODULE(RNNamiEntitlementManager, RCTEventEmitter)
11
12
 
12
13
  RCT_EXTERN_METHOD(isEntitlementActive:(nullable NSString *)referenceId resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
13
14
 
@@ -20,7 +21,7 @@ RCT_EXTERN_METHOD(registerActiveEntitlementsHandler)
20
21
  RCT_EXTERN_METHOD(clearProvisionalEntitlementGrants)
21
22
 
22
23
  + (BOOL)requiresMainQueueSetup {
23
- return NO;
24
+ return YES;
24
25
  }
25
26
 
26
27
  @end
@@ -22,8 +22,18 @@ class RNNamiEntitlementManager: RCTEventEmitter {
22
22
  RNNamiEntitlementManager.shared = self
23
23
  }
24
24
 
25
- override static func requiresMainQueueSetup() -> Bool {
26
- return false
25
+ override class func requiresMainQueueSetup() -> Bool { true }
26
+
27
+ private var hasListeners = false
28
+ override func startObserving() { hasListeners = true }
29
+ override func stopObserving() { hasListeners = false }
30
+
31
+ private func safeSend(withName name: String, body: Any?) {
32
+ guard hasListeners else {
33
+ print("[RNNamiEntitlementManager] Warning: no listeners, so event not being sent to JS.")
34
+ return
35
+ }
36
+ sendEvent(withName: name, body: body)
27
37
  }
28
38
 
29
39
  override func supportedEvents() -> [String]! {
@@ -74,9 +84,7 @@ class RNNamiEntitlementManager: RCTEventEmitter {
74
84
  func refresh() {
75
85
  NamiEntitlementManager.refresh { entitlements in
76
86
  let dicts = entitlements.map { self.entitlementToDictionary($0) }
77
- DispatchQueue.main.async {
78
- RNNamiEntitlementManager.shared?.sendEvent(withName: "EntitlementsChanged", body: dicts)
79
- }
87
+ self.safeSend(withName: "EntitlementsChanged", body: dicts)
80
88
  }
81
89
  }
82
90
 
@@ -84,9 +92,7 @@ class RNNamiEntitlementManager: RCTEventEmitter {
84
92
  func registerActiveEntitlementsHandler() {
85
93
  NamiEntitlementManager.registerActiveEntitlementsHandler { entitlements in
86
94
  let dicts = entitlements.map { self.entitlementToDictionary($0) }
87
- DispatchQueue.main.async {
88
- RNNamiEntitlementManager.shared?.sendEvent(withName: "EntitlementsChanged", body: dicts)
89
- }
95
+ self.safeSend(withName: "EntitlementsChanged", body: dicts)
90
96
  }
91
97
  }
92
98
 
@@ -17,7 +17,7 @@ RCT_EXTERN_METHOD(finish)
17
17
  RCT_EXTERN_METHOD(isFlowOpen:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
18
18
 
19
19
  + (BOOL)requiresMainQueueSetup {
20
- return NO;
20
+ return YES;
21
21
  }
22
22
 
23
23
  @end
@@ -19,11 +19,20 @@ class RNNamiFlowManager: RCTEventEmitter {
19
19
 
20
20
  override init() {
21
21
  super.init()
22
- RNNamiFlowManager.shared = self
23
22
  }
24
23
 
25
- override static func requiresMainQueueSetup() -> Bool {
26
- return false
24
+ override class func requiresMainQueueSetup() -> Bool { true }
25
+
26
+ private var hasListeners = false
27
+ override func startObserving() { hasListeners = true }
28
+ override func stopObserving() { hasListeners = false }
29
+
30
+ private func safeSend(withName name: String, body: Any?) {
31
+ guard hasListeners else {
32
+ print("[RNNamiFlowManager] Warning: no listeners, so event not being sent to JS.")
33
+ return
34
+ }
35
+ sendEvent(withName: name, body: body)
27
36
  }
28
37
 
29
38
  override func supportedEvents() -> [String]! {
@@ -39,36 +48,26 @@ class RNNamiFlowManager: RCTEventEmitter {
39
48
  payload["handoffData"] = data
40
49
  }
41
50
 
42
- DispatchQueue.main.async {
43
- RNNamiFlowManager.shared?.sendEvent(withName: "Handoff", body: payload)
44
- }
51
+ self.safeSend(withName: "Handoff", body: payload)
45
52
  }
46
53
  }
47
54
 
48
55
  @objc func registerEventHandler() {
49
56
  NamiFlowManager.registerEventHandler { payload in
50
- DispatchQueue.main.async {
51
- RNNamiFlowManager.shared?.sendEvent(withName: "FlowEvent", body: payload)
52
- }
57
+ self.safeSend(withName: "FlowEvent", body: payload)
53
58
  }
54
59
  }
55
60
 
56
61
  @objc func resume() {
57
- DispatchQueue.main.async {
58
- NamiFlowManager.resume()
59
- }
62
+ NamiFlowManager.resume()
60
63
  }
61
64
 
62
65
  @objc func pause() {
63
- DispatchQueue.main.async {
64
- NamiFlowManager.pause()
65
- }
66
+ NamiFlowManager.pause()
66
67
  }
67
68
 
68
69
  @objc func finish() {
69
- DispatchQueue.main.async {
70
- NamiFlowManager.finish()
71
- }
70
+ NamiFlowManager.finish()
72
71
  }
73
72
 
74
73
  @objc func isFlowOpen(_ resolve: @escaping RCTPromiseResolveBlock, rejecter _: @escaping RCTPromiseRejectBlock) {
@@ -13,7 +13,7 @@
13
13
 
14
14
  #import "React/RCTViewManager.h"
15
15
 
16
- @interface RCT_EXTERN_MODULE(RNNamiPaywallManager, NSObject)
16
+ @interface RCT_EXTERN_MODULE(RNNamiPaywallManager, RCTEventEmitter)
17
17
 
18
18
  RCT_EXTERN_METHOD(buySkuComplete:(NSDictionary)dict)
19
19
 
@@ -46,7 +46,7 @@ RCT_EXTERN_METHOD(setAppSuppliedVideoDetails:(NSString *)url name:(nullable NSSt
46
46
  RCT_EXTERN_METHOD(allowUserInteraction:(BOOL *)allowed)
47
47
 
48
48
  + (BOOL)requiresMainQueueSetup {
49
- return NO;
49
+ return YES;
50
50
  }
51
51
 
52
52
  @end
@@ -19,7 +19,20 @@ class RNNamiPaywallManager: RCTEventEmitter {
19
19
 
20
20
  override init() {
21
21
  super.init()
22
- RNNamiPaywallManager.shared = self
22
+ }
23
+
24
+ override class func requiresMainQueueSetup() -> Bool { true }
25
+
26
+ private var hasListeners = false
27
+ override func startObserving() { hasListeners = true }
28
+ override func stopObserving() { hasListeners = false }
29
+
30
+ private func safeSend(withName name: String, body: Any?) {
31
+ guard hasListeners else {
32
+ print("[RNNamiPaywallManager] Warning: no listeners, so event not being sent to JS.")
33
+ return
34
+ } // optional but avoids warnings
35
+ sendEvent(withName: name, body: body)
23
36
  }
24
37
 
25
38
  override func supportedEvents() -> [String]! {
@@ -80,9 +93,7 @@ class RNNamiPaywallManager: RCTEventEmitter {
80
93
  func registerBuySkuHandler() {
81
94
  NamiPaywallManager.registerBuySkuHandler { sku in
82
95
  let dictionary = RNNamiPurchaseManager.skuToSKUDict(sku)
83
- DispatchQueue.main.async {
84
- RNNamiPaywallManager.shared?.sendEvent(withName: "RegisterBuySKU", body: dictionary)
85
- }
96
+ self.safeSend(withName: "RegisterBuySKU", body: dictionary)
86
97
  }
87
98
  }
88
99
 
@@ -90,9 +101,7 @@ class RNNamiPaywallManager: RCTEventEmitter {
90
101
  func registerCloseHandler() {
91
102
  NamiPaywallManager.registerCloseHandler { _ in
92
103
  let dictionary = NSDictionary(dictionary: ["PaywallCloseRequested": true].compactMapValues { $0 })
93
- DispatchQueue.main.async {
94
- RNNamiPaywallManager.shared?.sendEvent(withName: "PaywallCloseRequested", body: dictionary)
95
- }
104
+ self.safeSend(withName: "PaywallCloseRequested", body: dictionary)
96
105
  }
97
106
  }
98
107
 
@@ -100,9 +109,7 @@ class RNNamiPaywallManager: RCTEventEmitter {
100
109
  func registerSignInHandler() {
101
110
  NamiPaywallManager.registerSignInHandler { _ in
102
111
  let dictionary = NSDictionary(dictionary: ["PaywallSignInRequested": true].compactMapValues { $0 })
103
- DispatchQueue.main.async {
104
- RNNamiPaywallManager.shared?.sendEvent(withName: "PaywallSignInRequested", body: dictionary)
105
- }
112
+ self.safeSend(withName: "PaywallSignInRequested", body: dictionary)
106
113
  }
107
114
  }
108
115
 
@@ -110,18 +117,14 @@ class RNNamiPaywallManager: RCTEventEmitter {
110
117
  func registerRestoreHandler() {
111
118
  NamiPaywallManager.registerRestoreHandler {
112
119
  let dictionary = NSDictionary(dictionary: ["PaywallRestoreRequested": true].compactMapValues { $0 })
113
- DispatchQueue.main.async {
114
- RNNamiPaywallManager.shared?.sendEvent(withName: "PaywallRestoreRequested", body: dictionary)
115
- }
120
+ self.safeSend(withName: "PaywallRestoreRequested", body: dictionary)
116
121
  }
117
122
  }
118
123
 
119
124
  @objc(registerDeeplinkActionHandler)
120
125
  func registerDeeplinkActionHandler() {
121
126
  NamiPaywallManager.registerDeeplinkActionHandler { url in
122
- DispatchQueue.main.async {
123
- RNNamiPaywallManager.shared?.sendEvent(withName: "PaywallDeeplinkAction", body: url)
124
- }
127
+ self.safeSend(withName: "PaywallDeeplinkAction", body: url)
125
128
  }
126
129
  }
127
130
 
@@ -13,7 +13,7 @@
13
13
 
14
14
  #import "React/RCTViewManager.h"
15
15
 
16
- @interface RCT_EXTERN_MODULE(RNNamiPurchaseManager, NSObject)
16
+ @interface RCT_EXTERN_MODULE(RNNamiPurchaseManager, RCTEventEmitter)
17
17
 
18
18
  RCT_EXTERN_METHOD(allPurchases:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
19
19
 
@@ -30,7 +30,7 @@ RCT_EXTERN_METHOD(presentCodeRedemptionSheet)
30
30
  RCT_EXTERN_METHOD(restorePurchases)
31
31
 
32
32
  + (BOOL)requiresMainQueueSetup {
33
- return NO;
33
+ return YES;
34
34
  }
35
35
 
36
36
  @end
@@ -19,7 +19,20 @@ class RNNamiPurchaseManager: RCTEventEmitter {
19
19
 
20
20
  override init() {
21
21
  super.init()
22
- RNNamiPurchaseManager.shared = self
22
+ }
23
+
24
+ override class func requiresMainQueueSetup() -> Bool { true }
25
+
26
+ private var hasListeners = false
27
+ override func startObserving() { hasListeners = true }
28
+ override func stopObserving() { hasListeners = false }
29
+
30
+ private func safeSend(withName name: String, body: Any?) {
31
+ guard hasListeners else {
32
+ print("[RNNamiPurchaseManager] Warning: no listeners, so event not being sent to JS.")
33
+ return
34
+ }
35
+ sendEvent(withName: name, body: body)
23
36
  }
24
37
 
25
38
  override func supportedEvents() -> [String]! {
@@ -158,7 +171,7 @@ class RNNamiPurchaseManager: RCTEventEmitter {
158
171
  "purchaseState": stateString,
159
172
  "error": error?.localizedDescription,
160
173
  ]
161
- self.sendEvent(withName: "PurchasesChanged", body: payload)
174
+ self.safeSend(withName: "PurchasesChanged", body: payload)
162
175
  }
163
176
  }
164
177
 
@@ -187,7 +200,7 @@ class RNNamiPurchaseManager: RCTEventEmitter {
187
200
  "newPurchases": newPurchasesDictionaries,
188
201
  "oldPurchases": oldPurchasesDictionaries,
189
202
  ]
190
- RNNamiPurchaseManager.shared?.sendEvent(withName: "RestorePurchasesStateChanged", body: payload)
203
+ self.safeSend(withName: "RestorePurchasesStateChanged", body: payload)
191
204
  }
192
205
  }
193
206
 
@@ -216,7 +229,7 @@ class RNNamiPurchaseManager: RCTEventEmitter {
216
229
  "newPurchases": newPurchasesDictionaries,
217
230
  "oldPurchases": oldPurchasesDictionaries,
218
231
  ]
219
- RNNamiPurchaseManager.shared?.sendEvent(withName: "RestorePurchasesStateChanged", body: payload)
232
+ self.safeSend(withName: "RestorePurchasesStateChanged", body: payload)
220
233
  }
221
234
  }
222
235
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-nami-sdk",
3
- "version": "3.3.2-1",
3
+ "version": "3.3.2-4",
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": "dist/index.d.ts",
@@ -21,7 +21,7 @@ Pod::Spec.new do |s|
21
21
  s.requires_arc = true
22
22
  s.swift_version = '5.0' # or your supported version
23
23
 
24
- s.dependency 'Nami', '3.3.2.3'
24
+ s.dependency 'Nami', '3.3.2.10'
25
25
  s.dependency 'React'
26
26
 
27
27
  s.pod_target_xcconfig = {
package/src/version.ts CHANGED
@@ -2,4 +2,4 @@
2
2
  * Auto-generated file. Do not edit manually.
3
3
  * React Native Nami SDK version.
4
4
  */
5
- export const NAMI_REACT_NATIVE_VERSION = '3.3.2-1';
5
+ export const NAMI_REACT_NATIVE_VERSION = '3.3.2-4';