@regulaforensics/face-sdk 8.3.1100-rc → 8.3.1107-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 (61) hide show
  1. package/RNFaceSDK.podspec +2 -2
  2. package/android/build.gradle +1 -1
  3. package/android/cordova.gradle +1 -1
  4. package/android/src/main/java/com/regula/plugin/facesdk/Config.kt +91 -0
  5. package/android/src/main/java/com/regula/plugin/facesdk/JSONConstructor.kt +106 -3
  6. package/android/src/main/java/com/regula/plugin/facesdk/Main.kt +39 -1
  7. package/android/src/main/java/com/regula/plugin/facesdk/Utils.kt +0 -1
  8. package/examples/capacitor/package-lock.json +227 -221
  9. package/examples/capacitor/package.json +4 -1
  10. package/examples/capacitor/scripts/android.sh +1 -1
  11. package/examples/ionic/package-lock.json +1579 -2369
  12. package/examples/ionic/package.json +15 -12
  13. package/examples/ionic/scripts/android.sh +1 -1
  14. package/examples/react_native/package-lock.json +138 -169
  15. package/examples/react_native/package.json +3 -2
  16. package/examples/react_native/scripts/android.sh +1 -1
  17. package/ios/Config.swift +109 -1
  18. package/ios/Decoder.swift +71 -3
  19. package/ios/Main.swift +24 -4
  20. package/package.json +1 -1
  21. package/plugin.xml +2 -2
  22. package/test/json.tsx +134 -57
  23. package/test/package-lock.json +1 -1
  24. package/test/test.tsx +68 -60
  25. package/www/capacitor/customization/customization_images.js +40 -0
  26. package/www/capacitor/index.js +33 -12
  27. package/www/capacitor/liveness/enrollment_config.js +102 -0
  28. package/www/capacitor/liveness/enrollment_request.js +34 -0
  29. package/www/capacitor/liveness/enrollment_response.js +26 -0
  30. package/www/capacitor/liveness/error_response.js +21 -0
  31. package/www/capacitor/liveness/liveness_config.js +1 -0
  32. package/www/capacitor/liveness/liveness_exception.js +6 -5
  33. package/www/capacitor/liveness/liveness_notification.js +2 -0
  34. package/www/capacitor/liveness/verification_config.js +98 -0
  35. package/www/capacitor/liveness/verification_response.js +27 -0
  36. package/www/capacitor/liveness/verify_match_response.js +21 -0
  37. package/www/cordova.js +595 -80
  38. package/www/react-native/customization/customization_images.js +40 -0
  39. package/www/react-native/index.js +33 -12
  40. package/www/react-native/liveness/enrollment_config.js +102 -0
  41. package/www/react-native/liveness/enrollment_request.js +34 -0
  42. package/www/react-native/liveness/enrollment_response.js +26 -0
  43. package/www/react-native/liveness/error_response.js +21 -0
  44. package/www/react-native/liveness/liveness_config.js +1 -0
  45. package/www/react-native/liveness/liveness_exception.js +6 -5
  46. package/www/react-native/liveness/liveness_notification.js +2 -0
  47. package/www/react-native/liveness/verification_config.js +98 -0
  48. package/www/react-native/liveness/verification_response.js +27 -0
  49. package/www/react-native/liveness/verify_match_response.js +21 -0
  50. package/www/types/customization/customization_images.d.ts +5 -0
  51. package/www/types/index.d.ts +28 -3
  52. package/www/types/liveness/enrollment_config.d.ts +97 -0
  53. package/www/types/liveness/enrollment_request.d.ts +6 -0
  54. package/www/types/liveness/enrollment_response.d.ts +9 -0
  55. package/www/types/liveness/error_response.d.ts +6 -0
  56. package/www/types/liveness/liveness_config.d.ts +1 -0
  57. package/www/types/liveness/liveness_exception.d.ts +1 -0
  58. package/www/types/liveness/liveness_notification.d.ts +2 -0
  59. package/www/types/liveness/verification_config.d.ts +95 -0
  60. package/www/types/liveness/verification_response.d.ts +10 -0
  61. package/www/types/liveness/verify_match_response.d.ts +6 -0
