@sentiance-react-native/core 6.0.0-beta.10

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 (38) hide show
  1. package/README.md +24 -0
  2. package/android/build.gradle +24 -0
  3. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  4. package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
  5. package/android/gradle.properties +2 -0
  6. package/android/gradlew +185 -0
  7. package/android/gradlew.bat +89 -0
  8. package/android/package-json-reader.gradle +62 -0
  9. package/android/sentiance-version-finder.gradle +17 -0
  10. package/android/src/main/AndroidManifest.xml +2 -0
  11. package/android/src/main/java/com/sentiance/react/bridge/core/SentianceConverter.java +366 -0
  12. package/android/src/main/java/com/sentiance/react/bridge/core/SentianceEmitter.java +41 -0
  13. package/android/src/main/java/com/sentiance/react/bridge/core/SentianceHelper.java +206 -0
  14. package/android/src/main/java/com/sentiance/react/bridge/core/SentianceModule.java +529 -0
  15. package/android/src/main/java/com/sentiance/react/bridge/core/SentiancePackage.java +30 -0
  16. package/android/src/main/java/com/sentiance/react/bridge/core/UserLinker.java +34 -0
  17. package/android/src/main/java/com/sentiance/react/bridge/core/base/AbstractSentianceEmitter.java +59 -0
  18. package/android/src/main/java/com/sentiance/react/bridge/core/base/AbstractSentianceModule.java +33 -0
  19. package/android/src/main/java/com/sentiance/react/bridge/core/utils/ErrorCodes.java +16 -0
  20. package/android/src/main/java/com/sentiance/react/bridge/core/utils/SentianceUtils.java +172 -0
  21. package/android/src/main/java/com/sentiance/react/bridge/core/utils/UserCreationCompletionHandler.java +31 -0
  22. package/ios/RNSentianceCore+Converter.h +46 -0
  23. package/ios/RNSentianceCore+Converter.m +993 -0
  24. package/ios/RNSentianceCore.h +29 -0
  25. package/ios/RNSentianceCore.m +1036 -0
  26. package/ios/RNSentianceCore.podspec +24 -0
  27. package/ios/RNSentianceCore.xcodeproj/project.pbxproj +290 -0
  28. package/ios/RNSentianceErrorCodes.h +20 -0
  29. package/ios/RNSentianceErrorCodes.m +22 -0
  30. package/ios/RNSentianceHelper.h +31 -0
  31. package/ios/RNSentianceHelper.m +38 -0
  32. package/ios/RNSentianceNativeInitialization.h +6 -0
  33. package/ios/RNSentianceNativeInitialization.m +56 -0
  34. package/lib/core.js +56 -0
  35. package/lib/index.d.ts +197 -0
  36. package/lib/index.js +221 -0
  37. package/lib/utils.js +1 -0
  38. package/package.json +38 -0
