react-native-nami-sdk 2.0.4 → 3.0.8

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 (59) hide show
  1. package/.github/workflows/app_stg.yaml +203 -0
  2. package/.github/workflows/build.yml +2 -2
  3. package/.pre-commit-config.yaml +25 -0
  4. package/android/build.gradle +24 -13
  5. package/android/gradle/wrapper/gradle-wrapper.properties +5 -1
  6. package/android/src/main/java/com/nami/reactlibrary/Constants.kt +1 -1
  7. package/android/src/main/java/com/nami/reactlibrary/NamiBridgeModule.kt +6 -50
  8. package/android/src/main/java/com/nami/reactlibrary/NamiBridgePackage.java +1 -3
  9. package/android/src/main/java/com/nami/reactlibrary/NamiCampaignManagerBridge.kt +133 -0
  10. package/android/src/main/java/com/nami/reactlibrary/NamiCustomerManagerBridge.kt +89 -20
  11. package/android/src/main/java/com/nami/reactlibrary/NamiEmitter.kt +25 -25
  12. package/android/src/main/java/com/nami/reactlibrary/NamiEntitlementManagerBridgeModule.kt +31 -130
  13. package/android/src/main/java/com/nami/reactlibrary/NamiMLManagerBridgeModule.kt +1 -1
  14. package/android/src/main/java/com/nami/reactlibrary/NamiPaywallManagerBridgeModule.kt +36 -147
  15. package/android/src/main/java/com/nami/reactlibrary/NamiPurchaseManagerBridge.kt +37 -39
  16. package/android/src/main/java/com/nami/reactlibrary/NamiUtil.kt +50 -180
  17. package/build-utils/get_version_code.py +140 -0
  18. package/index.d.ts +20 -0
  19. package/index.js +7 -6
  20. package/ios/Nami.m +18 -72
  21. package/ios/NamiBridgeUtil.h +4 -6
  22. package/ios/NamiBridgeUtil.m +37 -99
  23. package/ios/NamiCampaignManagerBridge.m +26 -0
  24. package/ios/NamiCampaignManagerBridge.swift +107 -0
  25. package/ios/NamiCustomerManager.m +19 -24
  26. package/ios/NamiCustomerManager.swift +122 -0
  27. package/ios/NamiEmitter.m +85 -95
  28. package/ios/NamiEntitlementManagerBridge.m +7 -107
  29. package/ios/NamiEntitlementManagerBridge.swift +74 -0
  30. package/ios/NamiMLManagerBridge.m +2 -2
  31. package/ios/NamiPaywallManagerBridge.m +22 -94
  32. package/ios/NamiPaywallManagerBridge.swift +93 -0
  33. package/ios/NamiPurchaseManagerBridge.m +40 -71
  34. package/ios/NamiPurchaseManagerBridge.swift +174 -0
  35. package/ios/Podfile +2 -2
  36. package/ios/RNNami-Bridging-Header.h +5 -0
  37. package/ios/RNNami.h +0 -1
  38. package/ios/RNNami.m +1 -1
  39. package/ios/RNNami.xcodeproj/project.pbxproj +84 -8
  40. package/ios/RNNami.xcodeproj/xcshareddata/xcschemes/RNNami.xcscheme +67 -0
  41. package/package.json +1 -1
  42. package/react-native-nami-sdk.podspec +3 -3
  43. package/src/Nami.d.ts +112 -0
  44. package/src/Nami.js +10 -0
  45. package/src/NamiCampaignManager.d.ts +54 -0
  46. package/src/NamiCampaignManager.js +43 -0
  47. package/src/NamiCustomerManager.d.ts +39 -0
  48. package/src/NamiCustomerManager.js +43 -0
  49. package/src/NamiEntitlementManager.d.ts +24 -0
  50. package/src/NamiEntitlementManager.js +23 -0
  51. package/src/NamiMLManager.d.ts +5 -0
  52. package/src/NamiMLManager.js +7 -0
  53. package/src/NamiPaywallManager.d.ts +57 -0
  54. package/src/NamiPaywallManager.js +28 -0
  55. package/src/NamiPurchaseManager.d.ts +57 -0
  56. package/src/NamiPurchaseManager.js +37 -0
  57. package/src/types.ts +36 -0
  58. package/android/src/main/java/com/nami/reactlibrary/NamiAnalyticsEmitter.kt +0 -121
  59. package/ios/NamiAnalyticsEmitter.m +0 -146
