react-native-netmera 1.11.3 → 2.0.0-alpha02

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 (280) hide show
  1. package/README.md +109 -120
  2. package/RNNetmera.podspec +31 -14
  3. package/android/build.gradle +83 -19
  4. package/android/gradle.properties +5 -0
  5. package/android/src/main/AndroidManifest.xml +0 -5
  6. package/android/src/main/AndroidManifestNew.xml +5 -0
  7. package/android/src/main/java/com/netmera/reactnativesdk/RNNetmera.kt +24 -0
  8. package/android/src/main/java/com/netmera/reactnativesdk/RNNetmeraCategoryObject.kt +54 -0
  9. package/android/src/main/java/com/netmera/reactnativesdk/RNNetmeraConfiguration.kt +108 -0
  10. package/android/src/main/java/com/netmera/reactnativesdk/RNNetmeraEvent.kt +24 -0
  11. package/android/src/main/java/com/netmera/reactnativesdk/RNNetmeraModule.kt +694 -0
  12. package/android/src/main/java/com/netmera/reactnativesdk/RNNetmeraPackage.kt +17 -0
  13. package/android/src/main/java/com/netmera/reactnativesdk/RNNetmeraPushBroadcastReceiver.kt +81 -0
  14. package/android/src/main/java/com/netmera/reactnativesdk/RNNetmeraPushHeadlessService.kt +32 -0
  15. package/android/src/main/java/com/netmera/reactnativesdk/RNNetmeraUtil.kt +218 -0
  16. package/android/src/main/java/com/netmera/reactnativesdk/RNNetmeraWebWidgetCallbacks.kt +25 -0
  17. package/ios/AnyCodable/AnyCodable.swift +151 -0
  18. package/ios/AnyCodable/AnyDecodable.swift +192 -0
  19. package/ios/AnyCodable/AnyEncodable.swift +295 -0
  20. package/ios/RNNetmera-Bridging-Header.h +3 -0
  21. package/ios/RNNetmera.h +9 -29
  22. package/ios/RNNetmera.mm +143 -0
  23. package/ios/RNNetmera.swift +759 -0
  24. package/ios/RNNetmeraCategoryObject.swift +61 -0
  25. package/ios/RNNetmeraEvent.swift +26 -0
  26. package/ios/RNNetmeraPushLifecycleDelegate.swift +47 -0
  27. package/ios/RNNetmeraRCTEventEmitter.mm +8 -0
  28. package/ios/RNNetmeraRCTEventEmitter.swift +134 -0
  29. package/ios/RNNetmeraUtils.swift +233 -0
  30. package/lib/module/Netmera.js +256 -0
  31. package/lib/module/Netmera.js.map +1 -0
  32. package/lib/module/events/NetmeraEvent.js +8 -0
  33. package/lib/module/events/NetmeraEvent.js.map +1 -0
  34. package/lib/module/events/NetmeraEventBannerOpen.js +13 -0
  35. package/lib/module/events/NetmeraEventBannerOpen.js.map +1 -0
  36. package/lib/module/events/NetmeraEventBatteryLevel.js +10 -0
  37. package/lib/module/events/NetmeraEventBatteryLevel.js.map +1 -0
  38. package/lib/module/events/NetmeraEventCategoryView.js +13 -0
  39. package/lib/module/events/NetmeraEventCategoryView.js.map +1 -0
  40. package/lib/module/events/NetmeraEventInAppPurchase.js +28 -0
  41. package/lib/module/events/NetmeraEventInAppPurchase.js.map +1 -0
  42. package/lib/module/events/NetmeraEventLogin.js +10 -0
  43. package/lib/module/events/NetmeraEventLogin.js.map +1 -0
  44. package/lib/module/events/NetmeraEventRegister.js +10 -0
  45. package/lib/module/events/NetmeraEventRegister.js.map +1 -0
  46. package/lib/module/events/NetmeraEventScreenView.js +22 -0
  47. package/lib/module/events/NetmeraEventScreenView.js.map +1 -0
  48. package/lib/module/events/NetmeraEventSearch.js +13 -0
  49. package/lib/module/events/NetmeraEventSearch.js.map +1 -0
  50. package/lib/module/events/NetmeraEventShare.js +13 -0
  51. package/lib/module/events/NetmeraEventShare.js.map +1 -0
  52. package/lib/module/events/commerce/NetmeraEventCartAddProduct.js +13 -0
  53. package/lib/module/events/commerce/NetmeraEventCartAddProduct.js.map +1 -0
  54. package/lib/module/events/commerce/NetmeraEventCartRemoveProduct.js +10 -0
  55. package/lib/module/events/commerce/NetmeraEventCartRemoveProduct.js.map +1 -0
  56. package/lib/module/events/commerce/NetmeraEventCartView.js +13 -0
  57. package/lib/module/events/commerce/NetmeraEventCartView.js.map +1 -0
  58. package/lib/module/events/commerce/NetmeraEventOrderCancel.js +19 -0
  59. package/lib/module/events/commerce/NetmeraEventOrderCancel.js.map +1 -0
  60. package/lib/module/events/commerce/NetmeraEventProductComment.js +7 -0
  61. package/lib/module/events/commerce/NetmeraEventProductComment.js.map +1 -0
  62. package/lib/module/events/commerce/NetmeraEventProductRate.js +10 -0
  63. package/lib/module/events/commerce/NetmeraEventProductRate.js.map +1 -0
  64. package/lib/module/events/commerce/NetmeraEventProductView.js +7 -0
  65. package/lib/module/events/commerce/NetmeraEventProductView.js.map +1 -0
  66. package/lib/module/events/commerce/NetmeraEventPurchase.js +34 -0
  67. package/lib/module/events/commerce/NetmeraEventPurchase.js.map +1 -0
  68. package/lib/module/events/commerce/NetmeraEventWishList.js +7 -0
  69. package/lib/module/events/commerce/NetmeraEventWishList.js.map +1 -0
  70. package/lib/module/events/commerce/NetmeraLineItem.js +9 -0
  71. package/lib/module/events/commerce/NetmeraLineItem.js.map +1 -0
  72. package/lib/module/events/commerce/NetmeraProduct.js +46 -0
  73. package/lib/module/events/commerce/NetmeraProduct.js.map +1 -0
  74. package/lib/module/events/media/NetmeraEventContent.js +42 -0
  75. package/lib/module/events/media/NetmeraEventContent.js.map +1 -0
  76. package/lib/module/events/media/NetmeraEventContentComment.js +7 -0
  77. package/lib/module/events/media/NetmeraEventContentComment.js.map +1 -0
  78. package/lib/module/events/media/NetmeraEventContentRate.js +10 -0
  79. package/lib/module/events/media/NetmeraEventContentRate.js.map +1 -0
  80. package/lib/module/events/media/NetmeraEventContentView.js +7 -0
  81. package/lib/module/events/media/NetmeraEventContentView.js.map +1 -0
  82. package/lib/module/index.js +43 -0
  83. package/lib/module/index.js.map +1 -0
  84. package/lib/module/models/NMCategoryPreference.js +8 -0
  85. package/lib/module/models/NMCategoryPreference.js.map +1 -0
  86. package/lib/module/models/NMInboxStatus.js +11 -0
  87. package/lib/module/models/NMInboxStatus.js.map +1 -0
  88. package/lib/module/models/NMInboxStatusCountFilter.js +12 -0
  89. package/lib/module/models/NMInboxStatusCountFilter.js.map +1 -0
  90. package/lib/module/models/NetmeraCategory.js +8 -0
  91. package/lib/module/models/NetmeraCategory.js.map +1 -0
  92. package/lib/module/models/NetmeraCategoryFilter.js +8 -0
  93. package/lib/module/models/NetmeraCategoryFilter.js.map +1 -0
  94. package/lib/module/models/NetmeraCouponObject.js +8 -0
  95. package/lib/module/models/NetmeraCouponObject.js.map +1 -0
  96. package/lib/module/models/NetmeraInbox.js +8 -0
  97. package/lib/module/models/NetmeraInbox.js.map +1 -0
  98. package/lib/module/models/NetmeraInboxFilter.js +8 -0
  99. package/lib/module/models/NetmeraInboxFilter.js.map +1 -0
  100. package/lib/module/models/NetmeraProfileAttribute.js +75 -0
  101. package/lib/module/models/NetmeraProfileAttribute.js.map +1 -0
  102. package/lib/module/models/NetmeraUser.js +89 -0
  103. package/lib/module/models/NetmeraUser.js.map +1 -0
  104. package/lib/module/models/NetmeraUserProfile.js +58 -0
  105. package/lib/module/models/NetmeraUserProfile.js.map +1 -0
  106. package/lib/module/models/NotificationPermissionStatus.js +10 -0
  107. package/lib/module/models/NotificationPermissionStatus.js.map +1 -0
  108. package/lib/module/package.json +1 -0
  109. package/lib/module/utils/DeviceUtils.js +10 -0
  110. package/lib/module/utils/DeviceUtils.js.map +1 -0
  111. package/lib/module/utils/Optional.js +32 -0
  112. package/lib/module/utils/Optional.js.map +1 -0
  113. package/lib/module/utils/RNNetmera.js +16 -0
  114. package/lib/module/utils/RNNetmera.js.map +1 -0
  115. package/lib/typescript/package.json +1 -0
  116. package/lib/typescript/src/Netmera.d.ts +70 -0
  117. package/lib/typescript/src/Netmera.d.ts.map +1 -0
  118. package/lib/typescript/src/events/NetmeraEvent.d.ts +5 -0
  119. package/lib/typescript/src/events/NetmeraEvent.d.ts.map +1 -0
  120. package/lib/typescript/src/events/NetmeraEventBannerOpen.d.ts +9 -0
  121. package/lib/typescript/src/events/NetmeraEventBannerOpen.d.ts.map +1 -0
  122. package/lib/typescript/src/events/NetmeraEventBatteryLevel.d.ts +7 -0
  123. package/lib/typescript/src/events/NetmeraEventBatteryLevel.d.ts.map +1 -0
  124. package/lib/typescript/src/events/NetmeraEventCategoryView.d.ts +9 -0
  125. package/lib/typescript/src/events/NetmeraEventCategoryView.d.ts.map +1 -0
  126. package/lib/typescript/src/events/NetmeraEventInAppPurchase.d.ts +19 -0
  127. package/lib/typescript/src/events/NetmeraEventInAppPurchase.d.ts.map +1 -0
  128. package/lib/typescript/src/events/NetmeraEventLogin.d.ts +7 -0
  129. package/lib/typescript/src/events/NetmeraEventLogin.d.ts.map +1 -0
  130. package/lib/typescript/src/events/NetmeraEventRegister.d.ts +7 -0
  131. package/lib/typescript/src/events/NetmeraEventRegister.d.ts.map +1 -0
  132. package/lib/typescript/src/events/NetmeraEventScreenView.d.ts +15 -0
  133. package/lib/typescript/src/events/NetmeraEventScreenView.d.ts.map +1 -0
  134. package/lib/typescript/src/events/NetmeraEventSearch.d.ts +9 -0
  135. package/lib/typescript/src/events/NetmeraEventSearch.d.ts.map +1 -0
  136. package/lib/typescript/src/events/NetmeraEventShare.d.ts +9 -0
  137. package/lib/typescript/src/events/NetmeraEventShare.d.ts.map +1 -0
  138. package/lib/typescript/src/events/commerce/NetmeraEventCartAddProduct.d.ts +9 -0
  139. package/lib/typescript/src/events/commerce/NetmeraEventCartAddProduct.d.ts.map +1 -0
  140. package/lib/typescript/src/events/commerce/NetmeraEventCartRemoveProduct.d.ts +7 -0
  141. package/lib/typescript/src/events/commerce/NetmeraEventCartRemoveProduct.d.ts.map +1 -0
  142. package/lib/typescript/src/events/commerce/NetmeraEventCartView.d.ts +9 -0
  143. package/lib/typescript/src/events/commerce/NetmeraEventCartView.d.ts.map +1 -0
  144. package/lib/typescript/src/events/commerce/NetmeraEventOrderCancel.d.ts +13 -0
  145. package/lib/typescript/src/events/commerce/NetmeraEventOrderCancel.d.ts.map +1 -0
  146. package/lib/typescript/src/events/commerce/NetmeraEventProductComment.d.ts +5 -0
  147. package/lib/typescript/src/events/commerce/NetmeraEventProductComment.d.ts.map +1 -0
  148. package/lib/typescript/src/events/commerce/NetmeraEventProductRate.d.ts +7 -0
  149. package/lib/typescript/src/events/commerce/NetmeraEventProductRate.d.ts.map +1 -0
  150. package/lib/typescript/src/events/commerce/NetmeraEventProductView.d.ts +5 -0
  151. package/lib/typescript/src/events/commerce/NetmeraEventProductView.d.ts.map +1 -0
  152. package/lib/typescript/src/events/commerce/NetmeraEventPurchase.d.ts +24 -0
  153. package/lib/typescript/src/events/commerce/NetmeraEventPurchase.d.ts.map +1 -0
  154. package/lib/typescript/src/events/commerce/NetmeraEventWishList.d.ts +5 -0
  155. package/lib/typescript/src/events/commerce/NetmeraEventWishList.d.ts.map +1 -0
  156. package/lib/typescript/src/events/commerce/NetmeraLineItem.d.ts +6 -0
  157. package/lib/typescript/src/events/commerce/NetmeraLineItem.d.ts.map +1 -0
  158. package/lib/typescript/src/events/commerce/NetmeraProduct.d.ts +23 -0
  159. package/lib/typescript/src/events/commerce/NetmeraProduct.d.ts.map +1 -0
  160. package/lib/typescript/src/events/media/NetmeraEventContent.d.ts +23 -0
  161. package/lib/typescript/src/events/media/NetmeraEventContent.d.ts.map +1 -0
  162. package/lib/typescript/src/events/media/NetmeraEventContentComment.d.ts +5 -0
  163. package/lib/typescript/src/events/media/NetmeraEventContentComment.d.ts.map +1 -0
  164. package/lib/typescript/src/events/media/NetmeraEventContentRate.d.ts +7 -0
  165. package/lib/typescript/src/events/media/NetmeraEventContentRate.d.ts.map +1 -0
  166. package/lib/typescript/src/events/media/NetmeraEventContentView.d.ts +5 -0
  167. package/lib/typescript/src/events/media/NetmeraEventContentView.d.ts.map +1 -0
  168. package/lib/typescript/src/index.d.ts +39 -0
  169. package/lib/typescript/src/index.d.ts.map +1 -0
  170. package/lib/typescript/src/models/NMCategoryPreference.d.ts +6 -0
  171. package/lib/typescript/src/models/NMCategoryPreference.d.ts.map +1 -0
  172. package/lib/typescript/src/models/NMInboxStatus.d.ts +8 -0
  173. package/lib/typescript/src/models/NMInboxStatus.d.ts.map +1 -0
  174. package/lib/typescript/src/models/NMInboxStatusCountFilter.d.ts +7 -0
  175. package/lib/typescript/src/models/NMInboxStatusCountFilter.d.ts.map +1 -0
  176. package/lib/typescript/src/models/NetmeraCategory.d.ts +10 -0
  177. package/lib/typescript/src/models/NetmeraCategory.d.ts.map +1 -0
  178. package/lib/typescript/src/models/NetmeraCategoryFilter.d.ts +6 -0
  179. package/lib/typescript/src/models/NetmeraCategoryFilter.d.ts.map +1 -0
  180. package/lib/typescript/src/models/NetmeraCouponObject.d.ts +8 -0
  181. package/lib/typescript/src/models/NetmeraCouponObject.d.ts.map +1 -0
  182. package/lib/typescript/src/models/NetmeraInbox.d.ts +22 -0
  183. package/lib/typescript/src/models/NetmeraInbox.d.ts.map +1 -0
  184. package/lib/typescript/src/models/NetmeraInboxFilter.d.ts +7 -0
  185. package/lib/typescript/src/models/NetmeraInboxFilter.d.ts.map +1 -0
  186. package/lib/typescript/src/models/NetmeraProfileAttribute.d.ts +33 -0
  187. package/lib/typescript/src/models/NetmeraProfileAttribute.d.ts.map +1 -0
  188. package/lib/typescript/src/models/NetmeraUser.d.ts +25 -0
  189. package/lib/typescript/src/models/NetmeraUser.d.ts.map +1 -0
  190. package/lib/typescript/src/models/NetmeraUserProfile.d.ts +21 -0
  191. package/lib/typescript/src/models/NetmeraUserProfile.d.ts.map +1 -0
  192. package/lib/typescript/src/models/NotificationPermissionStatus.d.ts +7 -0
  193. package/lib/typescript/src/models/NotificationPermissionStatus.d.ts.map +1 -0
  194. package/lib/typescript/src/utils/DeviceUtils.d.ts +3 -0
  195. package/lib/typescript/src/utils/DeviceUtils.d.ts.map +1 -0
  196. package/lib/typescript/src/utils/Optional.d.ts +15 -0
  197. package/lib/typescript/src/utils/Optional.d.ts.map +1 -0
  198. package/lib/typescript/src/utils/RNNetmera.d.ts +5 -0
  199. package/lib/typescript/src/utils/RNNetmera.d.ts.map +1 -0
  200. package/package.json +104 -17
  201. package/src/Netmera.ts +139 -88
  202. package/src/events/NetmeraEvent.ts +1 -1
  203. package/src/events/NetmeraEventBannerOpen.ts +4 -4
  204. package/src/events/NetmeraEventBatteryLevel.ts +3 -3
  205. package/src/events/NetmeraEventCategoryView.ts +4 -4
  206. package/src/events/NetmeraEventInAppPurchase.ts +10 -10
  207. package/src/events/NetmeraEventLogin.ts +3 -3
  208. package/src/events/NetmeraEventRegister.ts +3 -3
  209. package/src/events/NetmeraEventScreenView.ts +7 -7
  210. package/src/events/NetmeraEventSearch.ts +4 -4
  211. package/src/events/NetmeraEventShare.ts +4 -4
  212. package/src/events/commerce/NetmeraEventCartAddProduct.ts +4 -4
  213. package/src/events/commerce/NetmeraEventCartRemoveProduct.ts +3 -3
  214. package/src/events/commerce/NetmeraEventCartView.ts +4 -4
  215. package/src/events/commerce/NetmeraEventOrderCancel.ts +6 -6
  216. package/src/events/commerce/NetmeraEventProductComment.ts +2 -2
  217. package/src/events/commerce/NetmeraEventProductRate.ts +3 -3
  218. package/src/events/commerce/NetmeraEventProductView.ts +2 -2
  219. package/src/events/commerce/NetmeraEventPurchase.ts +13 -13
  220. package/src/events/commerce/NetmeraEventWishList.ts +2 -2
  221. package/src/events/commerce/NetmeraLineItem.ts +2 -2
  222. package/src/events/commerce/NetmeraProduct.ts +10 -10
  223. package/src/events/media/NetmeraEventContent.ts +8 -8
  224. package/src/events/media/NetmeraEventContentComment.ts +2 -2
  225. package/src/events/media/NetmeraEventContentRate.ts +3 -3
  226. package/src/events/media/NetmeraEventContentView.ts +2 -2
  227. package/src/index.ts +87 -0
  228. package/src/models/NMCategoryPreference.ts +1 -1
  229. package/src/models/NMInboxStatusCountFilter.ts +1 -1
  230. package/src/models/NetmeraCategory.ts +2 -2
  231. package/src/models/NetmeraCategoryFilter.ts +1 -1
  232. package/src/models/NetmeraCouponObject.ts +1 -1
  233. package/src/models/NetmeraInbox.ts +1 -1
  234. package/src/models/NetmeraInboxFilter.ts +1 -1
  235. package/src/models/NetmeraProfileAttribute.ts +81 -0
  236. package/src/models/NetmeraUser.ts +76 -74
  237. package/src/models/NetmeraUserProfile.ts +67 -0
  238. package/src/models/NotificationPermissionStatus.ts +4 -4
  239. package/src/utils/DeviceUtils.ts +3 -3
  240. package/src/utils/Optional.ts +31 -0
  241. package/src/utils/RNNetmera.ts +24 -0
  242. package/.eslintignore +0 -7
  243. package/.gitattributes +0 -1
  244. package/.github/workflows/code_quality_check.yaml +0 -38
  245. package/.prettierignore +0 -14
  246. package/.yarnrc.yml +0 -1
  247. package/android/.project +0 -17
  248. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  249. package/android/gradle/wrapper/gradle-wrapper.properties +0 -6
  250. package/android/gradlew +0 -172
  251. package/android/gradlew.bat +0 -84
  252. package/android/src/main/java/com/netmera/reactnativesdk/RNNetmera.java +0 -24
  253. package/android/src/main/java/com/netmera/reactnativesdk/RNNetmeraCategoryObject.java +0 -56
  254. package/android/src/main/java/com/netmera/reactnativesdk/RNNetmeraConfiguration.java +0 -154
  255. package/android/src/main/java/com/netmera/reactnativesdk/RNNetmeraEvent.java +0 -36
  256. package/android/src/main/java/com/netmera/reactnativesdk/RNNetmeraModule.java +0 -631
  257. package/android/src/main/java/com/netmera/reactnativesdk/RNNetmeraPackage.java +0 -35
  258. package/android/src/main/java/com/netmera/reactnativesdk/RNNetmeraPushBroadcastReceiver.java +0 -86
  259. package/android/src/main/java/com/netmera/reactnativesdk/RNNetmeraPushHeadlessService.java +0 -32
  260. package/android/src/main/java/com/netmera/reactnativesdk/RNNetmeraUser.java +0 -24
  261. package/android/src/main/java/com/netmera/reactnativesdk/RNNetmeraUtil.java +0 -354
  262. package/android/src/main/java/com/netmera/reactnativesdk/RNNetmeraWebWidgetCallbacks.java +0 -27
  263. package/index.ts +0 -80
  264. package/ios/RNNetmera.m +0 -507
  265. package/ios/RNNetmera.xcodeproj/project.pbxproj +0 -316
  266. package/ios/RNNetmera.xcodeproj/xcshareddata/xcschemes/RNNetmera.xcscheme +0 -67
  267. package/ios/RNNetmera.xcworkspace/contents.xcworkspacedata +0 -9
  268. package/ios/RNNetmeraCategoryObject.h +0 -16
  269. package/ios/RNNetmeraCategoryObject.m +0 -59
  270. package/ios/RNNetmeraEvent.h +0 -17
  271. package/ios/RNNetmeraEvent.m +0 -27
  272. package/ios/RNNetmeraRCTEventEmitter.h +0 -23
  273. package/ios/RNNetmeraRCTEventEmitter.m +0 -142
  274. package/ios/RNNetmeraUser.h +0 -15
  275. package/ios/RNNetmeraUser.m +0 -19
  276. package/ios/RNNetmeraUtils.h +0 -27
  277. package/ios/RNNetmeraUtils.m +0 -128
  278. package/scripts/update-version.js +0 -38
  279. package/scripts/yarn_rebuild.sh +0 -31
  280. package/tsconfig.json +0 -3
