@snowplow/react-native-tracker 1.4.0 → 2.0.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 (239) hide show
  1. package/.editorconfig +15 -0
  2. package/.eslintignore +6 -0
  3. package/.gitattributes +3 -0
  4. package/.github/ISSUE_TEMPLATE/bug_report.md +29 -0
  5. package/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  6. package/.github/actions/setup/action.yml +28 -0
  7. package/.github/workflows/build.yml +150 -0
  8. package/.github/workflows/deploy.yml +98 -0
  9. package/.github/workflows/e2e-android.yml +121 -0
  10. package/.github/workflows/e2e-ios.yml +90 -0
  11. package/.github/workflows/snyk.yml +21 -0
  12. package/.gitignore +70 -0
  13. package/.npmignore +60 -0
  14. package/.nvmrc +1 -0
  15. package/.watchmanconfig +1 -0
  16. package/.yarnrc +3 -0
  17. package/CHANGELOG +166 -0
  18. package/CONTRIBUTING.md +80 -0
  19. package/README.md +23 -110
  20. package/android/build.gradle +93 -37
  21. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  22. package/android/gradle/wrapper/gradle-wrapper.properties +1 -2
  23. package/android/gradle.properties +5 -2
  24. package/android/gradlew +172 -110
  25. package/android/gradlew.bat +24 -19
  26. package/android/src/main/AndroidManifest.xml +1 -3
  27. package/android/src/main/AndroidManifestNew.xml +2 -0
  28. package/android/src/main/java/com/snowplow/reactnativetracker/ReactNativeTrackerModule.kt +704 -0
  29. package/android/src/main/java/com/snowplow/reactnativetracker/ReactNativeTrackerPackage.kt +17 -0
  30. package/android/src/main/java/com/snowplow/reactnativetracker/util/ConfigUtil.kt +271 -0
  31. package/android/src/main/java/com/snowplow/reactnativetracker/util/EventUtil.kt +213 -0
  32. package/android/src/main/java/com/snowplow/reactnativetracker/util/TrackerVersion.kt +5 -0
  33. package/babel.config.js +3 -0
  34. package/example/.watchmanconfig +1 -0
  35. package/example/Gemfile +6 -0
  36. package/example/android/app/build.gradle +129 -0
  37. package/example/android/app/debug.keystore +0 -0
  38. package/example/android/app/proguard-rules.pro +10 -0
  39. package/example/android/app/src/androidTest/java/com/reactnativetrackerexample/DetoxTest.java +36 -0
  40. package/example/android/app/src/androidTest/java/com/reactnativetrackerexample/DetoxTestAppJUnitRunner.java +21 -0
  41. package/example/android/app/src/debug/AndroidManifest.xml +13 -0
  42. package/example/android/app/src/debug/java/com/reactnativetrackerexample/ReactNativeFlipper.java +75 -0
  43. package/example/android/app/src/main/AndroidManifest.xml +26 -0
  44. package/example/android/app/src/main/java/com/reactnativetrackerexample/MainActivity.java +32 -0
  45. package/example/android/app/src/main/java/com/reactnativetrackerexample/MainApplication.java +62 -0
  46. package/example/android/app/src/main/res/drawable/rn_edit_text_material.xml +36 -0
  47. package/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  48. package/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
  49. package/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  50. package/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
  51. package/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  52. package/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
  53. package/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  54. package/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
  55. package/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  56. package/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
  57. package/example/android/app/src/main/res/values/strings.xml +3 -0
  58. package/example/android/app/src/main/res/values/styles.xml +9 -0
  59. package/example/android/app/src/release/java/com/reactnativetrackerexample/ReactNativeFlipper.java +20 -0
  60. package/example/android/build.gradle +31 -0
  61. package/example/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  62. package/example/android/gradle/wrapper/gradle-wrapper.properties +6 -0
  63. package/example/android/gradle.properties +44 -0
  64. package/example/android/gradlew +244 -0
  65. package/example/android/gradlew.bat +92 -0
  66. package/example/android/settings.gradle +4 -0
  67. package/example/app.json +4 -0
  68. package/example/babel.config.js +17 -0
  69. package/example/detox.config.js +92 -0
  70. package/example/e2e/config.json +10 -0
  71. package/example/e2e/emitEvents.e2e.detox.js +108 -0
  72. package/example/e2e/environment.js +23 -0
  73. package/example/e2e/helpers/microCommands.js +153 -0
  74. package/example/e2e/helpers/microHelpers.js +346 -0
  75. package/example/e2e/helpers/microHelpers.test.js +308 -0
  76. package/example/e2e/helpers/schemas.js +62 -0
  77. package/example/e2e/jest.config.js +16 -0
  78. package/example/e2e/setup.js +4 -0
  79. package/example/e2e/testEvents.micro.test.js +300 -0
  80. package/example/index.js +5 -0
  81. package/example/ios/.xcode.env +11 -0
  82. package/example/ios/Podfile +64 -0
  83. package/example/ios/Podfile.lock +737 -0
  84. package/example/ios/ReactNativeTrackerExample/AppDelegate.h +6 -0
  85. package/example/ios/ReactNativeTrackerExample/AppDelegate.mm +26 -0
  86. package/example/ios/ReactNativeTrackerExample/Images.xcassets/AppIcon.appiconset/Contents.json +53 -0
  87. package/example/ios/ReactNativeTrackerExample/Images.xcassets/Contents.json +6 -0
  88. package/example/ios/ReactNativeTrackerExample/Info.plist +55 -0
  89. package/example/ios/ReactNativeTrackerExample/LaunchScreen.storyboard +47 -0
  90. package/example/ios/ReactNativeTrackerExample/main.m +10 -0
  91. package/example/ios/ReactNativeTrackerExample-Bridging-Header.h +3 -0
  92. package/example/ios/ReactNativeTrackerExample.xcodeproj/project.pbxproj +722 -0
  93. package/{ios/RNSnowplowTracker.xcodeproj/xcshareddata/xcschemes/RNSnowplowTracker.xcscheme → example/ios/ReactNativeTrackerExample.xcodeproj/xcshareddata/xcschemes/ReactNativeTrackerExample.xcscheme} +29 -21
  94. package/example/ios/ReactNativeTrackerExample.xcworkspace/contents.xcworkspacedata +10 -0
  95. package/example/ios/ReactNativeTrackerExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  96. package/example/ios/ReactNativeTrackerExampleTests/Info.plist +24 -0
  97. package/example/ios/ReactNativeTrackerExampleTests/ReactNativeTrackerExampleTests.m +66 -0
  98. package/example/metro.config.js +45 -0
  99. package/example/package.json +54 -0
  100. package/example/react-native.config.js +10 -0
  101. package/example/src/App.js +557 -0
  102. package/example/tsconfig.json +5 -0
  103. package/example/yarn.lock +7379 -0
  104. package/ios/ReactNativeTracker-Bridging-Header.h +2 -0
  105. package/ios/ReactNativeTracker.mm +165 -0
  106. package/ios/ReactNativeTracker.swift +757 -0
  107. package/ios/{RNSnowplowTracker.xcodeproj → ReactNativeTracker.xcodeproj}/project.pbxproj +55 -79
  108. package/ios/Util/ConfigUtils.swift +206 -0
  109. package/ios/Util/TrackerVersion.swift +3 -0
  110. package/ios/Util/Utilities.swift +37 -0
  111. package/lefthook.yml +11 -0
  112. package/lib/commonjs/api.js +475 -0
  113. package/lib/commonjs/api.js.map +1 -0
  114. package/lib/commonjs/configurations.js +209 -0
  115. package/lib/commonjs/configurations.js.map +1 -0
  116. package/lib/commonjs/constants.js +85 -0
  117. package/lib/commonjs/constants.js.map +1 -0
  118. package/lib/commonjs/events.js +256 -0
  119. package/lib/commonjs/events.js.map +1 -0
  120. package/lib/commonjs/index.js +141 -0
  121. package/lib/commonjs/index.js.map +1 -0
  122. package/lib/commonjs/jsCore.js +393 -0
  123. package/lib/commonjs/jsCore.js.map +1 -0
  124. package/lib/commonjs/native.js +29 -0
  125. package/lib/commonjs/native.js.map +1 -0
  126. package/lib/commonjs/subject.js +248 -0
  127. package/lib/commonjs/subject.js.map +1 -0
  128. package/lib/commonjs/tracker.js +221 -0
  129. package/lib/commonjs/tracker.js.map +1 -0
  130. package/lib/commonjs/types.js +2 -0
  131. package/lib/commonjs/types.js.map +1 -0
  132. package/lib/commonjs/utils.js +85 -0
  133. package/lib/commonjs/utils.js.map +1 -0
  134. package/lib/commonjs/webViewInterface.js +79 -0
  135. package/lib/commonjs/webViewInterface.js.map +1 -0
  136. package/lib/module/api.js +439 -0
  137. package/lib/module/api.js.map +1 -0
  138. package/lib/module/configurations.js +197 -0
  139. package/lib/module/configurations.js.map +1 -0
  140. package/lib/module/constants.js +80 -0
  141. package/lib/module/constants.js.map +1 -0
  142. package/lib/module/events.js +240 -0
  143. package/lib/module/events.js.map +1 -0
  144. package/lib/module/index.js +129 -0
  145. package/lib/module/index.js.map +1 -0
  146. package/lib/module/jsCore.js +390 -0
  147. package/lib/module/jsCore.js.map +1 -0
  148. package/lib/module/native.js +25 -0
  149. package/lib/module/native.js.map +1 -0
  150. package/lib/module/subject.js +235 -0
  151. package/lib/module/subject.js.map +1 -0
  152. package/lib/module/tracker.js +209 -0
  153. package/lib/module/tracker.js.map +1 -0
  154. package/lib/module/types.js +2 -0
  155. package/lib/module/types.js.map +1 -0
  156. package/lib/module/utils.js +79 -0
  157. package/lib/module/utils.js.map +1 -0
  158. package/lib/module/webViewInterface.js +75 -0
  159. package/lib/module/webViewInterface.js.map +1 -0
  160. package/lib/typescript/__tests__/api.test.d.ts +2 -0
  161. package/lib/typescript/__tests__/api.test.d.ts.map +1 -0
  162. package/lib/typescript/__tests__/configurations.test.d.ts +2 -0
  163. package/lib/typescript/__tests__/configurations.test.d.ts.map +1 -0
  164. package/lib/typescript/__tests__/events.test.d.ts +2 -0
  165. package/lib/typescript/__tests__/events.test.d.ts.map +1 -0
  166. package/lib/typescript/__tests__/index.test.d.ts +2 -0
  167. package/lib/typescript/__tests__/index.test.d.ts.map +1 -0
  168. package/lib/typescript/__tests__/jsCore.test.d.ts +2 -0
  169. package/lib/typescript/__tests__/jsCore.test.d.ts.map +1 -0
  170. package/lib/typescript/__tests__/utils.test.d.ts +2 -0
  171. package/lib/typescript/__tests__/utils.test.d.ts.map +1 -0
  172. package/lib/typescript/api.d.ts +226 -0
  173. package/lib/typescript/api.d.ts.map +1 -0
  174. package/lib/typescript/configurations.d.ts +73 -0
  175. package/lib/typescript/configurations.d.ts.map +1 -0
  176. package/lib/typescript/constants.d.ts +59 -0
  177. package/lib/typescript/constants.d.ts.map +1 -0
  178. package/lib/typescript/events.d.ts +101 -0
  179. package/lib/typescript/events.d.ts.map +1 -0
  180. package/lib/typescript/index.d.ts +27 -0
  181. package/lib/typescript/index.d.ts.map +1 -0
  182. package/lib/typescript/jsCore.d.ts +140 -0
  183. package/lib/typescript/jsCore.d.ts.map +1 -0
  184. package/lib/typescript/native.d.ts +4 -0
  185. package/lib/typescript/native.d.ts.map +1 -0
  186. package/lib/typescript/subject.d.ts +91 -0
  187. package/lib/typescript/subject.d.ts.map +1 -0
  188. package/lib/typescript/tracker.d.ts +93 -0
  189. package/lib/typescript/tracker.d.ts.map +1 -0
  190. package/{dist/index.d.ts → lib/typescript/types.d.ts} +188 -75
  191. package/lib/typescript/types.d.ts.map +1 -0
  192. package/lib/typescript/utils.d.ts +35 -0
  193. package/lib/typescript/utils.d.ts.map +1 -0
  194. package/lib/typescript/webViewInterface.d.ts +15 -0
  195. package/lib/typescript/webViewInterface.d.ts.map +1 -0
  196. package/package.json +134 -52
  197. package/scripts/bootstrap.js +29 -0
  198. package/snowplow-react-native-tracker.podspec +42 -0
  199. package/src/__mocks__/react-native.js +7 -0
  200. package/src/__tests__/api.test.ts +34 -0
  201. package/src/__tests__/configurations.test.ts +620 -0
  202. package/src/__tests__/events.test.ts +749 -0
  203. package/src/__tests__/index.test.ts +27 -0
  204. package/src/__tests__/jsCore.test.ts +169 -0
  205. package/src/__tests__/utils.test.ts +23 -0
  206. package/src/api.ts +535 -0
  207. package/src/configurations.ts +337 -0
  208. package/src/constants.ts +102 -0
  209. package/src/events.ts +330 -0
  210. package/src/index.ts +189 -0
  211. package/src/jsCore.ts +553 -0
  212. package/src/native.ts +34 -0
  213. package/src/subject.ts +315 -0
  214. package/src/tracker.ts +330 -0
  215. package/src/types.ts +1087 -0
  216. package/src/utils.ts +78 -0
  217. package/src/webViewInterface.ts +105 -0
  218. package/tsconfig.build.json +5 -0
  219. package/tsconfig.json +28 -0
  220. package/turbo.json +34 -0
  221. package/yarn.lock +9333 -0
  222. package/RNSnowplowTracker.podspec +0 -24
  223. package/android/src/main/java/com/snowplowanalytics/react/tracker/RNSnowplowTrackerModule.java +0 -750
  224. package/android/src/main/java/com/snowplowanalytics/react/tracker/RNSnowplowTrackerPackage.java +0 -29
  225. package/android/src/main/java/com/snowplowanalytics/react/util/ConfigUtil.java +0 -351
  226. package/android/src/main/java/com/snowplowanalytics/react/util/EventUtil.java +0 -339
  227. package/android/src/main/java/com/snowplowanalytics/react/util/TrackerVersion.java +0 -7
  228. package/dist/index.js +0 -2026
  229. package/dist/index.js.map +0 -1
  230. package/ios/RNSnowplowTracker.h +0 -34
  231. package/ios/RNSnowplowTracker.m +0 -911
  232. package/ios/Util/NSDictionary+RNSP_TypeMethods.h +0 -33
  233. package/ios/Util/NSDictionary+RNSP_TypeMethods.m +0 -40
  234. package/ios/Util/RNConfigUtils.h +0 -44
  235. package/ios/Util/RNConfigUtils.m +0 -209
  236. package/ios/Util/RNTrackerVersion.h +0 -27
  237. package/ios/Util/RNTrackerVersion.m +0 -27
  238. package/ios/Util/RNUtilities.h +0 -32
  239. package/ios/Util/RNUtilities.m +0 -68