@@ -18,6 +18,12 @@
18
18
  EBC59E6023C7E2EC008A123A /* NamiAnalyticsEmitter.m in Sources */ = {isa = PBXBuildFile; fileRef = EBC59E5F23C7E2EC008A123A /* NamiAnalyticsEmitter.m */; };
19
19
  EBC59E6323C7F634008A123A /* NamiBridgeUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = EBC59E6223C7F634008A123A /* NamiBridgeUtil.m */; };
20
20
  EBEEAC10243C29C800E01389 /* NamiMLManagerBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = EBEEAC0F243C29C800E01389 /* NamiMLManagerBridge.m */; };
21
+ FA3AB38529E009F300FD2E8D /* NamiPaywallManagerBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA3AB38429E009F300FD2E8D /* NamiPaywallManagerBridge.swift */; };
22
+ FA4CEE3D29DEE01600058372 /* NamiPurchaseManagerBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4CEE3C29DEE01600058372 /* NamiPurchaseManagerBridge.swift */; };
23
+ FA86299F29DDA881000090C6 /* NamiEntitlementManagerBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA86299E29DDA881000090C6 /* NamiEntitlementManagerBridge.swift */; };
24
+ FAADDB4F29D376590096591A /* NamiCampaignManagerBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAADDB4D29D376590096591A /* NamiCampaignManagerBridge.swift */; };
25
+ FAADDB5229D377560096591A /* NamiCampaignManagerBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = FAADDB5129D377560096591A /* NamiCampaignManagerBridge.m */; };
26
+ FAD132F729D6BD5E001059A2 /* NamiCustomerManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD132F629D6BD5E001059A2 /* NamiCustomerManager.swift */; };
21
27
  /* End PBXBuildFile section */
22
28
 
23
29
  /* Begin PBXCopyFilesBuildPhase section */
@@ -49,6 +55,13 @@
49
55
  EBC59E6223C7F634008A123A /* NamiBridgeUtil.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NamiBridgeUtil.m; sourceTree = "<group>"; };
50
56
  EBC59E6423C7F7A0008A123A /* NamiBridgeUtil.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NamiBridgeUtil.h; sourceTree = "<group>"; };
51
57
  EBEEAC0F243C29C800E01389 /* NamiMLManagerBridge.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NamiMLManagerBridge.m; sourceTree = "<group>"; };
58
+ FA02430629D2EAE00018CA56 /* RNNami-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RNNami-Bridging-Header.h"; sourceTree = "<group>"; };
59
+ FA3AB38429E009F300FD2E8D /* NamiPaywallManagerBridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NamiPaywallManagerBridge.swift; sourceTree = "<group>"; };
60
+ FA4CEE3C29DEE01600058372 /* NamiPurchaseManagerBridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NamiPurchaseManagerBridge.swift; sourceTree = "<group>"; };
61
+ FA86299E29DDA881000090C6 /* NamiEntitlementManagerBridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NamiEntitlementManagerBridge.swift; sourceTree = "<group>"; };
62
+ FAADDB4D29D376590096591A /* NamiCampaignManagerBridge.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NamiCampaignManagerBridge.swift; sourceTree = "<group>"; };
63
+ FAADDB5129D377560096591A /* NamiCampaignManagerBridge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NamiCampaignManagerBridge.m; sourceTree = "<group>"; };
64
+ FAD132F629D6BD5E001059A2 /* NamiCustomerManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NamiCustomerManager.swift; sourceTree = "<group>"; };
52
65
  /* End PBXFileReference section */
53
66
 
54
67
  /* Begin PBXFrameworksBuildPhase section */
