@regulaforensics/face-sdk 8.2.855-nightly → 8.2.856-rc

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 (46) hide show
  1. package/RNFaceSDK.podspec +4 -4
  2. package/android/{CDVFaceSDK.kt → CVDFaceSDK.kt} +1 -1
  3. package/android/build.gradle +2 -2
  4. package/android/cordova.gradle +2 -2
  5. package/android/src/main/java/com/regula/plugin/facesdk/JSONConstructor.kt +7 -12
  6. package/examples/capacitor/android/app/build.gradle +2 -2
  7. package/examples/capacitor/android/app/capacitor.build.gradle +3 -2
  8. package/examples/capacitor/android/app/src/main/AndroidManifest.xml +1 -1
  9. package/examples/capacitor/android/build.gradle +3 -3
  10. package/examples/capacitor/android/capacitor.settings.gradle +5 -2
  11. package/examples/capacitor/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  12. package/examples/capacitor/android/gradle/wrapper/gradle-wrapper.properties +1 -1
  13. package/examples/capacitor/android/gradlew +5 -4
  14. package/examples/capacitor/android/gradlew.bat +2 -2
  15. package/examples/capacitor/android/variables.gradle +10 -10
  16. package/examples/capacitor/ios/App/App.xcodeproj/project.pbxproj +4 -20
  17. package/examples/capacitor/ios/App/Podfile +1 -5
  18. package/examples/capacitor/ios/App/Podfile.lock +14 -14
  19. package/examples/capacitor/package-lock.json +847 -811
  20. package/examples/capacitor/package.json +17 -17
  21. package/examples/ionic/images/icon.png +0 -0
  22. package/examples/ionic/package-lock.json +2419 -2633
  23. package/examples/ionic/package.json +14 -16
  24. package/examples/ionic/scripts/ios.sh +1 -1
  25. package/examples/react_native/package-lock.json +1443 -1161
  26. package/examples/react_native/package.json +2 -2
  27. package/ios/CVDFaceSDK.h +7 -0
  28. package/ios/CVDFaceSDK.m +43 -0
  29. package/ios/RFSWConfig.h +27 -0
  30. package/ios/RFSWConfig.m +199 -0
  31. package/ios/RFSWJSONConstructor.h +135 -0
  32. package/ios/RFSWJSONConstructor.m +985 -0
  33. package/ios/RFSWMain.h +24 -0
  34. package/ios/RFSWMain.m +381 -0
  35. package/ios/RNFaceSDK.h +8 -0
  36. package/ios/RNFaceSDK.m +39 -7
  37. package/package.json +1 -1
  38. package/plugin.xml +13 -11
  39. package/test/package-lock.json +1 -1
  40. package/examples/ionic/patches/cordova-plugin-ionic-webview+5.0.1.patch +0 -23
  41. package/ios/CDVFaceSDK.swift +0 -42
  42. package/ios/Config.swift +0 -242
  43. package/ios/Decoder.swift +0 -934
  44. package/ios/Main.swift +0 -191
  45. package/ios/RNFaceSDK.swift +0 -42
  46. package/ios/Utils.swift +0 -82
