@microblink/blinkid-react-native 7.6.1 → 7.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/README.md +7 -4
  2. package/android/build.gradle +1 -1
  3. package/android/src/main/java/com/microblink/blinkid/reactnative/BlinkIdDeserializationUtilities.kt +3 -5
  4. package/android/src/main/java/com/microblink/blinkid/reactnative/BlinkIdSerializationUtilities.kt +781 -710
  5. package/android/src/main/java/com/microblink/blinkid/reactnative/BlinkidReactNativeModule.kt +54 -57
  6. package/ios/BlinkIdSerializationUtilities.swift +694 -657
  7. package/ios/BlinkidReactNative.h +10 -2
  8. package/ios/BlinkidReactNative.mm +62 -48
  9. package/ios/BlinkidReactNativeModule.swift +2 -2
  10. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/BlinkID +0 -0
  11. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/Headers/BlinkID-Swift.h +1925 -780
  12. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/Info.plist +0 -0
  13. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/Modules/BlinkID.swiftmodule/arm64-apple-ios.abi.json +10139 -7306
  14. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/Modules/BlinkID.swiftmodule/arm64-apple-ios.private.swiftinterface +194 -122
  15. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/Modules/BlinkID.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
  16. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/Modules/BlinkID.swiftmodule/arm64-apple-ios.swiftinterface +194 -122
  17. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/PrivateHeaders/SwiftCxxBridge.hpp +2 -0
  18. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/_CodeSignature/CodeResources +17 -17
  19. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/conan.xcconfig +3 -3
  20. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/BlinkID +0 -0
  21. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Headers/BlinkID-Swift.h +4034 -1744
  22. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Info.plist +0 -0
  23. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Modules/BlinkID.swiftmodule/arm64-apple-ios-simulator.abi.json +10139 -7306
  24. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Modules/BlinkID.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +194 -122
  25. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Modules/BlinkID.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
  26. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Modules/BlinkID.swiftmodule/arm64-apple-ios-simulator.swiftinterface +194 -122
  27. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Modules/BlinkID.swiftmodule/x86_64-apple-ios-simulator.abi.json +10139 -7306
  28. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Modules/BlinkID.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +194 -122
  29. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Modules/BlinkID.swiftmodule/x86_64-apple-ios-simulator.swiftdoc +0 -0
  30. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Modules/BlinkID.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +194 -122
  31. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/PrivateHeaders/SwiftCxxBridge.hpp +2 -0
  32. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/_CodeSignature/CodeResources +27 -27
  33. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/conan.xcconfig +3 -3
  34. package/ios/Frameworks/BlinkIDUX.xcframework/Info.plist +5 -5
  35. package/ios/Frameworks/BlinkIDUX.xcframework/_CodeSignature/CodeDirectory +0 -0
  36. package/ios/Frameworks/BlinkIDUX.xcframework/_CodeSignature/CodeResources +52 -635
  37. package/ios/Frameworks/BlinkIDUX.xcframework/_CodeSignature/CodeSignature +0 -0
  38. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX +0 -0
  39. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/Assets.car +0 -0
  40. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/Info.plist +0 -0
  41. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/Info.plist +0 -0
  42. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios.abi.json +7045 -4222
  43. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios.package.swiftinterface +188 -90
  44. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios.private.swiftinterface +188 -90
  45. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
  46. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios.swiftinterface +188 -90
  47. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX +0 -0
  48. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/Assets.car +0 -0
  49. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/Info.plist +0 -0
  50. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/_CodeSignature/CodeDirectory +0 -0
  51. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/_CodeSignature/CodeResources +2 -234
  52. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Info.plist +0 -0
  53. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios-simulator.abi.json +7045 -4222
  54. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios-simulator.package.swiftinterface +188 -90
  55. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +188 -90
  56. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
  57. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios-simulator.swiftinterface +188 -90
  58. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/x86_64-apple-ios-simulator.abi.json +7045 -4222
  59. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/x86_64-apple-ios-simulator.package.swiftinterface +188 -90
  60. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +188 -90
  61. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/x86_64-apple-ios-simulator.swiftdoc +0 -0
  62. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +188 -90
  63. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/_CodeSignature/CodeResources +1 -1
  64. package/lib/module/NativeBlinkidReactNative.js +2 -1
  65. package/lib/module/NativeBlinkidReactNative.js.map +1 -1
  66. package/lib/module/blinkIdResult.js +58 -0
  67. package/lib/module/blinkIdResult.js.map +1 -1
  68. package/lib/module/index.js +4 -1
  69. package/lib/module/index.js.map +1 -1
  70. package/lib/module/types.js +78 -3
  71. package/lib/module/types.js.map +1 -1
  72. package/lib/typescript/src/NativeBlinkidReactNative.d.ts +2 -2
  73. package/lib/typescript/src/NativeBlinkidReactNative.d.ts.map +1 -1
  74. package/lib/typescript/src/blinkIdResult.d.ts +27 -1
  75. package/lib/typescript/src/blinkIdResult.d.ts.map +1 -1
  76. package/lib/typescript/src/index.d.ts +3 -0
  77. package/lib/typescript/src/index.d.ts.map +1 -1
  78. package/lib/typescript/src/types.d.ts +71 -6
  79. package/lib/typescript/src/types.d.ts.map +1 -1
  80. package/package.json +1 -1
  81. package/src/NativeBlinkidReactNative.ts +4 -1
  82. package/src/android/.project +28 -0
  83. package/src/blinkIdResult.ts +65 -0
  84. package/src/blinkIdSettings.ts +1 -1
  85. package/src/index.tsx +9 -1
  86. package/src/types.ts +120 -12
  87. package/ios/Frameworks/BlinkIDUX.xcframework/_CodeSignature/CodeRequirements-1 +0 -0
  88. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/_CodeSignature/CodeRequirements-1 +0 -0
@@ -7,539 +7,629 @@
7
7
 
8
8
  import Foundation
9
9
  import BlinkID
10
+ import UIKit
10
11
 