@@ -74,6 +87,12 @@
74
87
  58B511D21A9E6C8500147676 = {
75
88
  isa = PBXGroup;
76
89
  children = (
90
+ FA3AB38329E009D200FD2E8D /* NamiPaywallManager */,
91
+ FA4CEE3E29DEE01E00058372 /* NamiPurchaseManager */,
92
+ FA8629A029DDA8A5000090C6 /* NamiEntitlementManager */,
93
+ FADE7CFB29DD9875000BF262 /* NamiCustomerManager */,
94
+ FADE7CFA29DD984E000BF262 /* NamiCampaignManager */,
95
+ FA02430629D2EAE00018CA56 /* RNNami-Bridging-Header.h */,
77
96
  EBC59E6423C7F7A0008A123A /* NamiBridgeUtil.h */,
78
97
  EBC59E6223C7F634008A123A /* NamiBridgeUtil.m */,
79
98
  B3E7B5881CC2AC0600A0062D /* RNNami.h */,
@@ -81,11 +100,7 @@
81
100
  EBC59E5C23C5514B008A123A /* Nami.m */,
82
101
  EB1C9AFA23BE9C5700CAD548 /* NamiEmitter.m */,
83
102
  EBC59E5F23C7E2EC008A123A /* NamiAnalyticsEmitter.m */,
84
- EB1C9AF923BE9C5600CAD548 /* NamiPaywallManagerBridge.m */,
85
- EB75992024F031E900430D98 /* NamiCustomerManager.m */,
86
- EB1C9AF823BE9C5600CAD548 /* NamiPurchaseManagerBridge.m */,
87
103
  EBEEAC0F243C29C800E01389 /* NamiMLManagerBridge.m */,
88
- EB7B50CD243E314900EBA6B7 /* NamiEntitlementManagerBridge.m */,
89
104
  134814211AA4EA7D00B7C361 /* Products */,
90
105
  82475599A9F3B58440ACDC6E /* Frameworks */,
91
106
  A17A44E9FF56BDEADE788165 /* Pods */,
@@ -109,6 +124,51 @@
109
124
  path = Pods;
110
125
  sourceTree = "<group>";
111
126
  };
127
+ FA3AB38329E009D200FD2E8D /* NamiPaywallManager */ = {
128
+ isa = PBXGroup;
129
+ children = (
130
+ EB1C9AF923BE9C5600CAD548 /* NamiPaywallManagerBridge.m */,
131
+ FA3AB38429E009F300FD2E8D /* NamiPaywallManagerBridge.swift */,
132
+ );
133
+ name = NamiPaywallManager;
134
+ sourceTree = "<group>";
135
+ };
136
+ FA4CEE3E29DEE01E00058372 /* NamiPurchaseManager */ = {
137
+ isa = PBXGroup;
138
+ children = (
139
+ FA4CEE3C29DEE01600058372 /* NamiPurchaseManagerBridge.swift */,
140
+ EB1C9AF823BE9C5600CAD548 /* NamiPurchaseManagerBridge.m */,
141
+ );
142
+ name = NamiPurchaseManager;
143
+ sourceTree = "<group>";
144
+ };
145
+ FA8629A029DDA8A5000090C6 /* NamiEntitlementManager */ = {
146
+ isa = PBXGroup;
147
+ children = (
148
+ FA86299E29DDA881000090C6 /* NamiEntitlementManagerBridge.swift */,
149
+ EB7B50CD243E314900EBA6B7 /* NamiEntitlementManagerBridge.m */,
150
+ );
151
+ name = NamiEntitlementManager;
152
+ sourceTree = "<group>";
153
+ };
154
+ FADE7CFA29DD984E000BF262 /* NamiCampaignManager */ = {
155
+ isa = PBXGroup;
156
+ children = (
157
+ FAADDB5129D377560096591A /* NamiCampaignManagerBridge.m */,
158
+ FAADDB4D29D376590096591A /* NamiCampaignManagerBridge.swift */,
159
+ );
160
+ name = NamiCampaignManager;
161
+ sourceTree = "<group>";
162
+ };
163
+ FADE7CFB29DD9875000BF262 /* NamiCustomerManager */ = {
164
+ isa = PBXGroup;
165
+ children = (
166
+ FAD132F629D6BD5E001059A2 /* NamiCustomerManager.swift */,
167
+ EB75992024F031E900430D98 /* NamiCustomerManager.m */,
168
+ );
169
+ name = NamiCustomerManager;
170
+ sourceTree = "<group>";
171
+ };
112
172
  /* End PBXGroup section */
113
173
 
114
174
  /* Begin PBXNativeTarget section */
@@ -141,6 +201,7 @@
141
201
  TargetAttributes = {
142
202
  58B511DA1A9E6C8500147676 = {
143
203
  CreatedOnToolsVersion = 6.1.1;
204
+ LastSwiftMigration = 1420;
144
205
  };
145
206
  };
146
207
  };
@@ -192,12 +253,18 @@
192
253
  isa = PBXSourcesBuildPhase;
193
254
  buildActionMask = 2147483647;