package/ios/RFSWMain.h ADDED
@@ -0,0 +1,24 @@
1
+ #import "RFSWJSONConstructor.h"
2
+ @import FaceSDK;
3
+
4
+ typedef void (^RFSWCallback)(id _Nullable response);
5
+ typedef void (^RFSWEventSender)(NSString* _Nonnull event, id _Nullable data);
6
+ extern UIViewController*_Nonnull(^ _Nonnull RFSWRootViewController)(void);
7
+
8
+ @interface RFSWMain: NSObject<RFSURLRequestInterceptingDelegate,
9
+ RFSVideoUploadingDelegate,
10
+ RFSCustomizationActionDelegate,
11
+ RFSFaceCaptureDelegate,
12
+ RFSLivenessDelegate>
13
+
14
+ +(void)methodCall:(NSString* _Nonnull)method
15
+ :(NSArray* _Nonnull)args
16
+ :(RFSWCallback _Nonnull)callback
17
+ :(RFSWEventSender _Nonnull)eventSender;
18
+
19
+ @end
20
+
21
+ static NSString* _Nonnull cameraSwitchEvent = @"cameraSwitchEvent";
22
+ static NSString* _Nonnull livenessNotificationEvent = @"livenessNotificationEvent";
23
+ static NSString* _Nonnull videoEncoderCompletionEvent = @"video_encoder_completion";
24
+ static NSString* _Nonnull onCustomButtonTappedEvent = @"onCustomButtonTappedEvent";
package/ios/RFSWMain.m ADDED
@@ -0,0 +1,381 @@
1
+ #import "RFSWMain.h"
2
+
3
+ @implementation RFSWMain
4
+
5
+ +(void)methodCall:(NSString*)method :(NSArray*)args :(RFSWCallback)callback :(RFSWEventSender)eventSender {
6
+ if(!this) this = [RFSWMain new];
7
+ sendEvent = eventSender;
8
+ NSDictionary* Switch = @{
9
+ @"getVersion": ^{ [self getVersion :callback]; },
10
+ @"getServiceUrl": ^{ [self getServiceUrl :callback]; },
11
+ @"setServiceUrl": ^{ [self setServiceUrl :args[0] :callback]; },
12
+ @"getTenant": ^{ [self getTenant :callback]; },
13
+ @"setTenant": ^{ [self setTenant :args[0]]; },
14
+ @"getEnv": ^{ [self getEnv :callback]; },
15
+ @"setEnv": ^{ [self setEnv :args[0]]; },
16
+ @"getLocale": ^{ [self getLocale :callback]; },
17
+ @"setLocale": ^{ [self setLocale :args[0]]; },
18
+ @"setLocalizationDictionary": ^{ [self setLocalizationDictionary :args[0]]; },
19
+ @"setRequestHeaders": ^{ [self setRequestHeaders :args[0]]; },
20
+ @"setCustomization": ^{ [self setCustomization :args[0]]; },
21
+ @"isInitialized": ^{ [self isInitialized :callback]; },
22
+ @"initialize": ^{ [self initialize :args[0] :callback]; },
23
+ @"deinitialize": ^{ [self deinitialize]; },
24
+ @"startFaceCapture": ^{ [self startFaceCapture :args[0] :callback]; },
25
+ @"stopFaceCapture": ^{ [self stopFaceCapture]; },
26
+ @"startLiveness": ^{ [self startLiveness :args[0] :callback]; },
27
+ @"stopLiveness": ^{ [self stopLiveness]; },
28
+ @"matchFaces": ^{ [self matchFaces :args[0] :args[1] :callback]; },
29
+ @"splitComparedFaces": ^{ [self splitComparedFaces :args[0] :args[1] :callback]; },
30
+ @"detectFaces": ^{ [self detectFaces :args[0] :callback]; },
31
+ @"createPerson": ^{ [self createPerson :args[0] :args[1] :args[2] :callback]; },
32
+ @"updatePerson": ^{ [self updatePerson :args[0] :callback]; },
33
+ @"deletePerson": ^{ [self deletePerson :args[0] :callback]; },
34
+ @"getPerson": ^{ [self getPerson :args[0] :callback]; },
35
+ @"addPersonImage": ^{ [self addPersonImage :args[0] :args[1] :callback]; },
36
+ @"deletePersonImage": ^{ [self deletePersonImage :args[0] :args[1] :callback]; },
37
+ @"getPersonImage": ^{ [self getPersonImage :args[0] :args[1] :callback]; },
38
+ @"getPersonImages": ^{ [self getPersonImages :args[0] :callback]; },
39
+ @"getPersonImagesForPage": ^{ [self getPersonImagesForPage :args[0] :args[1] :args[2] :callback]; },
40
+ @"createGroup": ^{ [self createGroup :args[0] :args[1] :callback]; },
41
+ @"updateGroup": ^{ [self updateGroup :args[0] :callback]; },
42
+ @"editPersonsInGroup": ^{ [self editPersonsInGroup :args[0] :args[1] :callback]; },
43
+ @"deleteGroup": ^{ [self deleteGroup :args[0] :callback]; },
44
+ @"getGroup": ^{ [self getGroup :args[0] :callback]; },
45
+ @"getGroups": ^{ [self getGroups :callback]; },
46
+ @"getGroupsForPage": ^{ [self getGroupsForPage :args[0] :args[1] :callback]; },
47
+ @"getPersonGroups": ^{ [self getPersonGroups :args[0] :callback]; },
48
+ @"getPersonGroupsForPage": ^{ [self getPersonGroupsForPage :args[0] :args[1] :args[2] :callback]; },
49
+ @"getPersonsInGroup": ^{ [self getPersonsInGroup :args[0] :callback]; },
50
+ @"getPersonsInGroupForPage": ^{ [self getPersonsInGroupForPage :args[0] :args[1] :args[2] :callback]; },
51
+ @"searchPerson": ^{ [self searchPerson :args[0] :callback]; },
52
+ };
53
+ ((void(^)(void))Switch[method])();
54
+ }
55
+
56
+ static RFSWMain* this;
57
+ static RFSWEventSender sendEvent;
58
+ static NSDictionary* headers;
59
+
60
+ +(void)getVersion:(RFSWCallback)callback {
61
+ callback([RFSWJSONConstructor generateFaceSDKVersion:RFSFaceSDK.service.version]);
62
+ }
63
+
64
+ +(void)getServiceUrl:(RFSWCallback)callback {
65
+ callback([RFSFaceSDK.service serviceURL]);
66
+ }
67
+
68
+ +(void)setServiceUrl:(NSString*)url :(RFSWCallback)callback {
69
+ [RFSFaceSDK.service setServiceURL:url];
70
+ callback(@"");
71
+ }
72
+
73
+ +(void)getTenant:(RFSWCallback)callback {
74
+ callback([RFSFaceSDK.service tenant]);
75
+ }
76
+
77
+ +(void)setTenant:(NSString*)tag {
78
+ [RFSFaceSDK.service setTenant:tag];
79
+ }
80
+
81
+ +(void)getEnv:(RFSWCallback)callback {
82
+ callback([RFSFaceSDK.service env]);
83
+ }
84
+
85
+ +(void)setEnv:(NSString*)tag {
86
+ [RFSFaceSDK.service setEnv:tag];
87
+ }
88
+
89
+ +(void)getLocale:(RFSWCallback)callback {
90
+ callback([RFSFaceSDK.service languageLocaleCode]);
91
+ }
92
+
93
+ +(void)setLocale:(NSString*)locale {
94
+ [RFSFaceSDK.service setLanguageLocaleCode:locale];
95
+ }
96
+
97
+ +(void)setLocalizationDictionary:(NSDictionary*)dictionary {
98
+ RFSFaceSDK.service.localizationHandler = ^NSString* (NSString* localizationKey) {
99
+ if (dictionary[localizationKey]) return dictionary[localizationKey];
100
+ return nil;
101
+ };
102
+ }
103
+
104
+ +(void)setRequestHeaders:(NSDictionary*)headersDict {
105
+ headers = headersDict;
106
+ RFSFaceSDK.service.requestInterceptingDelegate = this;
107
+ }
108
+
109
+ -(NSURLRequest*)interceptorPrepareRequest:(NSURLRequest*)request {
110
+ NSMutableURLRequest *interceptedRequest = [request mutableCopy];
111
+ for (NSString* key in headers.allKeys)
112
+ [interceptedRequest addValue:[headers valueForKey:key] forHTTPHeaderField:key];
113
+ return interceptedRequest;
114
+ }
115
+
116
+ +(void)setCustomization:(NSDictionary*)config {
117
+ [RFSWConfig setCustomization:config :RFSFaceSDK.service.customization];
118
+ }
119
+
120
+ +(void)isInitialized:(RFSWCallback)callback {
121
+ callback(@([RFSFaceSDK.service isInitialized]));
122
+ }
123
+
124
+ +(void)initialize:(NSDictionary*)config :(RFSWCallback)callback {
125
+ [RFSFaceSDK.service initializeWithConfiguration:[RFSWJSONConstructor initConfigFromJSON:config]
126
+ completion:[RFSWMain initCompletion:callback]];
127
+ }
128
+
129
+ +(void)deinitialize {
130
+ [RFSFaceSDK.service deinitialize];
131
+ }
132
+
133
+ +(void)startFaceCapture:(NSDictionary*)config :(RFSWCallback)callback {
134
+ dispatch_async(dispatch_get_main_queue(), ^{
135
+ [RFSFaceSDK.service presentFaceCaptureViewControllerFrom:RFSWRootViewController()
136
+ animated:true
137
+ configuration:[RFSWConfig faceCaptureConfigFromJSON:config]
138
+ onCapture:[self faceCaptureCompletion:callback]
139
+ completion:nil];
140
+ });
141
+ }
142
+
143
+ +(void)stopFaceCapture {
144
+ [RFSFaceSDK.service stopFaceCaptureViewController];
145
+ }
146
+
147
+ +(void)startLiveness:(NSDictionary*)config :(RFSWCallback)callback {
148
+ dispatch_async(dispatch_get_main_queue(), ^{
149
+ [RFSFaceSDK.service startLivenessFrom:RFSWRootViewController()
150
+ animated:true
151
+ configuration:[RFSWConfig livenessConfigFromJSON:config]
152
+ onLiveness:[self livenessCompletion:callback]
153
+ completion:nil];
154
+ });
155
+ }
156
+
157
+ +(void)stopLiveness {
158
+ [RFSFaceSDK.service stopLivenessProcessing];
159
+ }
160
+
161
+ +(void)matchFaces:(NSDictionary*)request :(NSDictionary*)config :(RFSWCallback)callback {
162
+ [RFSFaceSDK.service matchFaces:[RFSWJSONConstructor matchFacesRequestFromJSON:request]
163
+ configuration:[RFSWConfig matchFacesConfigFromJSON:config]
164
+ completion:[self matchFacesCompletion:callback]];
165
+ }
166
+
167
+ +(void)splitComparedFaces:(NSArray*)faces :(NSNumber*)similarity :(RFSWCallback)callback {
168
+ NSArray* array = [RFSWJSONConstructor arrayFromJSON:faces :@selector(comparedFacesPairFromJSON:)];
169
+ RFSMatchFacesSimilarityThresholdSplit *split = [RFSMatchFacesSimilarityThresholdSplit splitPairs:array bySimilarityThreshold:similarity];
170
+ callback([RFSWJSONConstructor generateComparedFacesSplit:split]);
171
+ }
172
+
173
+ +(void)detectFaces:(NSDictionary*)request :(RFSWCallback)callback {
174
+ [RFSFaceSDK.service detectFacesByRequest:[RFSWJSONConstructor detectFacesRequestFromJSON:request]
175
+ completion:[self detectFacesCompletion:callback]];
176
+ }
177
+
178
+ +(void)createPerson:(NSString*)name :(NSArray<NSString*>*)groupIds :(NSDictionary*)metadata :(RFSWCallback)callback {
179
+ [RFSFaceSDK.service.personDatabase createPersonWithName:name
180
+ metadata:metadata
181
+ groupIds:groupIds
182
+ completion:[self databaseItemCompletion :callback :@selector(generatePerson:)]];
183
+ }
184
+
185
+ +(void)updatePerson:(NSDictionary*)person :(RFSWCallback)callback {
186
+ [RFSFaceSDK.service.personDatabase getPersonByPersonId:[RFSWJSONConstructor idFromJSON:person] completion:^(RFSItemResponse<RFSPerson *> * response) {
187
+ if (response.error) callback([RFSWJSONConstructor generatePersonDBResponse:nil :response.error]);
188
+ else [RFSFaceSDK.service.personDatabase updatePerson:[RFSWJSONConstructor updatePersonFromJSON:response.item :person]
189
+ completion:[self databaseCompletion:callback]];
190
+ }];
191
+ }
192
+
193
+ +(void)deletePerson:(NSString*)personId :(RFSWCallback)callback {
194
+ [RFSFaceSDK.service.personDatabase deletePersonByPersonId:personId
195
+ completion:[self databaseCompletion:callback]];
196
+ }
197
+
198
+ +(void)getPerson:(NSString*)personId :(RFSWCallback)callback {
199
+ [RFSFaceSDK.service.personDatabase getPersonByPersonId:personId
200
+ completion:[self databaseItemCompletion :callback :@selector(generatePerson:)]];
201
+ }
202
+
203
+ +(void)addPersonImage:(NSString*)personId :(NSDictionary*)image :(RFSWCallback)callback {
204
+ [RFSFaceSDK.service.personDatabase addPersonImageByPersonId:personId
205
+ imageUpload:[RFSWJSONConstructor imageUploadFromJSON:image]
206
+ completion:[self databaseItemCompletion :callback :@selector(generatePersonImage:)]];
207
+ }
208
+
209
+ +(void)deletePersonImage:(NSString*)personId :(NSString*)imageId :(RFSWCallback)callback {
210
+ [RFSFaceSDK.service.personDatabase deletePersonImageByPersonId:personId
211
+ imageId: imageId
212
+ completion:[self databaseCompletion:callback]];
213
+ }
214
+
215
+ +(void)getPersonImage:(NSString*)personId :(NSString*)imageId :(RFSWCallback)callback {
216
+ [RFSFaceSDK.service.personDatabase getPersonImageByPersonId:personId imageId:imageId completion:^(RFSDataResponse* response) {
217
+ callback([RFSWJSONConstructor generatePersonDBResponse:[RFSWJSONConstructor base64Encode:response.data] :response.error]);
218
+ }];
219
+ }
220
+
221
+ +(void)getPersonImages:(NSString*)personId :(RFSWCallback)callback {
222
+ [RFSFaceSDK.service.personDatabase getPersonImagesByPersonId:personId
223
+ completion:[self databasePageCompletion :callback :@selector(generatePersonImage:)]];
224
+ }
225
+
226
+ +(void)getPersonImagesForPage:(NSString*)personId :(NSNumber*)page :(NSNumber*)size :(RFSWCallback)callback {
227
+ [RFSFaceSDK.service.personDatabase getPersonImagesByPersonId:personId
228
+ page:[page integerValue]
229
+ size:[size integerValue]
230
+ completion:[self databasePageCompletion :callback :@selector(generatePersonImage:)]];
231
+ }
232
+
233
+ +(void)createGroup:(NSString*)name :(NSDictionary*)metadata :(RFSWCallback)callback {
234
+ [RFSFaceSDK.service.personDatabase createGroupWithName:name
235
+ metadata:metadata
236
+ completion:[self databaseItemCompletion :callback :@selector(generatePersonGroup:)]];
237
+ }
238
+
239
+ +(void)updateGroup:(NSDictionary*)group :(RFSWCallback)callback {
240
+ [RFSFaceSDK.service.personDatabase getGroupByGroupId:[RFSWJSONConstructor idFromJSON:group] completion:^(RFSItemResponse<RFSPersonGroup *> * response) {
241
+ if (response.error) callback([RFSWJSONConstructor generatePersonDBResponse:nil :response.error]);
242
+ else [RFSFaceSDK.service.personDatabase updateGroup:[RFSWJSONConstructor updatePersonGroupFromJSON:response.item :group]
243
+ completion:[self databaseCompletion:callback]];
244
+ }];
245
+ }
246
+
247
+ +(void)editPersonsInGroup:(NSString*)groupId :(NSDictionary*)editGroupPersonsRequest :(RFSWCallback)callback {
248
+ [RFSFaceSDK.service.personDatabase editGroupPersonsByGroupId:groupId
249
+ request:[RFSWJSONConstructor editGroupPersonsRequestFromJSON:editGroupPersonsRequest]
250
+ completion:[self databaseCompletion:callback]];
251
+ }
252
+
253
+ +(void)deleteGroup:(NSString*)groupId :(RFSWCallback)callback {
254
+ [RFSFaceSDK.service.personDatabase deleteGroupByGroupId:groupId
255
+ completion:[self databaseCompletion:callback]];
256
+ }
257
+
258
+ +(void)getGroup:(NSString*)groupId :(RFSWCallback)callback {
259
+ [RFSFaceSDK.service.personDatabase getGroupByGroupId:groupId
260
+ completion:[self databaseItemCompletion :callback :@selector(generatePersonGroup:)]];
261
+ }
262
+
263
+ +(void)getGroups:(RFSWCallback)callback {
264
+ [RFSFaceSDK.service.personDatabase getGroups:[self databasePageCompletion :callback :@selector(generatePersonGroup:)]];
265
+ }
266
+
267
+ +(void)getGroupsForPage:(NSNumber*)page :(NSNumber*)size :(RFSWCallback)callback {
268
+ [RFSFaceSDK.service.personDatabase getGroupsForPage:[page integerValue]
269
+ size:[size integerValue]
270
+ completion:[self databasePageCompletion :callback :@selector(generatePersonGroup:)]];
271
+ }
272
+
273
+ +(void)getPersonGroups:(NSString*)personId :(RFSWCallback)callback {
274
+ [RFSFaceSDK.service.personDatabase getPersonGroupsByPersonId:personId
275
+ completion:[self databasePageCompletion :callback :@selector(generatePersonGroup:)]];
276
+ }
277
+
278
+ +(void)getPersonGroupsForPage:(NSString*)personId :(NSNumber*)page :(NSNumber*)size :(RFSWCallback)callback {
279
+ [RFSFaceSDK.service.personDatabase getPersonGroupsByPersonId:personId
280
+ page:[page integerValue]
281
+ size:[size integerValue]
282
+ completion:[self databasePageCompletion :callback :@selector(generatePersonGroup:)]];
283
+ }
284
+
285
+ +(void)getPersonsInGroup:(NSString*)groupId :(RFSWCallback)callback {
286
+ [RFSFaceSDK.service.personDatabase getGroupPersonsByGroupId:groupId
287
+ completion:[self databasePageCompletion :callback :@selector(generatePerson:)]];
288
+ }
289
+
290
+ +(void)getPersonsInGroupForPage:(NSString*)groupId :(NSNumber*)page :(NSNumber*)size :(RFSWCallback)callback {
291
+ [RFSFaceSDK.service.personDatabase getGroupPersonsByGroupId:groupId
292
+ page:[page integerValue]
293
+ size:[size integerValue]
294
+ completion:[self databasePageCompletion :callback :@selector(generatePerson:)]];
295
+ }
296
+
297
+ +(void)searchPerson:(NSDictionary*)searchPersonRequest :(RFSWCallback)callback {
298
+ [RFSFaceSDK.service.personDatabase searchPerson:[RFSWJSONConstructor searchPersonRequestFromJSON:searchPersonRequest]
299
+ completion:^(RFSSearchPersonResponse *response) {
300
+ callback([RFSWJSONConstructor generatePersonDBResponse:[RFSWJSONConstructor generateArray:response.results :@selector(generateSearchPerson:)] :response.error]);
301
+ }];
302
+ }
303
+
304
+ +(RFSInitializationCompletion)initCompletion:(RFSWCallback)callback {
305
+ return ^(BOOL success, NSError* error) {
306
+ RFSFaceSDK.service.customization.configuration = [RFSUIConfiguration defaultConfiguration];
307
+ [RFSFaceSDK.service setVideoUploadingDelegate:this];
308
+ [RFSFaceSDK.service setFaceCaptureDelegate:this];
309
+ [RFSFaceSDK.service setLivenessDelegate:this];
310
+ RFSFaceSDK.service.customization.actionDelegate = this;
311
+ callback([RFSWJSONConstructor generateInitCompletion:success :error]);
312
+ };
313
+ }
314
+
315
+ +(void (^)(RFSFaceCaptureResponse*)) faceCaptureCompletion:(RFSWCallback)callback {
316
+ return ^(RFSFaceCaptureResponse* response) {
317
+ callback([RFSWJSONConstructor generateFaceCaptureResponse:response]);
318
+ };
319
+ }
320
+
321
+ +(void (^)(RFSLivenessResponse*)) livenessCompletion:(RFSWCallback)callback {
322
+ return ^(RFSLivenessResponse* response) {
323
+ callback([RFSWJSONConstructor generateLivenessResponse:response]);
324
+ };
325
+ }
326
+
327
+ +(void (^)(RFSMatchFacesResponse*)) matchFacesCompletion:(RFSWCallback)callback {
328
+ return ^(RFSMatchFacesResponse* response) {
329
+ callback([RFSWJSONConstructor generateMatchFacesResponse:response]);
330
+ };
331
+ }
332
+
333
+ +(void (^)(RFSDetectFacesResponse*)) detectFacesCompletion:(RFSWCallback)callback {
334
+ return ^(RFSDetectFacesResponse* response) {
335
+ callback([RFSWJSONConstructor generateDetectFacesResponse:response]);
336
+ };
337
+ }
338
+
339
+ +(void (^)(RFSComfirmResponse *response))databaseCompletion:(RFSWCallback)callback {
340
+ return ^(RFSComfirmResponse *response) {
341
+ callback([RFSWJSONConstructor generatePersonDBResponse:@YES :response.error]);
342
+ };
343
+ }
344
+
345
+ +(void (^)(RFSItemResponse<RFSDBBaseItem *> *response))databaseItemCompletion:(RFSWCallback)callback :(SEL)toJson {
346
+ return ^(RFSItemResponse<RFSDBBaseItem *> *response) {
347
+ callback([RFSWJSONConstructor generatePersonDBResponse:[RFSWJSONConstructor performSelector:toJson withObject:response.item] :response.error]);
348
+ };
349
+ }
350
+
351
+ +(void (^)(RFSPageResponse<RFSDBBaseItem *> *response))databasePageCompletion:(RFSWCallback)callback :(SEL)toJson {
352
+ return ^(RFSPageResponse<RFSDBBaseItem *> *response) {
353
+ callback([RFSWJSONConstructor generatePersonDBResponse:@{
354
+ @"items": [RFSWJSONConstructor generateArray:response.items :toJson],
355
+ @"page": @(response.page),
356
+ @"totalPages": @(response.totalPages),
357
+ } :response.error]);
358
+ };
359
+ }
360
+
361
+ // RFSFaceCaptureDelegate & RFSLivenessDelegate
362
+ -(void)cameraPositionChanged:(RFSCameraPosition)cameraPosition {
363
+ sendEvent(cameraSwitchEvent, @(cameraPosition));
364
+ }
365
+
366
+ // RFSLivenessDelegate
367
+ -(void)processStatusChanged:(RFSLivenessProcessStatus)status result:(RFSLivenessResponse*)result {
368
+ sendEvent(livenessNotificationEvent, [RFSWJSONConstructor generateLivenessNotification:status result:result]);
369
+ }
370
+
371
+ // RFSVideoUploadingDelegate
372
+ -(void)videoUploadingForTransactionId:(NSString*)transactionId didFinishedWithSuccess:(BOOL)success {
373
+ sendEvent(videoEncoderCompletionEvent, [RFSWJSONConstructor generateVideoEncoderCompletion:transactionId :success]);
374
+ }
375
+
376
+ // RFSCustomizationActionDelegate
377
+ -(void)onFaceCustomButtonTappedWithTag:(NSInteger)tag {
378
+ sendEvent(onCustomButtonTappedEvent, @(tag));
379
+ }
380
+
381
+ @end
@@ -0,0 +1,8 @@
1
+ #import <React/RCTBridgeModule.h>
2
+ #import <React/RCTEventEmitter.h>
3
+ #import <React/RCTUtils.h>
4
+ #import "RFSWMain.h"
5
+ @import UIKit;
6
+
7
+ @interface RNFaceSDK : RCTEventEmitter <RCTBridgeModule>
8
+ @end
package/ios/RNFaceSDK.m CHANGED
@@ -1,11 +1,43 @@
1
- #import <React/RCTEventEmitter.h>
2
- #import <React/RCTBridgeModule.h>
1
+ #import "RNFaceSDK.h"
3
2
 