@@ -0,0 +1,759 @@
1
+ import NetmeraCore
2
+ import NetmeraNotification
3
+ import NetmeraAnalytic
4
+ import NetmeraGeofence
5
+ import NetmeraLocation
6
+ import NetmeraAdvertisingId
7
+ import NetmeraNotificationInbox
8
+ import NetmeraAnalyticAutotracking
9
+ import NetmeraNotificationCore
10
+
11
+ let ERROR_CODE_INBOX = "2016"
12
+ let ERROR_MESSAGE_INBOX = "There was a problem fetching inbox"
13
+
14
+ let ERROR_CODE_INBOX_NULL = "2017"
15
+ let ERROR_MESSAGE_INBOX_NULL = "Inbox is null or invalid status"
16
+
17
+ let ERROR_CODE_NOT_NEXT_PAGE = "2018"
18
+ let ERROR_MESSAGE_NOT_NEXT_PAGE = "Not next page"
19
+
20
+ let ERROR_CODE_UPDATE_STATUS = "2019"
21
+ let ERROR_MESSAGE_UPDATE_STATUS = "There was a problem updating status"
22
+
23
+ let ERROR_CODE_NULL_CATEGORY = "2020"
24
+ let ERROR_MESSAGE_NULL_CATEGORY = "Must call fetchCategory method first"
25
+
26
+ let ERROR_CODE_INVALID_PUSH_OBJECT = "2021"
27
+ let ERROR_MESSAGE_INVALID_PUSH_OBJECT = "Received NetmeraPushObject was not valid."
28
+
29
+ let ERROR_CODE_NULL_INBOX_STATUS = "2022"
30
+ let ERROR_MESSAGE_NULL_INBOX_STATUS = "Inbox status can't be null."
31
+
32
+ let ERROR_CODE_INBOX_STATUS = "2023"
33
+ let ERROR_MESSAGE_INBOX_STATUS = "Error occurred while fetching inbox count for status"
34
+
35
+ let ERROR_CODE_GET_CATEGORY_PREFERENCE = "2024"
36
+ let ERROR_MESSAGE_GET_CATEGORY_PREFERENCE = "Error occurred while fetching user category preference list."
37
+
38
+ let ERROR_CODE_SET_CATEGORY_PREFERENCE = "2025"
39
+ let ERROR_MESSAGE_SET_CATEGORY_PREFERENCE = "Error occurred while setting user category preference list."
40
+
41
+ let ERROR_CODE_COUPON_FETCH = "2026"
42
+ let ERROR_MESSAGE_COUPON_FETCH = "Error occurred while fetching coupons."
43
+
44
+ let ERROR_CODE_UPDATE_USER = "2027"
45
+ let ERROR_MESSAGE_UPDATE_USER = "Error occurred while updating user."
46
+
47
+ let ERROR_CODE_EMAIL_PERMISSION = "2028"
48
+ let ERROR_MESSAGE_EMAIL_PERMISSION = "Error occurred while fetching email permission"
49
+
50
+ let ERROR_CODE_SMS_PERMISSION = "2029"
51
+ let ERROR_MESSAGE_SMS_PERMISSION = "Error occurred while fetching sms permission"
52
+
53
+ let ERROR_CODE_WHATSAPP_PERMISSION = "2030"
54
+ let ERROR_MESSAGE_WHATSAPP_PERMISSION = "Error occurred while getting/setting WhatsApp permission"
55
+
56
+ let ERROR_CODE_NOTIFICATION_PERMISSION = "2033"
57
+ let ERROR_MESSAGE_NOTIFICATION_PERMISSION = "Error requesting notification permission"
58
+
59
+ @objc(RNNetmera)
60
+ public class RNNetmera: NSObject {
61
+ var netmeraInbox: NetmeraInboxManager?
62
+ var categoryManager: NetmeraInboxCategoryManager?
63
+
64
+ /// Tracks whether `Netmera.initialize()` and shared setup have completed at least once.
65
+ private static var isInitialized = false
66
+
67
+ /// Starts Netmera using API key and base URL from your app’s **Netmera-Config.plist**.
68
+ /// Call once early in `didFinishLaunchingWithOptions` from `AppDelegate`.
69
+ public static func initNetmera() {
70
+ guard !isInitialized else { return }
71
+ Netmera.initialize()
72
+ applyConfiguration()
73
+ isInitialized = true
74
+ }
75
+
76
+ /// Starts Netmera using **explicit** API key and base URL (or switches environment at runtime).
77
+ ///
78
+ /// - Parameters:
79
+ /// - params: Optional configuration parameters for the SDK.
80
+ public static func initialize(params: NetmeraParams) {
81
+ guard !isInitialized else { return }
82
+ Netmera.initialize(params: params)
83
+ applyConfiguration()
84
+ isInitialized = true
85
+ }
86
+
87
+ private static func applyConfiguration() {
88
+ setNetmeraHeaders()
89
+ Netmera.setPushLifecycleDelegate(RNNetmeraPushLifecycleDelegate.shared)
90
+ #if DEBUG
91
+ Netmera.setLogLevel(.debug)
92
+ #endif
93
+ }
94
+
95
+ private static func setNetmeraHeaders() {
96
+ Netmera.setAdditionalRequestHeaders([
97
+ "X-netmera-framework": "react",
98
+ "X-netmera-frameworkV": "2.0.0"
99
+ ])
100
+ }
101
+
102
+ @objc(requestPushNotificationAuthorization:withRejecter:)
103
+ public func requestPushNotificationAuthorization(
104
+ resolve: @escaping RCTPromiseResolveBlock,
105
+ reject: @escaping RCTPromiseRejectBlock
106
+ ) {
107
+ Netmera.requestPushNotificationAuthorization(for: [.alert, .badge, .sound]) { granted, error in
108
+ if let error = error {
109
+ reject(
110
+ ERROR_CODE_NOTIFICATION_PERMISSION,
111
+ ERROR_MESSAGE_NOTIFICATION_PERMISSION,
112
+ error
113
+ )
114
+ } else {
115
+ resolve(granted)
116
+ }
117
+ }
118
+ }
119
+
120
+ @objc(currentExternalId:withRejecter:)
121
+ func currentExternalId(
122
+ resolve: RCTPromiseResolveBlock,
123
+ reject: RCTPromiseRejectBlock
124
+ ) {
125
+ resolve(Netmera.getCurrentExternalId())
126
+ }
127
+
128
+ @objc(checkNotificationPermission:withRejecter:)
129
+ func checkNotificationPermission(
130
+ resolve: @escaping RCTPromiseResolveBlock,
131
+ reject: @escaping RCTPromiseRejectBlock
132
+ ) {
133
+ Netmera.checkNotificationPermission { permissionType in
134
+ switch permissionType {
135
+ case .notDetermined:
136
+ resolve("NOT_DETERMINED")
137
+ case .denied:
138
+ resolve("DENIED")
139
+ case .blocked:
140
+ resolve("BLOCKED")
141
+ case .granted:
142
+ resolve("GRANTED")
143
+ @unknown default:
144
+ resolve("unknown")
145
+ }
146
+ }
147
+ }
148
+
149
+ @objc(requestPermissionsForLocation)
150
+ func requestPermissionsForLocation() {
151
+ Netmera.requestLocationAuthorization()
152
+ }
153
+
154
+ @objc(setNetmeraMaxActiveRegions:)
155
+ func setNetmeraMaxActiveRegions(_ maxActiveRegions: NSInteger) {
156
+ Netmera.setNetmeraMaxActiveRegions(count: maxActiveRegions)
157
+ }
158
+
159
+ @objc(enablePopupPresentation)
160
+ func enablePopupPresentation() {
161
+ Netmera.setPopupPresentationEnabled(true)
162
+ }
163
+
164
+ @objc(disablePopupPresentation)
165
+ func disablePopupPresentation() {
166
+ Netmera.setPopupPresentationEnabled(false)
167
+ }
168
+
169
+ @objc(dismissAllPresentations)
170
+ func dismissAllPresentations() {
171
+ Netmera.dismissAllPresentations()
172
+ }
173
+
174
+ @objc(isPushEnabled:withRejecter:)
175
+ func isPushEnabled(
176
+ resolve: @escaping RCTPromiseResolveBlock,
177
+ reject: @escaping RCTPromiseRejectBlock
178
+ ) {
179
+ Netmera.isReceivingPushNotificationsEnabled { isEnabled in
180
+ resolve(isEnabled)
181
+ }
182
+ }
183
+
184
+ @objc(enablePush)
185
+ func enablePush() {
186
+ Netmera.setReceivingPushNotificationsEnabled(true)
187
+ }
188
+
189
+ @objc(disablePush)
190
+ func disablePush() {
191
+ Netmera.setReceivingPushNotificationsEnabled(false)
192
+ }
193
+
194
+ @objc(startDataTransfer)
195
+ func startDataTransfer() {
196
+ Netmera.setDataTransferEnabled(true)
197
+ }
198
+
199
+ @objc(stopDataTransfer)
200
+ func stopDataTransfer() {
201
+ Netmera.setDataTransferEnabled(false)
202
+ }
203
+
204
+ @objc(kill)
205
+ func kill(){
206
+ Netmera.kill()
207
+ }
208
+
209
+ @objc(sendEvent:)
210
+ func sendEvent(_ eventDictionary: [String: Any]) {
211
+ var dict = eventDictionary.compactMapValues { $0 is NSNull ? nil : $0 }
212
+
213
+ if let eventKey = dict["code"] as? String,
214
+ let event = RNNetmeraEvent(eventKey: eventKey) {
215
+
216
+ dict.removeValue(forKey: "code")
217
+
218
+ if let revenue = dict["revenue"] as? Double {
219
+ event.revenue = revenue
220
+ dict.removeValue(forKey: "revenue")
221
+ }
222
+
223
+ let converted: [String: AnyCodable] = dict.reduce(into: [:]) { result, pair in
224
+ result[pair.key] = AnyCodable(pair.value)
225
+ }
226
+
227
+ event.eventParameters = converted
228
+ Netmera.send(event)
229
+ }
230
+ }
231
+
232
+ @objc(sendGenericEvent:attributes:)
233
+ func sendGenericEvent(_ code: String, attributes: [String: Any]) {
234
+ let filtered = attributes.filter { $0.value is NSNull == false }
235
+ Netmera.send(eventWithKey: code, attributes: filtered)
236
+ }
237
+
238
+ @objc(identifyUser:hasCallback:withResolver:withRejecter:)
239
+ func identifyUser(_ userDictionary: [String: Any],
240
+ hasCallback: Bool,
241
+ resolve: @escaping RCTPromiseResolveBlock,
242
+ reject: @escaping RCTPromiseRejectBlock) {
243
+ let user = NetmeraUserIdentify()
244
+
245
+ // Include a key only when present in the bridge map; value may be NSNull → clear on server.
246
+ if userDictionary["userId"] != nil {
247
+ user.userId = userDictionary["userId"] as? String
248
+ }
249
+ if userDictionary["msisdn"] != nil {
250
+ user.msisdn = userDictionary["msisdn"] as? String
251
+ }
252
+ if userDictionary["email"] != nil {
253
+ user.email = userDictionary["email"] as? String
254
+ }
255
+ if userDictionary["wpNumber"] != nil {
256
+ user.whatsAppNumber = userDictionary["wpNumber"] as? String
257
+ }
258
+
259
+ let completionBlock: ((Bool) -> Void)?
260
+
261
+ if (hasCallback) {
262
+ completionBlock = { success in
263
+ if success {
264
+ resolve(nil)
265
+ } else {
266
+ reject(ERROR_CODE_UPDATE_USER, ERROR_MESSAGE_UPDATE_USER, nil)
267
+ }
268
+ }
269
+ } else {
270
+ completionBlock = nil
271
+ }
272
+
273
+ Netmera.identifyUser(user, completion: completionBlock)
274
+ }
275
+
276
+ @objc(updateUserProfile:hasCallback:withResolver:withRejecter:)
277
+ func updateUserProfile(_ userProfileDictionary: [String: Any],
278
+ hasCallback: Bool,
279
+ resolve: @escaping RCTPromiseResolveBlock,
280
+ reject: @escaping RCTPromiseRejectBlock) {
281
+ let completionBlock: ((Bool) -> Void)?
282
+
283
+ if (hasCallback) {
284
+ completionBlock = { success in
285
+ if success {
286
+ resolve(nil)
287
+ } else {
288
+ reject(ERROR_CODE_UPDATE_USER, ERROR_MESSAGE_UPDATE_USER, nil)
289
+ }
290
+ }
291
+ } else {
292
+ completionBlock = nil
293
+ }
294
+
295
+ InternalNetmera.updateUserProfile(withDictionary: userProfileDictionary, completion: completionBlock)
296
+ }
297
+
298
+ @objc(fetchCoupons:max:withResolver:withRejecter:)
299
+ func fetchCoupons(_ page: Int, max: Int, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
300
+ let filter = NetmeraCouponFilter(page: page, max: max)
301
+
302
+ Netmera.fetchCoupons(using: filter) { result in
303
+ switch result {
304
+ case .success(let coupons):
305
+ let array = RNNetmeraUtils.shared.parseCouponObjects(coupons)
306
+ resolve(array)
307
+ case .failure(let error):
308
+ reject(ERROR_CODE_COUPON_FETCH, ERROR_MESSAGE_COUPON_FETCH, error)
309
+ }
310
+ }
311
+ }
312
+
313
+ @objc(getUserCategoryPreferenceList:withRejecter:)
314
+ func getUserCategoryPreferenceList(resolve: @escaping RCTPromiseResolveBlock,
315
+ reject: @escaping RCTPromiseRejectBlock) {
316
+ Netmera.getUserCategoryPreferenceList { result in
317
+ switch result {
318
+ case .success(let categories):
319
+ let parsed = RNNetmeraUtils.shared.parseUserCategoryPreferenceListToMap(
320
+ categories
321
+ )
322
+ resolve(parsed)
323
+ case .failure(_):
324
+ reject(ERROR_CODE_GET_CATEGORY_PREFERENCE,
325
+ ERROR_MESSAGE_GET_CATEGORY_PREFERENCE,
326
+ nil)
327
+ }
328
+ }
329
+ }
330
+
331
+ @objc(setUserCategoryPreference:categoryEnabled:withResolver:withRejecter:)
332
+ func setUserCategoryPreference(_ categoryId: Int,
333
+ categoryEnabled: Bool,
334
+ resolver resolve: @escaping RCTPromiseResolveBlock,
335
+ rejecter reject: @escaping RCTPromiseRejectBlock) {
336
+ Netmera.setUserCategoryPreference(categoryId: categoryId,
337
+ categoryEnabled: categoryEnabled) { result in
338
+ switch result {
339
+ case .success(_):
340
+ resolve(true)
341
+ case .failure(_):
342
+ reject(ERROR_CODE_SET_CATEGORY_PREFERENCE,
343
+ ERROR_MESSAGE_SET_CATEGORY_PREFERENCE,
344
+ nil)
345
+ }
346
+ }
347
+ }
348
+
349
+ @objc(getInitialURL:withRejecter:)
350
+ func getInitialURL(resolve: RCTPromiseResolveBlock,
351
+ reject: RCTPromiseRejectBlock) {
352
+ if let url = RNNetmeraRCTEventEmitter.getInitialUrl() {
353
+ resolve(url.absoluteString)
354
+ } else {
355
+ resolve(nil)
356
+ }
357
+ }
358
+
359
+ @objc(fetchInbox:withResolver:withRejecter:)
360
+ public func fetchInbox(_ inboxDictionary: [String: Any],
361
+ resolver: @escaping RCTPromiseResolveBlock,
362
+ rejecter: @escaping RCTPromiseRejectBlock) {
363
+
364
+ let statusRaw = (
365
+ inboxDictionary["status"] as? Int
366
+ ) ?? NetmeraNotificationCore.NetmeraInboxStatus.default.rawValue
367
+ let status = NetmeraNotificationCore.NetmeraInboxStatus(rawValue: statusRaw)
368
+
369
+ let pageSize = inboxDictionary["pageSize"] as? Int ?? 10
370
+ let includeExpired = inboxDictionary["includeExpiredObjects"] as? Bool ?? false
371
+ let categories = inboxDictionary["categories"] as? [String]
372
+
373
+ let filter = NetmeraNotificationInbox.NetmeraInboxFilter(
374
+ status: status,
375
+ pageSize: pageSize,
376
+ shouldIncludeExpiredObjects: includeExpired,
377
+ categories: categories
378
+ )
379
+
380
+ guard let manager = Netmera.inboxManager(with: filter) else {
381
+ rejecter(ERROR_CODE_INBOX, ERROR_MESSAGE_INBOX, nil)
382
+ return
383
+ }
384
+
385
+ manager.inbox { result in
386
+ switch result {
387
+ case .success:
388
+ let array: [[String: Any]] = manager.objects.map {
389
+ RNNetmeraUtils.shared.dictionaryFromInboxPush($0)
390
+ }
391
+ resolver(array)
392
+ self.netmeraInbox = manager
393
+ break
394
+ case .failure(_):
395
+ rejecter(ERROR_CODE_INBOX, ERROR_MESSAGE_INBOX, nil)
396
+ break
397
+ }
398
+ }
399
+ }
400
+
401
+ @objc(fetchNextPage:withRejecter:)
402
+ func fetchNextPage(
403
+ resolver: @escaping RCTPromiseResolveBlock,
404
+ rejecter: @escaping RCTPromiseRejectBlock
405
+ ) {
406
+
407
+ guard let inbox = netmeraInbox else {
408
+ rejecter(ERROR_CODE_INBOX, ERROR_MESSAGE_INBOX, nil)
409
+ return
410
+ }
411
+
412
+ inbox.nextPage { status in
413
+ switch status {
414
+ case .success:
415
+ let array = RNNetmeraUtils.shared.mapPushObjects(inbox.objects)
416
+ resolver(array)
417
+ case .failure(let error):
418
+ rejecter(ERROR_CODE_NOT_NEXT_PAGE, ERROR_MESSAGE_NOT_NEXT_PAGE, error)
419
+ }
420
+ }
421
+ }
422
+
423
+ @objc(countForStatus:withResolver:withRejecter:)
424
+ public func countForStatus(_ statusRaw: Int,
425
+ resolver: @escaping RCTPromiseResolveBlock,
426
+ rejecter: @escaping RCTPromiseRejectBlock) {
427
+
428
+ guard let inbox = netmeraInbox else {
429
+ rejecter(ERROR_CODE_INBOX_NULL,
430
+ ERROR_MESSAGE_INBOX_NULL,
431
+ nil)
432
+ return
433
+ }
434
+
435
+ let status = NetmeraNotificationCore.NetmeraInboxStatus(rawValue: statusRaw)
436
+ let count = inbox.count(for: status)
437
+ resolver(String(count))
438
+ }
439
+
440
+ @objc(inboxUpdateStatus:toIndex:status:withResolver:withRejecter:)
441
+ public func inboxUpdateStatus(_ fromIndex: Int,
442
+ toIndex: Int,
443
+ status: Int,
444
+ resolver: @escaping RCTPromiseResolveBlock,
445
+ rejecter: @escaping RCTPromiseRejectBlock) {
446
+ guard let inbox = netmeraInbox else {
447
+ rejecter(ERROR_CODE_NULL_INBOX_STATUS,
448
+ ERROR_MESSAGE_NULL_INBOX_STATUS,
449
+ nil)
450
+ return
451
+ }
452
+
453
+ let length = toIndex - fromIndex
454
+ guard length > 0, fromIndex >= 0, toIndex <= inbox.objects.count else {
455
+ rejecter(ERROR_CODE_UPDATE_STATUS,
456
+ ERROR_MESSAGE_UPDATE_STATUS,
457
+ nil)
458
+ return
459
+ }
460
+
461
+ let range = fromIndex..<toIndex
462
+ let pushObjects = Array(inbox.objects[range])
463
+
464
+ let statusEnum = NetmeraNotificationCore.NetmeraInboxStatus(rawValue: status)
465
+
466
+ inbox.updateStatus(statusEnum, for: pushObjects) { result in
467
+ switch result {
468
+ case .success:
469
+ resolver(true)
470
+ case .failure(let error):
471
+ rejecter(ERROR_CODE_UPDATE_STATUS,
472
+ "\(ERROR_CODE_UPDATE_STATUS): \(error.localizedDescription)",
473
+ nil)
474
+ }
475
+ }
476
+ }
477
+
478
+
479
+ @objc(fetchCategory:withResolver:withRejecter:)
480
+ public func fetchCategory(_ inboxDictionary: [String: Any],
481
+ resolver: @escaping RCTPromiseResolveBlock,
482
+ rejecter: @escaping RCTPromiseRejectBlock) {
483
+ let filter = RNNetmeraCategoryObject.getCategoryFilter(inboxDictionary)
484
+
485
+ guard let manager = Netmera.inboxCategoryManager(with: filter) else {
486
+ rejecter(ERROR_CODE_NULL_CATEGORY, ERROR_MESSAGE_NULL_CATEGORY, nil)
487
+ return
488
+ }
489
+
490
+ manager.inboxCategory { result in
491
+ switch result {
492
+ case .success(let isSuccess):
493
+ if isSuccess {
494
+ self.categoryManager = manager
495
+ let mappedCategories = RNNetmeraCategoryObject.mapCategoryObjects(
496
+ manager.categories
497
+ )
498
+ resolver(mappedCategories)
499
+ } else {
500
+ rejecter(ERROR_CODE_NULL_CATEGORY, ERROR_MESSAGE_NULL_CATEGORY, nil)
501
+ }
502
+ case .failure(let error):
503
+ rejecter(
504
+ ERROR_CODE_NULL_CATEGORY,
505
+ "\(ERROR_MESSAGE_NULL_CATEGORY): \(error.localizedDescription)",
506
+ nil
507
+ )
508
+ }
509
+ }
510
+ }
511
+
512
+ @objc(fetchNextCategoryPage:withRejecter:)
513
+ public func fetchNextCategoryPage(withResolver resolve: @escaping RCTPromiseResolveBlock,
514
+ withRejecter reject: @escaping RCTPromiseRejectBlock) {
515
+ guard let category = categoryManager else {
516
+ reject(ERROR_CODE_NULL_CATEGORY, ERROR_MESSAGE_NULL_CATEGORY, nil)
517
+ return
518
+ }
519
+
520
+ category.nextPage { status in
521
+ switch status {
522
+ case .success(let isSuccess):
523
+ if isSuccess {
524
+ let mappedCategories = RNNetmeraCategoryObject.mapCategoryObjects(
525
+ category.categories
526
+ )
527
+ resolve(mappedCategories)
528
+ } else {
529
+ reject(ERROR_CODE_NULL_CATEGORY, ERROR_MESSAGE_NULL_CATEGORY, nil)
530
+ }
531
+ case .failure(let error):
532
+ reject(ERROR_CODE_NULL_CATEGORY,
533
+ "There was a problem fetching next category page: \(error.localizedDescription)",
534
+ nil)
535
+ }
536
+ }
537
+ }
538
+
539
+ @objc(handlePushObject:withResolver:withRejecter:)
540
+ public func handlePushObject(_ pushId: String,
541
+ resolver: @escaping RCTPromiseResolveBlock,
542
+ rejecter: @escaping RCTPromiseRejectBlock) {
543
+
544
+ guard let inbox = netmeraInbox else {
545
+ rejecter(ERROR_CODE_INBOX_NULL, ERROR_MESSAGE_INBOX_NULL, nil)
546
+ return
547
+ }
548
+
549
+ if let pushInboxObject = inbox.objects.first(
550
+ where: { $0.payload?.pushId == pushId
551
+ }),
552
+ let pushObject = pushInboxObject.push {
553
+ Netmera.handlePushObject(pushObject)
554
+ }
555
+
556
+ resolver(nil)
557
+ }
558
+
559
+ @objc(handleInteractiveAction:withResolver:withRejecter:)
560
+ public func handleInteractiveAction(_ interactiveActionId: String,
561
+ resolver: @escaping RCTPromiseResolveBlock,
562
+ rejecter: @escaping RCTPromiseRejectBlock) {
563
+
564
+ guard let inbox = netmeraInbox else {
565
+ rejecter(ERROR_CODE_INBOX_NULL, ERROR_MESSAGE_INBOX_NULL, nil)
566
+ return
567
+ }
568
+
569
+ for pushInboxObject in inbox.objects {
570
+ guard
571
+ let pushObject = pushInboxObject.push,
572
+ let actions = pushObject.interactiveAction
573
+ else {
574
+ continue
575
+ }
576
+ if let interactiveAction = actions.first(where: { $0.id == interactiveActionId }),
577
+ let action = interactiveAction.action {
578
+ Netmera.handleInteractiveAction(action, for: pushObject)
579
+ return
580
+ }
581
+ }
582
+
583
+ resolver(false)
584
+ }
585
+
586
+ @objc(handleLastMessage:withResolver:withRejecter:)
587
+ public func handleLastMessage(_ pushId: String,
588
+ resolver: @escaping RCTPromiseResolveBlock,
589
+ rejecter: @escaping RCTPromiseRejectBlock) {
590
+
591
+ guard let inbox = netmeraInbox else {
592
+ rejecter(ERROR_CODE_INBOX_NULL, ERROR_MESSAGE_INBOX_NULL, nil)
593
+ return
594
+ }
595
+
596
+ guard !pushId.isEmpty else {
597
+ rejecter(
598
+ ERROR_CODE_INVALID_PUSH_OBJECT,
599
+ ERROR_MESSAGE_INVALID_PUSH_OBJECT,
600
+ nil
601
+ )
602
+ return
603
+ }
604
+
605
+ if let matched = inbox.objects.last(where: { $0.push?.pushId == pushId }),
606
+ let pushObject = matched.push {
607
+ Netmera.handlePushObject(pushObject)
608
+ resolver(true)
609
+ } else {
610
+ rejecter(
611
+ ERROR_CODE_INVALID_PUSH_OBJECT,
612
+ ERROR_MESSAGE_INVALID_PUSH_OBJECT,
613
+ nil
614
+ )
615
+ }
616
+ }
617
+
618
+ @objc(updateStatusByCategories:status:withResolver:withRejecter:)
619
+ public func updateStatusByCategories(_ categoryList: [String],
620
+ status: Int,
621
+ resolver: @escaping RCTPromiseResolveBlock,
622
+ rejecter: @escaping RCTPromiseRejectBlock) {
623
+
624
+ guard let inbox = netmeraInbox else {
625
+ rejecter(ERROR_CODE_INBOX_NULL, ERROR_MESSAGE_INBOX_NULL, nil)
626
+ return
627
+ }
628
+
629
+ let netmeraStatus = NetmeraInboxStatus(rawValue: status)
630
+
631
+ inbox.updateStatus(netmeraStatus, for: categoryList) { result in
632
+ switch result {
633
+ case .success:
634
+ resolver(true)
635
+ case .failure(let error):
636
+ rejecter(
637
+ ERROR_CODE_UPDATE_STATUS,
638
+ "\(ERROR_MESSAGE_UPDATE_STATUS): \(error.localizedDescription)",
639
+ nil
640
+ )
641
+ }
642
+ }
643
+ }
644
+
645
+ @objc(updateAll:withResolver:withRejecter:)
646
+ func updateAll(inboxStatus: NSInteger,
647
+ resolver: @escaping RCTPromiseResolveBlock,
648
+ rejecter: @escaping RCTPromiseRejectBlock) {
649
+ guard let inbox = netmeraInbox else {
650
+ rejecter(ERROR_CODE_UPDATE_STATUS, ERROR_MESSAGE_UPDATE_STATUS, nil)
651
+ return
652
+ }
653
+
654
+ inbox.updateStatusForAllPushObjects(NetmeraInboxStatus(rawValue: inboxStatus)) { status in
655
+ switch status {
656
+ case .success:
657
+ resolver(true)
658
+ case .failure(let error):
659
+ rejecter(ERROR_CODE_UPDATE_STATUS, ERROR_MESSAGE_UPDATE_STATUS, error)
660
+ }
661
+ }
662
+ }
663
+
664
+ @objc(getInboxCountForStatus:withResolver:withRejecter:)
665
+ func getInboxCountForStatus(filterDictionary: NSDictionary,
666
+ resolver: @escaping RCTPromiseResolveBlock,
667
+ rejecter: @escaping RCTPromiseRejectBlock) {
668
+ guard let statusValue = filterDictionary["status"] as? Int else {
669
+ rejecter(ERROR_CODE_NULL_INBOX_STATUS, ERROR_MESSAGE_NULL_INBOX_STATUS, nil)
670
+ return
671
+ }
672
+
673
+ let status = RNNetmeraUtils.shared.getInboxStatus(code: statusValue)
674
+ let shouldIncludeExpiredObjects = filterDictionary["includeExpiredObjects"] as? Bool ?? false
675
+ let categories = filterDictionary["categoryList"] as? [String] ?? []
676
+
677
+ let filter = NetmeraInboxCountFilter(
678
+ status: status,
679
+ shouldIncludeExpiredObjects: shouldIncludeExpiredObjects,
680
+ categories: categories
681
+ )
682
+
683
+ Netmera.fetchInboxCount(with: filter) { resultStatus in
684
+ switch resultStatus {
685
+ case .success(let response):
686
+ let responseMap = RNNetmeraUtils.shared.parseInboxCount(for: response)
687
+ resolver(responseMap)
688
+ case .failure(let error):
689
+ rejecter(ERROR_CODE_INBOX_STATUS, ERROR_MESSAGE_INBOX_STATUS, error)
690
+ }
691
+ }
692
+ }
693
+
694
+ // MARK: - Permission Methods
695
+
696
+ @objc(setEmailPermission:withResolver:withRejecter:)
697
+ func setEmailPermission(isAllowed: Bool,
698
+ resolve: RCTPromiseResolveBlock,
699
+ reject: RCTPromiseRejectBlock) {
700
+ Netmera.setEmailPermission(isAllowed: isAllowed)
701
+ resolve(nil)
702
+ }
703
+
704
+ @objc(getEmailPermission:withRejecter:)
705
+ func getEmailPermission(resolve: @escaping RCTPromiseResolveBlock,
706
+ reject: @escaping RCTPromiseRejectBlock) {
707
+ Netmera.getEmailPermission { result in
708
+ switch result {
709
+ case .success(let isAllowed):
710
+ resolve(isAllowed)
711
+ case .failure(let error):
712
+ reject(ERROR_CODE_EMAIL_PERMISSION, ERROR_MESSAGE_EMAIL_PERMISSION, error)
713
+ }
714
+ }
715
+ }
716
+
717
+ @objc(setSmsPermission:withResolver:withRejecter:)
718
+ func setSmsPermission(isAllowed: Bool,
719
+ resolve: RCTPromiseResolveBlock,
720
+ reject: RCTPromiseRejectBlock) {
721
+ Netmera.setSmsPermission(isAllowed: isAllowed)
722
+ resolve(nil)
723
+ }
724
+
725
+ @objc(getSmsPermission:withRejecter:)
726
+ func getSmsPermission(resolve: @escaping RCTPromiseResolveBlock,
727
+ reject: @escaping RCTPromiseRejectBlock) {
728
+ Netmera.getSmsPermission { result in
729
+ switch result {
730
+ case .success(let isAllowed):
731
+ resolve(isAllowed)
732
+ case .failure(let error):
733
+ reject(ERROR_CODE_SMS_PERMISSION, ERROR_MESSAGE_SMS_PERMISSION, error)
734
+ }
735
+ }
736
+ }
737
+
738
+ @objc(setWhatsAppPermission:withResolver:withRejecter:)
739
+ func setWhatsAppPermission(isAllowed: Bool,
740
+ resolve: RCTPromiseResolveBlock,
741
+ reject: RCTPromiseRejectBlock) {
742
+ Netmera.setWhatsAppPermission(isAllowed: isAllowed)
743
+ resolve(nil)
744
+ }
745
+
746
+ @objc(getWhatsAppPermission:withRejecter:)
747
+ func getWhatsAppPermission(resolve: @escaping RCTPromiseResolveBlock,
748
+ reject: @escaping RCTPromiseRejectBlock) {
749
+ Netmera.getWhatsAppPermission { result in
750
+ switch result {
751
+ case .success(let isAllowed):
752
+ resolve(isAllowed)
753
+ case .failure(let error):
754
+ reject(ERROR_CODE_WHATSAPP_PERMISSION, ERROR_MESSAGE_WHATSAPP_PERMISSION, error)
755
+ }
756
+ }
757
+ }
758
+
759
+ }