194
255
  files = (
256
+ FA3AB38529E009F300FD2E8D /* NamiPaywallManagerBridge.swift in Sources */,
195
257
  EBC59E6023C7E2EC008A123A /* NamiAnalyticsEmitter.m in Sources */,
196
258
  EBC59E5D23C5514B008A123A /* Nami.m in Sources */,
197
259
  EB1C9AFB23BE9C5700CAD548 /* NamiPurchaseManagerBridge.m in Sources */,
198
260
  EB1C9AFC23BE9C5700CAD548 /* NamiPaywallManagerBridge.m in Sources */,
199
261
  EBC59E6323C7F634008A123A /* NamiBridgeUtil.m in Sources */,
262
+ FA4CEE3D29DEE01600058372 /* NamiPurchaseManagerBridge.swift in Sources */,
263
+ FA86299F29DDA881000090C6 /* NamiEntitlementManagerBridge.swift in Sources */,
264
+ FAD132F729D6BD5E001059A2 /* NamiCustomerManager.swift in Sources */,
200
265
  B3E7B58A1CC2AC0600A0062D /* RNNami.m in Sources */,
266
+ FAADDB4F29D376590096591A /* NamiCampaignManagerBridge.swift in Sources */,
267
+ FAADDB5229D377560096591A /* NamiCampaignManagerBridge.m in Sources */,
201
268
  EB75992124F031E900430D98 /* NamiCustomerManager.m in Sources */,
202
269
  EB7B50CE243E314900EBA6B7 /* NamiEntitlementManagerBridge.m in Sources */,
203
270
  EBEEAC10243C29C800E01389 /* NamiMLManagerBridge.m in Sources */,
@@ -230,7 +297,7 @@
230
297
  COPY_PHASE_STRIP = NO;
231
298
  ENABLE_STRICT_OBJC_MSGSEND = YES;
232
299
  ENABLE_TESTABILITY = YES;
233
- "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "arm64 ";
300
+ "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
234
301
  GCC_C_LANGUAGE_STANDARD = gnu99;
235
302
  GCC_DYNAMIC_NO_PIC = NO;
236
303
  GCC_NO_COMMON_BLOCKS = YES;
@@ -246,7 +313,7 @@
246
313
  GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
247
314
  GCC_WARN_UNUSED_FUNCTION = YES;
248
315
  GCC_WARN_UNUSED_VARIABLE = YES;
249
- IPHONEOS_DEPLOYMENT_TARGET = 11.2;
316
+ IPHONEOS_DEPLOYMENT_TARGET = 14.0;
250
317
  MTL_ENABLE_DEBUG_INFO = YES;
251
318
  ONLY_ACTIVE_ARCH = YES;
252
319
  SDKROOT = iphoneos;
@@ -275,7 +342,7 @@
275
342
  COPY_PHASE_STRIP = YES;
276
343
  ENABLE_NS_ASSERTIONS = NO;
277
344
  ENABLE_STRICT_OBJC_MSGSEND = YES;
278
- "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "arm64 ";
345
+ "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
279
346
  GCC_C_LANGUAGE_STANDARD = gnu99;
280
347
  GCC_NO_COMMON_BLOCKS = YES;
281
348
  GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
@@ -284,7 +351,7 @@
284
351
  GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
285
352
  GCC_WARN_UNUSED_FUNCTION = YES;
286
353
  GCC_WARN_UNUSED_VARIABLE = YES;
287
- IPHONEOS_DEPLOYMENT_TARGET = 11.2;
354
+ IPHONEOS_DEPLOYMENT_TARGET = 14.0;
288
355
  MTL_ENABLE_DEBUG_INFO = NO;
289
356
  SDKROOT = iphoneos;
290
357
  VALIDATE_PRODUCT = YES;
@@ -295,6 +362,7 @@
295
362
  isa = XCBuildConfiguration;
296
363
  baseConfigurationReference = 5C0ED6F1EABFB69B20A67C29 /* Pods-RNNami.debug.xcconfig */;
297
364
  buildSettings = {
365
+ CLANG_ENABLE_MODULES = YES;
298
366
  HEADER_SEARCH_PATHS = (
299
367
  "$(inherited)",
300
368
  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
@@ -302,10 +370,14 @@
302
370
  "$(SRCROOT)/../../react-native/React/**",
303
371
  "$(SRCROOT)/../../react-native/React/**",
304
372
  );
373
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
305
374
  LIBRARY_SEARCH_PATHS = "$(inherited)";
306
375
  OTHER_LDFLAGS = "-ObjC";
307
376
  PRODUCT_NAME = RNNami;
308
377
  SKIP_INSTALL = YES;
378
+ SWIFT_OBJC_BRIDGING_HEADER = "RNNami-Bridging-Header.h";
379
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
380
+ SWIFT_VERSION = 5.0;
309
381
  };
310
382
  name = Debug;
311
383
  };
@@ -313,6 +385,7 @@
313
385
  isa = XCBuildConfiguration;