4
- @interface RCT_EXTERN_MODULE(RNFaceSDK, RCTEventEmitter)
3
+ @implementation RNFaceSDK
4
+ RCT_EXPORT_MODULE();
5
5
 
6
- RCT_EXTERN_METHOD(exec: (NSString*)method
7
- newArgs:(NSArray*)newArgs
8
- resolve:(RCTPromiseResolveBlock)resolve
9
- reject:(RCTPromiseRejectBlock)reject)
6
+ static NSMutableArray<RCTResponseSenderBlock>* _firedCallbacks = nil;
7
+ - (NSMutableArray<RCTResponseSenderBlock>*)firedCallbacks {
8
+ if (_firedCallbacks == nil) _firedCallbacks = @[].mutableCopy;
9
+ return _firedCallbacks;
10
+ }
11
+
12
+ - (NSArray<NSString*>*)supportedEvents {
13
+ return @[cameraSwitchEvent,
14
+ livenessNotificationEvent,
15
+ videoEncoderCompletionEvent,
16
+ onCustomButtonTappedEvent];
17
+ }
18
+
19
+ static bool hasListeners;
20
+ - (void)startObserving { hasListeners = YES; }
21
+ - (void)stopObserving { hasListeners = NO; }
22
+
23
+ UIViewController*(^RFSWRootViewController)(void) = ^UIViewController*(){
24
+ return RCTPresentedViewController();
25
+ };
26
+
27
+ RCT_EXPORT_METHOD(exec:(NSString*)method:(NSArray*)args:(RCTPromiseResolveBlock)resolve:(RCTPromiseRejectBlock)reject) {
28
+ RFSWCallback callback = ^(id _Nullable data) {
29
+ if ([self.firedCallbacks containsObject:resolve]) return;
30
+ [self.firedCallbacks addObject:resolve];
31
+ resolve([RFSWJSONConstructor toSendable:data]);
32
+ };
33
+
34
+ RFSWEventSender sendEvent = ^(NSString* event, id data) {
35
+ dispatch_async(dispatch_get_main_queue(), ^{
36
+ if (hasListeners) [self sendEventWithName:event body:[RFSWJSONConstructor toSendable:data]];
37
+ });
38
+ };
39
+
40
+ [RFSWMain methodCall:method :args :callback :sendEvent];
41
+ }
10
42
 
