@trycourier/courier-react-native 3.2.2 → 4.1.0

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 (253) hide show
  1. package/README.md +14 -3
  2. package/android/build.gradle +4 -1
  3. package/android/src/main/java/com/courierreactnative/CourierClientModule.kt +441 -0
  4. package/android/src/main/java/com/courierreactnative/CourierInboxViewManager.kt +2 -2
  5. package/android/src/main/java/com/courierreactnative/CourierReactNativeActivity.kt +4 -0
  6. package/android/src/main/java/com/courierreactnative/CourierReactNativePackage.kt +9 -3
  7. package/android/src/main/java/com/courierreactnative/CourierSharedModule.kt +312 -0
  8. package/android/src/main/java/com/courierreactnative/CourierSystemModule.kt +91 -0
  9. package/android/src/main/java/com/courierreactnative/ReactNativeModule.kt +36 -0
  10. package/android/src/main/java/com/courierreactnative/{Extensions.kt → Utils.kt} +5 -5
  11. package/courier-react-native.podspec +1 -1
  12. package/ios/CourierClientModule.swift +450 -0
  13. package/ios/CourierInboxReactNativeManager.swift +17 -9
  14. package/ios/CourierReactNativeDelegate.m +21 -35
  15. package/ios/CourierReactNativeEventEmitter.swift +25 -0
  16. package/ios/CourierReactNativeModule.m +192 -23
  17. package/ios/CourierSharedModule.swift +412 -0
  18. package/ios/CourierSystemModule.swift +136 -0
  19. package/ios/Utils.swift +103 -115
  20. package/lib/commonjs/Broadcaster.js +30 -0
  21. package/lib/commonjs/Broadcaster.js.map +1 -0
  22. package/lib/commonjs/Modules.js +25 -0
  23. package/lib/commonjs/Modules.js.map +1 -0
  24. package/lib/commonjs/client/BrandClient.js +25 -0
  25. package/lib/commonjs/client/BrandClient.js.map +1 -0
  26. package/lib/commonjs/client/ClientModule.js +21 -0
  27. package/lib/commonjs/client/ClientModule.js.map +1 -0
  28. package/lib/commonjs/client/CourierClient.js +33 -0
  29. package/lib/commonjs/client/CourierClient.js.map +1 -0
  30. package/lib/commonjs/client/InboxClient.js +116 -0
  31. package/lib/commonjs/client/InboxClient.js.map +1 -0
  32. package/lib/commonjs/client/PreferenceClient.js +73 -0
  33. package/lib/commonjs/client/PreferenceClient.js.map +1 -0
  34. package/lib/commonjs/client/TokenClient.js +36 -0
  35. package/lib/commonjs/client/TokenClient.js.map +1 -0
  36. package/lib/commonjs/client/TrackingClient.js +25 -0
  37. package/lib/commonjs/client/TrackingClient.js.map +1 -0
  38. package/lib/commonjs/index.js +418 -186
  39. package/lib/commonjs/index.js.map +1 -1
  40. package/lib/commonjs/models/Android_CourierSheet.js.map +1 -1
  41. package/lib/commonjs/models/CourierAuthenticationListener.js.map +1 -1
  42. package/lib/commonjs/models/CourierBrand.js +2 -0
  43. package/lib/commonjs/models/{CourierUserPreferencesTopic.js.map → CourierBrand.js.map} +1 -1
  44. package/lib/commonjs/models/CourierButton.js.map +1 -1
  45. package/lib/commonjs/models/CourierDevice.js +2 -0
  46. package/lib/commonjs/models/CourierDevice.js.map +1 -0
  47. package/lib/commonjs/models/CourierFont.js.map +1 -1
  48. package/lib/commonjs/models/CourierInboxListener.js +2 -2
  49. package/lib/commonjs/models/CourierInboxListener.js.map +1 -1
  50. package/lib/commonjs/models/{CourierUserPreferencesTopic.js → CourierInboxMessages.js} +1 -1
  51. package/lib/commonjs/models/CourierInboxMessages.js.map +1 -0
  52. package/lib/commonjs/models/CourierInboxTheme.js.map +1 -1
  53. package/lib/commonjs/models/CourierInfoViewStyle.js.map +1 -1
  54. package/lib/commonjs/models/CourierPaging.js.map +1 -1
  55. package/lib/commonjs/models/CourierPreferencesTheme.js.map +1 -1
  56. package/lib/commonjs/models/CourierPushListener.js +7 -3
  57. package/lib/commonjs/models/CourierPushListener.js.map +1 -1
  58. package/lib/commonjs/models/CourierPushProvider.js.map +1 -1
  59. package/lib/commonjs/models/CourierTrackingEvent.js +16 -0
  60. package/lib/commonjs/models/CourierTrackingEvent.js.map +1 -0
  61. package/lib/commonjs/models/CourierUserPreferences.js +54 -0
  62. package/lib/commonjs/models/CourierUserPreferences.js.map +1 -1
  63. package/lib/commonjs/models/InboxAction.js.map +1 -1
  64. package/lib/commonjs/models/InboxMessage.js.map +1 -1
  65. package/lib/commonjs/models/iOS_CourierCell.js.map +1 -1
  66. package/lib/commonjs/models/iOS_CourierSheet.js.map +1 -1
  67. package/lib/commonjs/utils.js +9 -17
  68. package/lib/commonjs/utils.js.map +1 -1
  69. package/lib/commonjs/views/CourierInboxView.js +3 -3
  70. package/lib/commonjs/views/CourierInboxView.js.map +1 -1
  71. package/lib/commonjs/views/CourierPreferencesView.js.map +1 -1
  72. package/lib/module/Broadcaster.js +23 -0
  73. package/lib/module/Broadcaster.js.map +1 -0
  74. package/lib/module/Modules.js +18 -0
  75. package/lib/module/Modules.js.map +1 -0
  76. package/lib/module/client/BrandClient.js +18 -0
  77. package/lib/module/client/BrandClient.js.map +1 -0
  78. package/lib/module/client/ClientModule.js +14 -0
  79. package/lib/module/client/ClientModule.js.map +1 -0
  80. package/lib/module/client/CourierClient.js +26 -0
  81. package/lib/module/client/CourierClient.js.map +1 -0
  82. package/lib/module/client/InboxClient.js +109 -0
  83. package/lib/module/client/InboxClient.js.map +1 -0
  84. package/lib/module/client/PreferenceClient.js +66 -0
  85. package/lib/module/client/PreferenceClient.js.map +1 -0
  86. package/lib/module/client/TokenClient.js +29 -0
  87. package/lib/module/client/TokenClient.js.map +1 -0
  88. package/lib/module/client/TrackingClient.js +18 -0
  89. package/lib/module/client/TrackingClient.js.map +1 -0
  90. package/lib/module/index.js +383 -185
  91. package/lib/module/index.js.map +1 -1
  92. package/lib/module/models/Android_CourierSheet.js.map +1 -1
  93. package/lib/module/models/CourierAuthenticationListener.js.map +1 -1
  94. package/lib/module/models/CourierBrand.js +2 -0
  95. package/lib/module/models/{CourierUserPreferencesTopic.js.map → CourierBrand.js.map} +1 -1
  96. package/lib/module/models/CourierButton.js.map +1 -1
  97. package/lib/module/models/CourierDevice.js +2 -0
  98. package/lib/module/models/CourierDevice.js.map +1 -0
  99. package/lib/module/models/CourierFont.js.map +1 -1
  100. package/lib/module/models/CourierInboxListener.js +1 -1
  101. package/lib/module/models/CourierInboxListener.js.map +1 -1
  102. package/lib/module/models/CourierInboxMessages.js +2 -0
  103. package/lib/module/models/CourierInboxMessages.js.map +1 -0
  104. package/lib/module/models/CourierInboxTheme.js.map +1 -1
  105. package/lib/module/models/CourierInfoViewStyle.js.map +1 -1
  106. package/lib/module/models/CourierPaging.js.map +1 -1
  107. package/lib/module/models/CourierPreferencesTheme.js.map +1 -1
  108. package/lib/module/models/CourierPushListener.js +7 -3
  109. package/lib/module/models/CourierPushListener.js.map +1 -1
  110. package/lib/module/models/CourierPushProvider.js.map +1 -1
  111. package/lib/module/models/CourierTrackingEvent.js +9 -0
  112. package/lib/module/models/CourierTrackingEvent.js.map +1 -0
  113. package/lib/module/models/CourierUserPreferences.js +53 -1
  114. package/lib/module/models/CourierUserPreferences.js.map +1 -1
  115. package/lib/module/models/InboxAction.js.map +1 -1
  116. package/lib/module/models/InboxMessage.js.map +1 -1
  117. package/lib/module/models/iOS_CourierCell.js.map +1 -1
  118. package/lib/module/models/iOS_CourierSheet.js.map +1 -1
  119. package/lib/module/utils.js +7 -16
  120. package/lib/module/utils.js.map +1 -1
  121. package/lib/module/views/CourierInboxView.js +3 -3
  122. package/lib/module/views/CourierInboxView.js.map +1 -1
  123. package/lib/module/views/CourierPreferencesView.js.map +1 -1
  124. package/lib/typescript/src/Broadcaster.d.ts +14 -0
  125. package/lib/typescript/src/Broadcaster.d.ts.map +1 -0
  126. package/lib/typescript/src/Modules.d.ts +8 -0
  127. package/lib/typescript/src/Modules.d.ts.map +1 -0
  128. package/lib/typescript/src/client/BrandClient.d.ts +15 -0
  129. package/lib/typescript/src/client/BrandClient.d.ts.map +1 -0
  130. package/lib/typescript/src/client/ClientModule.d.ts +8 -0
  131. package/lib/typescript/src/client/ClientModule.d.ts.map +1 -0
  132. package/lib/typescript/src/client/CourierClient.d.ts +31 -0
  133. package/lib/typescript/src/client/CourierClient.d.ts.map +1 -0
  134. package/lib/typescript/src/client/InboxClient.d.ts +94 -0
  135. package/lib/typescript/src/client/InboxClient.d.ts.map +1 -0
  136. package/lib/typescript/src/client/PreferenceClient.d.ts +39 -0
  137. package/lib/typescript/src/client/PreferenceClient.d.ts.map +1 -0
  138. package/lib/typescript/src/client/TokenClient.d.ts +28 -0
  139. package/lib/typescript/src/client/TokenClient.d.ts.map +1 -0
  140. package/lib/typescript/src/client/TrackingClient.d.ts +17 -0
  141. package/lib/typescript/src/client/TrackingClient.d.ts.map +1 -0
  142. package/lib/typescript/src/index.d.ts +300 -0
  143. package/lib/typescript/src/index.d.ts.map +1 -0
  144. package/lib/typescript/src/models/Android_CourierSheet.d.ts.map +1 -0
  145. package/lib/typescript/src/models/CourierAuthenticationListener.d.ts.map +1 -0
  146. package/lib/typescript/src/models/CourierBrand.d.ts +20 -0
  147. package/lib/typescript/src/models/CourierBrand.d.ts.map +1 -0
  148. package/lib/typescript/src/models/CourierButton.d.ts.map +1 -0
  149. package/lib/typescript/src/models/CourierDevice.d.ts +9 -0
  150. package/lib/typescript/src/models/CourierDevice.d.ts.map +1 -0
  151. package/lib/typescript/src/models/CourierFont.d.ts.map +1 -0
  152. package/lib/typescript/src/models/CourierInboxListener.d.ts.map +1 -0
  153. package/lib/typescript/src/models/CourierInboxMessages.d.ts +23 -0
  154. package/lib/typescript/src/models/CourierInboxMessages.d.ts.map +1 -0
  155. package/lib/typescript/src/models/CourierInboxTheme.d.ts.map +1 -0
  156. package/lib/typescript/src/models/CourierInfoViewStyle.d.ts.map +1 -0
  157. package/lib/typescript/src/models/CourierPaging.d.ts.map +1 -0
  158. package/lib/typescript/src/models/CourierPreferencesTheme.d.ts.map +1 -0
  159. package/lib/typescript/src/models/CourierPushListener.d.ts +8 -0
  160. package/lib/typescript/src/models/CourierPushListener.d.ts.map +1 -0
  161. package/lib/typescript/src/models/CourierPushProvider.d.ts.map +1 -0
  162. package/lib/typescript/src/models/CourierTrackingEvent.d.ts +8 -0
  163. package/lib/typescript/src/models/CourierTrackingEvent.d.ts.map +1 -0
  164. package/lib/typescript/src/models/CourierUserPreferences.d.ts +35 -0
  165. package/lib/typescript/src/models/CourierUserPreferences.d.ts.map +1 -0
  166. package/lib/typescript/src/models/InboxAction.d.ts.map +1 -0
  167. package/lib/typescript/src/models/InboxMessage.d.ts.map +1 -0
  168. package/lib/typescript/src/models/iOS_CourierCell.d.ts.map +1 -0
  169. package/lib/typescript/src/models/iOS_CourierSheet.d.ts.map +1 -0
  170. package/lib/typescript/src/utils.d.ts +14 -0
  171. package/lib/typescript/src/utils.d.ts.map +1 -0
  172. package/lib/typescript/src/views/CourierInboxView.d.ts.map +1 -0
  173. package/lib/typescript/src/views/CourierPreferencesView.d.ts.map +1 -0
  174. package/package.json +3 -3
  175. package/src/Broadcaster.tsx +32 -0
  176. package/src/Modules.tsx +28 -0
  177. package/src/client/BrandClient.tsx +23 -0
  178. package/src/client/ClientModule.tsx +21 -0
  179. package/src/client/CourierClient.tsx +49 -0
  180. package/src/client/InboxClient.tsx +114 -0
  181. package/src/client/PreferenceClient.tsx +77 -0
  182. package/src/client/TokenClient.tsx +34 -0
  183. package/src/client/TrackingClient.tsx +23 -0
  184. package/src/index.tsx +398 -205
  185. package/src/models/CourierBrand.tsx +24 -0
  186. package/src/models/CourierDevice.tsx +8 -0
  187. package/src/models/CourierInboxListener.tsx +1 -1
  188. package/src/models/CourierInboxMessages.tsx +28 -0
  189. package/src/models/CourierPushListener.tsx +11 -6
  190. package/src/models/CourierTrackingEvent.tsx +7 -0
  191. package/src/models/CourierUserPreferences.tsx +70 -3
  192. package/src/utils.tsx +7 -23
  193. package/src/views/CourierInboxView.tsx +3 -3
  194. package/android/src/main/java/com/courierreactnative/CourierReactNativeModule.kt +0 -393
  195. package/ios/CourierReactNativeModule.swift +0 -524
  196. package/lib/commonjs/models/CourierUserPreferencesChannel.js +0 -17
  197. package/lib/commonjs/models/CourierUserPreferencesChannel.js.map +0 -1
  198. package/lib/commonjs/models/CourierUserPreferencesStatus.js +0 -15
  199. package/lib/commonjs/models/CourierUserPreferencesStatus.js.map +0 -1
  200. package/lib/module/models/CourierUserPreferencesChannel.js +0 -10
  201. package/lib/module/models/CourierUserPreferencesChannel.js.map +0 -1
  202. package/lib/module/models/CourierUserPreferencesStatus.js +0 -8
  203. package/lib/module/models/CourierUserPreferencesStatus.js.map +0 -1
  204. package/lib/module/models/CourierUserPreferencesTopic.js +0 -2
  205. package/lib/typescript/index.d.ts +0 -199
  206. package/lib/typescript/index.d.ts.map +0 -1
  207. package/lib/typescript/models/Android_CourierSheet.d.ts.map +0 -1
  208. package/lib/typescript/models/CourierAuthenticationListener.d.ts.map +0 -1
  209. package/lib/typescript/models/CourierButton.d.ts.map +0 -1
  210. package/lib/typescript/models/CourierFont.d.ts.map +0 -1
  211. package/lib/typescript/models/CourierInboxListener.d.ts.map +0 -1
  212. package/lib/typescript/models/CourierInboxTheme.d.ts.map +0 -1
  213. package/lib/typescript/models/CourierInfoViewStyle.d.ts.map +0 -1
  214. package/lib/typescript/models/CourierPaging.d.ts.map +0 -1
  215. package/lib/typescript/models/CourierPreferencesTheme.d.ts.map +0 -1
  216. package/lib/typescript/models/CourierPushListener.d.ts +0 -7
  217. package/lib/typescript/models/CourierPushListener.d.ts.map +0 -1
  218. package/lib/typescript/models/CourierPushProvider.d.ts.map +0 -1
  219. package/lib/typescript/models/CourierUserPreferences.d.ts +0 -7
  220. package/lib/typescript/models/CourierUserPreferences.d.ts.map +0 -1
  221. package/lib/typescript/models/CourierUserPreferencesChannel.d.ts +0 -9
  222. package/lib/typescript/models/CourierUserPreferencesChannel.d.ts.map +0 -1
  223. package/lib/typescript/models/CourierUserPreferencesStatus.d.ts +0 -7
  224. package/lib/typescript/models/CourierUserPreferencesStatus.d.ts.map +0 -1
  225. package/lib/typescript/models/CourierUserPreferencesTopic.d.ts +0 -13
  226. package/lib/typescript/models/CourierUserPreferencesTopic.d.ts.map +0 -1
  227. package/lib/typescript/models/InboxAction.d.ts.map +0 -1
  228. package/lib/typescript/models/InboxMessage.d.ts.map +0 -1
  229. package/lib/typescript/models/iOS_CourierCell.d.ts.map +0 -1
  230. package/lib/typescript/models/iOS_CourierSheet.d.ts.map +0 -1
  231. package/lib/typescript/utils.d.ts +0 -21
  232. package/lib/typescript/utils.d.ts.map +0 -1
  233. package/lib/typescript/views/CourierInboxView.d.ts.map +0 -1
  234. package/lib/typescript/views/CourierPreferencesView.d.ts.map +0 -1
  235. package/src/models/CourierUserPreferencesChannel.tsx +0 -8
  236. package/src/models/CourierUserPreferencesStatus.tsx +0 -6
  237. package/src/models/CourierUserPreferencesTopic.tsx +0 -13
  238. /package/lib/typescript/{models → src/models}/Android_CourierSheet.d.ts +0 -0
  239. /package/lib/typescript/{models → src/models}/CourierAuthenticationListener.d.ts +0 -0
  240. /package/lib/typescript/{models → src/models}/CourierButton.d.ts +0 -0
  241. /package/lib/typescript/{models → src/models}/CourierFont.d.ts +0 -0
  242. /package/lib/typescript/{models → src/models}/CourierInboxListener.d.ts +0 -0
  243. /package/lib/typescript/{models → src/models}/CourierInboxTheme.d.ts +0 -0
  244. /package/lib/typescript/{models → src/models}/CourierInfoViewStyle.d.ts +0 -0
  245. /package/lib/typescript/{models → src/models}/CourierPaging.d.ts +0 -0
  246. /package/lib/typescript/{models → src/models}/CourierPreferencesTheme.d.ts +0 -0
  247. /package/lib/typescript/{models → src/models}/CourierPushProvider.d.ts +0 -0
  248. /package/lib/typescript/{models → src/models}/InboxAction.d.ts +0 -0
  249. /package/lib/typescript/{models → src/models}/InboxMessage.d.ts +0 -0
  250. /package/lib/typescript/{models → src/models}/iOS_CourierCell.d.ts +0 -0
  251. /package/lib/typescript/{models → src/models}/iOS_CourierSheet.d.ts +0 -0
  252. /package/lib/typescript/{views → src/views}/CourierInboxView.d.ts +0 -0
  253. /package/lib/typescript/{views → src/views}/CourierPreferencesView.d.ts +0 -0