package/RNFaceSDK.podspec CHANGED
@@ -5,7 +5,7 @@ source = File.join(__dir__, 'ios')
5
5
 
6
6
  Pod::Spec.new do |s|
7
7
  s.name = 'RNFaceSDK'
8
- s.version = '8.3.1100-rc'
8
+ s.version = '8.3.1107-rc'
9
9
  s.summary = package['description']
10
10
  s.license = package['license']
11
11
 
@@ -16,6 +16,6 @@ Pod::Spec.new do |s|
16
16
  s.ios.deployment_target = '13.0'
17
17
  s.source_files = [ 'ios/**/*.swift', 'ios/**/RN*.m' ]
18
18
  s.exclude_files = [ 'ios/CDVFaceSDK.swift' ]
19
- s.dependency 'FaceSDKStage', '8.3.4406'
19
+ s.dependency 'FaceSDKStage', '8.3.4494'
20
20
  s.dependency 'React'
21
21
  end
@@ -29,7 +29,7 @@ dependencies {
29
29
  //noinspection GradleDynamicVersion
30
30
  implementation 'com.facebook.react:react-native:+'
31
31
  //noinspection GradleDependency
32
- implementation('com.regula.face:api:8.3.4975'){
32
+ implementation('com.regula.face:api:8.3.5017'){
33
33
  transitive = true
34
34
  }
35
35
  }
@@ -12,7 +12,7 @@ repositories {
12
12
 
13
13
  dependencies {
14
14
  //noinspection GradleDependency
15
- implementation('com.regula.face:api:8.3.4975'){
15
+ implementation('com.regula.face:api:8.3.5017'){
16
16
  transitive = true
17
17
  }
18
18
  }
@@ -3,9 +3,11 @@
3
3
  package com.regula.plugin.facesdk
4
4
 
5
5
  import com.regula.facesdk.configuration.Customization
6
+ import com.regula.facesdk.configuration.EnrollmentConfiguration
6
7
  import com.regula.facesdk.configuration.FaceCaptureConfiguration
7
8
  import com.regula.facesdk.configuration.LivenessConfiguration
8
9
  import com.regula.facesdk.configuration.MatchFacesConfiguration
10
+ import com.regula.facesdk.configuration.VerificationConfiguration
9
11
  import com.regula.facesdk.detection.request.ImageQualityCharacteristic
10
12
  import com.regula.facesdk.detection.request.ImageQualityGroup
11
13
  import com.regula.facesdk.detection.request.ImageQualityRange
@@ -85,6 +87,95 @@ fun getLivenessConfig(input: LivenessConfiguration) = mapOf(
85
87
  "metadata" to input.metadata,
86
88
  ).toJson()
87
89
 
90
+ fun setEnrollmentConfig(builder: EnrollmentConfiguration.Builder, config: JSONObject) = config.forEach { k, v ->
91
+ when (k) {
92
+ "copyright" -> builder.setCopyright(v as Boolean)
93
+ "cameraSwitchEnabled" -> builder.setCameraSwitchEnabled(v as Boolean)
94
+ "closeButtonEnabled" -> builder.setCloseButtonEnabled(v as Boolean)
95
+ "torchButtonEnabled" -> builder.setTorchButtonEnabled(v as Boolean)
96
+ "vibrateOnSteps" -> builder.setVibrateOnStep(v as Boolean)
97
+ "cameraPositionAndroid" -> builder.setCameraId(v.toInt())
98
+ "screenOrientation" -> builder.setScreenOrientation(*screenOrientationArrayFromJSON(v as JSONArray))
99
+ "locationTrackingEnabled" -> builder.setLocationTrackingEnabled(v as Boolean)
100
+ "preventScreenRecording" -> builder.setPreventScreenRecording(v as Boolean)
101
+ "attemptsCount" -> builder.setAttemptsCount(v.toInt())
102
+ "recordingProcess" -> builder.setRecordingProcess(RecordingProcess.values()[v.toInt()])
103
+ "livenessType" -> builder.setType(LivenessType.values()[v.toInt()])
104
+ "tag" -> builder.setTag(v as String)
105
+ "externalId" -> builder.setExternalId(v as String)
106
+ "groupId" -> builder.setGroupId(v as String)
107
+ "duplicatesThreshold" -> if (config.getBooleanOrNull("checkDuplicatesEnabled") == true) builder.enableCheckDuplicates(v.toFloat())
108
+ "skipStep" -> builder.setSkipStep(*livenessSkipStepArrayFromJSON(v as JSONArray))
109
+ "metadata" -> builder.setMetadata(v as JSONObject)
110
+ }
111
+ }
112
+
113
+ fun getEnrollmentConfig(input: EnrollmentConfiguration) = mapOf(
114
+ "copyright" to input.hasCopyright(),
115
+ "cameraSwitchEnabled" to input.isCameraSwitchEnabled,
116
+ "closeButtonEnabled" to input.isCloseButtonEnabled,
117
+ "torchButtonEnabled" to input.isTorchButtonEnabled,
118
+ "vibrateOnSteps" to input.isVibrateOnSteps,
119
+ "cameraPositionAndroid" to input.cameraId,
120
+ "screenOrientation" to generateScreenOrientationArray(input.screenOrientation),
121
+ "locationTrackingEnabled" to input.isLocationTrackingEnabled,
122
+ "preventScreenRecording" to input.doPreventScreenRecording(),
123
+ "attemptsCount" to input.attemptsCount,
124
+ "recordingProcess" to input.recordingProcess.ordinal,
125
+ "livenessType" to input.type.ordinal,
126
+ "tag" to input.tag,
127
+ "externalId" to input.externalId,
128
+ // "groupId" to input.groupId,
129
+ "checkDuplicatesEnabled" to input.isCheckDuplicatesEnabled,
130
+ "duplicatesThreshold" to input.duplicatesThreshold,
131
+ "skipStep" to generateLivenessSkipStepArray(input.skipStep),
132
+ "metadata" to input.metadata,
133
+ ).toJson()
134
+
135
+ fun setVerificationConfig(builder: VerificationConfiguration.Builder, config: JSONObject) = config.forEach { k, v ->
136
+ when (k) {
137
+ "copyright" -> builder.setCopyright(v as Boolean)
138
+ "cameraSwitchEnabled" -> builder.setCameraSwitchEnabled(v as Boolean)
139
+ "closeButtonEnabled" -> builder.setCloseButtonEnabled(v as Boolean)
140
+ "torchButtonEnabled" -> builder.setTorchButtonEnabled(v as Boolean)
141
+ "vibrateOnSteps" -> builder.setVibrateOnStep(v as Boolean)
142
+ "cameraPositionAndroid" -> builder.setCameraId(v.toInt())
143
+ "screenOrientation" -> builder.setScreenOrientation(*screenOrientationArrayFromJSON(v as JSONArray))
144
+ "locationTrackingEnabled" -> builder.setLocationTrackingEnabled(v as Boolean)
145
+ "preventScreenRecording" -> builder.setPreventScreenRecording(v as Boolean)
146
+ "attemptsCount" -> builder.setAttemptsCount(v.toInt())
147
+ "recordingProcess" -> builder.setRecordingProcess(RecordingProcess.values()[v.toInt()])
148
+ "livenessType" -> builder.setType(LivenessType.values()[v.toInt()])
149
+ "tag" -> builder.setTag(v as String)
150
+ "personId" -> builder.setPrivateProperty("u", v as String)
151
+ "groupId" -> builder.setGroupId(v as String)
152
+ "threshold" -> builder.setThreshold(v.toFloat())
153
+ "skipStep" -> builder.setSkipStep(*livenessSkipStepArrayFromJSON(v as JSONArray))
154
+ "metadata" -> builder.setMetadata(v as JSONObject)
155
+ }
156
+ }
157
+
158
+ fun getVerificationConfig(input: VerificationConfiguration) = mapOf(
159
+ "copyright" to input.hasCopyright(),
160
+ "cameraSwitchEnabled" to input.isCameraSwitchEnabled,
161
+ "closeButtonEnabled" to input.isCloseButtonEnabled,
162
+ "torchButtonEnabled" to input.isTorchButtonEnabled,
163
+ "vibrateOnSteps" to input.isVibrateOnSteps,
164
+ "cameraPositionAndroid" to input.cameraId,
165
+ "screenOrientation" to generateScreenOrientationArray(input.screenOrientation),
166
+ "locationTrackingEnabled" to input.isLocationTrackingEnabled,
167
+ "preventScreenRecording" to input.doPreventScreenRecording(),
168
+ "attemptsCount" to input.attemptsCount,
169
+ "recordingProcess" to input.recordingProcess.ordinal,
170
+ "livenessType" to input.type.ordinal,
171
+ "tag" to input.tag,
172
+ "personId" to input.personId,
173
+ "groupId" to input.groupId,
174
+ "threshold" to input.threshold,
175
+ "skipStep" to generateLivenessSkipStepArray(input.skipStep),
176
+ "metadata" to input.metadata,
177
+ ).toJson()
178
+
88
179
  fun setMatchFacesConfig(builder: MatchFacesConfiguration.Builder, config: JSONObject) = config.forEach { k, v ->
89
180
  when (k) {
90
181
  "processingMode" -> builder.setProcessingMode(ProcessingMode.values()[v.toInt()])
@@ -9,10 +9,12 @@ import android.graphics.Rect
9
9
  import android.graphics.Typeface
10
10
  import android.util.Pair
11
11
  import android.util.Size
12
+ import com.regula.facesdk.configuration.EnrollmentConfiguration
12
13
  import com.regula.facesdk.configuration.FaceCaptureConfiguration
13
14
  import com.regula.facesdk.configuration.InitializationConfiguration
14
15
  import com.regula.facesdk.configuration.LivenessConfiguration
15
16
  import com.regula.facesdk.configuration.MatchFacesConfiguration
17
+ import com.regula.facesdk.configuration.VerificationConfiguration
16
18
  import com.regula.facesdk.detection.request.DetectFacesConfiguration
17
19
  import com.regula.facesdk.detection.request.DetectFacesRequest
18
20
  import com.regula.facesdk.detection.request.ImageQualityCharacteristic
@@ -50,9 +52,13 @@ import com.regula.facesdk.exception.UnderlineException
50
52
  import com.regula.facesdk.model.Image
51
53
  import com.regula.facesdk.model.LivenessNotification
52
54
  import com.regula.facesdk.model.MatchFacesImage
55
+ import com.regula.facesdk.model.results.EnrollmentResponse
56
+ import com.regula.facesdk.model.results.ErrorResponse
53
57
  import com.regula.facesdk.model.results.FaceCaptureResponse
54
58
  import com.regula.facesdk.model.results.FaceSDKVersion
55
59
  import com.regula.facesdk.model.results.LivenessResponse
60
+ import com.regula.facesdk.model.results.VerificationResponse
61
+ import com.regula.facesdk.model.results.VerifyMatchResponse
56
62
  import com.regula.facesdk.model.results.matchfaces.MatchFacesComparedFace
57
63
  import com.regula.facesdk.model.results.matchfaces.MatchFacesComparedFacesPair
58
64
  import com.regula.facesdk.model.results.matchfaces.MatchFacesDetection
@@ -65,6 +71,7 @@ import com.regula.facesdk.model.results.person.PersonImage
65
71
  import com.regula.facesdk.model.results.person.SearchPerson
66
72
  import com.regula.facesdk.model.results.person.SearchPerson.Detection
67
73
  import com.regula.facesdk.model.results.person.SearchPersonImage
74
+ import com.regula.facesdk.request.EnrollmentRequest
68
75
  import com.regula.facesdk.request.MatchFacesRequest
69
76
  import com.regula.facesdk.request.person.EditGroupPersonsRequest
70
77
  import com.regula.facesdk.request.person.ImageUpload
@@ -74,6 +81,8 @@ import com.regula.plugin.facesdk.Convert.toBitmap
74
81
  import com.regula.plugin.facesdk.Convert.toByteArray
75
82
  import org.json.JSONArray
76
83
  import org.json.JSONObject
84
+ import java.lang.Double
85
+ import java.lang.Float
77
86
 
78
87
  // Config ------------------------------
79
88
 
@@ -101,6 +110,22 @@ fun livenessConfigFromJSON(input: JSONObject) = input.let {
101
110
 
102
111
  fun generateLivenessConfig(input: LivenessConfiguration) = getLivenessConfig(input)
103
112
 
113
+ fun enrollmentConfigFromJSON(input: JSONObject) = input.let {
114
+ val result = EnrollmentConfiguration.Builder("")
115
+ setEnrollmentConfig(result, it)
116
+ result.build()
117
+ }!!
118
+
119
+ fun generateEnrollmentConfig(input: EnrollmentConfiguration) = getEnrollmentConfig(input)
120
+
121
+ fun verificationConfigFromJSON(input: JSONObject) = input.let {
122
+ val result = VerificationConfiguration.Builder("")
123
+ setVerificationConfig(result, it)
124
+ result.build()
125
+ }!!
126
+
127
+ fun generateVerificationConfig(input: VerificationConfiguration) = getVerificationConfig(input)
128
+
104
129
  fun matchFacesConfigFromJSON(input: JSONObject) = input.let {
105
130
  val result = MatchFacesConfiguration.Builder()
106
131
  setMatchFacesConfig(result, it)
@@ -340,6 +365,24 @@ fun generateFaceCaptureResponse(it: FaceCaptureResponse) = mapOf(
340
365
 
341
366
  // Liveness ------------------------------
342
367
 
368
+ fun enrollmentRequestFromJSON(input: JSONObject): EnrollmentRequest = input.let {
369
+ val externalId = it.getString("externalId")
370
+ val builder = if (it.has("trustedImage")) EnrollmentRequest.Builder(externalId, it.getString("trustedImage").toBitmap()!!)
371
+ else EnrollmentRequest.Builder(externalId, it.getString("trustedImageUrl"))
372
+
373
+ if (it.has("groupId")) builder.setGroupId(it.getString("groupId"))
374
+ builder.build()
375
+ }
376
+
377
+ fun generateEnrollmentRequest(input: EnrollmentRequest) = input.let {
378
+ mapOf(
379
+ "externalId" to it.externalId,
380
+ "groupId" to it.groupId,
381
+ "trustedImage" to it.trustedImage.toBase64(),
382
+ "trustedImageUrl" to it.trustedImageUrl,
383
+ ).toJson()
384
+ }
385
+
343
386
  fun livenessResponseFromJSON(input: JSONObject?) = input?.let {
344
387
  val result = LivenessResponse()
345
388
  it.getStringOrNull("image").toBitmap()?.let { bitmap ->
@@ -374,6 +417,66 @@ fun generateLivenessNotification(it: LivenessNotification) = mapOf(
374
417
  "response" to generateLivenessResponse(it.response)
375
418
  ).toJson()
376
419
 
420
+ fun errorResponseFromJSON(input: JSONObject?) = input?.let {
421
+ ErrorResponse(
422
+ it.getInt("code"),
423
+ it.getString("message")
424
+ )
425
+ }
426
+
427
+ fun generateErrorResponse(input: ErrorResponse?) = input?.let {
428
+ mapOf(
429
+ "code" to it.code,
430
+ "message" to it.message
431
+ ).toJson()
432
+ }
433
+
434
+ fun enrollmentResponseFromJSON(input: JSONObject?) = input?.let {
435
+ EnrollmentResponse(
436
+ it.getStringOrNull("personId"),
437
+ it.getStringOrNull("externalId"),
438
+ errorResponseFromJSON(it.getJSONObjectOrNull("error"))
439
+ )
440
+ }
441
+
442
+ fun generateEnrollmentResponse(input: EnrollmentResponse?) = input?.let {
443
+ mapOf(
444
+ "personId" to it.personId,
445
+ "externalId" to it.externalId,
446
+ "error" to generateErrorResponse(it.errorResponse),
447
+ ).toJson()
448
+ }
449
+
450
+ fun verifyMatchResponseFromJSON(input: JSONObject?) = input?.let {
451
+ VerifyMatchResponse(
452
+ it.getBoolean("passed"),
453
+ it.get("similarity").toFloat()
454
+ )
455
+ }
456
+
457
+ fun generateVerifyMatchResponse(input: VerifyMatchResponse?) = input?.let {
458
+ mapOf(
459
+ "passed" to it.isPassed,
460
+ "similarity" to it.similarity
461
+ ).toJson()
462
+ }
463
+
464
+ fun verificationResponseFromJSON(input: JSONObject?) = input?.let {
465
+ VerificationResponse(
466
+ it.getBoolean("passed"),
467
+ verifyMatchResponseFromJSON(it.getJSONObjectOrNull("match")),
468
+ errorResponseFromJSON(it.getJSONObjectOrNull("error"))
469
+ )
470
+ }
471
+
472
+ fun generateVerificationResponse(input: VerificationResponse?) = input?.let {
473
+ mapOf(
474
+ "passed" to it.isPassed,
475
+ "match" to generateVerifyMatchResponse(it.match),
476
+ "error" to generateErrorResponse(it.error),
477
+ ).toJson()
478
+ }
479
+
377
480
  // MatchFaces ------------------------------
378
481
 
379
482
  fun matchFacesImageFromJSON(input: JSONObject?) = input?.let {
@@ -485,7 +588,7 @@ fun generateRect(input: Rect?) = input?.let {
485
588
  }
486
589
 
487
590
  fun matchFacesDetectionFaceFromJSON(input: JSONObject?) = input?.let {
488
- val result = MatchFacesDetectionFace::class.constructor(Int::class, java.lang.Double::class, ArrayList::class, Rect::class, Rect::class).instantiate(
591
+ val result = MatchFacesDetectionFace::class.constructor(Int::class, Double::class, ArrayList::class, Rect::class, Rect::class).instantiate(
489
592
  it.getIntOrNull("faceIndex"),
490
593
  it.getDoubleOrNull("rotationAngle"),
491
594
  it.getJSONArrayOrNull("landmarks").toList(::pointFromJSON).toArrayList(),
@@ -541,7 +644,7 @@ fun generateComparedFace(it: MatchFacesComparedFace) = mapOf(
541
644
  ).toJson()
542
645
 
543
646
  fun comparedFacesPairFromJSON(input: JSONObject): MatchFacesComparedFacesPair = input.let {
544
- MatchFacesComparedFacesPair::class.constructor(MatchFacesComparedFace::class, MatchFacesComparedFace::class, MatchFacesException::class, java.lang.Float::class, java.lang.Float::class).instantiate(
647
+ MatchFacesComparedFacesPair::class.constructor(MatchFacesComparedFace::class, MatchFacesComparedFace::class, MatchFacesException::class, Float::class, Float::class).instantiate(
545
648
  comparedFaceFromJSON(it.getJSONObject("first")),
546
649
  comparedFaceFromJSON(it.getJSONObject("second")),
547
650
  matchFacesExceptionFromJSON(it.getJSONObjectOrNull("error")),
@@ -912,4 +1015,4 @@ fun generateSearchPerson(input: SearchPerson?) = input?.let {
912
1015
  "metadata" to it.metadata,
913
1016
  "createdAt" to it.createdAt.toStr()
914
1017
  ).toJson()
915
- }
1018
+ }
@@ -1,7 +1,6 @@
1
1
  package com.regula.plugin.facesdk
2
2
 
3
3
  import android.annotation.SuppressLint
4
- import com.regula.plugin.facesdk.Convert.toBase64
5
4
  import com.regula.common.LocalizationCallbacks
6
5
  import com.regula.facesdk.FaceSDK.Instance
7
6
  import com.regula.facesdk.callback.DetectFacesCompletion
@@ -17,12 +16,16 @@ import com.regula.facesdk.enums.InitErrorCode
17
16
  import com.regula.facesdk.exception.InitException
18
17
  import com.regula.facesdk.listener.NetworkInterceptorListener
19
18
  import com.regula.facesdk.model.LivenessNotification
19
+ import com.regula.facesdk.model.results.EnrollmentResponse
20
+ import com.regula.facesdk.model.results.LivenessResponse
21
+ import com.regula.facesdk.model.results.VerificationResponse
20
22
  import com.regula.facesdk.model.results.matchfaces.MatchFacesSimilarityThresholdSplit
21
23
  import com.regula.facesdk.model.results.person.DbBaseItem
22
24
  import com.regula.facesdk.model.results.person.PageableItemList
23
25
  import com.regula.facesdk.model.results.person.Person
24
26
  import com.regula.facesdk.model.results.person.PersonGroup
25
27
  import com.regula.facesdk.model.results.person.SearchPerson
28
+ import com.regula.plugin.facesdk.Convert.toBase64
26
29
  import org.json.JSONArray
27
30
  import org.json.JSONObject
28
31
 
@@ -45,6 +48,9 @@ fun methodCall(method: String, callback: (Any?) -> Unit): Any = when (method) {
45
48
  "startFaceCapture" -> startFaceCapture(callback, argsNullable(0))
46
49
  "stopFaceCapture" -> stopFaceCapture()
47
50
  "startLiveness" -> startLiveness(callback, argsNullable(0))
51
+ "startEnrollment" -> startEnrollment(callback, args(0))
52
+ "startVerification" -> startVerification(callback, args(0))
53
+ "enrollWithTrustedPhoto" -> enrollWithTrustedPhoto(callback, args(0))
48
54
  "stopLiveness" -> stopLiveness()
49
55
  "matchFaces" -> matchFaces(callback, args(0), argsNullable(1))
50
56
  "splitComparedFaces" -> splitComparedFaces(callback, args(0), args(1))
@@ -154,6 +160,24 @@ fun startLiveness(callback: Callback, config: JSONObject?) = config?.let {
154
160
  livenessNotificationCompletion()
155
161
  )
156
162
 
163
+ fun startEnrollment(callback: Callback, config: JSONObject) = Instance().startEnrollment(
164
+ context,
165
+ enrollmentConfigFromJSON(config),
166
+ enrollmentCompletion(callback),
167
+ livenessNotificationCompletion(),
168
+ )
169
+
170
+ fun startVerification(callback: Callback, config: JSONObject) = Instance().startVerification(
171
+ context,
172
+ verificationConfigFromJSON(config),
173
+ verificationCompletion(callback),
174
+ livenessNotificationCompletion(),
175
+ )
176
+
177
+ fun enrollWithTrustedPhoto(callback: Callback, config: JSONObject) = Instance().enrollWithTrustedPhoto(
178
+ enrollmentRequestFromJSON(config),
179
+ ) { callback(generateEnrollmentResponse(it)) }
180
+
157
181
  fun stopLiveness() = Instance().stopLivenessProcessing(context)
158
182
 
159
183
  fun matchFaces(callback: Callback, request: JSONObject, config: JSONObject?) = config?.let {
@@ -371,6 +395,20 @@ fun detectFacesCompletion(callback: Callback) = DetectFacesCompletion {
371
395
  callback(generateDetectFacesResponse(it))
372
396
  }
373
397
 
398
+ fun verificationCompletion(callback: Callback) = { livenessResponse: LivenessResponse, verificationResponse: VerificationResponse? ->
399
+ callback(mapOf(
400
+ "livenessResponse" to generateLivenessResponse(livenessResponse),
401
+ "verificationResponse" to generateVerificationResponse(verificationResponse),
402
+ ).toJson())
403
+ }
404
+
405
+ fun enrollmentCompletion(callback: Callback) = { livenessResponse: LivenessResponse, enrollmentResponse: EnrollmentResponse? ->
406
+ callback(mapOf(
407
+ "livenessResponse" to generateLivenessResponse(livenessResponse),
408
+ "enrollmentResponse" to generateEnrollmentResponse(enrollmentResponse),
409
+ ).toJson())
410
+ }
411
+
374
412
  fun <T> databaseItemCompletion(callback: Callback, toJson: ((T?) -> JSONObject?)?) = object : PersonDBCallback<T> {
375
413
  override fun onSuccess(data: T?) = callback(generatePersonDBResponse(toJson?.let { it(data) } ?: true, null))
376
414
  override fun onFailure(error: String) = callback(generatePersonDBResponse(null, error))
@@ -15,7 +15,6 @@ import com.regula.common.ble.BLEWrapper
15
15
  import com.regula.facesdk.configuration.Customization
16
16
  import com.regula.facesdk.enums.CustomizationColor
17
17
  import com.regula.facesdk.enums.CustomizationFont
18
- import com.regula.facesdk.enums.CustomizationImage
19
18
  import com.regula.facesdk.enums.ImageType
20
19
  import com.regula.facesdk.enums.InitErrorCode
21
20
  import com.regula.facesdk.enums.OutputImageCropAspectRatio