11
43
  @end
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@regulaforensics/face-sdk",
3
- "version": "8.2.855-nightly",
3
+ "version": "8.2.856-rc",
4
4
  "description": "This is an npm module for Regula Face SDK. It allows you to easily compaire faces using your phone's camera.",
5
5
  "main": "www/react-native/index.js",
6
6
  "module": "www/capacitor/index.js",
package/plugin.xml CHANGED
@@ -1,5 +1,5 @@
1
1
  <?xml version='1.0' encoding='utf-8'?>
2
- <plugin id="@regulaforensics/face-sdk" version="8.2.855-nightly" xmlns="http://apache.org/cordova/ns/plugins/1.0">
2
+ <plugin id="@regulaforensics/face-sdk" version="8.2.856-rc" xmlns="http://apache.org/cordova/ns/plugins/1.0">
3
3
  <name>FaceSDK</name>
4
4
  <description>Cordova plugin for Regula Face SDK</description>
5
5
  <license>commercial</license>
@@ -12,22 +12,24 @@
12
12
  <platform name="ios">
13
13
  <config-file target="config.xml" parent="/widget">
14
14
  <feature name="FaceSDK">
15
- <param name="ios-package" value="CDVFaceSDK" />
15
+ <param name="ios-package" value="CVDFaceSDK" />
16
16
  </feature>