314
386
  baseConfigurationReference = 90B290F36EAE177CDC017BA3 /* Pods-RNNami.release.xcconfig */;
315
387
  buildSettings = {
388
+ CLANG_ENABLE_MODULES = YES;
316
389
  HEADER_SEARCH_PATHS = (
317
390
  "$(inherited)",
318
391
  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
@@ -320,10 +393,13 @@
320
393
  "$(SRCROOT)/../../react-native/React/**",
321
394
  "$(SRCROOT)/../../react-native/React/**",
322
395
  );
396
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
323
397
  LIBRARY_SEARCH_PATHS = "$(inherited)";
324
398
  OTHER_LDFLAGS = "-ObjC";
325
399
  PRODUCT_NAME = RNNami;
326
400
  SKIP_INSTALL = YES;
401
+ SWIFT_OBJC_BRIDGING_HEADER = "RNNami-Bridging-Header.h";
402
+ SWIFT_VERSION = 5.0;
327
403
  };
328
404
  name = Release;
329
405
  };
@@ -0,0 +1,67 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Scheme
3
+ LastUpgradeVersion = "1420"
4
+ version = "1.3">
5
+ <BuildAction
6
+ parallelizeBuildables = "YES"
7
+ buildImplicitDependencies = "YES">
8
+ <BuildActionEntries>
9
+ <BuildActionEntry
10
+ buildForTesting = "YES"
11
+ buildForRunning = "YES"
12
+ buildForProfiling = "YES"
13
+ buildForArchiving = "YES"
14
+ buildForAnalyzing = "YES">
15
+ <BuildableReference
16
+ BuildableIdentifier = "primary"
17
+ BlueprintIdentifier = "58B511DA1A9E6C8500147676"
18
+ BuildableName = "libRNNami.a"
19
+ BlueprintName = "RNNami"
20
+ ReferencedContainer = "container:RNNami.xcodeproj">
21
+ </BuildableReference>
22
+ </BuildActionEntry>
23
+ </BuildActionEntries>
24
+ </BuildAction>
25
+ <TestAction
26
+ buildConfiguration = "Debug"
27
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
28
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29
+ shouldUseLaunchSchemeArgsEnv = "YES">
30
+ <Testables>
31
+ </Testables>
32
+ </TestAction>
33
+ <LaunchAction
34
+ buildConfiguration = "Debug"
35
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
36
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
37
+ launchStyle = "0"
38
+ useCustomWorkingDirectory = "NO"
39
+ ignoresPersistentStateOnLaunch = "NO"
40
+ debugDocumentVersioning = "YES"
41
+ debugServiceExtension = "internal"
42
+ allowLocationSimulation = "YES">
43
+ </LaunchAction>
44
+ <ProfileAction
45
+ buildConfiguration = "Release"
46
+ shouldUseLaunchSchemeArgsEnv = "YES"
47
+ savedToolIdentifier = ""
48
+ useCustomWorkingDirectory = "NO"
49
+ debugDocumentVersioning = "YES">
50
+ <MacroExpansion>
51
+ <BuildableReference
52
+ BuildableIdentifier = "primary"
53
+ BlueprintIdentifier = "58B511DA1A9E6C8500147676"
54
+ BuildableName = "libRNNami.a"
55
+ BlueprintName = "RNNami"
56
+ ReferencedContainer = "container:RNNami.xcodeproj">
57
+ </BuildableReference>
58
+ </MacroExpansion>
59
+ </ProfileAction>
60
+ <AnalyzeAction
61
+ buildConfiguration = "Debug">
62
+ </AnalyzeAction>
63
+ <ArchiveAction
64
+ buildConfiguration = "Release"
65
+ revealArchiveInOrganizer = "YES">
66
+ </ArchiveAction>
67
+ </Scheme>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-nami-sdk",
3
- "version": "2.0.4",
3
+ "version": "3.0.8",
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.js",
6
6
  "scripts": {
@@ -13,12 +13,12 @@ Pod::Spec.new do |s|
13
13
  s.homepage = package['homepage']
14
14
  s.license = package['license']
15
15
 
16
- s.platform = :ios, "11.2"
16
+ s.platform = :ios, "14.0"
17
17
  s.source = { :git => "https://github.com/namiml/react-native-nami-sdk.git", :tag => "#{s.version}" }
18
- s.source_files = "ios/**/*.{h,m}"
18
+ s.source_files = "ios/**/*.{h,m,swift}"
19
19
  s.requires_arc = true
20
20
 
21
- s.dependency 'Nami', '2.9.6'
21
+ s.dependency 'Nami', '3.0.8'
22
22
  s.dependency 'React'
23
23
 
24
24
  end
package/src/Nami.d.ts ADDED
@@ -0,0 +1,112 @@
1
+ export const Nami: {
2
+ configure: (
3
+ config: NamiConfiguration,
4
+ resultCallback?: (resultObject: { success: boolean }) => void
5
+ ) => void;
6
+ };
7
+
8
+ export type NamiConfiguration = {
9
+ "appPlatformID-apple": string;
10
+ "appPlatformID-android": string;
11
+ logLevel: string;
12
+ namiLanguageCode?: NamiLanguageCodes;
13
+ bypassStore?: boolean;
14
+ };
15
+
16
+ export type NamiLanguageCodes =
17
+ | "af"
18
+ | "ar"
19
+ | "ar-dz"
20
+ | "ast"
21
+ | "az"
22
+ | "bg"
23
+ | "be"
24
+ | "bn"
25
+ | "br"
26
+ | "bs"
27
+ | "ca"
28
+ | "cs"
29
+ | "cy"
30
+ | "da"
31
+ | "de"
32
+ | "dsb"
33
+ | "el"
34
+ | "en"
35
+ | "en-au"
36
+ | "en-gb"
37
+ | "eo"
38
+ | "es"
39
+ | "es-ar"
40
+ | "es-co"
41
+ | "es-mx"
42
+ | "es-ni"
43
+ | "es-ve"
44
+ | "et"
45
+ | "eu"
46
+ | "fa"
47
+ | "fi"
48
+ | "fr"
49
+ | "fy"
50
+ | "ga"
51
+ | "gd"
52
+ | "gl"
53
+ | "he"
54
+ | "hi"
55
+ | "hr"
56
+ | "hsb"
57
+ | "hu"
58
+ | "hy"
59
+ | "ia"
60
+ | "id"
61
+ | "ig"
62
+ | "io"
63
+ | "is"
64
+ | "it"
65
+ | "ja"
66
+ | "ka"
67
+ | "kab"
68
+ | "kk"
69
+ | "km"
70
+ | "kn"
71
+ | "ko"
72
+ | "ky"
73
+ | "lb"
74
+ | "lt"
75
+ | "lv"
76
+ | "mk"
77
+ | "ml"
78
+ | "mn"
79
+ | "mr"
80
+ | "my"
81
+ | "nb"
82
+ | "ne"
83
+ | "nl"
84
+ | "nn"
85
+ | "os"
86
+ | "pa"
87
+ | "pl"
88
+ | "pt"
89
+ | "pt-br"
90
+ | "ro"
91
+ | "ru"
92
+ | "sk"
93
+ | "sl"
94
+ | "sq"
95
+ | "sr"
96
+ | "sr-latn"
97
+ | "sv"
98
+ | "sw"
99
+ | "ta"
100
+ | "te"
101
+ | "tg"
102
+ | "th"
103
+ | "tk"
104
+ | "tr"
105
+ | "tt"
106
+ | "udm"
107
+ | "uk"
108
+ | "ur"
109
+ | "uz"
110
+ | "vi"
111
+ | "zh-hans"
112
+ | "zh-hant";
package/src/Nami.js ADDED
@@ -0,0 +1,10 @@
1
+ import { NativeModules } from "react-native";
2
+
3
+ export const { NamiBridge } = NativeModules;
4
+
5
+ export const Nami = {
6
+ ...NamiBridge,
7
+ configure(configureObj, resultCallback) {
8
+ NamiBridge.configure(configureObj, resultCallback ?? (() => {}));
9
+ },
10
+ };
@@ -0,0 +1,54 @@
1
+ import { EmitterSubscription } from "react-native";
2
+ import { NamiPurchase } from "./NamiPurchaseManager";
3
+ import { NamiPaywallAction } from "./NamiPaywallManager";
4
+
5
+ export const NamiCampaignManager: {
6
+ allCampaigns: () => Promise<Array<NamiCampaign>>;
7
+ isCampaignAvailable: (label?: string) => boolean;
8
+ launch: (
9
+ label?: string,
10
+ resultCallback?: (success: boolean, error?: LaunchCampaignError) => void,
11
+ actionCallback?: (
12
+ action: NamiPaywallAction,
13
+ skuId?: string,
14
+ purchaseError?: string,
15
+ purchases?: NamiPurchase[]
16
+ ) => void
17
+ ) => void;
18
+ refresh: () => void;
19
+ registerAvailableCampaignsHandler: (
20
+ callback: (availableCampaigns: NamiCampaign[]) => void
21
+ ) => EmitterSubscription["remove"];
22
+ };
23
+
24
+ export type NamiCampaign = {
25
+ id: string;
26
+ rule: string;
27
+ segment: string;
28
+ paywall: string;
29
+ type: NamiCampaignRuleType;
30
+ value?: string | null;
31
+ };
32
+
33
+ export enum NamiCampaignRuleType {
34
+ DEFAULT = "default",
35
+ LABEL = "label",
36
+ UNKNOWN = "unknown",
37
+ }
38
+
39
+ export enum LaunchCampaignError {
40
+ DEFAULT_CAMPAIGN_NOT_FOUND = 0,
41
+ LABELED_CAMPAIGN_NOT_FOUND = 1,
42
+ CAMPAIGN_DATA_NOT_FOUND = 2,
43
+ PAYWALL_ALREADY_DISPLAYED = 3,
44
+ SDK_NOT_INITIALIZED = 4,
45
+ }
46
+
47
+ export enum LaunchCampaignResultAction {
48
+ FAILURE = "FAILURE",
49
+ SUCCESS = "SUCCESS",
50
+ }
51
+
52
+ export type FailureResultObject = {
53
+ error: string;
54
+ };
@@ -0,0 +1,43 @@
1
+ import { NativeModules, NativeEventEmitter } from "react-native";
2
+
3
+ export const { RNNamiCampaignManager } = NativeModules;
4
+
5
+ export const NamiCampaignManager = {
6
+ launchSubscription: undefined,
7
+ emitter: new NativeEventEmitter(RNNamiCampaignManager),
8
+ ...RNNamiCampaignManager,
9
+ launch(label, resultCallback, actionCallback) {
10
+ this.launchSubscription?.remove();
11
+ this.launchSubscription = this.emitter.addListener(
12
+ "ResultCampaign",
13
+ (body) => {
14
+ var action = body.action;
15
+
16
+ if (action.startsWith("NAMI_")) {
17
+ action = action.substring(5, action.length);
18
+ }
19
+
20
+ var skuId = body.skuId;
21
+ var purchaseError = body.purchaseError;
22
+ var purchases = body.purchases;
23
+ actionCallback(action, skuId, purchaseError, purchases);
24
+ }
25
+ );
26
+ RNNamiCampaignManager.launch(
27
+ label ?? null,
28
+ resultCallback ?? (() => {}),
29
+ actionCallback ?? (() => {})
30
+ );
31
+ },
32
+ isCampaignAvailable: (label) => {
33
+ return RNNamiCampaignManager.isCampaignAvailable(label ?? null);
34
+ },
35
+ registerAvailableCampaignsHandler(callback) {
36
+ const subscription = this.emitter.addListener(
37
+ "AvailableCampaignsChanged",
38
+ callback
39
+ );
40
+ RNNamiCampaignManager.registerAvailableCampaignsHandler();
41
+ return subscription.remove;
42
+ },
43
+ };
@@ -0,0 +1,39 @@
1
+ import { EmitterSubscription } from "react-native";
2
+
3
+ export const NamiCustomerManager: {
4
+ setCustomerAttribute: (key: string, value: string) => void;
5
+ getCustomerAttribute: (key: string) => Promise<string | undefined>;
6
+ clearCustomerAttribute: (key: string) => void;
7
+ clearAllCustomerAttributes: () => void;
8
+ journeyState: () => Promise<CustomerJourneyState | undefined>;
9
+ isLoggedIn: () => Promise<boolean>;
10
+ loggedInId: () => Promise<string | undefined>;
11
+ deviceId: () => Promise<string>;
12
+ login: (
13
+ customerId: string,
14
+ callback?: (success: boolean, error?: number) => void
15
+ ) => void;
16
+ logout: (callback?: (success: boolean, error?: number) => void) => void;
17
+ registerJourneyStateHandler: (
18
+ callback: (journeyState: CustomerJourneyState) => void
19
+ ) => EmitterSubscription["remove"];
20
+ registerAccountStateHandler: (
21
+ callback: (
22
+ action: AccountStateAction,
23
+ success: boolean,
24
+ error?: number
25
+ ) => void
26
+ ) => EmitterSubscription["remove"];
27
+ };
28
+
29
+ export type CustomerJourneyState = {
30
+ formerSubscriber: boolean;
31
+ inGracePeriod: boolean;
32
+ inTrialPeriod: boolean;
33
+ inIntroOfferPeriod: boolean;
34
+ isCancelled: boolean;
35
+ inPause: boolean;
36
+ inAccountHold: boolean;
37
+ };
38
+
39
+ export type AccountStateAction = "login" | "logout";
@@ -0,0 +1,43 @@
1
+ import { NativeModules, NativeEventEmitter, Platform } from "react-native";
2
+
3
+ export const { RNNamiCustomerManager } = NativeModules;
4
+
5
+ export const NamiCustomerManager = {
6
+ emitter: new NativeEventEmitter(RNNamiCustomerManager),
7
+ ...RNNamiCustomerManager,
8
+ login: (customerId, callback) => {
9
+ if (Platform.OS === "ios") {
10
+ RNNamiCustomerManager.login(customerId, callback ?? (() => {}));
11
+ } else {
12
+ RNNamiCustomerManager.login(customerId);
13
+ }
14
+ },
15
+ logout: (callback) => {
16
+ if (Platform.OS === "ios") {
17
+ RNNamiCustomerManager.logout(callback ?? (() => {}));
18
+ } else {
19
+ RNNamiCustomerManager.logout();
20
+ }
21
+ },
22
+ registerJourneyStateHandler(callback) {
23
+ const subscription = this.emitter.addListener(
24
+ "JourneyStateChanged",
25
+ callback
26
+ );
27
+ RNNamiCustomerManager.registerJourneyStateHandler();
28
+ return subscription.remove;
29
+ },
30
+ registerAccountStateHandler(callback) {
31
+ const subscription = this.emitter.addListener(
32
+ "AccountStateChanged",
33
+ (body) => {
34
+ var action = body.action.toLowerCase();
35
+ var error = body.error;
36
+ var success = body.success;
37
+ callback(action, success, error);
38
+ }
39
+ );
40
+ RNNamiCustomerManager.registerAccountStateHandler();
41
+ return subscription.remove;
42
+ },
43
+ };
@@ -0,0 +1,24 @@
1
+ import { EmitterSubscription } from "react-native";
2
+ import { NamiPurchase } from "./NamiPurchaseManager";
3
+ import { NamiSKU } from "./types";
4
+
5
+ export const NamiEntitlementManager: {
6
+ active: () => Promise<Array<NamiEntitlement>>;
7
+ isEntitlementActive: (label?: string) => boolean;
8
+ refresh: (
9
+ resultCallback?: (entitlements?: NamiEntitlement[]) => void
10
+ ) => void;
11
+ registerActiveEntitlementsHandler: (
12
+ callback: (activeEntitlements: NamiEntitlement[]) => void
13
+ ) => EmitterSubscription["remove"];
14
+ };
15
+
16
+ export type NamiEntitlement = {
17
+ activePurchases: NamiPurchase[];
18
+ desc: string;
19
+ name: string;
20
+ namiId: string;
21
+ purchasedSkus: NamiSKU[];
22
+ referenceId: string;
23
+ relatedSkus: NamiSKU[];
24
+ };
@@ -0,0 +1,23 @@
1
+ import { NativeModules, NativeEventEmitter, Platform } from "react-native";
2
+
3
+ export const { RNNamiEntitlementManager } = NativeModules;
4
+
5
+ export const NamiEntitlementManager = {
6
+ emitter: new NativeEventEmitter(RNNamiEntitlementManager),
7
+ ...RNNamiEntitlementManager,
8
+ refresh(resultCallback) {
9
+ if (Platform.OS === "android") {
10
+ RNNamiEntitlementManager.refresh(resultCallback ?? (() => {}));
11
+ } else {
12
+ RNNamiEntitlementManager.refresh();
13
+ }
14
+ },
15
+ registerActiveEntitlementsHandler(callback) {
16
+ const subscription = this.emitter.addListener(
17
+ "EntitlementsChanged",
18
+ callback
19
+ );
20
+ RNNamiEntitlementManager.registerActiveEntitlementsHandler();
21
+ return subscription.remove;
22
+ },
23
+ };
@@ -0,0 +1,5 @@
1
+ export const NamiMLManager: {
2
+ coreAction: (label: string) => void;
3
+ enterCoreContent: (label: string | string[]) => void;
4
+ exitCoreContent: (label: string | string[]) => void;
5
+ };
@@ -0,0 +1,7 @@
1
+ import { NativeModules } from "react-native";
2
+
3
+ export const { NamiMLManagerBridge } = NativeModules;
4
+
5
+ export const NamiMLManager = {
6
+ ...NamiMLManagerBridge
7
+ };