@@ -0,0 +1,450 @@
1
+ //
2
+ // CourierClientModule.swift
3
+ // courier-react-native
4
+ //
5
+ // Created by Michael Miller on 8/21/24.
6
+ //
7
+
8
+ import Courier_iOS
9
+
10
+ @objc(CourierClientModule)
11
+ internal class CourierClientModule: CourierReactNativeEventEmitter {
12
+
13
+ private var clients: [String: CourierClient] = [:]
14
+
15
+ @objc(addClient:)
16
+ func addClient(options: NSDictionary) -> String {
17
+
18
+ guard let userId = options["userId"] as? String, let showLogs = options["showLogs"] as? Bool else {
19
+ return "invalid"
20
+ }
21
+
22
+ let client = CourierClient(
23
+ jwt: options["jwt"] as? String,
24
+ clientKey: options["clientKey"] as? String,
25
+ userId: userId,
26
+ connectionId: options["connectionId"] as? String,
27
+ tenantId: options["tenantId"] as? String,
28
+ showLogs: showLogs
29
+ )
30
+
31
+ let uuid = UUID().uuidString
32
+ clients[uuid] = client
33
+
34
+ return uuid
35
+
36
+ }
37
+
38
+ @objc(removeClient:)
39
+ func removeClient(clientId: NSString) -> String {
40
+ let id = clientId as String
41
+ clients.removeValue(forKey: id)
42
+ return id
43
+ }
44
+
45
+ // MARK: Tokens
46
+
47
+ @objc(putUserToken:withToken:withProvider:withDevice:withResolver:withRejecter:)
48
+ func putUserToken(clientId: NSString, token: NSString, provider: NSString, device: NSDictionary?, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
49
+
50
+ guard let client = clients[clientId as String] else {
51
+ Rejections.missingClient(reject)
52
+ return
53
+ }
54
+
55
+ let courierDevice: CourierDevice? = device.flatMap {
56
+ CourierDevice(
57
+ appId: $0["appId"] as? String,
58
+ adId: $0["adId"] as? String,
59
+ deviceId: $0["deviceId"] as? String,
60
+ platform: $0["platform"] as? String,
61
+ manufacturer: $0["manufacturer"] as? String,
62
+ model: $0["model"] as? String
63
+ )
64
+ }
65
+
66
+ let token = token as String
67
+ let provider = provider as String
68
+
69
+ Task {
70
+ do {
71
+ try await client.tokens.putUserToken(
72
+ token: token,
73
+ provider: provider,
74
+ device: courierDevice ?? CourierDevice()
75
+ )
76
+ resolve(nil)
77
+ } catch {
78
+ Rejections.clientError(reject, error: error)
79
+ }
80
+ }
81
+
82
+ }
83
+
84
+ @objc(deleteUserToken:withToken:withResolver:withRejecter:)
85
+ func deleteUserToken(clientId: NSString, token: NSString, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
86
+
87
+ guard let client = clients[clientId as String] else {
88
+ Rejections.missingClient(reject)
89
+ return
90
+ }
91
+
92
+ let token = token as String
93
+
94
+ Task {
95
+ do {
96
+ try await client.tokens.deleteUserToken(
97
+ token: token
98
+ )
99
+ resolve(nil)
100
+ } catch {
101
+ Rejections.clientError(reject, error: error)
102
+ }
103
+ }
104
+ }
105
+
106
+ // MARK: Barnd
107
+
108
+ @objc(getBrand:withBrandId:withResolver:withRejecter:)
109
+ func getBrand(clientId: NSString, brandId: NSString, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
110
+
111
+ guard let client = clients[clientId as String] else {
112
+ Rejections.missingClient(reject)
113
+ return
114
+ }
115
+
116
+ let brandId = brandId as String
117
+
118
+ Task {
119
+ do {
120
+ let brand = try await client.brands.getBrand(
121
+ brandId: brandId
122
+ )
123
+ let json = try brand.toJson()
124
+ resolve(json)
125
+ } catch {
126
+ Rejections.clientError(reject, error: error)
127
+ }
128
+ }
129
+
130
+ }
131
+
132
+ // MARK: Inbox
133
+
134
+ @objc(getMessages:withPaginationLimit:withStartCursor:withResolver:withRejecter:)
135
+ func getMessages(clientId: NSString, paginationLimit: Double, startCursor: NSString?, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
136
+
137
+ guard let client = clients[clientId as String] else {
138
+ Rejections.missingClient(reject)
139
+ return
140
+ }
141
+
142
+ let limit = Int(paginationLimit)
143
+ let startCursor = startCursor as? String
144
+
145
+ Task {
146
+ do {
147
+ let res = try await client.inbox.getMessages(
148
+ paginationLimit: limit,
149
+ startCursor: startCursor
150
+ )
151
+ let json = try res.toJson()
152
+ resolve(json)
153
+ } catch {
154
+ Rejections.clientError(reject, error: error)
155
+ }
156
+ }
157
+ }
158
+
159
+ @objc(getArchivedMessages:withPaginationLimit:withStartCursor:withResolver:withRejecter:)
160
+ func getArchivedMessages(clientId: NSString, paginationLimit: Double, startCursor: NSString?, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
161
+
162
+ guard let client = clients[clientId as String] else {
163
+ Rejections.missingClient(reject)
164
+ return
165
+ }
166
+
167
+ let limit = Int(paginationLimit)
168
+ let startCursor = startCursor as? String
169
+
170
+ Task {
171
+ do {
172
+ let res = try await client.inbox.getArchivedMessages(
173
+ paginationLimit: limit,
174
+ startCursor: startCursor
175
+ )
176
+ let json = try res.toJson()
177
+ resolve(json)
178
+ } catch {
179
+ Rejections.clientError(reject, error: error)
180
+ }
181
+ }
182
+ }
183
+
184
+ @objc(getMessageById:withMessageId:withResolver:withRejecter:)
185
+ func getMessageById(clientId: NSString, messageId: NSString, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
186
+
187
+ guard let client = clients[clientId as String] else {
188
+ Rejections.missingClient(reject)
189
+ return
190
+ }
191
+
192
+ let messageId = messageId as String
193
+
194
+ Task {
195
+ do {
196
+ let res = try await client.inbox.getMessage(messageId: messageId)
197
+ let json = try res.toJson()
198
+ resolve(json)
199
+ } catch {
200
+ Rejections.clientError(reject, error: error)
201
+ }
202
+ }
203
+ }
204
+
205
+ @objc(getUnreadMessageCount:withResolver:withRejecter:)
206
+ func getUnreadMessageCount(clientId: NSString, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
207
+
208
+ guard let client = clients[clientId as String] else {
209
+ Rejections.missingClient(reject)
210
+ return
211
+ }
212
+
213
+ Task {
214
+ do {
215
+ let count = try await client.inbox.getUnreadMessageCount()
216
+ resolve(count)
217
+ } catch {
218
+ Rejections.clientError(reject, error: error)
219
+ }
220
+ }
221
+ }
222
+
223
+ @objc(openMessage:withMessageId:withResolver:withRejecter:)
224
+ func openMessage(clientId: NSString, messageId: NSString, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
225
+
226
+ guard let client = clients[clientId as String] else {
227
+ Rejections.missingClient(reject)
228
+ return
229
+ }
230
+
231
+ let messageId = messageId as String
232
+
233
+ Task {
234
+ do {
235
+ try await client.inbox.open(
236
+ messageId: messageId
237
+ )
238
+ resolve(nil)
239
+ } catch {
240
+ Rejections.clientError(reject, error: error)
241
+ }
242
+ }
243
+ }
244
+
245
+ @objc(readMessage:withMessageId:withResolver:withRejecter:)
246
+ func readMessage(clientId: NSString, messageId: NSString, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
247
+
248
+ guard let client = clients[clientId as String] else {
249
+ Rejections.missingClient(reject)
250
+ return
251
+ }
252
+
253
+ let messageId = messageId as String
254
+
255
+ Task {
256
+ do {
257
+ try await client.inbox.read(
258
+ messageId: messageId
259
+ )
260
+ resolve(nil)
261
+ } catch {
262
+ Rejections.clientError(reject, error: error)
263
+ }
264
+ }
265
+ }
266
+
267
+ @objc(unreadMessage:withMessageId:withResolver:withRejecter:)
268
+ func unreadMessage(clientId: NSString, messageId: NSString, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
269
+
270
+ guard let client = clients[clientId as String] else {
271
+ Rejections.missingClient(reject)
272
+ return
273
+ }
274
+
275
+ let messageId = messageId as String
276
+
277
+ Task {
278
+ do {
279
+ try await client.inbox.unread(
280
+ messageId: messageId
281
+ )
282
+ resolve(nil)
283
+ } catch {
284
+ Rejections.clientError(reject, error: error)
285
+ }
286
+ }
287
+ }
288
+
289
+ @objc(clickMessage:withMessageId:withTrackingId:withResolver:withRejecter:)
290
+ func clickMessage(clientId: NSString, messageId: NSString, trackingId: NSString, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
291
+
292
+ guard let client = clients[clientId as String] else {
293
+ Rejections.missingClient(reject)
294
+ return
295
+ }
296
+
297
+ let messageId = messageId as String
298
+ let trackingId = trackingId as String
299
+
300
+ Task {
301
+ do {
302
+ try await client.inbox.click(
303
+ messageId: messageId,
304
+ trackingId: trackingId
305
+ )
306
+ resolve(nil)
307
+ } catch {
308
+ Rejections.clientError(reject, error: error)
309
+ }
310
+ }
311
+ }
312
+
313
+ @objc(archiveMessage:withMessageId:withResolver:withRejecter:)
314
+ func archiveMessage(clientId: NSString, messageId: NSString, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
315
+
316
+ guard let client = clients[clientId as String] else {
317
+ Rejections.missingClient(reject)
318
+ return
319
+ }
320
+
321
+ let messageId = messageId as String
322
+
323
+ Task {
324
+ do {
325
+ try await client.inbox.archive(
326
+ messageId: messageId
327
+ )
328
+ resolve(nil)
329
+ } catch {
330
+ Rejections.clientError(reject, error: error)
331
+ }
332
+ }
333
+ }
334
+
335
+ @objc(readAllMessages:withResolver:withRejecter:)
336
+ func readAllMessages(clientId: NSString, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
337
+
338
+ guard let client = clients[clientId as String] else {
339
+ Rejections.missingClient(reject)
340
+ return
341
+ }
342
+
343
+ Task {
344
+ do {
345
+ try await client.inbox.readAll()
346
+ resolve(nil)
347
+ } catch {
348
+ Rejections.clientError(reject, error: error)
349
+ }
350
+ }
351
+ }
352
+
353
+ @objc(getUserPreferences:withPaginationCursor:withResolver:withRejecter:)
354
+ func getUserPreferences(clientId: NSString, paginationCursor: NSString?, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
355
+
356
+ guard let client = clients[clientId as String] else {
357
+ Rejections.missingClient(reject)
358
+ return
359
+ }
360
+
361
+ let paginationCursor = paginationCursor as? String
362
+
363
+ Task {
364
+ do {
365
+ let res = try await client.preferences.getUserPreferences(
366
+ paginationCursor: paginationCursor
367
+ )
368
+ let json = try res.toJson()
369
+ resolve(json)
370
+ } catch {
371
+ Rejections.clientError(reject, error: error)
372
+ }
373
+ }
374
+ }
375
+
376
+ @objc(getUserPreferenceTopic:withTopicId:withResolver:withRejecter:)
377
+ func getUserPreferenceTopic(clientId: NSString, topicId: NSString, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
378
+
379
+ guard let client = clients[clientId as String] else {
380
+ Rejections.missingClient(reject)
381
+ return
382
+ }
383
+
384
+ let topicId = topicId as String
385
+
386
+ Task {
387
+ do {
388
+ let res = try await client.preferences.getUserPreferenceTopic(
389
+ topicId: topicId
390
+ )
391
+ let json = try res.toJson()
392
+ resolve(json)
393
+ } catch {
394
+ Rejections.clientError(reject, error: error)
395
+ }
396
+ }
397
+ }
398
+
399
+ @objc(putUserPreferenceTopic:withTopicId:withStatus:withHasCustomRouting:withCustomRouting:withResolver:withRejecter:)
400
+ func putUserPreferenceTopic(clientId: NSString, topicId: NSString, status: NSString, hasCustomRouting: Bool, customRouting: NSArray, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
401
+
402
+ guard let client = clients[clientId as String] else {
403
+ Rejections.missingClient(reject)
404
+ return
405
+ }
406
+
407
+ let topicId = topicId as String
408
+ let status = status as String
409
+ let customRouting = customRouting.compactMap { CourierUserPreferencesChannel.init(rawValue: $0 as! String) }
410
+
411
+ Task {
412
+ do {
413
+ try await client.preferences.putUserPreferenceTopic(
414
+ topicId: topicId,
415
+ status: CourierUserPreferencesStatus.init(rawValue: status) ?? .unknown,
416
+ hasCustomRouting: hasCustomRouting,
417
+ customRouting: customRouting
418
+ )
419
+ resolve(nil)
420
+ } catch {
421
+ Rejections.clientError(reject, error: error)
422
+ }
423
+ }
424
+ }
425
+
426
+ @objc(postTrackingUrl:withUrl:withEvent:withResolver:withRejecter:)
427
+ func postTrackingUrl(clientId: NSString, url: NSString, event: NSString, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
428
+
429
+ guard let client = clients[clientId as String] else {
430
+ Rejections.missingClient(reject)
431
+ return
432
+ }
433
+
434
+ let url = url as String
435
+ let event = event as String
436
+
437
+ Task {
438
+ do {
439
+ try await client.tracking.postTrackingUrl(
440
+ url: url,
441
+ event: CourierTrackingEvent(rawValue: event.uppercased()) ?? .clicked
442
+ )
443
+ resolve(nil)
444
+ } catch {
445
+ Rejections.clientError(reject, error: error)
446
+ }
447
+ }
448
+ }
449
+
450
+ }
@@ -42,17 +42,25 @@ class CourierInboxView : UIView {
42
42
  lightTheme: lightTheme?.toInboxTheme() ?? .defaultLight,
43
43
  darkTheme: darkTheme?.toInboxTheme() ?? .defaultDark,
44
44
  didClickInboxMessageAtIndex: { [weak self] message, index in
45
- self?.onClickInboxMessageAtIndex?([
46
- "message" : message.toDictionary(),
47
- "index" : index
48
- ])
45
+ do {
46
+ self?.onClickInboxMessageAtIndex?([
47
+ "message" : try message.toJson() ?? "",
48
+ "index" : index
49
+ ])
50
+ } catch {
51
+ Courier.shared.client?.error(error.localizedDescription)
52
+ }
49
53
  },
50
54
  didClickInboxActionForMessageAtIndex: { [weak self] action, message, index in
51
- self?.onClickInboxActionForMessageAtIndex?([
52
- "action" : action.toDictionary(),
53
- "message" : message.toDictionary(),
54
- "index" : index
55
- ])
55
+ do {
56
+ self?.onClickInboxActionForMessageAtIndex?([
57
+ "action" : try action.toJson() ?? "",
58
+ "message" : try message.toJson() ?? "",
59
+ "index" : index
60
+ ])
61
+ } catch {
62
+ Courier.shared.client?.error(error.localizedDescription)
63
+ }
56
64
  },
57
65
  didScrollInbox: { [weak self] scrollView in
58
66
  self?.onScrollInbox?([
@@ -21,6 +21,9 @@ NSUInteger notificationPresentationOptions = UNNotificationPresentationOptionNon
21
21
 
22
22
  if (self) {
23
23
 
24
+ // Set the user agent
25
+ Courier.agent = [CourierAgent reactNativeIOS:@"4.1.0"];
26
+
24
27
  // Register for remote notifications
25
28
  UIApplication *app = [UIApplication sharedApplication];
26
29
  [app registerForRemoteNotifications];
@@ -57,13 +60,11 @@ NSUInteger notificationPresentationOptions = UNNotificationPresentationOptionNon
57
60
  UNNotificationContent *content = notification.request.content;
58
61
  NSDictionary *message = content.userInfo;
59
62
 
60
- [[Courier shared] trackNotificationWithMessage:message event:CourierPushEventDelivered completionHandler:^(NSError *error)
61
- {
62
- if (error != nil) {
63
- [self log:error];
63
+ [message trackMessageWithEvent:CourierTrackingEventDelivered completion:^(NSError * _Nullable error) {
64
+ if (error) {
65
+ NSLog(@"Error tracking message: %@", error.localizedDescription);
64
66
  }
65
- }
66
- ];
67
+ }];
67
68
 
68
69
  dispatch_async(dispatch_get_main_queue(), ^{
69
70
 
@@ -82,50 +83,35 @@ NSUInteger notificationPresentationOptions = UNNotificationPresentationOptionNon
82
83
  UNNotificationContent *content = response.notification.request.content;
83
84
  NSDictionary *message = content.userInfo;
84
85
 
85
- [[Courier shared] trackNotificationWithMessage:message event:CourierPushEventClicked completionHandler:^(NSError *error)
86
- {
87
- if (error != nil) {
88
- [self log:error];
86
+ [message trackMessageWithEvent:CourierTrackingEventClicked completion:^(NSError * _Nullable error) {
87
+ if (error) {
88
+ NSLog(@"Error tracking message: %@", error.localizedDescription);
89
89
  }
90
- }
91
- ];
92
-
90
+ }];
91
+
93
92
  dispatch_async(dispatch_get_main_queue(), ^{
94
-
93
+
95
94
  NSDictionary *pushNotification = [Courier formatPushNotificationWithContent:content];
96
95
  [[NSNotificationCenter defaultCenter] postNotificationName:@"pushNotificationClicked" object:nil userInfo:pushNotification];
97
-
96
+
98
97
  completionHandler();
99
-
98
+
100
99
  });
101
100
 
102
101
  }
103
102
 
104
103
  - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
105
104
  {
106
- [self log:error];
105
+ NSLog(@"Failed to rgister for remote notification token: %@", error.localizedDescription);
107
106
  }
108
107
 
109
108
  - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
110
109
  {
111
-
112
- [[Courier shared]
113
- setAPNSToken:deviceToken
114
- onSuccess:^()
115
- {
116
- // Empty
117
- }
118
- onFailure:^(NSError *error)
119
- {
120
- [self log:error];
121
- }
122
- ];
123
-
124
- }
125
-
126
- - (void)log: (NSError*)error {
127
- NSString *err = [NSString stringWithFormat:@"%@", error];
128
- [Courier log:err];
110
+ [[Courier shared] setAPNSTokenWithRawToken:deviceToken completion:^(NSError * _Nullable error) {
111
+ if (error) {
112
+ NSLog(@"Error setting APNS Token: %@", error.localizedDescription);
113
+ }
114
+ }];
129
115
  }
130
116
 
131
117
  @end
@@ -0,0 +1,25 @@
1
+ //
2
+ // CourierReactNativeEventEmitter.swift
3
+ // courier-react-native
4
+ //
5
+ // Created by Michael Miller on 8/21/24.
6
+ //
7
+
8
+ import Courier_iOS
9
+
10
+ internal class CourierReactNativeEventEmitter: RCTEventEmitter {
11
+
12
+ override init() {
13
+ super.init()
14
+
15
+ // Set the user agent
16
+ // Used to know the platform performing requests
17
+ Courier.agent = CourierAgent.reactNativeIOS("4.1.0")
18
+
19
+ }
20
+
21
+ @objc override static func requiresMainQueueSetup() -> Bool {
22
+ return true
23
+ }
24
+
25
+ }