@@ -1,911 +0,0 @@
1
- //
2
- // RNSnowplowTracker.m
3
- //
4
- // Copyright (c) 2020-2023 Snowplow Analytics Ltd. All rights reserved.
5
- //
6
- // This program is licensed to you under the Apache License Version 2.0,
7
- // and you may not use this file except in compliance with the Apache License
8
- // Version 2.0. You may obtain a copy of the Apache License Version 2.0 at
9
- // http://www.apache.org/licenses/LICENSE-2.0.
10
- //
11
- // Unless required by applicable law or agreed to in writing,
12
- // software distributed under the Apache License Version 2.0 is distributed on
13
- // an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
14
- // express or implied. See the Apache License Version 2.0 for the specific
15
- // language governing permissions and limitations there under.
16
- //
17
- // Copyright: Copyright (c) 2023 Snowplow Analytics Ltd
18
- // License: Apache License Version 2.0
19
- //
20
-
21
- #import "RNSnowplowTracker.h"
22
- #import "RNConfigUtils.h"
23
- #import "RNUtilities.h"
24
- #import "NSDictionary+RNSP_TypeMethods.h"
25
-
26
- #import <SnowplowTracker/SPSnowplow.h>
27
- #import <SnowplowTracker/SPNetworkConfiguration.h>
28
- #import <SnowplowTracker/SPNetworkConnection.h>
29
- #import <SnowplowTracker/SPTrackerConfiguration.h>
30
- #import <SnowplowTracker/SPSessionConfiguration.h>
31
- #import <SnowplowTracker/SPEmitterConfiguration.h>
32
- #import <SnowplowTracker/SPSubjectConfiguration.h>
33
- #import <SnowplowTracker/SPGDPRConfiguration.h>
34
- #import <SnowplowTracker/SPGlobalContextsConfiguration.h>
35
- #import <SnowplowTracker/SPGlobalContext.h>
36
- #import <SnowplowTracker/SPSelfDescribingJson.h>
37
- #import <SnowplowTracker/SPSelfDescribing.h>
38
- #import <SnowplowTracker/SPScreenView.h>
39
- #import <SnowplowTracker/SPPageView.h>
40
- #import <SnowplowTracker/SPTiming.h>
41
- #import <SnowplowTracker/SPConsentGranted.h>
42
- #import <SnowplowTracker/SPConsentWithdrawn.h>
43
- #import <SnowplowTracker/SPStructured.h>
44
- #import <SnowplowTracker/SPEcommerceItem.h>
45
- #import <SnowplowTracker/SPEcommerce.h>
46
- #import <SnowplowTracker/SPDeepLinkReceived.h>
47
- #import <SnowplowTracker/SPMessageNotification.h>
48
-
49
-
50
- @implementation RNSnowplowTracker
51
-
52
- RCT_EXPORT_MODULE()
53
-
54
- RCT_EXPORT_METHOD(createTracker:
55
- (NSDictionary *)argmap
56
- resolver:(RCTPromiseResolveBlock)resolve
57
- rejecter:(RCTPromiseRejectBlock)reject) {
58
-
59
- NSString *trackerNs = [argmap objectForKey:@"namespace"];
60
- NSDictionary *networkConfig =[argmap objectForKey:@"networkConfig"];
61
-
62
- // NetworkConfiguration
63
- NSString *method = [networkConfig rnsp_stringForKey:@"method" defaultValue:nil];
64
- SPHttpMethod httpMethod = [@"get" isEqualToString:method] ? SPHttpMethodGet : SPHttpMethodPost;
65
- SPNetworkConfiguration *networkConfiguration = [[SPNetworkConfiguration alloc] initWithEndpoint:networkConfig[@"endpoint"] method:httpMethod];
66
- NSString *customPostPath = [networkConfig rnsp_stringForKey:@"customPostPath" defaultValue:nil];
67
- if (customPostPath != nil) {
68
- networkConfiguration.customPostPath = customPostPath;
69
- }
70
- NSObject *requestHeaders = [networkConfig objectForKey:@"requestHeaders"];
71
- if (requestHeaders != nil && [requestHeaders isKindOfClass:NSDictionary.class]) {
72
- networkConfiguration.requestHeaders = (NSDictionary *)requestHeaders;
73
- }
74
-
75
- // Configurations
76
- NSMutableArray *controllers = [NSMutableArray array];
77
-
78
- // TrackerConfiguration
79
- NSObject *trackerArg = [argmap objectForKey:@"trackerConfig"];
80
- if (trackerArg != nil && [trackerArg isKindOfClass:NSDictionary.class]) {
81
- SPTrackerConfiguration *trackerConfiguration = [RNConfigUtils mkTrackerConfig:(NSDictionary *)trackerArg];
82
- [controllers addObject:trackerConfiguration];
83
- }
84
-
85
- // SessionConfiguration
86
- NSObject *sessionArg = [argmap objectForKey:@"sessionConfig"];
87
- if (sessionArg != nil && [sessionArg isKindOfClass:NSDictionary.class]) {
88
- SPSessionConfiguration *sessionConfiguration = [RNConfigUtils mkSessionConfig:(NSDictionary *)sessionArg];
89
- [controllers addObject:sessionConfiguration];
90
- }
91
-
92
- // EmitterConfiguration
93
- NSObject *emitterArg = [argmap objectForKey:@"emitterConfig"];
94
- if (emitterArg !=nil && [emitterArg isKindOfClass:NSDictionary.class]) {
95
- SPEmitterConfiguration *emitterConfiguration = [RNConfigUtils mkEmitterConfig:(NSDictionary *)emitterArg];
96
- [controllers addObject:emitterConfiguration];
97
- }
98
-
99
- // SubjectConfiguration
100
- NSObject *subjectArg = [argmap objectForKey:@"subjectConfig"];
101
- if (subjectArg != nil && [subjectArg isKindOfClass:NSDictionary.class]) {
102
- SPSubjectConfiguration *subjectConfiguration = [RNConfigUtils mkSubjectConfig:(NSDictionary *)subjectArg];
103
- [controllers addObject:subjectConfiguration];
104
- }
105
-
106
- // GdprConfiguration
107
- NSObject *gdprArg = [argmap objectForKey:@"gdprConfig"];
108
- if (gdprArg != nil && [gdprArg isKindOfClass:NSDictionary.class]) {
109
- SPGDPRConfiguration *gdprConfiguration = [RNConfigUtils mkGdprConfig:(NSDictionary *)gdprArg];
110
- [controllers addObject:gdprConfiguration];
111
- }
112
-
113
- // GConfiguration
114
- NSObject *gcArg = [argmap objectForKey:@"gcConfig"];
115
- if (gcArg != nil && [gcArg isKindOfClass:NSArray.class]) {
116
- SPGlobalContextsConfiguration *gcConfiguration = [RNConfigUtils mkGCConfig:(NSArray *)gcArg];
117
- [controllers addObject:gcConfiguration];
118
- }
119
-
120
- id<SPTrackerController> tracker = [SPSnowplow createTrackerWithNamespace:trackerNs network:networkConfiguration configurations:controllers];
121
-
122
- if (tracker) {
123
- resolve(@YES);
124
- } else {
125
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
126
- reject(@"ERROR", @"tracker initialization failed", error);
127
- }
128
- }
129
-
130
- RCT_EXPORT_METHOD(removeTracker: (NSDictionary *)details
131
- resolver:(RCTPromiseResolveBlock)resolve
132
- rejecter:(RCTPromiseRejectBlock)reject) {
133
- NSString *namespace = [details objectForKey:@"tracker"];
134
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
135
- BOOL removed = [SPSnowplow removeTracker:trackerController];
136
- resolve(@(removed));
137
- }
138
-
139
- RCT_EXPORT_METHOD(removeAllTrackers: (RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
140
- [SPSnowplow removeAllTrackers];
141
- resolve(@YES);
142
- }
143
-
144
- RCT_EXPORT_METHOD(trackSelfDescribingEvent:
145
- (NSDictionary *)details
146
- resolver:(RCTPromiseResolveBlock)resolve
147
- rejecter:(RCTPromiseRejectBlock)reject) {
148
- NSString *namespace = [details objectForKey:@"tracker"];
149
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
150
-
151
- if (trackerController != nil) {
152
- NSDictionary *argmap = [details objectForKey:@"eventData"];
153
- NSArray<NSDictionary *> *contexts = [details objectForKey:@"contexts"];
154
-
155
- SPSelfDescribingJson *eventData = [[SPSelfDescribingJson alloc] initWithSchema:(NSString *)[argmap objectForKey:@"schema"]
156
- andDictionary:(NSDictionary *)[argmap objectForKey:@"data"]];
157
-
158
- SPSelfDescribing *event = [[SPSelfDescribing alloc] initWithEventData:eventData];
159
- [event contexts:[RNUtilities mkSDJArray:contexts]];
160
- [trackerController track:event];
161
- resolve(@YES);
162
- } else {
163
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
164
- reject(@"ERROR", @"tracker with given namespace not found", error);
165
- }
166
- }
167
-
168
- RCT_EXPORT_METHOD(trackStructuredEvent:
169
- (NSDictionary *)details
170
- resolver:(RCTPromiseResolveBlock)resolve
171
- rejecter:(RCTPromiseRejectBlock)reject) {
172
- NSString *namespace = [details objectForKey:@"tracker"];
173
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
174
-
175
- if (trackerController != nil) {
176
- NSDictionary *argmap = [details objectForKey:@"eventData"];
177
- NSArray<NSDictionary *> *contexts = [details objectForKey:@"contexts"];
178
-
179
- NSString *category = [argmap rnsp_stringForKey:@"category" defaultValue:nil];
180
- NSString *action = [argmap rnsp_stringForKey:@"action" defaultValue:nil];
181
- SPStructured *event = [[SPStructured alloc] initWithCategory:category
182
- action:action];
183
- NSString *label = [argmap rnsp_stringForKey:@"label" defaultValue:nil];
184
- if (label) {
185
- event.label = label;
186
- }
187
- NSString *property = [argmap rnsp_stringForKey:@"property" defaultValue:nil];
188
- if (property) {
189
- event.property = property;
190
- }
191
- NSNumber *value = [argmap rnsp_numberForKey:@"value" defaultValue:nil];
192
- if (label) {
193
- event.value = value;
194
- }
195
-
196
- [event contexts:[RNUtilities mkSDJArray:contexts]];
197
- [trackerController track:event];
198
- resolve(@YES);
199
- } else {
200
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
201
- reject(@"ERROR", @"tracker with given namespace not found", error);
202
- }
203
- }
204
-
205
- RCT_EXPORT_METHOD(trackScreenViewEvent:
206
- (NSDictionary *)details
207
- resolver:(RCTPromiseResolveBlock)resolve
208
- rejecter:(RCTPromiseRejectBlock)reject) {
209
- NSString *namespace = [details objectForKey:@"tracker"];
210
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
211
-
212
- if (trackerController != nil) {
213
- NSDictionary *argmap = [details objectForKey:@"eventData"];
214
- NSArray<NSDictionary *> *contexts = [details objectForKey:@"contexts"];
215
-
216
- NSString *screenName = [argmap rnsp_stringForKey:@"name" defaultValue:nil];
217
- NSString *screenId = [argmap rnsp_stringForKey:@"id" defaultValue:nil];
218
- NSUUID *screenUuid = [[NSUUID alloc] initWithUUIDString:screenId];
219
- if (screenId != nil && screenUuid == nil) {
220
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
221
- reject(@"ERROR", @"screenId has to be a valid UUID string", error);
222
- }
223
- SPScreenView *event = [[SPScreenView alloc] initWithName:screenName
224
- screenId:screenUuid];
225
-
226
- NSString *type = [argmap rnsp_stringForKey:@"type" defaultValue:nil];
227
- if (type) {
228
- event.type = type;
229
- }
230
- NSString *previousName = [argmap rnsp_stringForKey:@"previousName" defaultValue:nil];
231
- if (previousName) {
232
- event.previousName = previousName;
233
- }
234
- NSString *previousId = [argmap rnsp_stringForKey:@"previousId" defaultValue:nil];
235
- if (previousId) {
236
- event.previousId = previousId;
237
- }
238
- NSString *previousType = [argmap rnsp_stringForKey:@"previousType" defaultValue:nil];
239
- if (previousType) {
240
- event.previousType = previousType;
241
- }
242
- NSString *transitionType = [argmap rnsp_stringForKey:@"transitionType" defaultValue:nil];
243
- if (transitionType) {
244
- event.transitionType = transitionType;
245
- }
246
-
247
- [event contexts:[RNUtilities mkSDJArray:contexts]];
248
- [trackerController track:event];
249
- resolve(@YES);
250
- } else {
251
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
252
- reject(@"ERROR", @"tracker with given namespace not found", error);
253
- }
254
- }
255
-
256
- RCT_EXPORT_METHOD(trackPageViewEvent:
257
- (NSDictionary *)details
258
- resolver:(RCTPromiseResolveBlock)resolve
259
- rejecter:(RCTPromiseRejectBlock)reject) {
260
- NSString *namespace = [details objectForKey:@"tracker"];
261
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
262
-
263
- if (trackerController != nil) {
264
- NSDictionary *argmap = [details objectForKey:@"eventData"];
265
- NSArray<NSDictionary *> *contexts = [details objectForKey:@"contexts"];
266
-
267
- NSString *pageUrl = [argmap rnsp_stringForKey:@"pageUrl" defaultValue:nil];
268
- SPPageView *event = [[SPPageView alloc] initWithPageUrl:pageUrl];
269
-
270
- NSString *pageTitle = [argmap rnsp_stringForKey:@"pageTitle" defaultValue:nil];
271
- if (pageTitle) {
272
- event.pageTitle = pageTitle;
273
- }
274
- NSString *referrer = [argmap rnsp_stringForKey:@"referrer" defaultValue:nil];
275
- if (referrer) {
276
- event.referrer = referrer;
277
- }
278
-
279
- [event contexts:[RNUtilities mkSDJArray:contexts]];
280
- [trackerController track:event];
281
- resolve(@YES);
282
- } else {
283
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
284
- reject(@"ERROR", @"tracker with given namespace not found", error);
285
- }
286
- }
287
-
288
- RCT_EXPORT_METHOD(trackTimingEvent:
289
- (NSDictionary *)details
290
- resolver:(RCTPromiseResolveBlock)resolve
291
- rejecter:(RCTPromiseRejectBlock)reject) {
292
- NSString *namespace = [details objectForKey:@"tracker"];
293
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
294
-
295
- if (trackerController != nil) {
296
- NSDictionary *argmap = [details objectForKey:@"eventData"];
297
- NSArray<NSDictionary *> *contexts = [details objectForKey:@"contexts"];
298
-
299
- NSString *category = [argmap rnsp_stringForKey:@"category" defaultValue:nil];
300
- NSString *variable = [argmap rnsp_stringForKey:@"variable" defaultValue:nil];
301
- NSNumber *timing = [argmap rnsp_numberForKey:@"timing" defaultValue:nil];
302
- SPTiming *event = [[SPTiming alloc] initWithCategory:category
303
- variable:variable
304
- timing:timing];
305
- NSString *label = [argmap rnsp_stringForKey:@"label" defaultValue:nil];
306
- if (label) {
307
- event.label = label;
308
- }
309
-
310
- [event contexts:[RNUtilities mkSDJArray:contexts]];
311
- [trackerController track:event];
312
- resolve(@YES);
313
- } else {
314
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
315
- reject(@"ERROR", @"tracker with given namespace not found", error);
316
- }
317
- }
318
-
319
- RCT_EXPORT_METHOD(trackConsentGrantedEvent:
320
- (NSDictionary *)details
321
- resolver:(RCTPromiseResolveBlock)resolve
322
- rejecter:(RCTPromiseRejectBlock)reject) {
323
- NSString *namespace = [details objectForKey:@"tracker"];
324
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
325
-
326
- if (trackerController != nil) {
327
- NSDictionary *argmap = [details objectForKey:@"eventData"];
328
- NSArray<NSDictionary *> *contexts = [details objectForKey:@"contexts"];
329
-
330
- NSString *expiry = [argmap rnsp_stringForKey:@"expiry" defaultValue:nil];
331
- NSString *documentId = [argmap rnsp_stringForKey:@"documentId" defaultValue:nil];
332
- NSString *version = [argmap rnsp_stringForKey:@"version" defaultValue:nil];
333
- SPConsentGranted *event = [[SPConsentGranted alloc] initWithExpiry:expiry
334
- documentId:documentId
335
- version:version];
336
-
337
- NSString *name = [argmap rnsp_stringForKey:@"name" defaultValue:nil];
338
- if (name) {
339
- event.name = name;
340
- }
341
- NSString *documentDescription = [argmap rnsp_stringForKey:@"documentDescription" defaultValue:nil];
342
- if (documentDescription) {
343
- event.documentDescription = documentDescription;
344
- }
345
-
346
- [event contexts:[RNUtilities mkSDJArray:contexts]];
347
- [trackerController track:event];
348
- resolve(@YES);
349
- } else {
350
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
351
- reject(@"ERROR", @"tracker with given namespace not found", error);
352
- }
353
- }
354
-
355
- RCT_EXPORT_METHOD(trackConsentWithdrawnEvent:
356
- (NSDictionary *)details
357
- resolver:(RCTPromiseResolveBlock)resolve
358
- rejecter:(RCTPromiseRejectBlock)reject) {
359
- NSString *namespace = [details objectForKey:@"tracker"];
360
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
361
-
362
- if (trackerController != nil) {
363
- NSDictionary *argmap = [details objectForKey:@"eventData"];
364
- NSArray<NSDictionary *> *contexts = [details objectForKey:@"contexts"];
365
-
366
- SPConsentWithdrawn *event = [SPConsentWithdrawn new];
367
-
368
- BOOL all = [argmap rnsp_boolForKey:@"all" defaultValue:nil];
369
- event.all = all;
370
- NSString *documentId = [argmap rnsp_stringForKey:@"documentId" defaultValue:nil];
371
- event.documentId = documentId;
372
- NSString *version = [argmap rnsp_stringForKey:@"version" defaultValue:nil];
373
- event.version = version;
374
- NSString *name = [argmap rnsp_stringForKey:@"name" defaultValue:nil];
375
- if (name) {
376
- event.name = name;
377
- }
378
- NSString *documentDescription = [argmap rnsp_stringForKey:@"documentDescription" defaultValue:nil];
379
- if (documentDescription) {
380
- event.documentDescription = documentDescription;
381
- }
382
-
383
- [event contexts:[RNUtilities mkSDJArray:contexts]];
384
- [trackerController track:event];
385
- resolve(@YES);
386
- } else {
387
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
388
- reject(@"ERROR", @"tracker with given namespace not found", error);
389
- }
390
- }
391
-
392
- RCT_EXPORT_METHOD(trackEcommerceTransactionEvent:
393
- (NSDictionary *)details
394
- resolver:(RCTPromiseResolveBlock)resolve
395
- rejecter:(RCTPromiseRejectBlock)reject) {
396
- NSString *namespace = [details objectForKey:@"tracker"];
397
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
398
-
399
- if (trackerController != nil) {
400
- NSDictionary *argmap = [details objectForKey:@"eventData"];
401
- NSArray<NSDictionary *> *contexts = [details objectForKey:@"contexts"];
402
-
403
- NSString *orderId = [argmap rnsp_stringForKey:@"orderId" defaultValue:nil];
404
- NSNumber *totalValue = [argmap rnsp_numberForKey:@"totalValue" defaultValue:nil];
405
- NSArray *items = [argmap objectForKey:@"items"];
406
-
407
- NSMutableArray *transItems = [NSMutableArray new];
408
- for (NSDictionary* item in items) {
409
- NSString *sku = [item rnsp_stringForKey:@"sku" defaultValue:nil];
410
- NSNumber *price = [item rnsp_numberForKey:@"price" defaultValue:nil];
411
- NSNumber *quantity = [item rnsp_numberForKey:@"quantity" defaultValue:nil];
412
- SPEcommerceItem *ecomItem = [[SPEcommerceItem alloc] initWithSku:sku
413
- price:price
414
- quantity:quantity];
415
-
416
- NSString *name = [argmap rnsp_stringForKey:@"name" defaultValue:nil];
417
- if (name) {
418
- ecomItem.name = name;
419
- }
420
- NSString *category = [argmap rnsp_stringForKey:@"category" defaultValue:nil];
421
- if (category) {
422
- ecomItem.category = category;
423
- }
424
- NSString *currency = [argmap rnsp_stringForKey:@"currency" defaultValue:nil];
425
- if (currency) {
426
- ecomItem.currency = currency;
427
- }
428
-
429
- [transItems addObject:ecomItem];
430
- }
431
-
432
- SPEcommerce *event = [[SPEcommerce alloc] initWithOrderId:orderId
433
- totalValue:totalValue
434
- items:(NSArray<SPEcommerceItem *> *)transItems];
435
- [event contexts:[RNUtilities mkSDJArray:contexts]];
436
- [trackerController track:event];
437
- resolve(@YES);
438
-
439
- } else {
440
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
441
- reject(@"ERROR", @"tracker with given namespace not found", error);
442
- }
443
- }
444
-
445
- RCT_EXPORT_METHOD(trackDeepLinkReceivedEvent:
446
- (NSDictionary *)details
447
- resolver:(RCTPromiseResolveBlock)resolve
448
- rejecter:(RCTPromiseRejectBlock)reject) {
449
- NSString *namespace = [details objectForKey:@"tracker"];
450
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
451
-
452
- if (trackerController != nil) {
453
- NSDictionary *argmap = [details objectForKey:@"eventData"];
454
- NSArray<NSDictionary *> *contexts = [details objectForKey:@"contexts"];
455
-
456
- NSString *url = [argmap rnsp_stringForKey:@"url" defaultValue:nil];
457
- SPDeepLinkReceived *event = [[SPDeepLinkReceived alloc] initWithUrl:url];
458
-
459
- NSString *referrer = [argmap rnsp_stringForKey:@"referrer" defaultValue:nil];
460
- if (referrer) {
461
- event.referrer = referrer;
462
- }
463
-
464
- [event contexts:[RNUtilities mkSDJArray:contexts]];
465
- [trackerController track:event];
466
- resolve(@YES);
467
- } else {
468
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
469
- reject(@"ERROR", @"tracker with given namespace not found", error);
470
- }
471
- }
472
-
473
- RCT_EXPORT_METHOD(trackMessageNotificationEvent:
474
- (NSDictionary *)details
475
- resolver:(RCTPromiseResolveBlock)resolve
476
- rejecter:(RCTPromiseRejectBlock)reject) {
477
- NSString *namespace = [details objectForKey:@"tracker"];
478
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
479
-
480
- if (trackerController != nil) {
481
- NSDictionary *argmap = [details objectForKey:@"eventData"];
482
- NSArray<NSDictionary *> *contexts = [details objectForKey:@"contexts"];
483
-
484
- NSString *title = [argmap rnsp_stringForKey:@"title" defaultValue:nil];
485
- NSString *body = [argmap rnsp_stringForKey:@"body" defaultValue:nil];
486
- NSString *triggerStr = [argmap rnsp_stringForKey:@"trigger" defaultValue:nil];
487
- SPMessageNotificationTrigger trigger;
488
- if ([triggerStr isEqualToString:@"push"]) {
489
- trigger = SPMessageNotificationTriggerPush;
490
- } else if ([triggerStr isEqualToString:@"location"]) {
491
- trigger = SPMessageNotificationTriggerLocation;
492
- } else if ([triggerStr isEqualToString:@"calendar"]) {
493
- trigger = SPMessageNotificationTriggerCalendar;
494
- } else if ([triggerStr isEqualToString:@"timeInterval"]) {
495
- trigger = SPMessageNotificationTriggerTimeInterval;
496
- } else {
497
- trigger = SPMessageNotificationTriggerOther;
498
- }
499
- SPMessageNotification *event = [[SPMessageNotification alloc] initWithTitle: title
500
- body: body
501
- trigger: trigger];
502
-
503
- NSString *action = [argmap rnsp_stringForKey:@"action" defaultValue:nil];
504
- if (action) {
505
- event.action = action;
506
- }
507
- NSArray *attachmentsMap = [argmap objectForKey:@"attachments"];
508
- if (attachmentsMap) {
509
- NSMutableArray *attachments = [NSMutableArray new];
510
- for (NSDictionary* attachmentMap in attachmentsMap) {
511
- NSString *identifier = [attachmentMap rnsp_stringForKey:@"identifier" defaultValue:nil];
512
- NSString *type = [attachmentMap rnsp_stringForKey:@"type" defaultValue:nil];
513
- NSString *url = [attachmentMap rnsp_stringForKey:@"url" defaultValue:nil];
514
- SPMessageNotificationAttachment *attachment = [[SPMessageNotificationAttachment alloc] initWithIdentifier:identifier
515
- type:type
516
- url:url];
517
- [attachments addObject:attachment];
518
- }
519
- event.attachments = attachments;
520
- }
521
- NSArray<NSString *> *bodyLocArgs = [argmap objectForKey:@"bodyLocArgs"];
522
- if (bodyLocArgs) {
523
- event.bodyLocArgs = bodyLocArgs;
524
- }
525
- NSString *bodyLocKey = [argmap rnsp_stringForKey:@"bodyLocKey" defaultValue:nil];
526
- if (bodyLocKey) {
527
- event.bodyLocKey = bodyLocKey;
528
- }
529
- NSString *category = [argmap rnsp_stringForKey:@"category" defaultValue:nil];
530
- if (category) {
531
- event.category = category;
532
- }
533
- NSNumber *contentAvailable = [argmap rnsp_numberForKey:@"contentAvailable" defaultValue:nil];
534
- if (contentAvailable != nil) {
535
- event.contentAvailable = contentAvailable;
536
- }
537
- NSString *group = [argmap rnsp_stringForKey:@"group" defaultValue:nil];
538
- if (group) {
539
- event.group = group;
540
- }
541
- NSString *icon = [argmap rnsp_stringForKey:@"icon" defaultValue:nil];
542
- if (icon) {
543
- event.icon = icon;
544
- }
545
- NSNumber *notificationCount = [argmap rnsp_numberForKey:@"notificationCount" defaultValue:nil];
546
- if (notificationCount) {
547
- event.notificationCount = notificationCount;
548
- }
549
- NSString *notificationTimestamp = [argmap rnsp_stringForKey:@"notificationTimestamp" defaultValue:nil];
550
- if (notificationTimestamp) {
551
- event.notificationTimestamp = notificationTimestamp;
552
- }
553
- NSString *sound = [argmap rnsp_stringForKey:@"sound" defaultValue:nil];
554
- if (sound) {
555
- event.sound = sound;
556
- }
557
- NSString *subtitle = [argmap rnsp_stringForKey:@"subtitle" defaultValue:nil];
558
- if (subtitle) {
559
- event.subtitle = subtitle;
560
- }
561
- NSString *tag = [argmap rnsp_stringForKey:@"tag" defaultValue:nil];
562
- if (tag) {
563
- event.tag = tag;
564
- }
565
- NSString *threadIdentifier = [argmap rnsp_stringForKey:@"threadIdentifier" defaultValue:nil];
566
- if (threadIdentifier) {
567
- event.threadIdentifier = threadIdentifier;
568
- }
569
- NSArray<NSString *> *titleLocArgs = [argmap objectForKey:@"titleLocArgs"];
570
- if (titleLocArgs) {
571
- event.titleLocArgs = titleLocArgs;
572
- }
573
- NSString *titleLocKey = [argmap rnsp_stringForKey:@"titleLocKey" defaultValue:nil];
574
- if (titleLocKey) {
575
- event.titleLocKey = titleLocKey;
576
- }
577
-
578
- [event contexts:[RNUtilities mkSDJArray:contexts]];
579
- [trackerController track:event];
580
- resolve(@YES);
581
- } else {
582
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
583
- reject(@"ERROR", @"tracker with given namespace not found", error);
584
- }
585
- }
586
-
587
- RCT_EXPORT_METHOD(removeGlobalContexts:
588
- (NSDictionary *)details
589
- resolver:(RCTPromiseResolveBlock)resolve
590
- rejecter:(RCTPromiseRejectBlock)reject) {
591
- NSString *namespace = [details objectForKey:@"tracker"];
592
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
593
-
594
- if (trackerController != nil) {
595
- NSString *tag = [details objectForKey:@"removeTag"];
596
- [[trackerController globalContexts] removeWithTag:tag];
597
- resolve(@YES);
598
- } else {
599
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
600
- reject(@"ERROR", @"tracker with given namespace not found", error);
601
- }
602
- }
603
-
604
- RCT_EXPORT_METHOD(addGlobalContexts:
605
- (NSDictionary *)details
606
- resolver:(RCTPromiseResolveBlock)resolve
607
- rejecter:(RCTPromiseRejectBlock)reject) {
608
- NSString *namespace = [details objectForKey:@"tracker"];
609
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
610
-
611
- if (trackerController != nil) {
612
- NSDictionary *gcArg = [details objectForKey:@"addGlobalContext"];
613
- NSString *tag = [gcArg objectForKey:@"tag"];
614
- NSArray *globalContexts = [gcArg objectForKey:@"globalContexts"];
615
-
616
- NSArray *staticContexts = [[RNUtilities mkSDJArray:globalContexts] mutableCopy];
617
- SPGlobalContext *gcStatic = [[SPGlobalContext alloc] initWithStaticContexts:staticContexts];
618
-
619
- [[trackerController globalContexts] addWithTag:tag contextGenerator:gcStatic];
620
- resolve(@YES);
621
- } else {
622
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
623
- reject(@"ERROR", @"tracker with given namespace not found", error);
624
- }
625
- }
626
-
627
- RCT_EXPORT_METHOD(setUserId:
628
- (NSDictionary *)details
629
- resolver:(RCTPromiseResolveBlock)resolve
630
- rejecter:(RCTPromiseRejectBlock)reject) {
631
- NSString *namespace = [details objectForKey:@"tracker"];
632
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
633
-
634
- if (trackerController != nil) {
635
- NSString *newUid = [details rnsp_stringForKey:@"userId" defaultValue:nil];
636
- [trackerController.subject setUserId:newUid];
637
- resolve(@YES);
638
- } else {
639
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
640
- reject(@"ERROR", @"tracker with given namespace not found", error);
641
- }
642
- }
643
-
644
- RCT_EXPORT_METHOD(setNetworkUserId:
645
- (NSDictionary *)details
646
- resolver:(RCTPromiseResolveBlock)resolve
647
- rejecter:(RCTPromiseRejectBlock)reject) {
648
- NSString *namespace = [details objectForKey:@"tracker"];
649
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
650
-
651
- if (trackerController != nil) {
652
- NSString *newNuid = [details rnsp_stringForKey:@"networkUserId" defaultValue:nil];
653
- [trackerController.subject setNetworkUserId:newNuid];
654
- resolve(@YES);
655
- } else {
656
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
657
- reject(@"ERROR", @"tracker with given namespace not found", error);
658
- }
659
- }
660
-
661
- RCT_EXPORT_METHOD(setDomainUserId:
662
- (NSDictionary *)details
663
- resolver:(RCTPromiseResolveBlock)resolve
664
- rejecter:(RCTPromiseRejectBlock)reject) {
665
- NSString *namespace = [details objectForKey:@"tracker"];
666
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
667
-
668
- if (trackerController != nil) {
669
- NSString *newDuid = [details rnsp_stringForKey:@"domainUserId" defaultValue:nil];
670
- [trackerController.subject setDomainUserId:newDuid];
671
- resolve(@YES);
672
- } else {
673
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
674
- reject(@"ERROR", @"tracker with given namespace not found", error);
675
- }
676
- }
677
-
678
- RCT_EXPORT_METHOD(setIpAddress:
679
- (NSDictionary *)details
680
- resolver:(RCTPromiseResolveBlock)resolve
681
- rejecter:(RCTPromiseRejectBlock)reject) {
682
- NSString *namespace = [details objectForKey:@"tracker"];
683
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
684
-
685
- if (trackerController != nil) {
686
- NSString *newIp = [details rnsp_stringForKey:@"ipAddress" defaultValue:nil];
687
- [trackerController.subject setIpAddress:newIp];
688
- resolve(@YES);
689
- } else {
690
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
691
- reject(@"ERROR", @"tracker with given namespace not found", error);
692
- }
693
- }
694
-
695
- RCT_EXPORT_METHOD(setUseragent:
696
- (NSDictionary *)details
697
- resolver:(RCTPromiseResolveBlock)resolve
698
- rejecter:(RCTPromiseRejectBlock)reject) {
699
- NSString *namespace = [details objectForKey:@"tracker"];
700
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
701
-
702
- if (trackerController != nil) {
703
- NSString *newUagent = [details rnsp_stringForKey:@"useragent" defaultValue:nil];
704
- [trackerController.subject setUseragent:newUagent];
705
- resolve(@YES);
706
- } else {
707
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
708
- reject(@"ERROR", @"tracker with given namespace not found", error);
709
- }
710
- }
711
-
712
- RCT_EXPORT_METHOD(setTimezone:
713
- (NSDictionary *)details
714
- resolver:(RCTPromiseResolveBlock)resolve
715
- rejecter:(RCTPromiseRejectBlock)reject) {
716
- NSString *namespace = [details objectForKey:@"tracker"];
717
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
718
-
719
- if (trackerController != nil) {
720
- NSString *newTz = [details rnsp_stringForKey:@"timezone" defaultValue:nil];
721
- [trackerController.subject setTimezone:newTz];
722
- resolve(@YES);
723
- } else {
724
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
725
- reject(@"ERROR", @"tracker with given namespace not found", error);
726
- }
727
- }
728
-
729
- RCT_EXPORT_METHOD(setLanguage:
730
- (NSDictionary *)details
731
- resolver:(RCTPromiseResolveBlock)resolve
732
- rejecter:(RCTPromiseRejectBlock)reject) {
733
- NSString *namespace = [details objectForKey:@"tracker"];
734
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
735
-
736
- if (trackerController != nil) {
737
- NSString *newLang = [details rnsp_stringForKey:@"language" defaultValue:nil];
738
- [trackerController.subject setLanguage:newLang];
739
- resolve(@YES);
740
- } else {
741
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
742
- reject(@"ERROR", @"tracker with given namespace not found", error);
743
- }
744
- }
745
-
746
- RCT_EXPORT_METHOD(setScreenResolution:
747
- (NSDictionary *)details
748
- resolver:(RCTPromiseResolveBlock)resolve
749
- rejecter:(RCTPromiseRejectBlock)reject) {
750
- NSString *namespace = [details objectForKey:@"tracker"];
751
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
752
-
753
- if (trackerController != nil) {
754
- NSObject *newRes = [details objectForKey:@"screenResolution"];
755
- if (newRes == [NSNull null]) {
756
- [trackerController.subject setScreenResolution:nil];
757
- } else {
758
- NSNumber *resWidth = [(NSArray *)newRes objectAtIndex:0];
759
- NSNumber *resHeight = [(NSArray *)newRes objectAtIndex:1];
760
- SPSize *resSize = [[SPSize alloc] initWithWidth:[resWidth integerValue] height:[resHeight integerValue]];
761
- [trackerController.subject setScreenResolution:resSize];
762
- }
763
- resolve(@YES);
764
- } else {
765
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
766
- reject(@"ERROR", @"tracker with given namespace not found", error);
767
- }
768
- }
769
-
770
- RCT_EXPORT_METHOD(setScreenViewport:
771
- (NSDictionary *)details
772
- resolver:(RCTPromiseResolveBlock)resolve
773
- rejecter:(RCTPromiseRejectBlock)reject) {
774
- NSString *namespace = [details objectForKey:@"tracker"];
775
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
776
-
777
- if (trackerController != nil) {
778
- NSObject *newView = [details objectForKey:@"screenViewport"];
779
- if (newView == [NSNull null]) {
780
- [trackerController.subject setScreenViewPort:nil];
781
- } else {
782
- NSNumber *vpWidth = [(NSArray *)newView objectAtIndex:0];
783
- NSNumber *vpHeight = [(NSArray *)newView objectAtIndex:1];
784
- SPSize *vpSize = [[SPSize alloc] initWithWidth:[vpWidth integerValue] height:[vpHeight integerValue]];
785
- [trackerController.subject setScreenViewPort:vpSize];
786
- }
787
- resolve(@YES);
788
- } else {
789
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
790
- reject(@"ERROR", @"tracker with given namespace not found", error);
791
- }
792
- }
793
-
794
- RCT_EXPORT_METHOD(setColorDepth:
795
- (NSDictionary *)details
796
- resolver:(RCTPromiseResolveBlock)resolve
797
- rejecter:(RCTPromiseRejectBlock)reject) {
798
- NSString *namespace = [details objectForKey:@"tracker"];
799
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
800
-
801
- if (trackerController != nil) {
802
- NSNumber *newColorD = [details rnsp_numberForKey:@"colorDepth" defaultValue:nil];
803
- [trackerController.subject setColorDepth:newColorD];
804
- resolve(@YES);
805
- } else {
806
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
807
- reject(@"ERROR", @"tracker with given namespace not found", error);
808
- }
809
- }
810
-
811
- RCT_EXPORT_METHOD(getSessionUserId:
812
- (NSDictionary *)details
813
- resolver:(RCTPromiseResolveBlock)resolve
814
- rejecter:(RCTPromiseRejectBlock)reject) {
815
- NSString *namespace = [details objectForKey:@"tracker"];
816
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
817
-
818
- if (trackerController != nil) {
819
- NSString *suid = [trackerController.session userId];
820
- resolve(suid);
821
- } else {
822
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
823
- reject(@"ERROR", @"tracker with given namespace not found", error);
824
- }
825
- }
826
-
827
- RCT_EXPORT_METHOD(getSessionId:
828
- (NSDictionary *)details
829
- resolver:(RCTPromiseResolveBlock)resolve
830
- rejecter:(RCTPromiseRejectBlock)reject) {
831
- NSString *namespace = [details objectForKey:@"tracker"];
832
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
833
-
834
- if (trackerController != nil) {
835
- NSString *sid = [trackerController.session sessionId];
836
- resolve(sid);
837
- } else {
838
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
839
- reject(@"ERROR", @"tracker with given namespace not found", error);
840
- }
841
- }
842
-
843
- RCT_EXPORT_METHOD(getSessionIndex:
844
- (NSDictionary *)details
845
- resolver:(RCTPromiseResolveBlock)resolve
846
- rejecter:(RCTPromiseRejectBlock)reject) {
847
- NSString *namespace = [details objectForKey:@"tracker"];
848
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
849
-
850
- if (trackerController != nil) {
851
- NSInteger sidx = [trackerController.session sessionIndex];
852
- resolve(@(sidx));
853
- } else {
854
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
855
- reject(@"ERROR", @"tracker with given namespace not found", error);
856
- }
857
- }
858
-
859
- RCT_EXPORT_METHOD(getIsInBackground:
860
- (NSDictionary *)details
861
- resolver:(RCTPromiseResolveBlock)resolve
862
- rejecter:(RCTPromiseRejectBlock)reject) {
863
- NSString *namespace = [details objectForKey:@"tracker"];
864
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
865
-
866
- if (trackerController != nil) {
867
- BOOL isInBg = [trackerController.session isInBackground];
868
- resolve(@(isInBg));
869
- } else {
870
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
871
- reject(@"ERROR", @"tracker with given namespace not found", error);
872
- }
873
- }
874
-
875
- RCT_EXPORT_METHOD(getBackgroundIndex:
876
- (NSDictionary *)details
877
- resolver:(RCTPromiseResolveBlock)resolve
878
- rejecter:(RCTPromiseRejectBlock)reject) {
879
- NSString *namespace = [details objectForKey:@"tracker"];
880
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
881
-
882
- if (trackerController != nil) {
883
- NSInteger bgIdx = [trackerController.session backgroundIndex];
884
- resolve(@(bgIdx));
885
- } else {
886
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
887
- reject(@"ERROR", @"tracker with given namespace not found", error);
888
- }
889
- }
890
-
891
- RCT_EXPORT_METHOD(getForegroundIndex:
892
- (NSDictionary *)details
893
- resolver:(RCTPromiseResolveBlock)resolve
894
- rejecter:(RCTPromiseRejectBlock)reject) {
895
- NSString *namespace = [details objectForKey:@"tracker"];
896
- id<SPTrackerController> trackerController = [self trackerByNamespace:namespace];
897
-
898
- if (trackerController != nil) {
899
- NSInteger fgIdx = [trackerController.session foregroundIndex];
900
- resolve(@(fgIdx));
901
- } else {
902
- NSError* error = [NSError errorWithDomain:@"SnowplowTracker" code:200 userInfo:nil];
903
- reject(@"ERROR", @"tracker with given namespace not found", error);
904
- }
905
- }
906
-
907
- - (nullable id<SPTrackerController>)trackerByNamespace:(NSString *)namespace {
908
- return [namespace isEqual:[NSNull null]] ? [SPSnowplow defaultTracker] : [SPSnowplow trackerByNamespace:namespace];
909
- }
910
-
911
- @end