@@ -0,0 +1,1036 @@
1
+ #import "RNSentianceCore.h"
2
+ #import <SENTSDK/SENTSDK.h>
3
+ #import <SENTSDK/SENTSDKStatus.h>
4
+ #import <SENTSDK/SENTPublicDefinitions.h>
5
+ #import "RNSentianceNativeInitialization.h"
6
+ #import "RNSentianceCore+Converter.h"
7
+ #import "RNSentianceErrorCodes.h"
8
+
9
+ #define REJECT_IF_SDK_NOT_INITIALIZED(reject) if ([self isSdkNotInitialized]) { \
10
+ reject(ESDKNotInitialized, @"Sdk not initialized", nil); \
11
+ return; \
12
+ }
13
+
14
+ @interface RNSentianceCore()
15
+
16
+ @property (nonatomic, strong) void (^userLinkSuccess)(void);
17
+ @property (nonatomic, strong) void (^userLinkFailed)(void);
18
+ @property (nonatomic, strong) SENTUserLinker userLinker;
19
+ @property (nonatomic, strong) SdkStatusHandler sdkStatusHandler;
20
+ @property (assign) BOOL userLinkingEnabled;
21
+ @property (assign) BOOL hasListeners;
22
+
23
+ @end
24
+
25
+ @implementation RNSentianceCore
26
+
27
+ - (dispatch_queue_t)methodQueue
28
+ {
29
+ return dispatch_get_main_queue();
30
+ }
31
+
32
+ RCT_EXPORT_MODULE(SentianceCore)
33
+
34
+ - (NSArray<NSString *> *)supportedEvents
35
+ {
36
+ return @[SdkStatusUpdateEvent, TripTimeoutEvent, UserLinkEvent, UserActivityUpdateEvent, VehicleCrashEvent, UserLinkEvent, UserContextUpdateEvent];
37
+ }
38
+
39
+ // Will be called when this module's first listener is added.
40
+ - (void)startObserving {
41
+ self.hasListeners = YES;
42
+ // Set up any upstream listeners or background tasks as necessary
43
+ }
44
+
45
+ // Will be called when this module's last listener is removed, or on dealloc.
46
+ - (void)stopObserving {
47
+ self.hasListeners = NO;
48
+ // Remove upstream listeners, stop unnecessary background tasks
49
+ }
50
+
51
+ - (void) initSDK:(NSString *)appId
52
+ secret:(NSString *)secret
53
+ baseURL:(nullable NSString *)baseURL
54
+ shouldStart:(BOOL)shouldStart
55
+ resolver:(RCTPromiseResolveBlock)resolve
56
+ rejecter:(RCTPromiseRejectBlock)reject
57
+ {
58
+ @try {
59
+ __weak typeof(self) weakSelf = self;
60
+ SENTConfig *config;
61
+ if(weakSelf.userLinkingEnabled){
62
+ config = [[SENTConfig alloc] initWithAppId:appId secret:secret link:weakSelf.getUserLinker launchOptions:@{}];
63
+ }else{
64
+ config = [[SENTConfig alloc] initWithAppId:appId secret:secret link:nil launchOptions:@{}];
65
+ }
66
+
67
+ [config setDidReceiveSdkStatusUpdate:weakSelf.getSdkStatusUpdateHandler];
68
+
69
+ if (baseURL && baseURL.length > 0) {
70
+ config.baseURL = baseURL;
71
+ }
72
+
73
+ [[Sentiance sharedInstance] initWithConfig:config success:^{
74
+ if (shouldStart) {
75
+ [weakSelf startSDK:resolve rejecter:reject];
76
+ }
77
+ else if (resolve) {
78
+ resolve(@(YES));
79
+ }
80
+ } failure:^(SENTInitIssue issue) {
81
+ if (reject) {
82
+ reject([weakSelf convertInitIssueToString: issue], @"", nil);
83
+ }
84
+ }];
85
+ } @catch (NSException *e) {
86
+ if (reject) {
87
+ reject(e.name, e.reason, nil);
88
+ }
89
+ }
90
+ }
91
+
92
+ - (BOOL) initSDKIfUserLinkingCompleted:(NSString *)appId
93
+ secret:(NSString *)secret
94
+ baseURL:(nullable NSString *)baseURL
95
+ shouldStart:(BOOL)shouldStart
96
+ resolver:(RCTPromiseResolveBlock)resolve
97
+ rejecter:(RCTPromiseRejectBlock)reject
98
+ {
99
+ BOOL isThirdPartyLinked = [self isThirdPartyLinked];
100
+ if (isThirdPartyLinked) {
101
+ [self initSDK:appId secret:secret baseURL:baseURL shouldStart:shouldStart resolver:resolve rejecter:reject];
102
+ return YES;
103
+ }
104
+ return NO;
105
+ }
106
+
107
+ - (void) startSDK:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject {
108
+ [self startSDKWithStopEpochTimeMs:nil resolver:resolve rejecter:reject];
109
+ }
110
+
111
+ - (void) startSDKWithStopEpochTimeMs:(nullable NSNumber*) stopEpochTimeMs resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject {
112
+ __block BOOL resolved = NO;
113
+
114
+ @try {
115
+ __weak typeof(self) weakSelf = self;
116
+
117
+ SdkStatusHandler sdkStatusHandler = ^(SENTSDKStatus* status) {
118
+ NSLog(@"SDK started properly.");
119
+ if (resolve && !resolved) {
120
+ resolve([weakSelf convertSdkStatusToDict:status]);
121
+ resolved = YES;
122
+ }
123
+ };
124
+
125
+ if (stopEpochTimeMs == nil) {
126
+ [[Sentiance sharedInstance] start:sdkStatusHandler];
127
+ }
128
+ else {
129
+ NSTimeInterval interval = stopEpochTimeMs.longValue / 1000;
130
+ NSDate* date = [NSDate dateWithTimeIntervalSince1970:interval];
131
+ [[Sentiance sharedInstance] startWithStopDate:date completion:sdkStatusHandler];
132
+ }
133
+ } @catch (NSException *e) {
134
+ if (reject && !resolved) {
135
+ reject(e.name, e.reason, nil);
136
+ resolved = YES;
137
+ }
138
+ }
139
+ }
140
+
141
+ - (SENTUserLinker) getUserLinker {
142
+ if (self.userLinker != nil) {
143
+ return self.userLinker;
144
+ }
145
+
146
+ __weak typeof(self) weakSelf = self;
147
+
148
+ self.userLinker = ^(NSString *installId, void (^linkSuccess)(void),
149
+ void (^linkFailed)(void)) {
150
+ weakSelf.userLinkSuccess = linkSuccess;
151
+ weakSelf.userLinkFailed = linkFailed;
152
+ [weakSelf sendEventWithName:UserLinkEvent body:[weakSelf convertInstallIdToDict:installId]];
153
+ };
154
+
155
+ return self.userLinker;
156
+ }
157
+
158
+
159
+ - (SdkStatusHandler) getSdkStatusUpdateHandler {
160
+ if(self.sdkStatusHandler != nil) return self.sdkStatusHandler;
161
+
162
+ __weak typeof(self) weakSelf = self;
163
+
164
+ [self setSdkStatusHandler:^(SENTSDKStatus *status) {
165
+ if (weakSelf.hasListeners) {
166
+ [weakSelf sendEventWithName:SdkStatusUpdateEvent body:[weakSelf convertSdkStatusToDict:status]];
167
+ }
168
+ }];
169
+ return self.sdkStatusHandler;
170
+ }
171
+
172
+ RCT_EXPORT_METHOD(userLinkCallback:(BOOL)success) {
173
+ if (success) {
174
+ self.userLinkSuccess();
175
+ } else {
176
+ self.userLinkFailed();
177
+ }
178
+ }
179
+
180
+ - (NSString *) getValueForKey:(NSString *)key value:(NSString *)defaultValue {
181
+ NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
182
+ NSString *value = [prefs stringForKey:key];
183
+
184
+ if (value == nil) {
185
+ return defaultValue;
186
+ }
187
+
188
+ return value;
189
+ }
190
+
191
+ RCT_EXPORT_METHOD(getValueForKey:(NSString *)key
192
+ value:(NSString *)defaultValue
193
+ resolver:(RCTPromiseResolveBlock)resolve
194
+ rejecter:(RCTPromiseRejectBlock)reject){
195
+
196
+ NSString *value = [self getValueForKey:key value:defaultValue];
197
+ resolve(value);
198
+ }
199
+
200
+ RCT_EXPORT_METHOD(setValueForKey:(NSString *)key
201
+ value:(NSString *)value) {
202
+ NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
203
+ [prefs setObject:value forKey:key];
204
+ }
205
+
206
+ RCT_EXPORT_METHOD(init:(NSString *)appId
207
+ secret:(NSString *)secret
208
+ baseURL:(nullable NSString *)baseURL
209
+ shouldStart:(BOOL)shouldStart
210
+ resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
211
+ {
212
+ if (appId == nil || secret == nil) {
213
+ reject(@"INVALID_CREDENTIALS", @"", nil);
214
+ return;
215
+ }
216
+ [self initSDK:appId secret:secret baseURL:baseURL shouldStart:shouldStart resolver:resolve rejecter:reject];
217
+ }
218
+
219
+ RCT_EXPORT_METHOD(initWithUserLinkingEnabled:(NSString *)appId
220
+ secret:(NSString *)secret
221
+ baseURL:(nullable NSString *)baseURL
222
+ shouldStart:(BOOL)shouldStart
223
+ resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
224
+ {
225
+ self.userLinkingEnabled = YES;
226
+ [self init:appId secret:secret baseURL:baseURL shouldStart:shouldStart resolver:resolve rejecter:reject];
227
+
228
+ }
229
+
230
+ RCT_EXPORT_METHOD(start:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
231
+ {
232
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
233
+
234
+ [self startSDK:resolve rejecter:reject];
235
+ }
236
+
237
+ RCT_EXPORT_METHOD(enableDetections:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
238
+ {
239
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
240
+
241
+ [[Sentiance sharedInstance] enableDetectionsWithCompletionHandler:^(SENTEnableDetectionsResult * _Nullable result, SENTEnableDetectionsError * _Nullable error) {
242
+ if (error != nil) {
243
+ reject(ESDKEnableDetectionsError, [self stringifyEnableDetectionsError:error], nil);
244
+ }
245
+ else {
246
+ resolve([self convertEnableDetectionsResult: result]);
247
+ }
248
+ }];
249
+ }
250
+
251
+ RCT_EXPORT_METHOD(startWithStopDate:(nonnull NSNumber *)stopEpochTimeMs
252
+ resolver:(RCTPromiseResolveBlock)resolve
253
+ rejecter:(RCTPromiseRejectBlock)reject)
254
+ {
255
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
256
+
257
+ [self startSDKWithStopEpochTimeMs:stopEpochTimeMs resolver:resolve rejecter:reject];
258
+ }
259
+
260
+ RCT_EXPORT_METHOD(enableDetectionsWithExpiryDate:(nonnull NSNumber *)expiryEpochTimeMs
261
+ resolver:(RCTPromiseResolveBlock)resolve
262
+ rejecter:(RCTPromiseRejectBlock)reject)
263
+ {
264
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
265
+
266
+ if (expiryEpochTimeMs == nil) {
267
+ [self enableDetections:resolve rejecter:reject];
268
+ }
269
+ else {
270
+ NSTimeInterval interval = expiryEpochTimeMs.longValue / 1000;
271
+ NSDate* date = [NSDate dateWithTimeIntervalSince1970:interval];
272
+ [[Sentiance sharedInstance] enableDetectionsWithExpiryDate:date completionHandler:^(SENTEnableDetectionsResult * _Nullable result, SENTEnableDetectionsError * _Nullable error) {
273
+ if (error != nil) {
274
+ reject(ESDKEnableDetectionsError, [self stringifyEnableDetectionsError:error], nil);
275
+ }
276
+ else {
277
+ resolve([self convertEnableDetectionsResult: result]);
278
+ }
279
+ }];
280
+ }
281
+ }
282
+
283
+ RCT_EXPORT_METHOD(stop:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
284
+ {
285
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
286
+
287
+ @try {
288
+ Sentiance* sdk = [Sentiance sharedInstance];
289
+ [sdk stop];
290
+ resolve(@(YES));
291
+ } @catch (NSException *e) {
292
+ reject(e.name, e.reason, nil);
293
+ }
294
+ }
295
+
296
+ RCT_EXPORT_METHOD(disableDetections:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
297
+ {
298
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
299
+
300
+ @try {
301
+ [[Sentiance sharedInstance] disableDetectionsWithCompletionHandler:^(SENTDisableDetectionsResult * _Nullable result, SENTDisableDetectionsError * _Nullable error) {
302
+ if (error != nil) {
303
+ reject(ESDKDisableDetectionsError, [self stringifyDisableDetectionsError:error], nil);
304
+ }
305
+ else {
306
+ resolve([self convertDisableDetectionsResult: result]);
307
+ }
308
+ }];
309
+ } @catch (NSException *e) {
310
+ reject(e.name, e.reason, nil);
311
+ }
312
+ }
313
+
314
+ RCT_EXPORT_METHOD(getInitState:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
315
+ {
316
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
317
+
318
+ @try {
319
+ SENTSDKInitState initState = [[Sentiance sharedInstance] getInitState];
320
+ resolve([self convertInitStateToString:initState]);
321
+ } @catch (NSException *e) {
322
+ reject(e.name, e.reason, nil);
323
+ }
324
+ }
325
+
326
+
327
+ RCT_EXPORT_METHOD(getSdkStatus:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
328
+ {
329
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
330
+
331
+ @try {
332
+ NSDictionary* dict = [self convertSdkStatusToDict:[[Sentiance sharedInstance] getSdkStatus]];
333
+ resolve(dict);
334
+ } @catch (NSException *e) {
335
+ reject(e.name, e.reason, nil);
336
+ }
337
+ }
338
+
339
+ RCT_EXPORT_METHOD(getVersion:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
340
+ {
341
+ @try {
342
+ NSString *version = [[Sentiance sharedInstance] getVersion];
343
+ resolve(version);
344
+ } @catch (NSException *e) {
345
+ reject(e.name, e.reason, nil);
346
+ }
347
+ }
348
+
349
+ RCT_EXPORT_METHOD(getUserId:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
350
+ {
351
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
352
+
353
+ @try {
354
+ NSString *userId = [[Sentiance sharedInstance] getUserId];
355
+ resolve(userId);
356
+ } @catch (NSException *e) {
357
+ reject(e.name, e.reason, nil);
358
+ }
359
+ }
360
+
361
+ RCT_EXPORT_METHOD(getUserAccessToken:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
362
+ {
363
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
364
+
365
+ __block BOOL hasReceivedToken = NO;
366
+ @try {
367
+ __weak typeof(self) weakSelf = self;
368
+ [[Sentiance sharedInstance] getUserAccessToken:^(NSString* token) {
369
+ if (hasReceivedToken) {
370
+ return;
371
+ }
372
+ NSDictionary* dict = [weakSelf convertTokenToDict:token];
373
+ hasReceivedToken = YES;
374
+ resolve(dict);
375
+ } failure:^() {
376
+ reject(@"E_SDK_GET_TOKEN_ERROR", @"Something went wrong while obtaining a user token.", nil);
377
+ }];
378
+ } @catch (NSException *e) {
379
+ reject(e.name, e.reason, nil);
380
+ }
381
+ }
382
+
383
+ RCT_EXPORT_METHOD(requestUserAccessToken:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
384
+ {
385
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
386
+
387
+ @try {
388
+ [[Sentiance sharedInstance] requestUserAccessTokenWithCompletionHandler:^(SENTUserAccessTokenResult * _Nullable result, SENTUserAccessTokenError * _Nullable error) {
389
+ if (error != nil) {
390
+ reject(ESDKGetTokenError, [self stringifyRequestUserAccessTokenError:error], nil);
391
+ }
392
+ else {
393
+ resolve([self convertRequestUserAccessTokenResult: result]);
394
+ }
395
+ }];
396
+ } @catch (NSException *e) {
397
+ reject(e.name, e.reason, nil);
398
+ }
399
+ }
400
+
401
+ RCT_EXPORT_METHOD(addUserMetadataField:(NSString *)label
402
+ value:(NSString *)value
403
+ resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
404
+ {
405
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
406
+
407
+ @try {
408
+ if (label == nil || value == nil) {
409
+ reject(ESDKMissingParams, @"label and value are required", nil);
410
+ return;
411
+ }
412
+
413
+ [[Sentiance sharedInstance] addUserMetadataField:label value:value];
414
+ resolve(nil);
415
+ } @catch (NSException *e) {
416
+ reject(e.name, e.reason, nil);
417
+ }
418
+ }
419
+
420
+ RCT_EXPORT_METHOD(removeUserMetadataField:(NSString *)label
421
+ resolver:(RCTPromiseResolveBlock)resolve
422
+ rejecter:(RCTPromiseRejectBlock)reject)
423
+ {
424
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
425
+
426
+ @try {
427
+ if (label == nil) {
428
+ reject(ESDKMissingParams, @"label is required", nil);
429
+ return;
430
+ }
431
+
432
+ [[Sentiance sharedInstance] removeUserMetadataField:label];
433
+ resolve(nil);
434
+ } @catch (NSException *e) {
435
+ reject(e.name, e.reason, nil);
436
+ }
437
+ }
438
+
439
+ RCT_EXPORT_METHOD(addUserMetadataFields:(NSDictionary *)metadata
440
+ resolver:(RCTPromiseResolveBlock)resolve
441
+ rejecter:(RCTPromiseRejectBlock)reject)
442
+ {
443
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
444
+
445
+ @try {
446
+ if (metadata == nil) {
447
+ reject(ESDKMissingParams, @"metadata object is required", nil);
448
+ return;
449
+ }
450
+
451
+ [[Sentiance sharedInstance] addUserMetadataFields:metadata];
452
+ resolve(@(YES));
453
+ } @catch (NSException *e) {
454
+ reject(e.name, e.reason, nil);
455
+ }
456
+ }
457
+
458
+ RCT_EXPORT_METHOD(startTrip:(NSDictionary *)metadata
459
+ hint:(nonnull NSNumber *)hint
460
+ resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
461
+ {
462
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
463
+
464
+ @try {
465
+ SENTTransportMode mode = [hint intValue] == -1 ? SENTTransportModeUnknown : (SENTTransportMode)hint;
466
+ [[Sentiance sharedInstance] startTrip:metadata transportModeHint:mode success:^ {
467
+ resolve(@(YES));
468
+ } failure:^(SENTSDKStatus *status) {
469
+ reject(@"E_SDK_START_TRIP_ERROR", @"", nil);
470
+ }];
471
+ } @catch (NSException *e) {
472
+ reject(e.name, e.reason, nil);
473
+ }
474
+ }
475
+
476
+ RCT_EXPORT_METHOD(startTripNewAPI:(NSDictionary *)metadata
477
+ hint:(nonnull NSNumber *)hint
478
+ resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
479
+ {
480
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
481
+
482
+ @try {
483
+ SENTTransportMode mode = [hint intValue] == -1 ? SENTTransportModeUnknown : (SENTTransportMode)hint;
484
+ [[Sentiance sharedInstance] startTripWithMetadata:metadata transportModeHint:mode completionHandler:^(SENTStartTripResult * _Nullable result, SENTStartTripError * _Nullable error) {
485
+ if (error != nil) {
486
+ reject(ESDKStartTripError, [self stringifyStartTripError:error], nil);
487
+ }
488
+ else {
489
+ resolve([self convertStartTripResult:result]);
490
+ }
491
+ }];
492
+ } @catch (NSException *e) {
493
+ reject(e.name, e.reason, nil);
494
+ }
495
+ }
496
+
497
+ RCT_EXPORT_METHOD(stopTrip:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
498
+ {
499
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
500
+
501
+ @try {
502
+ [[Sentiance sharedInstance] stopTrip:^{
503
+ resolve(@(YES));
504
+ } failure:^(SENTSDKStatus *status) {
505
+ reject(@"E_SDK_STOP_TRIP_ERROR", @"", nil);
506
+ }];
507
+ } @catch (NSException *e) {
508
+ reject(e.name, e.reason, nil);
509
+ }
510
+ }
511
+
512
+ RCT_EXPORT_METHOD(stopTripNewAPI:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
513
+ {
514
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
515
+
516
+ @try {
517
+ [[Sentiance sharedInstance] stopTripWithCompletionHandler:^(SENTStopTripResult * _Nullable result, SENTStopTripError * _Nullable error) {
518
+ if (error != nil) {
519
+ reject(ESDKStopTripError, [self stringifyStopTripError:error], nil);
520
+ }
521
+ else {
522
+ resolve([self convertStopTripResult:result]);
523
+ }
524
+ }];
525
+ } @catch (NSException *e) {
526
+ reject(e.name, e.reason, nil);
527
+ }
528
+ }
529
+
530
+ RCT_EXPORT_METHOD(isTripOngoing:(NSString *)type
531
+ resolver:(RCTPromiseResolveBlock)resolve
532
+ rejecter:(RCTPromiseRejectBlock)reject)
533
+ {
534
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
535
+
536
+ if (type.length == 0) {
537
+ reject(ESDKMissingParams, @"trip type is required", nil);
538
+ return;
539
+ }
540
+
541
+ @try {
542
+ SENTTripType tripType;
543
+ if ([type isEqualToString:@"TRIP_TYPE_SDK"]) {
544
+ tripType = SENTTripTypeSDK;
545
+ } else if ([type isEqualToString:@"TRIP_TYPE_EXTERNAL"]) {
546
+ tripType = SENTTripTypeExternal;
547
+ }
548
+
549
+ BOOL isTripOngoing = [[Sentiance sharedInstance] isTripOngoing:tripType];
550
+ resolve(@(isTripOngoing));
551
+ } @catch (NSException *e) {
552
+ reject(e.name, e.reason, nil);
553
+ }
554
+ }
555
+
556
+ RCT_EXPORT_METHOD(submitDetections:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
557
+ {
558
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
559
+
560
+ @try {
561
+ [[Sentiance sharedInstance] submitDetections:^ {
562
+ resolve(@(YES));
563
+ } failure: ^ {
564
+ reject(@"E_SDK_SUBMIT_DETECTIONS_ERROR", @"Submission failed", nil);
565
+ }];
566
+ } @catch (NSException *e) {
567
+ reject(e.name, e.reason, nil);
568
+ }
569
+ }
570
+
571
+ RCT_EXPORT_METHOD(submitDetectionsNewApi:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
572
+ {
573
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
574
+
575
+ @try {
576
+ [[Sentiance sharedInstance] submitDetectionsWithCompletionHandler:^(SENTSubmitDetectionsResult * _Nullable result, SENTSubmitDetectionsError * _Nullable error) {
577
+ if (error != nil) {
578
+ reject(ESDKSubmitDetectionsError, [self stringifySubmitDetectionsError:error], nil);
579
+ }
580
+ else {
581
+ resolve([self convertSubmitDetectionsResult:result]);
582
+ }
583
+ }];
584
+ } @catch (NSException *e) {
585
+ reject(e.name, e.reason, nil);
586
+ }
587
+ }
588
+
589
+ RCT_EXPORT_METHOD(getWiFiQuotaLimit:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
590
+ {
591
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
592
+
593
+ @try {
594
+ long long wifiQuotaLimit = [[Sentiance sharedInstance] getWifiQuotaLimit];
595
+ resolve(@(wifiQuotaLimit));
596
+ } @catch (NSException *e) {
597
+ reject(e.name, e.reason, nil);
598
+ }
599
+ }
600
+
601
+ RCT_EXPORT_METHOD(getWiFiQuotaUsage:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
602
+ {
603
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
604
+
605
+ @try {
606
+ long long wifiQuotaUsage = [[Sentiance sharedInstance] getWiFiQuotaUsage];
607
+ resolve(@(wifiQuotaUsage));
608
+ } @catch (NSException *e) {
609
+ reject(e.name, e.reason, nil);
610
+ }
611
+ }
612
+
613
+ RCT_EXPORT_METHOD(getMobileQuotaLimit:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
614
+ {
615
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
616
+
617
+ @try {
618
+ long long mobileQuotaLimit = [[Sentiance sharedInstance] getMobileQuotaLimit];
619
+ resolve(@(mobileQuotaLimit));
620
+ } @catch (NSException *e) {
621
+ reject(e.name, e.reason, nil);
622
+ }
623
+ }
624
+
625
+ RCT_EXPORT_METHOD(getMobileQuotaUsage:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
626
+ {
627
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
628
+
629
+ @try {
630
+ long long mobileQuotaUsage = [[Sentiance sharedInstance] getMobileQuotaUsage];
631
+ resolve(@(mobileQuotaUsage));
632
+ } @catch (NSException *e) {
633
+ reject(e.name, e.reason, nil);
634
+ }
635
+ }
636
+
637
+ RCT_EXPORT_METHOD(getDiskQuotaLimit:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
638
+ {
639
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
640
+
641
+ @try {
642
+ long long diskQuotaLimit = [[Sentiance sharedInstance] getDiskQuotaLimit];
643
+ resolve(@(diskQuotaLimit));
644
+ } @catch (NSException *e) {
645
+ reject(e.name, e.reason, nil);
646
+ }
647
+ }
648
+
649
+ RCT_EXPORT_METHOD(getDiskQuotaUsage:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
650
+ {
651
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
652
+
653
+ @try {
654
+ long long diskQuotaUsage = [[Sentiance sharedInstance] getDiskQuotaUsage];
655
+ resolve(@(diskQuotaUsage));
656
+ } @catch (NSException *e) {
657
+ reject(e.name, e.reason, nil);
658
+ }
659
+ }
660
+
661
+ RCT_EXPORT_METHOD(disableBatteryOptimization:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
662
+ {
663
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
664
+
665
+ NSLog(@"This is an Android only method.");
666
+ resolve(nil);
667
+ }
668
+
669
+ RCT_EXPORT_METHOD(updateSdkNotification:(NSString *)title
670
+ message:(NSString *)message
671
+ resolver:(RCTPromiseResolveBlock)resolve
672
+ rejecter:(RCTPromiseRejectBlock)reject)
673
+ {
674
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
675
+
676
+ NSLog(@"This is an Android only method.");
677
+ resolve(nil);
678
+ }
679
+
680
+ RCT_EXPORT_METHOD(addTripMetadata:(NSDictionary *)metadata
681
+ resolver:(RCTPromiseResolveBlock)resolve
682
+ rejecter:(RCTPromiseRejectBlock)reject)
683
+ {
684
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
685
+
686
+ NSLog(@"This is an Android only method.");
687
+ resolve(nil);
688
+ }
689
+
690
+ RCT_EXPORT_METHOD(deleteKeychainEntries:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
691
+ {
692
+ [self deleteAllKeysForSecClass:kSecClassGenericPassword];
693
+ [self deleteAllKeysForSecClass:kSecClassInternetPassword];
694
+ [self deleteAllKeysForSecClass:kSecClassCertificate];
695
+ [self deleteAllKeysForSecClass:kSecClassKey];
696
+ [self deleteAllKeysForSecClass:kSecClassIdentity];
697
+ }
698
+
699
+ RCT_EXPORT_METHOD(listenUserActivityUpdates:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
700
+ {
701
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
702
+
703
+ @try {
704
+ __weak typeof(self) weakSelf = self;
705
+ [[Sentiance sharedInstance] setUserActivityListener:^(SENTUserActivity *userActivity) {
706
+ NSDictionary *userActivityDict = [self convertUserActivityToDict:userActivity];
707
+ if(weakSelf.hasListeners) {
708
+ [weakSelf sendEventWithName:UserActivityUpdateEvent body:userActivityDict];
709
+ }
710
+ }];
711
+ resolve(nil);
712
+ } @catch (NSException *e) {
713
+ reject(e.name, e.reason, nil);
714
+ }
715
+ }
716
+
717
+ RCT_EXPORT_METHOD(getUserActivity:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
718
+ {
719
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
720
+
721
+ @try {
722
+ SENTUserActivity *userActivity = [[Sentiance sharedInstance] getUserActivity];
723
+ NSDictionary *userActivityDict = [self convertUserActivityToDict:userActivity];
724
+ resolve(userActivityDict);
725
+ } @catch (NSException *e) {
726
+ reject(e.name, e.reason, nil);
727
+ }
728
+ }
729
+
730
+ RCT_EXPORT_METHOD(isNativeInitializationEnabled:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
731
+ {
732
+ BOOL isEnabled = [self isNativeInitializationEnabled];
733
+ resolve(@(isEnabled));
734
+ }
735
+
736
+ RCT_EXPORT_METHOD(enableNativeInitialization:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
737
+ {
738
+ [self enableSDKNativeInitialization:resolve rejecter:reject];
739
+ }
740
+
741
+ RCT_EXPORT_METHOD(disableNativeInitialization:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
742
+ {
743
+ [self disableSDKNativeInitialization:resolve rejecter:reject];
744
+ }
745
+
746
+ RCT_EXPORT_METHOD(listenVehicleCrashEvents:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
747
+ {
748
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
749
+
750
+ @try {
751
+ __weak typeof(self) weakSelf = self;
752
+
753
+ [[Sentiance sharedInstance] setVehicleCrashHandler:^(SENTVehicleCrashEvent *crashEvent) {
754
+ if(weakSelf.hasListeners) {
755
+ NSDictionary *crashEventDict = [self convertVehicleCrashEventToDict:crashEvent];
756
+ [weakSelf sendEventWithName:VehicleCrashEvent body:crashEventDict];
757
+ }
758
+ }];
759
+ resolve(@(YES));
760
+ } @catch (NSException *e) {
761
+ reject(e.name, e.reason, nil);
762
+ }
763
+ }
764
+
765
+ RCT_EXPORT_METHOD(invokeDummyVehicleCrash:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
766
+ {
767
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
768
+
769
+ [[Sentiance sharedInstance] invokeDummyVehicleCrash];
770
+ resolve(@(YES));
771
+ }
772
+
773
+ RCT_EXPORT_METHOD(isVehicleCrashDetectionSupported:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
774
+ {
775
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
776
+
777
+ BOOL supported = [[Sentiance sharedInstance] isVehicleCrashDetectionSupported];
778
+ resolve(supported ? @(YES) : @(NO));
779
+ }
780
+
781
+ RCT_EXPORT_METHOD(isThirdPartyLinked:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
782
+ {
783
+ BOOL isThirdPartyLinked = [self isThirdPartyLinked];
784
+ resolve(@(isThirdPartyLinked));
785
+ }
786
+
787
+ - (BOOL)isThirdPartyLinked {
788
+ return [[Sentiance sharedInstance] isUserLinked];
789
+ }
790
+
791
+ RCT_EXPORT_METHOD(requestUserContext:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
792
+ {
793
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
794
+
795
+ __weak typeof(self) weakSelf = self;
796
+
797
+ [[Sentiance sharedInstance] requestUserContextWithCompletionHandler:^(SENTUserContext * _Nullable userContext, SENTRequestUserContextError * _Nullable error) {
798
+ if (error) {
799
+ reject(ESDKRequestUserContextError, [self stringifyUserContextError:error], nil);
800
+ }
801
+ else {
802
+ resolve([weakSelf convertUserContextToDict:userContext]);
803
+ }
804
+ }];
805
+ }
806
+
807
+ RCT_EXPORT_METHOD(listenUserContextUpdates:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
808
+ {
809
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
810
+
811
+ [Sentiance sharedInstance].userContextDelegate = self;
812
+ [Sentiance sharedInstance].criteriaMaskForUserContextUpdates = SENTUserContextUpdateCriteriaCurrentEvent |
813
+ SENTUserContextUpdateCriteriaActiveSegments |
814
+ SENTUserContextUpdateCriteriaActiveMoments |
815
+ SENTUserContextUpdateCriteriaVisitedVenues;
816
+ resolve(nil);
817
+ }
818
+
819
+ RCT_EXPORT_METHOD(setAppSessionDataCollectionEnabled:(BOOL)enabled
820
+ resolver:(RCTPromiseResolveBlock)resolve
821
+ rejecter:(RCTPromiseRejectBlock)reject)
822
+ {
823
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
824
+
825
+ // TODO
826
+ resolve(nil);
827
+ }
828
+
829
+ RCT_EXPORT_METHOD(isAppSessionDataCollectionEnabled:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
830
+ {
831
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
832
+
833
+ // TODO
834
+ resolve(@(NO));
835
+ }
836
+
837
+ RCT_EXPORT_METHOD(createUnlinkedUser:(NSString *)appId secret:(NSString *)secret platformUrl:(NSString *)platformUrl resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
838
+ {
839
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
840
+
841
+ SENTUserCreationOptions *options = [[SENTUserCreationOptions alloc] initWithAppId:appId secret:secret linker: SENTNoOpUserLinker];
842
+ options.platformUrl = platformUrl;
843
+ [[Sentiance sharedInstance] createUserWithOptions:options completionHandler:^(SENTUserCreationResult * _Nullable result, SENTUserCreationError * _Nullable error) {
844
+ if (error != nil) {
845
+ reject(ESDKCreateUserError, [self stringifyUserCreationError:error], nil);
846
+ }
847
+ else {
848
+ resolve([self convertUserCreationResult: result]);
849
+ }
850
+ }];
851
+ }
852
+
853
+ RCT_EXPORT_METHOD(createLinkedUser:(NSString *)appId secret:(NSString *)secret platformUrl:(NSString *)platformUrl resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
854
+ {
855
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
856
+
857
+ SENTUserCreationOptions *options = [[SENTUserCreationOptions alloc] initWithAppId:appId secret:secret linker: self.getUserLinker];
858
+ options.platformUrl = platformUrl;
859
+ [[Sentiance sharedInstance] createUserWithOptions:options completionHandler:^(SENTUserCreationResult * _Nullable result, SENTUserCreationError * _Nullable error) {
860
+ if (error != nil) {
861
+ reject(ESDKCreateUserError, [self stringifyUserCreationError:error], nil);
862
+ }
863
+ else {
864
+ resolve([self convertUserCreationResult: result]);
865
+ }
866
+ }];
867
+ }
868
+
869
+ RCT_EXPORT_METHOD(createLinkedUserWithAuthCode:(NSString *)authCode platformUrl:(NSString *)platformUrl resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
870
+ {
871
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
872
+
873
+ SENTUserCreationOptions *options = [[SENTUserCreationOptions alloc] initWithAuthenticationCode: authCode];
874
+ options.platformUrl = platformUrl;
875
+ [[Sentiance sharedInstance] createUserWithOptions:options completionHandler:^(SENTUserCreationResult * _Nullable result, SENTUserCreationError * _Nullable error) {
876
+ if (error != nil) {
877
+ reject(ESDKCreateUserError, [self stringifyUserCreationError:error], nil);
878
+ }
879
+ else {
880
+ resolve([self convertUserCreationResult: result]);
881
+ }
882
+ }];
883
+ }
884
+
885
+ RCT_EXPORT_METHOD(linkUserWithAuthCode:(NSString *)authCode resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
886
+ {
887
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
888
+
889
+ [[Sentiance sharedInstance] linkUserWithAuthCode:authCode completionHandler:^(SENTUserLinkingResult * _Nullable result, SENTUserLinkingError * _Nullable error) {
890
+ if (error != nil) {
891
+ reject(ESDKUserLinkAuthCodeError, [self stringifyUserLinkingError:error], nil);
892
+ }
893
+ else {
894
+ resolve([self convertUserLinkingResult: result]);
895
+ }
896
+ }];
897
+ }
898
+
899
+ RCT_EXPORT_METHOD(linkUser:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
900
+ {
901
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
902
+
903
+ [[Sentiance sharedInstance] linkUserWithLinker:[self getUserLinker] completionHandler:^(SENTUserLinkingResult * _Nullable result, SENTUserLinkingError * _Nullable error) {
904
+ if (error != nil) {
905
+ reject(ESDKUserLinkError, [self stringifyUserLinkingError:error], nil);
906
+ }
907
+ else {
908
+ resolve([self convertUserLinkingResult: result]);
909
+ }
910
+ }];
911
+
912
+ }
913
+
914
+ RCT_EXPORT_METHOD(userExists:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
915
+ {
916
+ BOOL userExists = [[Sentiance sharedInstance] userExists];
917
+ resolve(@(userExists));
918
+ }
919
+
920
+ RCT_EXPORT_METHOD(isUserLinked:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
921
+ {
922
+ BOOL isUserLinked = [[Sentiance sharedInstance] isUserLinked];
923
+ resolve(@(isUserLinked));
924
+ }
925
+
926
+ RCT_EXPORT_METHOD(reset:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
927
+ {
928
+ [[Sentiance sharedInstance] reset:^{
929
+ [self disableSDKNativeInitialization:resolve rejecter:reject];
930
+ } failure:^(SENTResetFailureReason reason) {
931
+ NSString *message = @"Resetting the SDK failed";
932
+ switch(reason) {
933
+ case SENTResetFailureReasonInitInProgress:
934
+ reject(@"SDK_INIT_IN_PROGRESS", message, nil);
935
+ break;
936
+ case SENTResetFailureReasonResetting:
937
+ reject(@"SDK_RESET_IN_PROGRESS", message, nil);
938
+ break;
939
+ default:
940
+ reject(@"SDK_RESET_UNKNOWN_ERROR", message, nil);
941
+ }
942
+ }];
943
+ }
944
+
945
+ RCT_EXPORT_METHOD(resetNewApi:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
946
+ {
947
+ [[Sentiance sharedInstance] resetWithCompletionHandler:^(SENTResetResult * _Nullable result, SENTResetError * _Nullable error) {
948
+ if (error != nil) {
949
+ reject(ESDKResetError, [self stringifyResetError:error], nil);
950
+ }
951
+ else {
952
+ resolve([self convertResetResult: result]);
953
+ [self disableSDKNativeInitialization:nil rejecter:nil];
954
+ }
955
+ }];
956
+ }
957
+
958
+ RCT_EXPORT_METHOD(listenSdkStatusUpdates:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
959
+ {
960
+ REJECT_IF_SDK_NOT_INITIALIZED(reject);
961
+
962
+ [[Sentiance sharedInstance] setDidReceiveSdkStatusUpdateHandler: [self getSdkStatusUpdateHandler]];
963
+ resolve(nil);
964
+ }
965
+
966
+ RCT_EXPORT_METHOD(listenTripTimeout:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
967
+ {
968
+ __weak typeof(self) weakSelf = self;
969
+ [[Sentiance sharedInstance] setTripTimeoutListener:^ {
970
+ if (weakSelf.hasListeners) {
971
+ [weakSelf sendEventWithName:TripTimeoutEvent body:nil];
972
+ }
973
+ }];
974
+ resolve(nil);
975
+ }
976
+
977
+ - (void)didUpdateUserContext:(SENTUserContext *)userContext
978
+ forCriteriaMask:(SENTUserContextUpdateCriteria)criteriaMask {
979
+ NSDictionary *dict = @{
980
+ @"userContext": [self convertUserContextToDict:userContext],
981
+ @"criteria": [self convertUserContextCriteriaToArray:criteriaMask]
982
+ };
983
+ [self sendEventWithName:UserContextUpdateEvent body:dict];
984
+ }
985
+
986
+ - (BOOL)isNativeInitializationEnabled {
987
+ return [[RNSentianceNativeInitialization sharedObject] isFlagFileExists];
988
+ }
989
+
990
+ - (void)enableSDKNativeInitialization:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject {
991
+ if([[RNSentianceNativeInitialization sharedObject] isFlagFileExists]) {
992
+ if (resolve) {
993
+ resolve(@(YES));
994
+ }
995
+ return;
996
+ }
997
+
998
+ NSError *error;
999
+ [[RNSentianceNativeInitialization sharedObject] createFlagFile:&error];
1000
+
1001
+ if (error != nil) {
1002
+ if (reject) {
1003
+ reject(@"ERROR_CREATING_DIR", error.description, nil);
1004
+ }
1005
+ } else if (resolve) {
1006
+ resolve(@(YES));
1007
+ }
1008
+ }
1009
+
1010
+ - (void)disableSDKNativeInitialization:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject {
1011
+ if([[RNSentianceNativeInitialization sharedObject] isFlagFileExists]) {
1012
+ NSError *error;
1013
+ [[RNSentianceNativeInitialization sharedObject] removeFlagFile:&error];
1014
+ if (error != nil) {
1015
+ if (reject) {
1016
+ reject(@"ERROR_REMOVE_FILE", error.description, nil);
1017
+ }
1018
+ } else if (resolve) {
1019
+ resolve(@(YES));
1020
+ }
1021
+ } else if (resolve) {
1022
+ resolve(@(YES));
1023
+ }
1024
+ }
1025
+
1026
+ -(void)deleteAllKeysForSecClass:(CFTypeRef)secClass {
1027
+ NSMutableDictionary* dict = [NSMutableDictionary dictionary];
1028
+ [dict setObject:(__bridge id)secClass forKey:(__bridge id)kSecClass];
1029
+ SecItemDelete((__bridge CFDictionaryRef) dict);
1030
+ }
1031
+
1032
+ - (BOOL)isSdkNotInitialized {
1033
+ return [Sentiance sharedInstance].initState != SENTInitialized;
1034
+ }
1035
+
1036
+ @end