17
17
  <preference name="deployment-target" value="13.0" />
18
- <preference name="SwiftVersion" value="5" />
19
18
  </config-file>
20
- <source-file src="ios/CDVFaceSDK.swift" />
21
- <source-file src="ios/Main.swift" />
22
- <source-file src="ios/Decoder.swift" />
23
- <source-file src="ios/Config.swift" />
24
- <source-file src="ios/Utils.swift" />
19
+ <header-file src="ios/CVDFaceSDK.h" />
20
+ <source-file src="ios/CVDFaceSDK.m" />
21
+ <header-file src="ios/RFSWMain.h" />
22
+ <source-file src="ios/RFSWMain.m" />
23
+ <header-file src="ios/RFSWJSONConstructor.h" />
24
+ <source-file src="ios/RFSWJSONConstructor.m" />
25
+ <header-file src="ios/RFSWConfig.h" />
26
+ <source-file src="ios/RFSWConfig.m" />
25
27
  <podspec>
26
28
  <config>
27
29
  <source url="https://github.com/CocoaPods/Specs.git" />
28
30
  </config>
29
31
  <pods>
30
- <pod name="FaceSDKNightly" spec="8.2.3862" />
32
+ <pod name="FaceSDKStage" spec="8.2.3864" />
31
33
  </pods>
