react-native-nami-sdk 3.3.0-beta.8 → 3.3.1

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 +97 -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 +25 -32
  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 +79 -0
  15. package/android/src/main/java/com/namiml/reactnative/NamiPaywallManagerBridgeModule.kt +197 -0
  16. package/android/src/main/java/com/namiml/reactnative/NamiPurchaseManagerBridge.kt +107 -0
  17. package/android/src/main/java/com/{nami/reactlibrary → namiml/reactnative}/NamiUtil.kt +61 -23
  18. package/{index.d.ts → dist/index.d.ts} +0 -2
  19. package/dist/specs/NativeNami.d.ts +16 -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 +10 -0
  24. package/dist/specs/NativeNamiPaywallManager.d.ts +72 -0
  25. package/dist/specs/NativeNamiPurchaseManager.d.ts +27 -0
  26. package/dist/src/Nami.d.ts +6 -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 +13 -0
  31. package/dist/src/NamiPaywallManager.d.ts +30 -0
  32. package/dist/src/NamiPurchaseManager.d.ts +16 -0
  33. package/dist/src/transformers.d.ts +3 -0
  34. package/{src → dist/src}/types.d.ts +36 -6
  35. package/dist/src/version.d.ts +5 -0
  36. package/index.ts +0 -2
  37. package/ios/Nami.m +9 -87
  38. package/ios/Nami.swift +89 -0
  39. package/ios/NamiCampaignManagerBridge.m +3 -3
  40. package/ios/NamiCampaignManagerBridge.swift +47 -61
  41. package/ios/NamiCustomerManager.m +2 -2
  42. package/ios/NamiCustomerManager.swift +11 -3
  43. package/ios/NamiEntitlementManagerBridge.m +2 -3
  44. package/ios/NamiEntitlementManagerBridge.swift +47 -39
  45. package/ios/NamiFlowManagerBridge.m +4 -2
  46. package/ios/NamiFlowManagerBridge.swift +27 -6
  47. package/ios/NamiPaywallManagerBridge.m +3 -3
  48. package/ios/NamiPaywallManagerBridge.swift +24 -6
  49. package/ios/NamiPurchaseManagerBridge.m +3 -4
  50. package/ios/NamiPurchaseManagerBridge.swift +14 -15
  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 +17 -3
  55. package/scripts/generate-version.ts +18 -0
  56. package/specs/NativeNami.ts +17 -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 +13 -0
  61. package/specs/NativeNamiPaywallManager.ts +86 -0
  62. package/specs/NativeNamiPurchaseManager.ts +32 -0
  63. package/src/Nami.ts +31 -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 +42 -44
  68. package/src/NamiPaywallManager.ts +84 -139
  69. package/src/NamiPurchaseManager.ts +66 -70
  70. package/src/transformers.ts +21 -0
  71. package/src/types.ts +40 -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 -60
  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
package/.prettierrc ADDED
@@ -0,0 +1,4 @@
1
+ {
2
+ "singleQuote": true,
3
+ "trailingComma": "all"
4
+ }
package/README.md CHANGED
@@ -2,14 +2,14 @@
2
2
 
3
3
  # React Native Bridge for the Nami SDK
4
4
 
5
- Nami ML gives you everything you need to power your paywall, streamline subscription management, and drive revenue growth through instantly deployable paywalls, precise targeting and segmentation, and enterprise-grade security and scaleability.
5
+ Nami ML gives you everything you need to power your paywall, streamline subscription management, and drive revenue growth through instantly deployable paywalls, precise targeting and segmentation, and enterprise-grade security and scalability.
6
6
 
7
7
  Go beyond basic IAP and focus on results with:
8
8
 