11
12
  class BlinkIdSerializationUtilities {
12
- static func serializeBlinkIdScanningResult(_ scanningResult: BlinkIDScanningResult?) -> String? {
13
- var scanningResultDict = Dictionary<String, Any>()
14
-
15
- if let recognitionMode = scanningResult?.recognitionMode {
16
- scanningResultDict["recognitionMode"] = recognitionMode.rawValue
17
- }
18
- if let documentClassInfo = scanningResult?.documentClassInfo {
19
- scanningResultDict["documentClassInfo"] = serializeDocumentClassInfo(documentClassInfo)
20
- }
21
- if let dataMatchResult = scanningResult?.dataMatchResult {
22
- scanningResultDict["dataMatchResult"] = serializeDataMatchResult(dataMatchResult)
23
- }
24
- if let firstName = scanningResult?.firstName {
25
- scanningResultDict["firstName"] = serializeStringResult(firstName)
26
- }
27
- if let lastName = scanningResult?.lastName {
28
- scanningResultDict["lastName"] = serializeStringResult(lastName)
29
- }
30
- if let fullName = scanningResult?.fullName {
31
- scanningResultDict["fullName"] = serializeStringResult(fullName)
32
- }
33
- if let additionalNameInformation = scanningResult?.additionalNameInformation {
34
- scanningResultDict["additionalNameInformation"] = serializeStringResult(additionalNameInformation)
35
- }
36
- if let localizedName = scanningResult?.localizedName {
37
- scanningResultDict["localizedName"] = serializeStringResult(localizedName)
38
- }
39
- if let fathersName = scanningResult?.fathersName {
40
- scanningResultDict["fathersName"] = serializeStringResult(fathersName)
41
- }
42
- if let mothersName = scanningResult?.mothersName {
43
- scanningResultDict["mothersName"] = serializeStringResult(mothersName)
44
- }
45
- if let address = scanningResult?.address {
46
- scanningResultDict["address"] = serializeStringResult(address)
47
- }
48
- if let additionalAddressInformation = scanningResult?.additionalAddressInformation {
49
- scanningResultDict["additionalAddressInformation"] = serializeStringResult(additionalAddressInformation)
50
- }
51
- if let additionalOptionalAddressInformation = scanningResult?.additionalOptionalAddressInformation {
52
- scanningResultDict["additionalOptionalAddressInformation"] = serializeStringResult(additionalOptionalAddressInformation)
53
- }
54
- if let placeOfBirth = scanningResult?.placeOfBirth {
55
- scanningResultDict["placeOfBirth"] = serializeStringResult(placeOfBirth)
56
- }
57
- if let nationality = scanningResult?.nationality {
58
- scanningResultDict["nationality"] = serializeStringResult(nationality)
59
- }
60
- if let race = scanningResult?.race {
61
- scanningResultDict["race"] = serializeStringResult(race)
62
- }
63
- if let religion = scanningResult?.religion {
64
- scanningResultDict["religion"] = serializeStringResult(religion)
65
- }
66
- if let profession = scanningResult?.profession {
67
- scanningResultDict["profession"] = serializeStringResult(profession)
68
- }
69
- if let maritalStatus = scanningResult?.maritalStatus {
70
- scanningResultDict["maritalStatus"] = serializeStringResult(maritalStatus)
71
- }
72
- if let residentialStatus = scanningResult?.residentialStatus {
73
- scanningResultDict["residentialStatus"] = serializeStringResult(residentialStatus)
74
- }
75
- if let employer = scanningResult?.employer {
76
- scanningResultDict["employer"] = serializeStringResult(employer)
77
- }
78
- if let sex = scanningResult?.sex {
79
- scanningResultDict["sex"] = serializeStringResult(sex)
80
- }
81
- if let sponsor = scanningResult?.sponsor {
82
- scanningResultDict["sponsor"] = serializeStringResult(sponsor)
83
- }
84
- if let bloodType = scanningResult?.bloodType {
85
- scanningResultDict["bloodType"] = serializeStringResult(bloodType)
86
- }
87
- if let documentNumber = scanningResult?.documentNumber {
88
- scanningResultDict["documentNumber"] = serializeStringResult(documentNumber)
89
- }
90
- if let personalIdNumber = scanningResult?.personalIdNumber {
91
- scanningResultDict["personalIdNumber"] = serializeStringResult(personalIdNumber)
92
- }
93
- if let documentAdditionalNumber = scanningResult?.documentAdditionalNumber {
94
- scanningResultDict["documentAdditionalNumber"] = serializeStringResult(documentAdditionalNumber)
95
- }
96
- if let documentOptionalAdditionalNumber = scanningResult?.documentOptionalAdditionalNumber {
97
- scanningResultDict["documentOptionalAdditionalNumber"] = serializeStringResult(documentOptionalAdditionalNumber)
98
- }
99
- if let additionalPersonalIdNumber = scanningResult?.additionalPersonalIdNumber {
100
- scanningResultDict["additionalPersonalIdNumber"] = serializeStringResult(additionalPersonalIdNumber)
101
- }
102
- if let issuingAuthority = scanningResult?.issuingAuthority {
103
- scanningResultDict["issuingAuthority"] = serializeStringResult(issuingAuthority)
104
- }
105
- if let documentSubtype = scanningResult?.documentSubtype {
106
- scanningResultDict["documentSubtype"] = serializeStringResult(documentSubtype)
107
- }
108
- if let remarks = scanningResult?.remarks {
109
- scanningResultDict["remarks"] = serializeStringResult(remarks)
110
- }
111
- if let residencePermitType = scanningResult?.residencePermitType {
112
- scanningResultDict["residencePermitType"] = serializeStringResult(residencePermitType)
113
- }
114
- if let manufacturingYear = scanningResult?.manufacturingYear {
115
- scanningResultDict["manufacturingYear"] = serializeStringResult(manufacturingYear)
116
- }
117
- if let vehicleType = scanningResult?.vehicleType {
118
- scanningResultDict["vehicleType"] = serializeStringResult(vehicleType)
119
- }
120
- if let vehicleOwner = scanningResult?.vehicleOwner {
121
- scanningResultDict["vehicleOwner"] = serializeStringResult(vehicleOwner)
122
- }
123
- if let countryCode = scanningResult?.countryCode {
124
- scanningResultDict["countryCode"] = serializeStringResult(countryCode)
125
- }
126
- if let certificateNumber = scanningResult?.certificateNumber {
127
- scanningResultDict["certificateNumber"] = serializeStringResult(certificateNumber)
128
- }
129
- if let nationalInsuranceNumber = scanningResult?.nationalInsuranceNumber {
130
- scanningResultDict["nationalInsuranceNumber"] = serializeStringResult(nationalInsuranceNumber)
131
- }
132
- if let eligibilityCategory = scanningResult?.eligibilityCategory {
133
- scanningResultDict["eligibilityCategory"] = serializeStringResult(eligibilityCategory)
134
- }
135
- if let specificDocumentValidity = scanningResult?.specificDocumentValidity {
136
- scanningResultDict["specificDocumentValidity"] = serializeStringResult(specificDocumentValidity)
137
- }
138
- if let visaType = scanningResult?.visaType {
139
- scanningResultDict["visaType"] = serializeStringResult(visaType)
140
- }
141
- if let dateOfExpiryPermanent = scanningResult?.dateOfExpiryPermanent {
142
- scanningResultDict["dateOfExpiryPermanent"] = dateOfExpiryPermanent
143
- }
144
- if let dateOfBirth = scanningResult?.dateOfBirth {
145
- scanningResultDict["dateOfBirth"] = serializeDateResult(dateOfBirth)
146
- }
147
- if let dateOfIssue = scanningResult?.dateOfIssue {
148
- scanningResultDict["dateOfIssue"] = serializeDateResult(dateOfIssue)
149
- }
150
- if let dateOfExpiry = scanningResult?.dateOfExpiry {
151
- scanningResultDict["dateOfExpiry"] = serializeDateResult(dateOfExpiry)
152
- }
153
- if let dateOfEntry = scanningResult?.dateOfEntry {
154
- scanningResultDict["dateOfEntry"] = serializeDateResult(dateOfEntry)
155
- }
156
- if let localityCode = scanningResult?.localityCode {
157
- scanningResultDict["localityCode"] = serializeStringResult(localityCode)
158
- }
159
- if let maidenName = scanningResult?.maidenName {
160
- scanningResultDict["maidenName"] = serializeStringResult(maidenName)
161
- }
162
- if let municipalityCode = scanningResult?.municipalityCode {
163
- scanningResultDict["municipalityCode"] = serializeStringResult(municipalityCode)
164
- }
165
- if let municipalityOfRegistration = scanningResult?.municipalityOfRegistration {
166
- scanningResultDict["municipalityOfRegistration"] = serializeStringResult(municipalityOfRegistration)
167
- }
168
- if let pollingStationCode = scanningResult?.pollingStationCode {
169
- scanningResultDict["pollingStationCode"] = serializeStringResult(pollingStationCode)
170
- }
171
- if let registrationCenterCode = scanningResult?.registrationCenterCode {
172
- scanningResultDict["registrationCenterCode"] = serializeStringResult(registrationCenterCode)
173
- }
174
- if let sectionCode = scanningResult?.sectionCode {
175
- scanningResultDict["sectionCode"] = serializeStringResult(sectionCode)
176
- }
177
- if let stateCode = scanningResult?.stateCode {
178
- scanningResultDict["stateCode"] = serializeStringResult(stateCode)
179
- }
180
- if let stateName = scanningResult?.stateName {
181
- scanningResultDict["stateName"] = serializeStringResult(stateName)
182
- }
183
- if let driverLicenseDetailedInfo = scanningResult?.driverLicenseDetailedInfo {
184
- scanningResultDict["driverLicenseDetailedInfo"] = serializeDriverLicenseDetailedInfo(driverLicenseDetailedInfo)
185
- }
186
- if let dependentsInfo = scanningResult?.dependentsInfo {
187
- scanningResultDict["dependentsInfo"] = dependentsInfo.map(serializeDependentInfo(_:))
188
- }
189
- if let subResults = scanningResult?.subResults {
190
- scanningResultDict["subResults"] = subResults.map(serializeSingleSideScanningResult(_:))
191
- }
192
- if let firstInputImage = scanningResult?.getInputImage(scanningSide: .first) {
193
- scanningResultDict["firstInputImage"] = encodeImage(firstInputImage.uiImage)
194
- }
195
- if let secondInputImage = scanningResult?.getInputImage(scanningSide: .second) {
196
- scanningResultDict["secondInputImage"] = encodeImage(secondInputImage.uiImage)
197
- }
198
- if let barcodeInputImage = scanningResult?.getBarcodeInputImage() {
199
- scanningResultDict["barcodeInputImage"] = encodeImage(barcodeInputImage.uiImage)
200
- }
201
- if let firstDocumentImage = scanningResult?.getDocumentImage(scanningSide: .first) {
202
- scanningResultDict["firstDocumentImage"] = encodeImage(firstDocumentImage.uiImage)
203
- }
204
- if let secondDocumentImage = scanningResult?.getDocumentImage(scanningSide: .second) {
205
- scanningResultDict["secondDocumentImage"] = encodeImage(secondDocumentImage.uiImage)
206
- }
207
- if let faceImage = scanningResult?.getFaceImage() {
208
- scanningResultDict["faceImage"] = serializeDetailedCroppedImageResult(faceImage)
209
- }
210
- if let signatureImage = scanningResult?.getSignatureImage() {
211
- scanningResultDict["signatureImage"] = serializeDetailedCroppedImageResult(signatureImage)
212
- }
213
- return encodeToJson(scanningResultDict)
214
- }
215
-
216
- static func serializeDocumentClassInfo(_ documentClassInfo: BlinkIDSDK.DocumentClassInfo?) -> Dictionary<String, Any> {
217
- let classInfoDict: [String: Any?] = [
218
- "country": documentClassInfo?.country.rawValue,
219
- "region": documentClassInfo?.region.rawValue,
220
- "documentType": documentClassInfo?.documentType.rawValue,
221
- "countryName": documentClassInfo?.countryName,
222
- "isoNumericCountryCode": documentClassInfo?.isoNumericCountryCode,
223
- "isoAlpha2CountryCode": documentClassInfo?.isoAlpha2CountryCode,
224
- "isoAlpha3CountryCode": documentClassInfo?.isoAlpha3CountryCode,
225
- "isEmpty": documentClassInfo?.isEmpty()
226
- ]
227
- return classInfoDict.compactMapValues { $0 }
228
- }
229
-
230
- static func serializeDataMatchResult(_ dataMatchResult: DataMatchResult?) -> Dictionary<String, Any> {
231
- let dataMatchResultDict: [String: Any?] = [
232
- "states": dataMatchResult?.states.map(serializeDataMatchState(_:)),
233
- "overallState": serializeDataMatchState(dataMatchResult?.overallState)
234
- ]
235
-
236
- return dataMatchResultDict.compactMapValues{ $0 }
237
- }
238
-
239
- static func serializeDataMatchState(_ dataMatchState: FieldState?) -> Dictionary<String, Any> {
240
- [
241
- "field": serializeDataMatchField(dataMatchState?.fieldType),
242
- "state": serializeDataMatchState(dataMatchState?.state)
243
- ].compactMapValues { $0 }
244
- }
245
-
246
- static func serializeStringResult(_ stringResult: BlinkIDSDK.StringResult?) -> Dictionary<String, Any>{
247
- var stringResultDict: [String: Any?] = [
248
- "value": stringResult?.value,
249
- "latin": stringResult?.value(for: .latin),
250
- "arabic": stringResult?.value(for: .arabic),
251
- "cyrillic": stringResult?.value(for: .cyrillic),
252
- "greek": stringResult?.value(for: .greek)
253
- ]
254
-
255
- let locationDict: [String: Any?] = [
256
- "latin": serializeRect(stringResult?.location(for: .latin)),
257
- "arabic": serializeRect(stringResult?.location(for: .arabic)),
258
- "cyrillic": serializeRect(stringResult?.location(for: .cyrillic)),
259
- "greek": serializeRect(stringResult?.location(for: .greek))
260
- ].compactMapValues { $0 }
261
-
262
- stringResultDict["location"] = locationDict
263
-
264
- let sideDict: [String: Any?] = [
265
- "latin": serializeScanningSide(stringResult?.side(for: .latin)),
266
- "arabic": serializeScanningSide(stringResult?.side(for: .arabic)),
267
- "cyrillic": serializeScanningSide(stringResult?.side(for: .cyrillic)),
268
- "greek": serializeScanningSide(stringResult?.side(for: .greek))
269
- ].compactMapValues { $0 }
270
-
271
- stringResultDict["side"] = sideDict
272
-
273
- return stringResultDict.compactMapValues { $0 }
274
- }
275
-
276
- static func serializeRect(_ rectangle: BlinkID.RectangleF?) -> Dictionary<String, Any> {
277
- let rectangleDict: [String: Any?] = [
278
- "x": rectangle?.origin.x,
279
- "y": rectangle?.origin.y,
280
- "width": rectangle?.width,
281
- "height": rectangle?.height
282
- ]
283
- return rectangleDict.compactMapValues { $0 }
284
- }
285
-
286
-
287
-
288
- static func serializeDateResult<T>(_ dateResult: DateResult<T>?) -> Dictionary<String, Any>? {
289
- let dateResultDict: [String: Any?] = [
290
- "date": serializeSimpleDate(dateResult),
291
- "filledByDomainKnowledge": dateResult?.filledByDomainKnowledge,
292
- "successfullyParsed": dateResult?.successfullyParsed,
293
- "originalString": serializeStringType(dateResult?.originalString)
294
- ]
295
- return dateResultDict.compactMapValues { $0 }
296
- }
297
- static func serializeSimpleDate<T>(_ dateResult: DateResult<T>?) -> Dictionary<String, Any>? {
298
- let simpleDateDict: [String: Any?] = [
299
- "day": dateResult?.day,
300
- "month": dateResult?.month,
301
- "year": dateResult?.year,
302
- ]
303
- return simpleDateDict.compactMapValues { $0 }
304
- }
305
-
306
- static func serializeDriverLicenseDetailedInfo<T>(_ driverLicenseDetailedInfo: DriverLicenseDetailedInfo<T>?) -> Dictionary<String, Any>? {
307
- let driverLicenseDetailedInfoDict: [String: Any?] = [
308
- "conditions": serializeStringType(driverLicenseDetailedInfo?.conditions),
309
- "endorsements": serializeStringType(driverLicenseDetailedInfo?.endorsements),
310
- "restrictions": serializeStringType(driverLicenseDetailedInfo?.restrictions),
311
- "vehicleClass": serializeStringType(driverLicenseDetailedInfo?.vehicleClass),
312
- "vehicleClassesInfo": driverLicenseDetailedInfo?.vehicleClassesInfo?.map(serializeVehicleClassInfo(_:)),
313
- ]
314
-
315
- return driverLicenseDetailedInfoDict.compactMapValues { $0 }
316
- }
317
-
318
- static func serializeVehicleClassInfo<T>(_ vehicleClassInfo: VehicleClassInfo<T>?) -> Dictionary<String, Any> {
319
- let vehicleClassInfoDict: [String: Any?] = [
320
- "effectiveDate": serializeDateResult(vehicleClassInfo?.effectiveDate),
321
- "expiryDate": serializeDateResult(vehicleClassInfo?.expiryDate),
322
- "licenceType": serializeStringType(vehicleClassInfo?.licenceType),
323
- "vehicleClass": serializeStringType(vehicleClassInfo?.vehicleClass)
324
- ]
325
- return vehicleClassInfoDict.compactMapValues { $0 }
326
- }
327
- static func serializeDependentInfo(_ dependentInfo: DependentInfo?) -> Dictionary<String, Any> {
328
- let dependentInfoDict: [String: Any?] = [
329
- "dateOfBirth": serializeDateResult(dependentInfo?.dateOfBirth),
330
- "documentNumber": serializeStringResult(dependentInfo?.documentNumber),
331
- "fullName": serializeStringResult(dependentInfo?.fullName),
332
- "sex": serializeStringResult(dependentInfo?.sex)
333
- ]
334
- return dependentInfoDict.compactMapValues { $0 }
335
- }
336
-
337
- static func serializeSingleSideScanningResult(_ singleSideScanningResult: SingleSideScanningResult?) -> Dictionary<String, Any> {
338
- guard let singleSideScanningResult else { return [:] }
339
-
340
- let singleSideScanningDict: [String: Any?] = [
341
- "barcode": serializeBarcodeResult(singleSideScanningResult.barcode),
342
- "barcodeInputImage": encodeImage(singleSideScanningResult.barcodeInputImage?.uiImage),
343
- "documentImage": encodeImage(singleSideScanningResult.documentImage?.uiImage),
344
- "faceImage": serializeDetailedCroppedImageResult(singleSideScanningResult.faceImage),
345
- "inputImage": encodeImage(singleSideScanningResult.inputImage?.uiImage),
346
- "mrz": serializeMrzResult(singleSideScanningResult.mrz),
347
- "signatureImage": serializeDetailedCroppedImageResult(singleSideScanningResult.signatureImage),
348
- "viz": serializeVizResult(singleSideScanningResult.viz)
349
- ]
350
-
351
- return singleSideScanningDict.compactMapValues { $0 }
352
- }
353
-
354
- static func serializeBarcodeResult(_ barcodeResult: BarcodeResult?) -> Dictionary<String, Any> {
355
- let barcodeResultDict: [String: Any?] = [
356
- "additionalNameInformation": barcodeResult?.additionalNameInformation,
357
- "address": barcodeResult?.address,
358
- "addressDetailedInfo": serializeAddressDetailedInfo(barcodeResult?.addressDetailedInfo),
359
- "barcodeData": serializeBarcodeData(barcodeResult?.barcodeData),
360
- "dateOfBirth": serializeDateResult(barcodeResult?.dateOfBirth),
361
- "dateOfExpiry": serializeDateResult(barcodeResult?.dateOfExpiry),
362
- "dateOfIssue": serializeDateResult(barcodeResult?.dateOfIssue),
363
- "documentAdditionalNumber": barcodeResult?.documentAdditionalNumber,
364
- "documentNumber": barcodeResult?.documentNumber,
365
- "driverLicenseDetailedInfo": serializeDriverLicenseDetailedInfo(barcodeResult?.driverLicenseDetailedInfo),
366
- "employer": barcodeResult?.employer,
367
- "extendedElements": serializeBarcodeExtendedElements(barcodeResult?.extendedElements),
368
- "firstName": barcodeResult?.firstName,
369
- "fullName": barcodeResult?.fullName,
370
- "issuingAuthority": barcodeResult?.issuingAuthority,
371
- "lastName": barcodeResult?.lastName,
372
- "maritalStatus": barcodeResult?.maritalStatus,
373
- "middleName": barcodeResult?.middleName,
374
- "nationality": barcodeResult?.nationality,
375
- "personalIdNumber": barcodeResult?.personalIdNumber,
376
- "placeOfBirth": barcodeResult?.placeOfBirth,
377
- "profession": barcodeResult?.profession,
378
- "race": barcodeResult?.race,
379
- "religion": barcodeResult?.religion,
380
- "residentialStatus": barcodeResult?.residentialStatus,
381
- "sex": barcodeResult?.sex,
382
- "parsed": barcodeResult?.parsed
383
- ]
384
-
385
- return barcodeResultDict.compactMapValues { $0 }
386
- }
387
-
388
- static func serializeAddressDetailedInfo(_ addressDetailedInfo: AddressDetailedInfo?) -> Dictionary<String, Any> {
389
- let addressDetailedInfoDict: [String: Any?] = [
390
- "city": addressDetailedInfo?.city,
391
- "postalCode": addressDetailedInfo?.postalCode,
392
- "jurisdiction": addressDetailedInfo?.jurisdiction,
393
- "street": addressDetailedInfo?.street
394
- ]
395
- return addressDetailedInfoDict.compactMapValues { $0 }
396
- }
13
+
14
+ static func serializeBlinkIdScanningResult(_ scanningResult: BlinkIDScanningResult?) -> String? {
15
+ var scanningResultDict = Dictionary<String, Any>()
16
+
17
+ if let scanningResult {
18
+ scanningResultDict["recognitionMode"] = scanningResult.recognitionMode.rawValue
19
+ scanningResultDict["documentClassInfo"] = serializeDocumentClassInfo(scanningResult.documentClassInfo)
20
+
21
+ if let dataMatchResult = scanningResult.dataMatchResult {
22
+ scanningResultDict["dataMatchResult"] = serializeDataMatchResult(dataMatchResult)
23
+ }
24
+ if let firstName = scanningResult.firstName {
25
+ scanningResultDict["firstName"] = serializeStringResult(firstName)
26
+ }
27
+ if let lastName = scanningResult.lastName {
28
+ scanningResultDict["lastName"] = serializeStringResult(lastName)
29
+ }
30
+ if let fullName = scanningResult.fullName {
31
+ scanningResultDict["fullName"] = serializeStringResult(fullName)
32
+ }
33
+ if let additionalNameInformation = scanningResult.additionalNameInformation {
34
+ scanningResultDict["additionalNameInformation"] = serializeStringResult(additionalNameInformation)
35
+ }
36
+ if let localizedName = scanningResult.localizedName {
37
+ scanningResultDict["localizedName"] = serializeStringResult(localizedName)
38
+ }
39
+ if let fathersName = scanningResult.fathersName {
40
+ scanningResultDict["fathersName"] = serializeStringResult(fathersName)
41
+ }
42
+ if let mothersName = scanningResult.mothersName {
43
+ scanningResultDict["mothersName"] = serializeStringResult(mothersName)
44
+ }
45
+ if let address = scanningResult.address {
46
+ scanningResultDict["address"] = serializeStringResult(address)
47
+ }
48
+ if let additionalAddressInformation = scanningResult.additionalAddressInformation {
49
+ scanningResultDict["additionalAddressInformation"] = serializeStringResult(additionalAddressInformation)
50
+ }
51
+ if let additionalOptionalAddressInformation = scanningResult.additionalOptionalAddressInformation {
52
+ scanningResultDict["additionalOptionalAddressInformation"] = serializeStringResult(additionalOptionalAddressInformation)
53
+ }
54
+ if let placeOfBirth = scanningResult.placeOfBirth {
55
+ scanningResultDict["placeOfBirth"] = serializeStringResult(placeOfBirth)
56
+ }
57
+ if let nationality = scanningResult.nationality {
58
+ scanningResultDict["nationality"] = serializeStringResult(nationality)
59
+ }
60
+ if let race = scanningResult.race {
61
+ scanningResultDict["race"] = serializeStringResult(race)
62
+ }
63
+ if let religion = scanningResult.religion {
64
+ scanningResultDict["religion"] = serializeStringResult(religion)
65
+ }
66
+ if let profession = scanningResult.profession {
67
+ scanningResultDict["profession"] = serializeStringResult(profession)
68
+ }
69
+ if let maritalStatus = scanningResult.maritalStatus {
70
+ scanningResultDict["maritalStatus"] = serializeStringResult(maritalStatus)
71
+ }
72
+ if let residentialStatus = scanningResult.residentialStatus {
73
+ scanningResultDict["residentialStatus"] = serializeStringResult(residentialStatus)
74
+ }
75
+ if let employer = scanningResult.employer {
76
+ scanningResultDict["employer"] = serializeStringResult(employer)
77
+ }
78
+ if let sex = scanningResult.sex {
79
+ scanningResultDict["sex"] = serializeStringResult(sex)
80
+ }
81
+ if let sponsor = scanningResult.sponsor {
82
+ scanningResultDict["sponsor"] = serializeStringResult(sponsor)
83
+ }
84
+ if let bloodType = scanningResult.bloodType {
85
+ scanningResultDict["bloodType"] = serializeStringResult(bloodType)
86
+ }
87
+ if let documentNumber = scanningResult.documentNumber {
88
+ scanningResultDict["documentNumber"] = serializeStringResult(documentNumber)
89
+ }
90
+ if let personalIdNumber = scanningResult.personalIdNumber {
91
+ scanningResultDict["personalIdNumber"] = serializeStringResult(personalIdNumber)
92
+ }
93
+ if let documentAdditionalNumber = scanningResult.documentAdditionalNumber {
94
+ scanningResultDict["documentAdditionalNumber"] = serializeStringResult(documentAdditionalNumber)
95
+ }
96
+ if let documentOptionalAdditionalNumber = scanningResult.documentOptionalAdditionalNumber {
97
+ scanningResultDict["documentOptionalAdditionalNumber"] = serializeStringResult(documentOptionalAdditionalNumber)
98
+ }
99
+ if let additionalPersonalIdNumber = scanningResult.additionalPersonalIdNumber {
100
+ scanningResultDict["additionalPersonalIdNumber"] = serializeStringResult(additionalPersonalIdNumber)
101
+ }
102
+ if let issuingAuthority = scanningResult.issuingAuthority {
103
+ scanningResultDict["issuingAuthority"] = serializeStringResult(issuingAuthority)
104
+ }
105
+ if let documentSubtype = scanningResult.documentSubtype {
106
+ scanningResultDict["documentSubtype"] = serializeStringResult(documentSubtype)
107
+ }
108
+ if let remarks = scanningResult.remarks {
109
+ scanningResultDict["remarks"] = serializeStringResult(remarks)
110
+ }
111
+ if let residencePermitType = scanningResult.residencePermitType {
112
+ scanningResultDict["residencePermitType"] = serializeStringResult(residencePermitType)
113
+ }
114
+ if let manufacturingYear = scanningResult.manufacturingYear {
115
+ scanningResultDict["manufacturingYear"] = serializeStringResult(manufacturingYear)
116
+ }
117
+ if let vehicleType = scanningResult.vehicleType {
118
+ scanningResultDict["vehicleType"] = serializeStringResult(vehicleType)
119
+ }
120
+ if let vehicleOwner = scanningResult.vehicleOwner {
121
+ scanningResultDict["vehicleOwner"] = serializeStringResult(vehicleOwner)
122
+ }
123
+ if let countryCode = scanningResult.countryCode {
124
+ scanningResultDict["countryCode"] = serializeStringResult(countryCode)
125
+ }
126
+ if let certificateNumber = scanningResult.certificateNumber {
127
+ scanningResultDict["certificateNumber"] = serializeStringResult(certificateNumber)
128
+ }
129
+ if let nationalInsuranceNumber = scanningResult.nationalInsuranceNumber {
130
+ scanningResultDict["nationalInsuranceNumber"] = serializeStringResult(nationalInsuranceNumber)
131
+ }
132
+ if let eligibilityCategory = scanningResult.eligibilityCategory {
133
+ scanningResultDict["eligibilityCategory"] = serializeStringResult(eligibilityCategory)
134
+ }
135
+ if let specificDocumentValidity = scanningResult.specificDocumentValidity {
136
+ scanningResultDict["specificDocumentValidity"] = serializeStringResult(specificDocumentValidity)
137
+ }
138
+ if let visaType = scanningResult.visaType {
139
+ scanningResultDict["visaType"] = serializeStringResult(visaType)
140
+ }
141
+ if let dateOfExpiryPermanent = scanningResult.dateOfExpiryPermanent {
142
+ scanningResultDict["dateOfExpiryPermanent"] = dateOfExpiryPermanent
143
+ }
144
+ if let dateOfBirth = scanningResult.dateOfBirth {
145
+ scanningResultDict["dateOfBirth"] = serializeDateResult(dateOfBirth)
146
+ }
147
+ if let dateOfIssue = scanningResult.dateOfIssue {
148
+ scanningResultDict["dateOfIssue"] = serializeDateResult(dateOfIssue)
149
+ }
150
+ if let dateOfExpiry = scanningResult.dateOfExpiry {
151
+ scanningResultDict["dateOfExpiry"] = serializeDateResult(dateOfExpiry)
152
+ }
153
+ if let dateOfEntry = scanningResult.dateOfEntry {
154
+ scanningResultDict["dateOfEntry"] = serializeDateResult(dateOfEntry)
155
+ }
156
+ if let localityCode = scanningResult.localityCode {
157
+ scanningResultDict["localityCode"] = serializeStringResult(localityCode)
158
+ }
159
+ if let maidenName = scanningResult.maidenName {
160
+ scanningResultDict["maidenName"] = serializeStringResult(maidenName)
161
+ }
162
+ if let municipalityCode = scanningResult.municipalityCode {
163
+ scanningResultDict["municipalityCode"] = serializeStringResult(municipalityCode)
164
+ }
165
+ if let municipalityOfRegistration = scanningResult.municipalityOfRegistration {
166
+ scanningResultDict["municipalityOfRegistration"] = serializeStringResult(municipalityOfRegistration)
167
+ }
168
+ if let pollingStationCode = scanningResult.pollingStationCode {
169
+ scanningResultDict["pollingStationCode"] = serializeStringResult(pollingStationCode)
170
+ }
171
+ if let registrationCenterCode = scanningResult.registrationCenterCode {
172
+ scanningResultDict["registrationCenterCode"] = serializeStringResult(registrationCenterCode)
173
+ }
174
+ if let sectionCode = scanningResult.sectionCode {
175
+ scanningResultDict["sectionCode"] = serializeStringResult(sectionCode)
176
+ }
177
+ if let stateCode = scanningResult.stateCode {
178
+ scanningResultDict["stateCode"] = serializeStringResult(stateCode)
179
+ }
180
+ if let stateName = scanningResult.stateName {
181
+ scanningResultDict["stateName"] = serializeStringResult(stateName)
182
+ }
183
+ if let driverLicenseDetailedInfo = scanningResult.driverLicenseDetailedInfo {
184
+ scanningResultDict["driverLicenseDetailedInfo"] = serializeDriverLicenseDetailedInfo(driverLicenseDetailedInfo)
185
+ }
186
+ if let dependentsInfo = scanningResult.dependentsInfo {
187
+ scanningResultDict["dependentsInfo"] = dependentsInfo.map(serializeDependentInfo(_:))
188
+ }
189
+ if let parentsInfo = scanningResult.parentsInfo {
190
+ scanningResultDict["parentsInfo"] = parentsInfo.map(serializeParentInfo(_:))
191
+ }
192
+ if let effectiveDate = scanningResult.effectiveDate {
193
+ scanningResultDict["effectiveDate"] = serializeDateResult(effectiveDate)
194
+ }
195
+ if let husbandName = scanningResult.husbandName {
196
+ scanningResultDict["husbandName"] = serializeStringResult(husbandName)
197
+ }
198
+ if let legalStatus = scanningResult.legalStatus {
199
+ scanningResultDict["legalStatus"] = serializeStringResult(legalStatus)
200
+ }
201
+ if let socialSecurityStatus = scanningResult.socialSecurityStatus {
202
+ scanningResultDict["socialSecurityStatus"] = serializeStringResult(socialSecurityStatus)
203
+ }
204
+ if let workRestriction = scanningResult.workRestriction {
205
+ scanningResultDict["workRestriction"] = serializeStringResult(workRestriction)
206
+ }
207
+ scanningResultDict["subResults"] = scanningResult.subResults.map(serializeSingleSideScanningResult(_:))
208
+
209
+ if let firstInputImage = scanningResult.getInputImage(scanningSide: .first) {
210
+ scanningResultDict["firstInputImage"] = encodeImage(firstInputImage.uiImage)
211
+ }
212
+ if let secondInputImage = scanningResult.getInputImage(scanningSide: .second) {
213
+ scanningResultDict["secondInputImage"] = encodeImage(secondInputImage.uiImage)
214
+ }
215
+ if let barcodeInputImage = scanningResult.getBarcodeInputImage() {
216
+ scanningResultDict["barcodeInputImage"] = encodeImage(barcodeInputImage.uiImage)
217
+ }
218
+ if let firstDocumentImage = scanningResult.getDocumentImage(scanningSide: .first) {
219
+ scanningResultDict["firstDocumentImage"] = encodeImage(firstDocumentImage.uiImage)
220
+ }
221
+ if let secondDocumentImage = scanningResult.getDocumentImage(scanningSide: .second) {
222
+ scanningResultDict["secondDocumentImage"] = encodeImage(secondDocumentImage.uiImage)
223
+ }
224
+ if let faceImage = scanningResult.getFaceImage() {
225
+ scanningResultDict["faceImage"] = serializeDetailedCroppedImageResult(faceImage)
226
+ }
227
+ if let signatureImage = scanningResult.getSignatureImage() {
228
+ scanningResultDict["signatureImage"] = serializeDetailedCroppedImageResult(signatureImage)
229
+ }
230
+ }
231
+
232
+ return encodeToJson(scanningResultDict)
233
+ }
397
234
 
398
- static func serializeBarcodeData(_ barcodeData: BarcodeData?) -> Dictionary<String, Any> {
399
- let barcodeDataDict: [String: Any?] = [
400
- "barcodeType": serializeBarcodeType(barcodeData?.barcodeType),
401
- "rawData": barcodeData?.rawData.base64EncodedString(),
402
- "stringData": barcodeData?.stringData,
403
- "uncertain": barcodeData?.uncertain
404
- ]
405
-
406
- return barcodeDataDict.compactMapValues { $0 }
407
- }
408
-
409
- static func serializeBarcodeExtendedElements(_ barcodeExtendedElements: BarcodeElements?) -> [String: Any] {
410
- var elements = barcodeExtendedElements
411
-
412
- let barcodeElementDict: [String: Any?] = [
413
- "addressCity": elements?.getValue(for: .addressCity),
414
- "addressJurisdictionCode": elements?.getValue(for: .addressJurisdictionCode),
415
- "addressPostalCode": elements?.getValue(for: .addressPostalCode),
416
- "addressStreet": elements?.getValue(for: .addressStreet),
417
- "addressStreet2": elements?.getValue(for: .addressStreet2),
418
- "akaDateOfBirth": elements?.getValue(for: .akaDateOfBirth),
419
- "akaFamilyName": elements?.getValue(for: .akaFamilyName),
420
- "akaFullName": elements?.getValue(for: .akaFullName),
421
- "akaGivenName": elements?.getValue(for: .akaGivenName),
422
- "akaMiddleName": elements?.getValue(for: .akaMiddleName),
423
- "akaPrefixName": elements?.getValue(for: .akaPrefixName),
424
- "akaSocialSecurityNumber": elements?.getValue(for: .akaSocialSecurityNumber),
425
- "akaSuffixName": elements?.getValue(for: .akaSuffixName),
426
- "auditInformation": elements?.getValue(for: .auditInformation),
427
- "cardRevisionDate": elements?.getValue(for: .cardRevisionDate),
428
- "complianceType": elements?.getValue(for: .complianceType),
429
- "countryIdentification": elements?.getValue(for: .countryIdentification),
430
- "customerFamilyName": elements?.getValue(for: .customerFamilyName),
431
- "customerIdNumber": elements?.getValue(for: .customerIdNumber),
432
- "customerFirstName": elements?.getValue(for: .customerFirstName),
433
- "customerFullName": elements?.getValue(for: .customerFullName),
434
- "customerMiddleName": elements?.getValue(for: .customerMiddleName),
435
- "dataDiscriminator": elements?.getValue(for: .dataDiscriminator),
436
- "dateOfBirth": elements?.getValue(for: .dateOfBirth),
437
- "documentDiscriminator": elements?.getValue(for: .documentDiscriminator),
438
- "documentExpirationDate": elements?.getValue(for: .documentExpirationDate),
439
- "documentExpirationMonth": elements?.getValue(for: .documentExpirationMonth),
440
- "documentIssueDate": elements?.getValue(for: .documentIssueDate),
441
- "documentNonexpiring": elements?.getValue(for: .documentNonexpiring),
442
- "documentType": elements?.getValue(for: .documentType),
443
- "eyeColor": elements?.getValue(for: .eyeColor),
444
- "familyNameTruncation": elements?.getValue(for: .familyNameTruncation),
445
- "federalCommercialVehicleCodes": elements?.getValue(for: .federalCommercialVehicleCodes),
446
- "firstNameTruncation": elements?.getValue(for: .firstNameTruncation),
447
- "fullAddress": elements?.getValue(for: .fullAddress),
448
- "hairColor": elements?.getValue(for: .hairColor),
449
- "height": elements?.getValue(for: .height),
450
- "heightIn": elements?.getValue(for: .heightIn),
451
- "heightCm": elements?.getValue(for: .heightCm),
452
- "issuerIdentificationNumber": elements?.getValue(for: .issuerIdentificationNumber),
453
- "issuingJurisdiction": elements?.getValue(for: .issuingJurisdiction),
454
- "issuingJurisdictionName": elements?.getValue(for: .issuingJurisdictionName),
455
- "jurisdictionEndorsementCodes": elements?.getValue(for: .jurisdictionEndorsementCodes),
456
- "jurisdictionEndorsmentCodeDescription": elements?.getValue(for: .jurisdictionEndorsmentCodeDescription),
457
- "jurisdictionRestrictionCodeDescription": elements?.getValue(for: .jurisdictionRestrictionCodeDescription),
458
- "jurisdictionRestrictionCodes": elements?.getValue(for: .jurisdictionRestrictionCodes),
459
- "jurisdictionVehicleClass": elements?.getValue(for: .jurisdictionVehicleClass),
460
- "jurisdictionVehicleClassificationDescription": elements?.getValue(for: .jurisdictionVehicleClassificationDescription),
461
- "jurisdictionVersionNumber": elements?.getValue(for: .jurisdictionVersionNumber),
462
- "limitedDurationDocument": elements?.getValue(for: .limitedDurationDocument),
463
- "medicalIndicator": elements?.getValue(for: .medicalIndicator),
464
- "middleNameTruncation": elements?.getValue(for: .middleNameTruncation),
465
- "namePrefix": elements?.getValue(for: .namePrefix),
466
- "nameSuffix": elements?.getValue(for: .nameSuffix),
467
- "nonResident": elements?.getValue(for: .nonResident),
468
- "numberOfDuplicates": elements?.getValue(for: .numberOfDuplicates),
469
- "organDonor": elements?.getValue(for: .organDonor),
470
- "permitExpirationDate": elements?.getValue(for: .permitExpirationDate),
471
- "permitIdentifier": elements?.getValue(for: .permitIdentifier),
472
- "permitIssueDate": elements?.getValue(for: .permitIssueDate),
473
- "placeOfBirth": elements?.getValue(for: .placeOfBirth),
474
- "raceEthnicity": elements?.getValue(for: .raceEthnicity),
475
- "residenceCity": elements?.getValue(for: .residenceCity),
476
- "residenceFullAddress": elements?.getValue(for: .residenceFullAddress),
477
- "residenceJurisdictionCode": elements?.getValue(for: .residenceJurisdictionCode),
478
- "residencePostalCode": elements?.getValue(for: .residencePostalCode),
479
- "residenceStreetAddress": elements?.getValue(for: .residenceStreetAddress),
480
- "residenceStreetAddress2": elements?.getValue(for: .residenceStreetAddress2),
481
- "securityVersion": elements?.getValue(for: .securityVersion),
482
- "sex": elements?.getValue(for: .sex),
483
- "socialSecurityNumber": elements?.getValue(for: .socialSecurityNumber),
484
- "standardEndorsementCode": elements?.getValue(for: .standardEndorsementCode),
485
- "standardRestrictionCode": elements?.getValue(for: .standardRestrictionCode),
486
- "standardVehicleClassification": elements?.getValue(for: .standardVehicleClassification),
487
- "standardVersionNumber": elements?.getValue(for: .standardVersionNumber),
488
- "under18": elements?.getValue(for: .under18),
489
- "under19": elements?.getValue(for: .under19),
490
- "under21": elements?.getValue(for: .under21),
491
- "uniqueCustomerId": elements?.getValue(for: .uniqueCustomerId),
492
- "veteran": elements?.getValue(for: .veteran),
493
- "weightKilograms": elements?.getValue(for: .weightKilograms),
494
- "weightPounds": elements?.getValue(for: .weightPounds),
495
- "weightRange": elements?.getValue(for: .weightRange),
496
- "subFieldDesignator": elements?.getValue(for: .subfieldDesignator)
497
- ]
498
- return barcodeElementDict.compactMapValues { $0 }
499
- }
235
+ static func serializeRecognitionMode(_ recognitionMode: RecognitionMode) -> Int {
236
+ switch recognitionMode {
237
+ case .none:
238
+ return 0
239
+ case .mrzId:
240
+ return 1
241
+ case .mrzVisa:
242
+ return 2
243
+ case .mrzPassport:
244
+ return 3
245
+ case .photoId:
246
+ return 4
247
+ case .fullRecognition:
248
+ return 5
249
+ case .barcodeId:
250
+ return 6
251
+ }
252
+ }
253
+
254
+ static func serializeDocumentClassInfo(_ documentClassInfo: BlinkIDSDK.DocumentClassInfo?) -> Dictionary<String, Any> {
255
+ return
256
+ [
257
+ "country": documentClassInfo?.country.rawValue,
258
+ "region": documentClassInfo?.region.rawValue,
259
+ "documentType": documentClassInfo?.documentType.rawValue,
260
+ "countryName": documentClassInfo?.countryName,
261
+ "isoNumericCountryCode": documentClassInfo?.isoNumericCountryCode,
262
+ "isoAlpha2CountryCode": documentClassInfo?.isoAlpha2CountryCode,
263
+ "isoAlpha3CountryCode": documentClassInfo?.isoAlpha3CountryCode,
264
+ "isEmpty": documentClassInfo?.isEmpty()
265
+ ]
266
+ }
267
+
268
+ static func serializeDataMatchResult(_ dataMatchResult: DataMatchResult?) -> Dictionary<String, Any> {
269
+ return [
270
+ "states": dataMatchResult?.states.map(serializeDataMatchState(_:)),
271
+ "overallState": deserializeDataMatchState(dataMatchResult?.overallState)
272
+ ]
273
+ }
274
+
275
+ static func serializeDataMatchState(_ dataMatchState: FieldState?) -> Dictionary<String, Any> {
276
+ return [
277
+ "field": deserializeDataMatchField(dataMatchState?.fieldType),
278
+ "state": deserializeDataMatchState(dataMatchState?.state)
279
+ ]
280
+ }
281
+
282
+ static func deserializeDataMatchField(_ field: DataMatchFieldType?) -> Int? {
283
+ switch field {
284
+ case .dateOfBirth:
285
+ return 0
286
+ case .dateOfExpiry:
287
+ return 1
288
+ case .documentNumber:
289
+ return 2
290
+ case .documentAdditionalNumber:
291
+ return 3
292
+ case .documentOptionalAdditionalNumber:
293
+ return 4
294
+ case .personalIdNumber:
295
+ return 5
296
+ @unknown default:
297
+ return nil
298
+ }
299
+ }
500
300
 
501
-
502
- static func serializeStringType<T>(_ value: T) -> Any? {
503
- if let stringResult = value as? BlinkID.BlinkIDSDK.StringResult {
504
- return serializeStringResult(stringResult)
505
- } else if let str = value as? Swift.String {
506
- return str
507
- }
508
- return nil
509
- }
510
-
511
- static func encodeImage(_ image: UIImage?) -> String? {
512
- return image?.jpegData(compressionQuality: 1.0)?.base64EncodedString()
513
- }
514
- static func serializeMrzResult(_ mrzResult: MRZResult?) -> Dictionary<String, Any> {
515
- let mrzResultDict: [String: Any?] = [
516
- "dateOfBirth": serializeDateResult(mrzResult?.dateOfBirth),
517
- "dateOfExpiry": serializeDateResult(mrzResult?.dateOfExpiry),
518
- "documentCode": mrzResult?.documentCode,
519
- "documentNumber": mrzResult?.documentNumber,
520
- "documentType": serializeMrzDocumentType(mrzResult?.documentType),
521
- "gender": mrzResult?.gender,
522
- "issuer": mrzResult?.issuer,
523
- "issuerName": mrzResult?.issuerName,
524
- "nationality": mrzResult?.nationality,
525
- "nationalityName": mrzResult?.nationalityName,
526
- "opt1": mrzResult?.opt1,
527
- "opt2": mrzResult?.opt2,
528
- "primaryID": mrzResult?.primaryID,
529
- "rawMRZString": mrzResult?.rawMRZString,
530
- "sanitizedDocumentCode": mrzResult?.sanitizedDocumentCode,
531
- "sanitizedDocumentNumber": mrzResult?.sanitizedDocumentNumber,
532
- "sanitizedIssuer": mrzResult?.sanitizedIssuer,
533
- "sanitizedNationality": mrzResult?.sanitizedNationality,
534
- "sanitizedOpt1": mrzResult?.sanitizedOpt1,
535
- "sanitizedOpt2": mrzResult?.sanitizedOpt2,
536
- "secondaryID": mrzResult?.secondaryID,
537
- "verified": mrzResult?.verified
301
+ static func serializeStringResult(_ stringResult: BlinkIDSDK.StringResult?) -> Dictionary<String, Any>{
302
+ var stringResultDict: Dictionary<String, Any> = [
303
+ "value": stringResult?.value,
304
+ "latin": stringResult?.value(for: .latin),
305
+ "arabic": stringResult?.value(for: .arabic),
306
+ "cyrillic": stringResult?.value(for: .cyrillic),
307
+ "greek": stringResult?.value(for: .greek)
308
+ ]
309
+
310
+ stringResultDict["location"] = [
311
+ "latin": serializeRect(stringResult?.location(for: .latin)),
312
+ "arabic": serializeRect(stringResult?.location(for: .arabic)),
313
+ "cyrillic": serializeRect(stringResult?.location(for: .cyrillic)),
314
+ "greek": serializeRect(stringResult?.location(for: .greek))
315
+ ]
316
+
317
+ var sideDict: Dictionary<String, Any> = [
318
+ "latin": serializeScanningSide(stringResult?.side(for: .latin)),
319
+ "arabic": serializeScanningSide(stringResult?.side(for: .arabic)),
320
+ "cyrillic": serializeScanningSide(stringResult?.side(for: .cyrillic)),
321
+ "greek": serializeScanningSide(stringResult?.side(for: .greek))
322
+ ]
323
+ stringResultDict["side"] = sideDict
324
+
325
+ return stringResultDict
326
+ }
327
+
328
+ static func serializeRect(_ rectangle: BlinkID.RectangleF?) -> Dictionary<String, Any> {
329
+ let rectangleDict: [String: Any?] = [
330
+ "x": rectangle?.origin.x,
331
+ "y": rectangle?.origin.y,
332
+ "width": rectangle?.width,
333
+ "height": rectangle?.height
334
+ ]
335
+ return rectangleDict.compactMapValues { $0 }
336
+ }
337
+
338
+ static func serializeDateResult<T>(_ dateResult: DateResult<T>?) -> Dictionary<String, Any>? {
339
+ return [
340
+ "date": serializeSimpleDate(dateResult),
341
+ "filledByDomainKnowledge": dateResult?.filledByDomainKnowledge,
342
+ "successfullyParsed": dateResult?.successfullyParsed,
343
+ "originalString": serializeStringType(dateResult?.originalString)
344
+ ]
345
+ }
346
+
347
+ static func serializeSimpleDate<T>(_ dateResult: DateResult<T>?) -> Dictionary<String, Any>? {
348
+ let simpleDateDict: [String: Any?] = [
349
+ "day": dateResult?.day,
350
+ "month": dateResult?.month,
351
+ "year": dateResult?.year,
538
352
  ]
539
-
540
- return mrzResultDict.compactMapValues { $0 }
541
- }
542
-
353
+ return simpleDateDict.compactMapValues { $0 }
354
+ }
355
+
356
+ static func serializeDriverLicenseDetailedInfo<T>(_ driverLicenseDetailedInfo: DriverLicenseDetailedInfo<T>?) -> Dictionary<String, Any>? {
357
+ return [
358
+ "conditions": serializeStringType(driverLicenseDetailedInfo?.conditions),
359
+ "endorsements": serializeStringType(driverLicenseDetailedInfo?.endorsements),
360
+ "restrictions": serializeStringType(driverLicenseDetailedInfo?.restrictions),
361
+ "vehicleClass": serializeStringType(driverLicenseDetailedInfo?.vehicleClass),
362
+ "vehicleClassesInfo": driverLicenseDetailedInfo?.vehicleClassesInfo?.map(serializeVehicleClassInfo(_:)),
363
+ ]
364
+ }
365
+
366
+ static func serializeVehicleClassInfo<T>(_ vehicleClassInfo: VehicleClassInfo<T>?) -> Dictionary<String, Any> {
367
+ return [
368
+ "effectiveDate": serializeDateResult(vehicleClassInfo?.effectiveDate),
369
+ "expiryDate": serializeDateResult(vehicleClassInfo?.expiryDate),
370
+ "licenceType": serializeStringType(vehicleClassInfo?.licenceType),
371
+ "vehicleClass": serializeStringType(vehicleClassInfo?.vehicleClass)
372
+ ]
373
+ }
374
+ static func serializeDependentInfo(_ dependentInfo: DependentInfo?) -> Dictionary<String, Any> {
375
+ return [
376
+ "dateOfBirth": serializeDateResult(dependentInfo?.dateOfBirth),
377
+ "documentNumber": serializeStringResult(dependentInfo?.documentNumber),
378
+ "fullName": serializeStringResult(dependentInfo?.fullName),
379
+ "sex": serializeStringResult(dependentInfo?.sex)
380
+ ]
381
+ }
382
+
383
+ static func serializeSingleSideScanningResult(_ singleSideScanningResult: SingleSideScanningResult?) -> Dictionary<String, Any> {
384
+ guard let singleSideScanningResult else { return [:] }
385
+
386
+ return [
387
+ "barcode": serializeBarcodeResult(singleSideScanningResult.barcode),
388
+ "barcodeInputImage": encodeImage(singleSideScanningResult.barcodeInputImage?.uiImage),
389
+ "documentImage": encodeImage(singleSideScanningResult.documentImage?.uiImage),
390
+ "faceImage": serializeDetailedCroppedImageResult(singleSideScanningResult.faceImage),
391
+ "inputImage": encodeImage(singleSideScanningResult.inputImage?.uiImage),
392
+ "mrz": serializeMrzResult(singleSideScanningResult.mrz),
393
+ "signatureImage": serializeDetailedCroppedImageResult(singleSideScanningResult.signatureImage),
394
+ "viz": serializeVizResult(singleSideScanningResult.viz)
395
+ ]
396
+ }
397
+
398
+ static func serializeBarcodeResult(_ barcodeResult: BarcodeResult?) -> Dictionary<String, Any> {
399
+ return [
400
+ "additionalNameInformation": barcodeResult?.additionalNameInformation,
401
+ "address": barcodeResult?.address,
402
+ "addressDetailedInfo": serializeAddressDetailedInfo(barcodeResult?.addressDetailedInfo),
403
+ "barcodeData": serializeBarcodeData(barcodeResult?.barcodeData),
404
+ "dateOfBirth": serializeDateResult(barcodeResult?.dateOfBirth),
405
+ "dateOfExpiry": serializeDateResult(barcodeResult?.dateOfExpiry),
406
+ "dateOfIssue": serializeDateResult(barcodeResult?.dateOfIssue),
407
+ "documentAdditionalNumber": barcodeResult?.documentAdditionalNumber,
408
+ "documentNumber": barcodeResult?.documentNumber,
409
+ "driverLicenseDetailedInfo": serializeDriverLicenseDetailedInfo(barcodeResult?.driverLicenseDetailedInfo),
410
+ "employer": barcodeResult?.employer,
411
+ "extendedElements": serializeBarcodeExtendedElements(barcodeResult?.extendedElements),
412
+ "firstName": barcodeResult?.firstName,
413
+ "fullName": barcodeResult?.fullName,
414
+ "issuingAuthority": barcodeResult?.issuingAuthority,
415
+ "lastName": barcodeResult?.lastName,
416
+ "maritalStatus": barcodeResult?.maritalStatus,
417
+ "middleName": barcodeResult?.middleName,
418
+ "nationality": barcodeResult?.nationality,
419
+ "personalIdNumber": barcodeResult?.personalIdNumber,
420
+ "placeOfBirth": barcodeResult?.placeOfBirth,
421
+ "profession": barcodeResult?.profession,
422
+ "race": barcodeResult?.race,
423
+ "religion": barcodeResult?.religion,
424
+ "residentialStatus": barcodeResult?.residentialStatus,
425
+ "sex": barcodeResult?.sex,
426
+ "parsed": barcodeResult?.parsed
427
+ ]
428
+ }
429
+
430
+ static func serializeAddressDetailedInfo(_ addressDetailedInfo: AddressDetailedInfo?) -> Dictionary<String, Any> {
431
+ return [
432
+ "city": addressDetailedInfo?.city,
433
+ "postalCode": addressDetailedInfo?.postalCode,
434
+ "jurisdiction": addressDetailedInfo?.jurisdiction,
435
+ "street": addressDetailedInfo?.street
436
+ ]
437
+ }
438
+ static func serializeBarcodeData(_ barcodeData: BarcodeData?) -> Dictionary<String, Any> {
439
+ return [
440
+ "barcodeType": serializeBarcodeType(barcodeData?.barcodeType),
441
+ "rawData": barcodeData?.rawData.base64EncodedString(),
442
+ "stringData": barcodeData?.stringData,
443
+ "uncertain": barcodeData?.uncertain
444
+ ]
445
+ }
446
+
447
+ static func serializeBarcodeType(_ barcodeType: BarcodeType?) -> Int? {
448
+ switch barcodeType {
449
+ case .none:
450
+ return 0
451
+ case .qrCode:
452
+ return 1
453
+ case .dataMatrix:
454
+ return 2
455
+ case .upce:
456
+ return 3
457
+ case .upca:
458
+ return 4
459
+ case .ean8:
460
+ return 5
461
+ case .ean13:
462
+ return 6
463
+ case .code128:
464
+ return 7
465
+ case .code39:
466
+ return 8
467
+ case .itf:
468
+ return 9
469
+ case .aztec:
470
+ return 10
471
+ case .pdf417:
472
+ return 11
473
+ @unknown default:
474
+ return 0
475
+ }
476
+ }
477
+
478
+ static func serializeBarcodeExtendedElements(_ barcodeExtendedElements: BarcodeElements?) -> [String: Any] {
479
+ var elements = barcodeExtendedElements
480
+
481
+ return [
482
+ "addressCity": elements?.getValue(for: .addressCity),
483
+ "addressJurisdictionCode": elements?.getValue(for: .addressJurisdictionCode),
484
+ "addressPostalCode": elements?.getValue(for: .addressPostalCode),
485
+ "addressStreet": elements?.getValue(for: .addressStreet),
486
+ "addressStreet2": elements?.getValue(for: .addressStreet2),
487
+ "akaDateOfBirth": elements?.getValue(for: .akaDateOfBirth),
488
+ "akaFamilyName": elements?.getValue(for: .akaFamilyName),
489
+ "akaFullName": elements?.getValue(for: .akaFullName),
490
+ "akaGivenName": elements?.getValue(for: .akaGivenName),
491
+ "akaMiddleName": elements?.getValue(for: .akaMiddleName),
492
+ "akaPrefixName": elements?.getValue(for: .akaPrefixName),
493
+ "akaSocialSecurityNumber": elements?.getValue(for: .akaSocialSecurityNumber),
494
+ "akaSuffixName": elements?.getValue(for: .akaSuffixName),
495
+ "auditInformation": elements?.getValue(for: .auditInformation),
496
+ "cardRevisionDate": elements?.getValue(for: .cardRevisionDate),
497
+ "complianceType": elements?.getValue(for: .complianceType),
498
+ "countryIdentification": elements?.getValue(for: .countryIdentification),
499
+ "customerFamilyName": elements?.getValue(for: .customerFamilyName),
500
+ "customerIdNumber": elements?.getValue(for: .customerIdNumber),
501
+ "customerFirstName": elements?.getValue(for: .customerFirstName),
502
+ "customerFullName": elements?.getValue(for: .customerFullName),
503
+ "customerMiddleName": elements?.getValue(for: .customerMiddleName),
504
+ "dataDiscriminator": elements?.getValue(for: .dataDiscriminator),
505
+ "dateOfBirth": elements?.getValue(for: .dateOfBirth),
506
+ "documentDiscriminator": elements?.getValue(for: .documentDiscriminator),
507
+ "documentExpirationDate": elements?.getValue(for: .documentExpirationDate),
508
+ "documentExpirationMonth": elements?.getValue(for: .documentExpirationMonth),
509
+ "documentIssueDate": elements?.getValue(for: .documentIssueDate),
510
+ "documentNonexpiring": elements?.getValue(for: .documentNonexpiring),
511
+ "documentType": elements?.getValue(for: .documentType),
512
+ "eyeColor": elements?.getValue(for: .eyeColor),
513
+ "familyNameTruncation": elements?.getValue(for: .familyNameTruncation),
514
+ "federalCommercialVehicleCodes": elements?.getValue(for: .federalCommercialVehicleCodes),
515
+ "firstNameTruncation": elements?.getValue(for: .firstNameTruncation),
516
+ "fullAddress": elements?.getValue(for: .fullAddress),
517
+ "hairColor": elements?.getValue(for: .hairColor),
518
+ "height": elements?.getValue(for: .height),
519
+ "heightIn": elements?.getValue(for: .heightIn),
520
+ "heightCm": elements?.getValue(for: .heightCm),
521
+ "issuerIdentificationNumber": elements?.getValue(for: .issuerIdentificationNumber),
522
+ "issuingJurisdiction": elements?.getValue(for: .issuingJurisdiction),
523
+ "issuingJurisdictionName": elements?.getValue(for: .issuingJurisdictionName),
524
+ "jurisdictionEndorsementCodes": elements?.getValue(for: .jurisdictionEndorsementCodes),
525
+ "jurisdictionEndorsmentCodeDescription": elements?.getValue(for: .jurisdictionEndorsmentCodeDescription),
526
+ "jurisdictionRestrictionCodeDescription": elements?.getValue(for: .jurisdictionRestrictionCodeDescription),
527
+ "jurisdictionRestrictionCodes": elements?.getValue(for: .jurisdictionRestrictionCodes),
528
+ "jurisdictionVehicleClass": elements?.getValue(for: .jurisdictionVehicleClass),
529
+ "jurisdictionVehicleClassificationDescription": elements?.getValue(for: .jurisdictionVehicleClassificationDescription),
530
+ "jurisdictionVersionNumber": elements?.getValue(for: .jurisdictionVersionNumber),
531
+ "limitedDurationDocument": elements?.getValue(for: .limitedDurationDocument),
532
+ "medicalIndicator": elements?.getValue(for: .medicalIndicator),
533
+ "middleNameTruncation": elements?.getValue(for: .middleNameTruncation),
534
+ "namePrefix": elements?.getValue(for: .namePrefix),
535
+ "nameSuffix": elements?.getValue(for: .nameSuffix),
536
+ "nonResident": elements?.getValue(for: .nonResident),
537
+ "numberOfDuplicates": elements?.getValue(for: .numberOfDuplicates),
538
+ "organDonor": elements?.getValue(for: .organDonor),
539
+ "permitExpirationDate": elements?.getValue(for: .permitExpirationDate),
540
+ "permitIdentifier": elements?.getValue(for: .permitIdentifier),
541
+ "permitIssueDate": elements?.getValue(for: .permitIssueDate),
542
+ "placeOfBirth": elements?.getValue(for: .placeOfBirth),
543
+ "raceEthnicity": elements?.getValue(for: .raceEthnicity),
544
+ "residenceCity": elements?.getValue(for: .residenceCity),
545
+ "residenceFullAddress": elements?.getValue(for: .residenceFullAddress),
546
+ "residenceJurisdictionCode": elements?.getValue(for: .residenceJurisdictionCode),
547
+ "residencePostalCode": elements?.getValue(for: .residencePostalCode),
548
+ "residenceStreetAddress": elements?.getValue(for: .residenceStreetAddress),
549
+ "residenceStreetAddress2": elements?.getValue(for: .residenceStreetAddress2),
550
+ "securityVersion": elements?.getValue(for: .securityVersion),
551
+ "sex": elements?.getValue(for: .sex),
552
+ "socialSecurityNumber": elements?.getValue(for: .socialSecurityNumber),
553
+ "standardEndorsementCode": elements?.getValue(for: .standardEndorsementCode),
554
+ "standardRestrictionCode": elements?.getValue(for: .standardRestrictionCode),
555
+ "standardVehicleClassification": elements?.getValue(for: .standardVehicleClassification),
556
+ "standardVersionNumber": elements?.getValue(for: .standardVersionNumber),
557
+ "under18": elements?.getValue(for: .under18),
558
+ "under19": elements?.getValue(for: .under19),
559
+ "under21": elements?.getValue(for: .under21),
560
+ "uniqueCustomerId": elements?.getValue(for: .uniqueCustomerId),
561
+ "veteran": elements?.getValue(for: .veteran),
562
+ "weightKilograms": elements?.getValue(for: .weightKilograms),
563
+ "weightPounds": elements?.getValue(for: .weightPounds),
564
+ "weightRange": elements?.getValue(for: .weightRange),
565
+ ]
566
+ }
567
+
568
+
569
+ static func serializeStringType<T>(_ value: T) -> Any? {
570
+ if let stringResult = value as? BlinkID.BlinkIDSDK.StringResult {
571
+ return serializeStringResult(stringResult)
572
+ } else if let str = value as? Swift.String {
573
+ return str
574
+ }
575
+ return nil
576
+ }
577
+
578
+ static func encodeImage(_ image: UIImage?) -> String? {
579
+ return image?.jpegData(compressionQuality: 1.0)?.base64EncodedString()
580
+ }
581
+ static func serializeMrzResult(_ mrzResult: MRZResult?) -> Dictionary<String, Any> {
582
+ return [
583
+ "dateOfBirth": serializeDateResult(mrzResult?.dateOfBirth),
584
+ "dateOfExpiry": serializeDateResult(mrzResult?.dateOfExpiry),
585
+ "documentCode": mrzResult?.documentCode,
586
+ "documentNumber": mrzResult?.documentNumber,
587
+ "documentType": serializeMrzDocumentType(mrzResult?.documentType),
588
+ "gender": mrzResult?.gender,
589
+ "issuer": mrzResult?.issuer,
590
+ "issuerName": mrzResult?.issuerName,
591
+ "nationality": mrzResult?.nationality,
592
+ "nationalityName": mrzResult?.nationalityName,
593
+ "opt1": mrzResult?.opt1,
594
+ "opt2": mrzResult?.opt2,
595
+ "primaryID": mrzResult?.primaryID,
596
+ "rawMRZString": mrzResult?.rawMRZString,
597
+ "sanitizedDocumentCode": mrzResult?.sanitizedDocumentCode,
598
+ "sanitizedDocumentNumber": mrzResult?.sanitizedDocumentNumber,
599
+ "sanitizedIssuer": mrzResult?.sanitizedIssuer,
600
+ "sanitizedNationality": mrzResult?.sanitizedNationality,
601
+ "sanitizedOpt1": mrzResult?.sanitizedOpt1,
602
+ "sanitizedOpt2": mrzResult?.sanitizedOpt2,
603
+ "secondaryID": mrzResult?.secondaryID,
604
+ "verified": mrzResult?.verified
605
+ ]
606
+ }
607
+
608
+ static func serializeMrzDocumentType(_ documentType: MRZDocumentType?) -> Int? {
609
+ switch documentType {
610
+ case .unknown:
611
+ return 0
612
+ case .identityCard:
613
+ return 1
614
+ case .passport:
615
+ return 2
616
+ case .visa:
617
+ return 3
618
+ case .greenCard:
619
+ return 4
620
+ case .mysPassIMM13P:
621
+ return 5
622
+ case .driverLicense:
623
+ return 6
624
+ case .internalTravelDocument:
625
+ return 7
626
+ case .borderCrossingCard:
627
+ return 8
628
+ @unknown default:
629
+ return nil
630
+ }
631
+ }
632
+
543
633
  static func serializeVizResult(_ vizResult: VIZResult?) -> Dictionary<String, Any> {
544
634
  var vizResultDict = Dictionary<String, Any>()
545
635
  if let vizResult = vizResult {
@@ -568,11 +658,15 @@ class BlinkIdSerializationUtilities {
568
658
  if let dateOfExpiry = vizResult.dateOfExpiry {
569
659
  vizResultDict["dateOfExpiry"] = serializeDateResult(dateOfExpiry)
570
660
  }
661
+
571
662
  vizResultDict["dateOfExpiryPermanent"] = vizResult.dateOfExpiryPermanent
663
+
572
664
  if let dateOfIssue = vizResult.dateOfIssue {
573
665
  vizResultDict["dateOfIssue"] = serializeDateResult(dateOfIssue)
574
666
  }
575
- vizResultDict["dependentsInfo"] = vizResult.dependentsInfo?.compactMap(serializeDependentInfo(_:))
667
+ if let dependentsInfo = vizResult.dependentsInfo {
668
+ vizResultDict["dependentsInfo"] = dependentsInfo.compactMap(serializeDependentInfo(_:))
669
+ }
576
670
  if let documentAdditionalNumber = vizResult.documentAdditionalNumber {
577
671
  vizResultDict["documentAdditionalNumber"] = serializeStringResult(documentAdditionalNumber)
578
672
  }
@@ -705,135 +799,78 @@ class BlinkIdSerializationUtilities {
705
799
  if let stateName = vizResult.stateName {
706
800
  vizResultDict["stateName"] = serializeStringResult(stateName)
707
801
  }
802
+ if let parentsInfo = vizResult.parentsInfo {
803
+ vizResultDict["parentsInfo"] = parentsInfo.map(serializeParentInfo(_:))
804
+ }
805
+ if let effectiveDate = vizResult.effectiveDate {
806
+ vizResultDict["effectiveDate"] = serializeDateResult(effectiveDate)
807
+ }
808
+ if let husbandName = vizResult.husbandName {
809
+ vizResultDict["husbandName"] = serializeStringResult(husbandName)
810
+ }
811
+ if let legalStatus = vizResult.legalStatus {
812
+ vizResultDict["legalStatus"] = serializeStringResult(legalStatus)
813
+ }
814
+ if let socialSecurityStatus = vizResult.socialSecurityStatus {
815
+ vizResultDict["socialSecurityStatus"] = serializeStringResult(socialSecurityStatus)
816
+ }
817
+ if let workRestriction = vizResult.workRestriction {
818
+ vizResultDict["workRestriction"] = serializeStringResult(workRestriction)
819
+ }
708
820
  }
709
821
  return vizResultDict
710
822
  }
711
-
712
- static func serializeDetailedCroppedImageResult(_ detailedcroppedImageResult: DetailedCroppedImageResult?) -> Dictionary<String, Any> {
713
- let detailedcroppedImageResultDict: [String: Any?] = [
714
- "location": serializeRect(detailedcroppedImageResult?.location),
715
- "side": serializeScanningSide(detailedcroppedImageResult?.side),
716
- "image": encodeImage(detailedcroppedImageResult?.uiImage)
717
- ]
718
- return detailedcroppedImageResultDict.compactMapValues { $0 }
719
- }
720
-
721
- static func serializeDataMatchState(_ state: DataMatchState?) -> Int {
722
- switch state {
723
- case .notPerformed:
724
- return 0
725
- case .failed:
726
- return 1
727
- case .success:
728
- return 2
729
- case .none:
730
- return 0
731
- @unknown default:
732
- return 0
733
- }
734
- }
735
-
736
- static func serializeDataMatchField(_ field: DataMatchFieldType?) -> Int? {
737
- switch field {
738
- case .dateOfBirth:
739
- return 0
740
- case .dateOfExpiry:
741
- return 1
742
- case .documentNumber:
743
- return 2
744
- case .documentAdditionalNumber:
745
- return 3
746
- case .documentOptionalAdditionalNumber:
747
- return 4
748
- case .personalIdNumber:
749
- return 5
750
- case .none:
751
- return 0
752
- @unknown default:
753
- return nil
754
- }
755
- }
756
-
757
- static func serializeScanningSide(_ side: ScanningSide?) -> Int? {
758
- switch side {
759
- case .first:
760
- return 0
761
- case .second:
762
- return 1
763
- case .none:
764
- return nil
765
- @unknown default:
766
- return nil
767
- }
768
- }
769
-
770
- static func serializeBarcodeType(_ barcodeType: BarcodeType?) -> Int? {
771
- switch barcodeType {
772
- case BarcodeType?.none:
773
- return 0
774
- case .qrCode:
775
- return 1
776
- case .dataMatrix:
777
- return 2
778
- case .upce:
779
- return 3
780
- case .upca:
781
- return 4
782
- case .ean8:
783
- return 5
784
- case .ean13:
785
- return 6
786
- case .code128:
787
- return 7
788
- case .code39:
789
- return 8
790
- case .itf:
791
- return 9
792
- case .aztec:
793
- return 10
794
- case .pdf417:
795
- return 11
796
- case .some(.none):
797
- return 0
798
- @unknown default:
799
- return 0
800
- }
801
- }
802
-
803
- static func serializeMrzDocumentType(_ documentType: MRZDocumentType?) -> Int? {
804
- switch documentType {
805
- case .unknown:
806
- return 0
807
- case .identityCard:
808
- return 1
809
- case .passport:
810
- return 2
811
- case .visa:
812
- return 3
813
- case .greenCard:
814
- return 4
815
- case .mysPassIMM13P:
816
- return 5
817
- case .driverLicense:
818
- return 6
819
- case .internalTravelDocument:
820
- return 7
821
- case .borderCrossingCard:
822
- return 8
823
- case .none:
824
- return 0
825
- @unknown default:
826
- return nil
827
- }
828
- }
829
-
830
- static func encodeToJson(_ dict: Dictionary<String, Any>) -> String? {
831
- do {
832
- let jsonData = try JSONSerialization.data(withJSONObject: dict, options: .prettyPrinted)
833
- let resultForJson = String(data: jsonData, encoding: .utf8)
834
- return resultForJson
835
- } catch {
836
- return ""
837
- }
838
- }
823
+
824
+ static func serializeDetailedCroppedImageResult(_ detailedcroppedImageResult: DetailedCroppedImageResult?) -> Dictionary<String, Any> {
825
+ return [
826
+ "location": serializeRect(detailedcroppedImageResult?.location),
827
+ "side": serializeScanningSide(detailedcroppedImageResult?.side),
828
+ "image": encodeImage(detailedcroppedImageResult?.uiImage)
829
+ ]
830
+ }
831
+
832
+ static func serializeScanningSide(_ side: ScanningSide?) -> Int? {
833
+ switch side {
834
+ case .first:
835
+ return 0
836
+ case .second:
837
+ return 1
838
+ @unknown default:
839
+ return nil
840
+ }
841
+ }
842
+
843
+ static func deserializeDataMatchState(_ state: DataMatchState?) -> Int {
844
+ switch state {
845
+ case .notPerformed:
846
+ return 0
847
+ case .failed:
848
+ return 1
849
+ case .success:
850
+ return 2
851
+ @unknown default:
852
+ return 0
853
+ }
854
+ }
855
+
856
+ static func serializeParentInfo(_ parentInfo: ParentInfo) -> Dictionary<String, Any> {
857
+ var parentInfoDict: [String: Any] = [:]
858
+ if let firstName = parentInfo.firstName {
859
+ parentInfoDict["firstName"] = serializeStringResult(firstName)
860
+ }
861
+ if let lastName = parentInfo.lastName {
862
+ parentInfoDict["lastName"] = serializeStringResult(lastName)
863
+ }
864
+ return parentInfoDict
865
+ }
866
+
867
+ static func encodeToJson(_ dict: Dictionary<String, Any>) -> String? {
868
+ do {
869
+ let jsonData = try JSONSerialization.data(withJSONObject: dict, options: .prettyPrinted)
870
+ let resultForJson = String(data: jsonData, encoding: .utf8)
871
+ return resultForJson
872
+ } catch {
873
+ return ""
874
+ }
875
+ }
839
876
  }