32
34
  </podspec>
33
35
  </platform>
@@ -35,11 +37,11 @@
35
37
  <platform name="android">
36
38
  <config-file parent="/*" target="res/xml/config.xml">
37
39
  <feature name="FaceSDK">
38
- <param name="android-package" value="com.regula.plugin.facesdk.CDVFaceSDK" />
40
+ <param name="android-package" value="com.regula.plugin.facesdk.CVDFaceSDK" />
39
41
  </feature>
40
42
  </config-file>
41
43
  <framework src="android/cordova.gradle" custom="true" type="gradleReference" />
42
- <source-file src="android/CDVFaceSDK.kt" target-dir="java/com.regula.plugin.facesdk" />
44
+ <source-file src="android/CVDFaceSDK.kt" target-dir="java/com.regula.plugin.facesdk" />
43
45
  <source-file src="android/src/main/java/com/regula/plugin/facesdk/Main.kt" target-dir="java/com.regula.plugin.facesdk" />
44
46
  <source-file src="android/src/main/java/com/regula/plugin/facesdk/JSONConstructor.kt" target-dir="java/com.regula.plugin.facesdk" />
45
47
  <source-file src="android/src/main/java/com/regula/plugin/facesdk/Config.kt" target-dir="java/com.regula.plugin.facesdk" />