9
- * Library of smart paywall templates to choose from, implemented natively
10
- * No-code paywall creator so you can launch a new paywall design instantly, without submitting an app update
11
- * Experimentation engine to run paywall A/B tests so you can improve your conversion rates
12
- * Built-in IAP & subscription management and analytics, so you don't need another solution
9
+ - Library of smart paywall templates to choose from, implemented natively
10
+ - No-code paywall creator so you can launch a new paywall design instantly, without submitting an app update
11
+ - Experimentation engine to run paywall A/B tests so you can improve your conversion rates
12
+ - Built-in IAP & subscription management and analytics, so you don't need another solution
13
13
 
14
14
  Nami is simple adopt while giving you the tools you need to improve revenue. Our free tier is generous, and gives you everything you need to get started. [Sign up for a free account](https://app.namiml.com/join/)
15
15
 
@@ -20,18 +20,18 @@ Get started by heading over to our [quick start guide](https://learn.namiml.com/
20
20
  ### Build the Bridge Locally
21
21
 
22
22
  ```
23
- yarn pack
23
+ npm run prepare && npm pack
24
24
  ```
25
25
 
26
- This will generate a file `react-native-nami-sdk-vx.x.x.tgz` with the current version number of the bridge. You can add this to a project by
26
+ This will generate a file `react-native-nami-sdk-vx.x.x.tgz` with the current version number of the bridge. You can add this to a project by
27
27
 
28
28
  ```
29
- yarn add file:react-native-nami-sdk-vx.x.x.tgz
29
+ npm install react-native-nami-sdk-vx.x.x.tgz
30
30
  ```
31
31
 
32
32
  ### Installing from NPM
33
33
 
34
- The bridge is also available as a package on NPM. You can install it via yarn or npm
34
+ The bridge is also available as a package on NPM. You can install it via yarn or npm
35
35
 
36
36
  ```
37
37
  npm install react-native-nami-sdk --save
package/android/README.md CHANGED
@@ -1,14 +1,15 @@
1
- README
2
- ======
1
+ # README
3
2
 
4
3
  If you want to publish the lib as a maven dependency, follow these steps before publishing a new version to npm:
5
4
 
6
5
  1. Be sure to have the Android [SDK](https://developer.android.com/studio/index.html) and [NDK](https://developer.android.com/ndk/guides/index.html) installed
7
6
  2. Be sure to have a `local.properties` file in this folder that points to the Android SDK and NDK
7
+
8
8
  ```
9
9
  ndk.dir=/Users/{username}/Library/Android/sdk/ndk-bundle
10
10
  sdk.dir=/Users/{username}/Library/Android/sdk
11
11
  ```
12
+
12
13
  3. Delete the `maven` folder
13
14
  4. Run `./gradlew installArchives`
14
15
  5. Verify that latest set of generated files is in the maven folder with the correct version number
@@ -1,22 +1,21 @@
1
- // android/build.gradle
2
- // based on:
3
- //
4
- // * https://github.com/facebook/react-native/blob/0.60-stable/template/android/build.gradle
5
- // original location:
6
- // - https://github.com/facebook/react-native/blob/0.58-stable/local-cli/templates/HelloWorld/android/build.gradle
7
- //
8
- // * https://github.com/facebook/react-native/blob/0.60-stable/template/android/app/build.gradle
9
- // original location:
10
- // - https://github.com/facebook/react-native/blob/0.58-stable/local-cli/templates/HelloWorld/android/app/build.gradle
11
- def DEFAULT_BUILD_TOOLS_VERSION = '34.0.0'
1
+ def DEFAULT_BUILD_TOOLS_VERSION = '35.0.0'
12
2
  def safeExtGet(prop, fallback) {
13
3
  rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
14
4
  }
5
+
6
+ def isNewArchitectureEnabled() {
7
+ return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true"
8
+ }
9
+
10
+ if (isNewArchitectureEnabled()) {
11
+ apply plugin: 'com.facebook.react'
12
+ }
13
+
15
14
  apply plugin: 'com.android.library'
16
15
  // apply plugin: 'maven'
17
16
  apply plugin: "kotlin-android"
18
17
  buildscript {
19
- ext.kotlin_version = '1.8.20'
18
+ ext.kotlin_version = '1.9.20'
20
19
  // The Android Gradle plugin is only required when opening the android folder stand-alone.
21
20
  // This avoids unnecessary downloads and potential conflicts when the library is included as a
22
21
  // module dependency in an application project.
@@ -27,19 +26,20 @@ buildscript {
27
26
  google()
28
27
  }
29
28
  dependencies {
30
- classpath 'com.android.tools.build:gradle:7.4.2'
29
+ classpath 'com.android.tools.build:gradle:8.6.1'
31
30
  classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
32
31
  }
33
32
  }
34
33
  }
35
34
  android {
36
- compileSdkVersion 34
35
+ compileSdkVersion 35
37
36
  buildToolsVersion safeExtGet('buildToolsVersion', DEFAULT_BUILD_TOOLS_VERSION)
38
37
  defaultConfig {
39
- minSdkVersion 22
40
- targetSdkVersion 34
38
+ minSdkVersion 23
39
+ targetSdkVersion 35
41
40
  versionCode 1
42
41
  versionName "1.0"
42
+ buildConfigField("boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString())
43
43
  }
44
44
  compileOptions {
45
45
  coreLibraryDesugaringEnabled true
@@ -85,12 +85,20 @@ 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.0-beta.07"
89
- amazonImplementation "com.namiml:sdk-amazon:3.3.0-beta.07"
88
+ playImplementation "com.namiml:sdk-android:3.3.1"
89
+ amazonImplementation "com.namiml:sdk-amazon:3.3.1"
90
90
 
91
91
  implementation "com.facebook.react:react-native:+" // From node_modules
92
- coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:1.1.5"
92
+ coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:2.0.4"
93
+
94
+ }
93
95
 
96
+ if (isNewArchitectureEnabled()) {
97
+ react {
98
+ jsRootDir = file("../src/")
99
+ libraryName = "Nami"
100
+ codegenJavaPackageName = "com.namiml.reactnative"
101
+ }
94
102
  }
95
103
 
96
104
  configurations {
@@ -1,6 +1,6 @@
1
1
  #Wed May 26 17:12:26 EDT 2021
2
2
  distributionBase=GRADLE_USER_HOME
3
- distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip
3
+ distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
4
4
  distributionPath=wrapper/dists
5
5
  zipStorePath=wrapper/dists
6
6
  zipStoreBase=GRADLE_USER_HOME
package/android/gradlew CHANGED
File without changes
@@ -1,3 +1,3 @@
1
- <manifest package="com.nami.reactlibrary">
1
+ <manifest package="com.namiml.reactnative">
2
2
 
3
3
  </manifest>
@@ -0,0 +1,3 @@
1
+ package com.namiml.reactnative
2
+
3
+ const val LOG_TAG = "RNNami"
@@ -0,0 +1,97 @@
1
+ package com.namiml.reactnative
2
+
3
+ import com.facebook.react.bridge.*
4
+ import com.facebook.react.module.annotations.ReactModule
5
+ import com.facebook.react.turbomodule.core.interfaces.TurboModule
6
+ import com.namiml.Nami
7
+ import com.namiml.NamiConfiguration
8
+ import com.namiml.NamiLanguageCode
9
+ import com.namiml.NamiLogLevel
10
+ import android.util.Log
11
+
12
+ @ReactModule(name = NamiBridgeModule.NAME)
13
+ class NamiBridgeModule internal constructor(
14
+ private val context: ReactApplicationContext
15
+ ) : ReactContextBaseJavaModule(context), TurboModule {
16
+
17
+ companion object {
18
+ const val NAME = "RNNami"
19
+
20
+ private const val CONFIG_MAP_PLATFORM_ID_KEY = "appPlatformID"
21
+ private const val CONFIG_MAP_LOG_LEVEL_KEY = "logLevel"
22
+ private const val CONFIG_MAP_DEVELOPMENT_MODE_KEY = "developmentMode"
23
+ private const val CONFIG_MAP_NAMI_COMMANDS_KEY = "namiCommands"
24
+ private const val CONFIG_MAP_LANGUAGE_CODE_KEY = "namiLanguageCode"
25
+ private const val CONFIG_MAP_INITIAL_CONFIG_KEY = "initialConfig"
26
+
27
+ private const val PLATFORM_ID_ERROR_VALUE = "APPPLATFORMID_NOT_FOUND"
28
+ }
29
+
30
+ override fun getName(): String = NAME
31
+
32
+ @ReactMethod
33
+ fun sdkConfigured(promise: Promise) {
34
+ promise.resolve(Nami.isInitialized())
35
+ }
36
+
37
+ @ReactMethod
38
+ fun sdkVersion(promise: Promise) {
39
+ val version = Nami.sdkVersion()
40
+ promise.resolve(version)
41
+ }
42
+
43
+ @ReactMethod
44
+ fun configure(configDict: ReadableMap, promise: Promise) {
45
+ logNewArchitectureStatus()
46
+
47
+ val appPlatformID = configDict.getString(CONFIG_MAP_PLATFORM_ID_KEY) ?: PLATFORM_ID_ERROR_VALUE
48
+ val builder = NamiConfiguration.Builder(context.applicationContext, appPlatformID)
49
+
50
+ when (configDict.getString(CONFIG_MAP_LOG_LEVEL_KEY)) {
51
+ "INFO" -> builder.logLevel(NamiLogLevel.INFO)
52
+ "WARN" -> builder.logLevel(NamiLogLevel.WARN)
53
+ "ERROR" -> builder.logLevel(NamiLogLevel.ERROR)
54
+ else -> builder.logLevel(NamiLogLevel.DEBUG)
55
+ }
56
+
57
+ if (configDict.hasKey(CONFIG_MAP_DEVELOPMENT_MODE_KEY) &&
58
+ configDict.getBoolean(CONFIG_MAP_DEVELOPMENT_MODE_KEY)) {
59
+ builder.developmentMode = true
60
+ }
61
+
62
+ configDict.getString(CONFIG_MAP_LANGUAGE_CODE_KEY)?.let { code ->
63
+ NamiLanguageCode.values().find { it.code == code }?.let {
64
+ builder.namiLanguageCode = it
65
+ }
66
+ }
67
+
68
+ configDict.getArray(CONFIG_MAP_NAMI_COMMANDS_KEY)?.let { commandsArray ->
69
+ val settingsList = mutableListOf<String>()
70
+ for (i in 0 until commandsArray.size()) {
71
+ commandsArray.getString(i)?.let { settingsList.add(it) }
72
+ }
73
+ builder.settingsList = settingsList
74
+ }
75
+
76
+ configDict.getString(CONFIG_MAP_INITIAL_CONFIG_KEY)?.let {
77
+ builder.initialConfig = it
78
+ }
79
+
80
+ context.runOnUiQueueThread {
81
+ Nami.configure(builder.build()) { result ->
82
+ val resultMap = Arguments.createMap().apply {
83
+ putBoolean("success", result)
84
+ }
85
+ promise.resolve(resultMap)
86
+ }
87
+ }
88
+ }
89
+
90
+ fun logNewArchitectureStatus() {
91
+ val isNewArch = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
92
+ Log.d("RNNami", "New Architecture is ${if (isNewArch) "ENABLED" else "DISABLED"}")
93
+ }
94
+
95
+ @ReactMethod fun addListener(eventName: String?) {}
96
+ @ReactMethod fun removeListeners(count: Int?) {}
97
+ }
@@ -0,0 +1,140 @@
1
+ package com.namiml.reactnative;
2
+
3
+ import com.facebook.react.TurboReactPackage;
4
+ import com.facebook.react.bridge.NativeModule;
5
+ import com.facebook.react.bridge.ReactApplicationContext;
6
+ import com.facebook.react.module.model.ReactModuleInfo;
7
+ import com.facebook.react.module.model.ReactModuleInfoProvider;
8
+ import com.facebook.react.uimanager.ViewManager;
9
+ import com.namiml.reactnative.BuildConfig;
10
+
11
+ import java.util.Collections;
12
+ import java.util.HashMap;
13
+ import java.util.List;
14
+ import java.util.Map;
15
+
16
+ public class NamiBridgePackage extends TurboReactPackage {
17
+
18
+ @Override
19
+ public NativeModule getModule(String name, ReactApplicationContext context) {
20
+ return switch (name) {
21
+ case NamiBridgeModule.NAME -> new NamiBridgeModule(context);
22
+ case NamiCampaignManagerBridgeModule.NAME ->
23
+ new NamiCampaignManagerBridgeModule(context);
24
+ case NamiEntitlementManagerBridgeModule.NAME ->
25
+ new NamiEntitlementManagerBridgeModule(context);
26
+ case NamiCustomerManagerBridgeModule.NAME ->
27
+ new NamiCustomerManagerBridgeModule(context);
28
+ case NamiFlowManagerBridgeModule.NAME -> new NamiFlowManagerBridgeModule(context);
29
+ case NamiPaywallManagerBridgeModule.NAME -> new NamiPaywallManagerBridgeModule(context);
30
+ case NamiPurchaseManagerBridgeModule.NAME ->
31
+ new NamiPurchaseManagerBridgeModule(context);
32
+ default -> null;
33
+ };
34
+ }
35
+
36
+ @Override
37
+ public ReactModuleInfoProvider getReactModuleInfoProvider() {
38
+ return () -> {
39
+ final Map<String, ReactModuleInfo> moduleInfos = new HashMap<>();
40
+
41
+ // Declare all TurboModules here
42
+ moduleInfos.put(
43
+ NamiBridgeModule.NAME,
44
+ new ReactModuleInfo(
45
+ NamiBridgeModule.NAME,
46
+ NamiBridgeModule.NAME,
47
+ false,
48
+ false,
49
+ true,
50
+ false,
51
+ BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
52
+ )
53
+ );
54
+
55
+ moduleInfos.put(
56
+ NamiCampaignManagerBridgeModule.NAME,
57
+ new ReactModuleInfo(
58
+ NamiCampaignManagerBridgeModule.NAME,
59
+ NamiCampaignManagerBridgeModule.NAME,
60
+ false,
61
+ false,
62
+ true,
63
+ false,
64
+ BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
65
+ )
66
+ );
67
+
68
+ moduleInfos.put(
69
+ NamiEntitlementManagerBridgeModule.NAME,
70
+ new ReactModuleInfo(
71
+ NamiEntitlementManagerBridgeModule.NAME,
72
+ NamiEntitlementManagerBridgeModule.NAME,
73
+ false,
74
+ false,
75
+ true,
76
+ false,
77
+ BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
78
+ )
79
+ );
80
+
81
+ moduleInfos.put(
82
+ NamiCustomerManagerBridgeModule.NAME,
83
+ new ReactModuleInfo(
84
+ NamiCustomerManagerBridgeModule.NAME,
85
+ NamiCustomerManagerBridgeModule.NAME,
86
+ false,
87
+ false,
88
+ true,
89
+ false,
90
+ BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
91
+ )
92
+ );
93
+
94
+ moduleInfos.put(
95
+ NamiFlowManagerBridgeModule.NAME,
96
+ new ReactModuleInfo(
97
+ NamiFlowManagerBridgeModule.NAME,
98
+ NamiFlowManagerBridgeModule.NAME,
99
+ false,
100
+ false,
101
+ true,
102
+ false,
103
+ BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
104
+ )
105
+ );
106
+
107
+ moduleInfos.put(
108
+ NamiPaywallManagerBridgeModule.NAME,
109
+ new ReactModuleInfo(
110
+ NamiPaywallManagerBridgeModule.NAME,
111
+ NamiPaywallManagerBridgeModule.NAME,
112
+ false,
113
+ false,
114
+ true,
115
+ false,
116
+ BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
117
+ )
118
+ );
119
+
120
+ moduleInfos.put(
121
+ NamiPurchaseManagerBridgeModule.NAME,
122
+ new ReactModuleInfo(
123
+ NamiPurchaseManagerBridgeModule.NAME,
124
+ NamiPurchaseManagerBridgeModule.NAME,
125
+ false,
126
+ false,
127
+ true,
128
+ false,
129
+ BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
130
+ )
131
+ );
132
+ return moduleInfos;
133
+ };
134
+ }
135
+
136
+ @Override
137
+ public List<ViewManager> createViewManagers(ReactApplicationContext context) {
138
+ return Collections.emptyList();
139
+ }
140
+ }
@@ -1,22 +1,27 @@
1
- package com.nami.reactlibrary
1
+ package com.namiml.reactnative
2
2
 
3
3
  import android.app.Activity
4
- import android.content.Intent
5
4
  import android.net.Uri
6
5
  import android.util.Log
7
6
  import com.facebook.react.bridge.*
7
+ import com.facebook.react.module.annotations.ReactModule
8
8
  import com.facebook.react.modules.core.DeviceEventManagerModule
9
+ import com.facebook.react.turbomodule.core.interfaces.TurboModule
9
10
  import com.namiml.billing.NamiPurchase
10
11
  import com.namiml.campaign.LaunchCampaignResult
11
12
  import com.namiml.campaign.NamiCampaign
12
13
  import com.namiml.campaign.NamiCampaignManager
13
14
  import com.namiml.paywall.model.NamiPaywallEvent
14
15
  import com.namiml.paywall.model.PaywallLaunchContext
16
+ import androidx.core.net.toUri
17
+
18
+ @ReactModule(name = NamiCampaignManagerBridgeModule.NAME)
19
+ class NamiCampaignManagerBridgeModule internal constructor(
20
+ private val reactContext: ReactApplicationContext
21
+ ) : ReactContextBaseJavaModule(reactContext), TurboModule {
15
22
 
16
- class NamiCampaignManagerBridgeModule(reactContext: ReactApplicationContext) :
17
- ReactContextBaseJavaModule(reactContext), ActivityEventListener {
18
- // handlePaywallCallback metadata
19
23
  companion object {
24
+ const val NAME = "RNNamiCampaignManager"
20
25
  const val CAMPAIGN_ID = "campaignId"
21
26
  const val CAMPAIGN_LABEL = "campaignLabel"
22
27
  const val PAYWALL_ID = "paywallId"
@@ -34,11 +39,12 @@ class NamiCampaignManagerBridgeModule(reactContext: ReactApplicationContext) :
34
39
  const val DEEP_LINK_URL = "deeplinkUrl"
35
40
  const val TIME_SPENT_ON_PAYWALL = "timeSpentOnPaywall"
36
41
  const val VIDEO_METADATA = "videoMetadata"
37
- const val _RESULT_CAMPAIGN = "ResultCampaign"
42
+ const val NAMI_PAYWALL_EVENT = "NamiPaywallEvent"
38
43
  }
39
44
 
45
+
40
46
  override fun getName(): String {
41
- return "RNNamiCampaignManager"
47
+ return NAME
42
48
  }
43
49
 
44
50
  private fun campaignToReadableMap(campaign: NamiCampaign): ReadableMap {
@@ -60,7 +66,7 @@ class NamiCampaignManagerBridgeModule(reactContext: ReactApplicationContext) :
60
66
  ) {
61
67
  var theActivity: Activity? = null
62
68
  if (reactApplicationContext.hasCurrentActivity()) {
63
- theActivity = reactApplicationContext.getCurrentActivity()
69
+ theActivity = reactApplicationContext.currentActivity
64
70
  }
65
71
 
66
72
  var paywallLaunchContext: PaywallLaunchContext? = null
@@ -79,7 +85,7 @@ class NamiCampaignManagerBridgeModule(reactContext: ReactApplicationContext) :
79
85
  }
80
86
  }
81
87
  }
82
- Log.d(LOG_TAG, "productGroups $productGroups")
88
+ Log.d(NAME, "productGroups $productGroups")
83
89
  }
84
90
 
85
91
  if (context.hasKey("customAttributes")) {
@@ -90,7 +96,7 @@ class NamiCampaignManagerBridgeModule(reactContext: ReactApplicationContext) :
90
96
  val key = keyIterator.nextKey()
91
97
  customAttributes[key] = attr.getString(key) ?: ""
92
98
  }
93
- Log.d(LOG_TAG, "customAttributes $customAttributes")
99
+ Log.d(NAME, "customAttributes $customAttributes")
94
100
  }
95
101
  }
96
102
 
@@ -100,7 +106,7 @@ class NamiCampaignManagerBridgeModule(reactContext: ReactApplicationContext) :
100
106
  try {
101
107
  customObject = attr.toHashMap().toMutableMap()
102
108
  } catch (e: Exception) {
103
- Log.d(LOG_TAG, "Unable to parse PaywallLaunchContext customObject $customObject")
109
+ Log.d(NAME, "Unable to parse PaywallLaunchContext customObject $customObject")
104
110
  }
105
111
  }
106
112
  }
@@ -122,7 +128,7 @@ class NamiCampaignManagerBridgeModule(reactContext: ReactApplicationContext) :
122
128
  )
123
129
  }
124
130
 
125
- val uriObject: Uri? = if (withUrl != null) Uri.parse(withUrl) else null
131
+ val uriObject: Uri? = if (withUrl != null) withUrl.toUri() else null
126
132
 
127
133
  if (label != null) {
128
134
  NamiCampaignManager.launch(
@@ -152,8 +158,7 @@ class NamiCampaignManagerBridgeModule(reactContext: ReactApplicationContext) :
152
158
  paywallEvent: NamiPaywallEvent,
153
159
  actionCallback: Callback,
154
160
  ) {
155
- val actionString = paywallEvent.action.toString()
156
-
161
+ val actionString = paywallEvent.action.toRNActionString()
157
162
  val purchasesArray = createPurchaseArray(paywallEvent.purchases)
158
163
 
159
164
  val resultMap =
@@ -214,7 +219,7 @@ class NamiCampaignManagerBridgeModule(reactContext: ReactApplicationContext) :
214
219
  resultMap.putDouble(TIME_SPENT_ON_PAYWALL, paywallEvent.timeSpentOnPaywall ?: 0.0)
215
220
  }
216
221
 
217
- emitEvent(_RESULT_CAMPAIGN, resultMap)
222
+ emitEvent(NAMI_PAYWALL_EVENT, resultMap)
218
223
  }
219
224
 
220
225
  private fun createPurchaseArray(purchases: List<NamiPurchase>?): WritableArray {
@@ -223,7 +228,7 @@ class NamiCampaignManagerBridgeModule(reactContext: ReactApplicationContext) :
223
228
  try {
224
229
  pushMap(purchase.toPurchaseDict())
225
230
  } catch (e: Exception) {
226
- Log.e(LOG_TAG, "Error while converting data in createPurchaseArray to a Map", e)
231
+ Log.e(NAME, "Error while converting data in createPurchaseArray to a Map", e)
227
232
  }
228
233
  }
229
234
  }
@@ -237,7 +242,7 @@ class NamiCampaignManagerBridgeModule(reactContext: ReactApplicationContext) :
237
242
  if (emitter is DeviceEventManagerModule.RCTDeviceEventEmitter) {
238
243
  emitter.emit(event, map)
239
244
  } else {
240
- Log.w(LOG_TAG, "Cannot emit $event event: RCTDeviceEventEmitter instance is null")
245
+ Log.w(NAME, "Cannot emit $event event: RCTDeviceEventEmitter instance is null")
241
246
  }
242
247
  }
243
248
 
@@ -256,19 +261,6 @@ class NamiCampaignManagerBridgeModule(reactContext: ReactApplicationContext) :
256
261
  }
257
262
  }
258
263
 
259
- override fun onActivityResult(
260
- activity: Activity?,
261
- requestCode: Int,
262
- resultCode: Int,
263
- intent: Intent?,
264
- ) {
265
- Log.d(LOG_TAG, "Nami Activity result listener activated, code is $requestCode")
266
- }
267
-
268
- override fun onNewIntent(intent: Intent?) {
269
- // do nothing
270
- }
271
-
272
264
  @ReactMethod
273
265
  fun allCampaigns(promise: Promise) {
274
266
  val campaigns = NamiCampaignManager.allCampaigns()
@@ -287,14 +279,15 @@ class NamiCampaignManagerBridgeModule(reactContext: ReactApplicationContext) :
287
279
  val isCampaignAvailable =
288
280
  when {
289
281
  campaignSource == null -> NamiCampaignManager.isCampaignAvailable()
290
- Uri.parse(campaignSource)?.scheme != null -> NamiCampaignManager.isCampaignAvailable(Uri.parse(campaignSource))
282
+ campaignSource.toUri().scheme != null -> NamiCampaignManager.isCampaignAvailable(
283
+ campaignSource.toUri())
291
284
  else -> NamiCampaignManager.isCampaignAvailable(campaignSource)
292
285
  }
293
286
  promise.resolve(isCampaignAvailable)
294
287
  }
295
288
 
296
289
  @ReactMethod
297
- fun refresh(promise: Promise) {
290
+ fun refresh(promise: Promise) {
298
291
  NamiCampaignManager.refresh { campaigns ->
299
292
  val array = WritableNativeArray()
300
293
  campaigns?.forEach { campaign ->
@@ -1,15 +1,23 @@
1
- package com.nami.reactlibrary
1
+ package com.namiml.reactnative
2
2
 
3
3
  import com.facebook.react.bridge.*
4
+ import com.facebook.react.module.annotations.ReactModule
4
5
  import com.facebook.react.modules.core.DeviceEventManagerModule
6
+ import com.facebook.react.turbomodule.core.interfaces.TurboModule
5
7
  import com.namiml.customer.CustomerJourneyState
6
8
  import com.namiml.customer.NamiCustomerManager
7
9
 
8
- class NamiCustomerManagerBridgeModule(reactContext: ReactApplicationContext) :
9
- ReactContextBaseJavaModule(reactContext) {
10
+ @ReactModule(name = NamiCustomerManagerBridgeModule.NAME)
11
+ class NamiCustomerManagerBridgeModule internal constructor(
12
+ private val reactContext: ReactApplicationContext
13
+ ) : ReactContextBaseJavaModule(reactContext), TurboModule {
14
+
15
+ companion object {
16
+ const val NAME = "RNNamiCustomerManager"
17
+ }
10
18
 
11
19
  override fun getName(): String {
12
- return "RNNamiCustomerManager"
20
+ return NAME
13
21
  }
14
22
 
15
23
  private fun journeyStateToReadableMap(journeyState: CustomerJourneyState): ReadableMap {
@@ -109,7 +117,7 @@ class NamiCustomerManagerBridgeModule(reactContext: ReactApplicationContext) :
109
117
  fun registerJourneyStateHandler() {
110
118
  NamiCustomerManager.registerJourneyStateHandler { journeyState ->
111
119
  val handledJourneyState = journeyStateToReadableMap(journeyState)
112
- reactApplicationContext
120
+ reactContext
113
121
  .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
114
122
  .emit("JourneyStateChanged", handledJourneyState)
115
123
  }
@@ -122,7 +130,7 @@ class NamiCustomerManagerBridgeModule(reactContext: ReactApplicationContext) :
122
130
  body.putString("action", action.toString())
123
131
  body.putBoolean("success", success)
124
132
  body.putString("error", error.toString())
125
- reactApplicationContext
133
+ reactContext
126
134
  .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
127
135
  .emit("AccountStateChanged", body)
128
136
  }