@@ -13,7 +13,7 @@
13
13
  },
14
14
  "..": {
15
15
  "name": "@regulaforensics/face-sdk",
16
- "version": "8.2.855-nightly",
16
+ "version": "8.2.856-rc",
17
17
  "dev": true,
18
18
  "license": "commercial"
19
19
  },
@@ -1,23 +0,0 @@
1
- diff --git a/node_modules/cordova-plugin-ionic-webview/src/ios/CDVWKWebViewEngine.m b/node_modules/cordova-plugin-ionic-webview/src/ios/CDVWKWebViewEngine.m
2
- index 2acb99b..900a04c 100644
3
- --- a/node_modules/cordova-plugin-ionic-webview/src/ios/CDVWKWebViewEngine.m
4
- +++ b/node_modules/cordova-plugin-ionic-webview/src/ios/CDVWKWebViewEngine.m
5
- @@ -731,6 +731,18 @@ - (BOOL)defaultResourcePolicyForURL:(NSURL*)url
6
- return YES;
7
- }
8
-
9
- + // Allow internal local-server navigation even when no plugin overrides the request.
10
- + NSURL *localServerUrl = [NSURL URLWithString:self.CDV_LOCAL_SERVER];
11
- + if (localServerUrl != nil && url != nil) {
12
- + NSString *localScheme = localServerUrl.scheme.lowercaseString;
13
- + NSString *localHost = localServerUrl.host.lowercaseString;
14
- + NSString *urlScheme = url.scheme.lowercaseString;
15
- + NSString *urlHost = url.host.lowercaseString;
16
- + if ([localScheme isEqualToString:urlScheme] && [localHost isEqualToString:urlHost]) {
17
- + return YES;
18
- + }
19
- + }
20
- +
21
- return NO;
22
- }
23
-
@@ -1,42 +0,0 @@
1
- @objc(CDVFaceSDK)
2
- class CDVFaceSDK: CDVPlugin {
3
- @objc(exec:)
4
- func exec(_ command: CDVInvokedUrlCommand) {
5
- this = self
6
- let method = command.arguments.first as! String
7
- args = Array(command.arguments.dropFirst())
8
-
9
- if method == "setEvent" {
10
- eventCallbackIds[args.first as! String] = command.callbackId
11
- return
12
- }
13
-
14
- methodCall(method, { data in sendEvent(command.callbackId, data) })
15
- }
16
- }
17
-
18
- var this: CDVFaceSDK?
19
- var eventCallbackIds: [String: String] = [:]
20
- func sendEvent(_ event: String, _ data: Any? = "") {
21
- var callbackId = event
22
- let eventId = eventCallbackIds[event]
23
- if eventId != nil { callbackId = eventId! }
24
-
25
- // In this section unreasonable casts and optionals are made to
26
- // ensure that this code works with both cordova-ios@7 and cordova-ios@8.
27
- var sendable = data.toSendable()
28
- if sendable is NSNull { sendable = "" }
29
- let message = sendable as! String
30
- let result: CDVPluginResult? = CDVPluginResult(status: CDVCommandStatus.ok, messageAs: message)
31
- result!.setKeepCallbackAs(true)
32
-
33
- this!.commandDelegate.send(result!, callbackId: callbackId)
34
- }
35
-
36
- let rootViewController: () -> UIViewController? = {
37
- return UIApplication.shared.connectedScenes
38
- .compactMap { $0 as? UIWindowScene }
39
- .flatMap { $0.windows }
40
- .first { $0.isKeyWindow }?
41
- .rootViewController
42
- }