@microblink/blinkid-react-native 7.7.0 → 8001.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/BlinkidReactNative.podspec +2 -1
  2. package/README.md +621 -281
  3. package/android/build.gradle +56 -4
  4. package/android/gradle.properties +3 -4
  5. package/android/src/main/java/com/microblink/blinkid/reactnative/BlinkIdClassInfoIdMappings.kt +33 -0
  6. package/android/src/main/java/com/microblink/blinkid/reactnative/BlinkIdDeserializationUtilities.kt +370 -258
  7. package/android/src/main/java/com/microblink/blinkid/reactnative/BlinkIdSerializationUtilities.kt +149 -41
  8. package/android/src/main/java/com/microblink/blinkid/reactnative/BlinkidReactNativeModule.kt +54 -31
  9. package/ios/BlinkidReactNative.mm +49 -52
  10. package/ios/BlinkidReactNativeModule.swift +114 -57
  11. package/ios/Frameworks/BlinkID.xcframework/Info.plist +5 -9
  12. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/BlinkID +0 -0
  13. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/Headers/BlinkID.h +893 -13
  14. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/Info.plist +0 -0
  15. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/Modules/BlinkID.swiftmodule/arm64.swiftdoc +0 -0
  16. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/Modules/BlinkID.swiftmodule/{arm64-apple-ios.private.swiftinterface → arm64.swiftinterface} +2421 -2076
  17. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/Modules/module.modulemap +1 -7
  18. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/PrivacyInfo.xcprivacy +0 -0
  19. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/BlinkID +0 -0
  20. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Headers/BlinkID.h +893 -13
  21. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Info.plist +0 -0
  22. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Modules/BlinkID.swiftmodule/arm64.swiftdoc +0 -0
  23. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Modules/BlinkID.swiftmodule/{arm64-apple-ios-simulator.swiftinterface → arm64.swiftinterface} +2421 -2076
  24. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Modules/BlinkID.swiftmodule/x86_64.swiftdoc +0 -0
  25. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Modules/BlinkID.swiftmodule/{x86_64-apple-ios-simulator.private.swiftinterface → x86_64.swiftinterface} +2421 -2076
  26. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Modules/module.modulemap +1 -7
  27. package/ios/Frameworks/BlinkIDUX.xcframework/Info.plist +5 -5
  28. package/ios/Frameworks/BlinkIDUX.xcframework/_CodeSignature/CodeDirectory +0 -0
  29. package/ios/Frameworks/BlinkIDUX.xcframework/_CodeSignature/CodeResources +276 -276
  30. package/ios/Frameworks/BlinkIDUX.xcframework/_CodeSignature/CodeSignature +0 -0
  31. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX +0 -0
  32. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/Assets.car +0 -0
  33. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/Info.plist +0 -0
  34. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ak.lproj/Localizable.strings +0 -0
  35. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/am.lproj/Localizable.strings +0 -0
  36. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ar.lproj/Localizable.strings +0 -0
  37. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/bn.lproj/Localizable.strings +0 -0
  38. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/cs.lproj/Localizable.strings +0 -0
  39. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/da.lproj/Localizable.strings +0 -0
  40. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/de.lproj/Localizable.strings +0 -0
  41. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/el.lproj/Localizable.strings +0 -0
  42. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/en-GB.lproj/Localizable.strings +0 -0
  43. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/en.lproj/Localizable.strings +0 -0
  44. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/es-MX.lproj/Localizable.strings +0 -0
  45. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/es.lproj/Localizable.strings +0 -0
  46. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/fa.lproj/Localizable.strings +0 -0
  47. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/fi.lproj/Localizable.strings +0 -0
  48. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/fil.lproj/Localizable.strings +0 -0
  49. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/fr-CA.lproj/Localizable.strings +0 -0
  50. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/fr.lproj/Localizable.strings +0 -0
  51. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ha.lproj/Localizable.strings +0 -0
  52. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/he.lproj/Localizable.strings +0 -0
  53. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/hi.lproj/Localizable.strings +0 -0
  54. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/hr.lproj/Localizable.strings +0 -0
  55. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/hu.lproj/Localizable.strings +0 -0
  56. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/id.lproj/Localizable.strings +0 -0
  57. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/is.lproj/Localizable.strings +0 -0
  58. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/it.lproj/Localizable.strings +0 -0
  59. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ja.lproj/Localizable.strings +0 -0
  60. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ka-GE.lproj/Localizable.strings +0 -0
  61. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/kk.lproj/Localizable.strings +0 -0
  62. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/km-KH.lproj/Localizable.strings +0 -0
  63. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ko.lproj/Localizable.strings +0 -0
  64. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/lv.lproj/Localizable.strings +0 -0
  65. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ms.lproj/Localizable.strings +0 -0
  66. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/nb.lproj/Localizable.strings +0 -0
  67. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ne.lproj/Localizable.strings +0 -0
  68. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/nl.lproj/Localizable.strings +0 -0
  69. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/pl.lproj/Localizable.strings +0 -0
  70. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ps-AF.lproj/Localizable.strings +0 -0
  71. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/pt-BR.lproj/Localizable.strings +0 -0
  72. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/pt.lproj/Localizable.strings +0 -0
  73. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ro.lproj/Localizable.strings +0 -0
  74. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ru.lproj/Localizable.strings +0 -0
  75. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/si.lproj/Localizable.strings +0 -0
  76. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/sk.lproj/Localizable.strings +0 -0
  77. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/sl.lproj/Localizable.strings +0 -0
  78. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/sr.lproj/Localizable.strings +0 -0
  79. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/sv.lproj/Localizable.strings +0 -0
  80. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/sw.lproj/Localizable.strings +0 -0
  81. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/th.lproj/Localizable.strings +0 -0
  82. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/tr.lproj/Localizable.strings +0 -0
  83. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/uk.lproj/Localizable.strings +0 -0
  84. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ur.lproj/Localizable.strings +0 -0
  85. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/uz.lproj/Localizable.strings +0 -0
  86. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/vi.lproj/Localizable.strings +0 -0
  87. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/yo.lproj/Localizable.strings +0 -0
  88. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/zh-Hans.lproj/Localizable.strings +0 -0
  89. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/zh-Hant.lproj/Localizable.strings +0 -0
  90. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/Info.plist +0 -0
  91. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios.abi.json +3860 -1881
  92. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios.package.swiftinterface +87 -69
  93. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios.private.swiftinterface +87 -69
  94. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
  95. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios.swiftinterface +87 -69
  96. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX +0 -0
  97. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/Assets.car +0 -0
  98. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/Info.plist +0 -0
  99. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/_CodeSignature/CodeDirectory +0 -0
  100. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/_CodeSignature/CodeResources +114 -114
  101. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ak.lproj/Localizable.strings +0 -0
  102. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/am.lproj/Localizable.strings +0 -0
  103. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ar.lproj/Localizable.strings +0 -0
  104. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/bn.lproj/Localizable.strings +0 -0
  105. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/cs.lproj/Localizable.strings +0 -0
  106. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/da.lproj/Localizable.strings +0 -0
  107. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/de.lproj/Localizable.strings +0 -0
  108. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/el.lproj/Localizable.strings +0 -0
  109. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/en-GB.lproj/Localizable.strings +0 -0
  110. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/en.lproj/Localizable.strings +0 -0
  111. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/es-MX.lproj/Localizable.strings +0 -0
  112. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/es.lproj/Localizable.strings +0 -0
  113. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/fa.lproj/Localizable.strings +0 -0
  114. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/fi.lproj/Localizable.strings +0 -0
  115. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/fil.lproj/Localizable.strings +0 -0
  116. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/fr-CA.lproj/Localizable.strings +0 -0
  117. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/fr.lproj/Localizable.strings +0 -0
  118. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ha.lproj/Localizable.strings +0 -0
  119. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/he.lproj/Localizable.strings +0 -0
  120. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/hi.lproj/Localizable.strings +0 -0
  121. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/hr.lproj/Localizable.strings +0 -0
  122. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/hu.lproj/Localizable.strings +0 -0
  123. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/id.lproj/Localizable.strings +0 -0
  124. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/is.lproj/Localizable.strings +0 -0
  125. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/it.lproj/Localizable.strings +0 -0
  126. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ja.lproj/Localizable.strings +0 -0
  127. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ka-GE.lproj/Localizable.strings +0 -0
  128. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/kk.lproj/Localizable.strings +0 -0
  129. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/km-KH.lproj/Localizable.strings +0 -0
  130. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ko.lproj/Localizable.strings +0 -0
  131. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/lv.lproj/Localizable.strings +0 -0
  132. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ms.lproj/Localizable.strings +0 -0
  133. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/nb.lproj/Localizable.strings +0 -0
  134. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ne.lproj/Localizable.strings +0 -0
  135. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/nl.lproj/Localizable.strings +0 -0
  136. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/pl.lproj/Localizable.strings +0 -0
  137. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ps-AF.lproj/Localizable.strings +0 -0
  138. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/pt-BR.lproj/Localizable.strings +0 -0
  139. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/pt.lproj/Localizable.strings +0 -0
  140. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ro.lproj/Localizable.strings +0 -0
  141. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ru.lproj/Localizable.strings +0 -0
  142. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/si.lproj/Localizable.strings +0 -0
  143. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/sk.lproj/Localizable.strings +0 -0
  144. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/sl.lproj/Localizable.strings +0 -0
  145. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/sr.lproj/Localizable.strings +0 -0
  146. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/sv.lproj/Localizable.strings +0 -0
  147. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/sw.lproj/Localizable.strings +0 -0
  148. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/th.lproj/Localizable.strings +0 -0
  149. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/tr.lproj/Localizable.strings +0 -0
  150. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/uk.lproj/Localizable.strings +0 -0
  151. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ur.lproj/Localizable.strings +0 -0
  152. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/uz.lproj/Localizable.strings +0 -0
  153. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/vi.lproj/Localizable.strings +0 -0
  154. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/yo.lproj/Localizable.strings +0 -0
  155. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/zh-Hans.lproj/Localizable.strings +0 -0
  156. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/zh-Hant.lproj/Localizable.strings +0 -0
  157. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Info.plist +0 -0
  158. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios-simulator.abi.json +3860 -1881
  159. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios-simulator.package.swiftinterface +87 -69
  160. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +87 -69
  161. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
  162. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios-simulator.swiftinterface +87 -69
  163. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/x86_64-apple-ios-simulator.abi.json +3860 -1881
  164. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/x86_64-apple-ios-simulator.package.swiftinterface +87 -69
  165. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +87 -69
  166. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/x86_64-apple-ios-simulator.swiftdoc +0 -0
  167. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +87 -69
  168. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/_CodeSignature/CodeResources +1 -1
  169. package/ios/Serialization/BlinkIdDeserializationUtils.swift +614 -0
  170. package/ios/{BlinkIdSerializationUtilities.swift → Serialization/BlinkIdSerializationUtils.swift} +294 -255
  171. package/lib/module/NativeBlinkidReactNative.js.map +1 -1
  172. package/lib/module/blinkIdResult.js +1 -822
  173. package/lib/module/blinkIdResult.js.map +1 -1
  174. package/lib/module/blinkIdSettings.js +1 -496
  175. package/lib/module/blinkIdSettings.js.map +1 -1
  176. package/lib/module/index.js +94 -17
  177. package/lib/module/index.js.map +1 -1
  178. package/lib/module/types.js +715 -3373
  179. package/lib/module/types.js.map +1 -1
  180. package/lib/typescript/src/NativeBlinkidReactNative.d.ts +36 -5
  181. package/lib/typescript/src/NativeBlinkidReactNative.d.ts.map +1 -1
  182. package/lib/typescript/src/blinkIdResult.d.ts +17 -20
  183. package/lib/typescript/src/blinkIdResult.d.ts.map +1 -1
  184. package/lib/typescript/src/blinkIdSettings.d.ts +195 -317
  185. package/lib/typescript/src/blinkIdSettings.d.ts.map +1 -1
  186. package/lib/typescript/src/index.d.ts +48 -10
  187. package/lib/typescript/src/index.d.ts.map +1 -1
  188. package/lib/typescript/src/types.d.ts +1062 -1210
  189. package/lib/typescript/src/types.d.ts.map +1 -1
  190. package/package.json +5 -4
  191. package/src/NativeBlinkidReactNative.ts +39 -5
  192. package/src/blinkIdResult.ts +19 -466
  193. package/src/blinkIdSettings.ts +218 -389
  194. package/src/index.tsx +221 -35
  195. package/src/types.ts +1253 -1463
  196. package/android/.gradle/8.9/checksums/checksums.lock +0 -0
  197. package/android/.gradle/8.9/checksums/md5-checksums.bin +0 -0
  198. package/android/.gradle/8.9/checksums/sha1-checksums.bin +0 -0
  199. package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
  200. package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
  201. package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
  202. package/android/.gradle/8.9/gc.properties +0 -0
  203. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  204. package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
  205. package/android/.gradle/vcs-1/gc.properties +0 -0
  206. package/android/.project +0 -28
  207. package/ios/BlinkIdDeserializationUtilities.swift +0 -374
  208. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/Headers/BlinkID-Swift.h +0 -43937
  209. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/Headers/MBSampleBufferWrapper.h +0 -28
  210. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/Modules/BlinkID.swiftmodule/arm64-apple-ios.abi.json +0 -78651
  211. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/Modules/BlinkID.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
  212. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/Modules/BlinkID.swiftmodule/arm64-apple-ios.swiftinterface +0 -2304
  213. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/Modules/module.private.modulemap +0 -12
  214. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/PrivateHeaders/SwiftCxxBridge.hpp +0 -19
  215. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/_CodeSignature/CodeResources +0 -245
  216. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/conan.xcconfig +0 -40
  217. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Headers/BlinkID-Swift.h +0 -87870
  218. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Headers/MBSampleBufferWrapper.h +0 -28
  219. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Modules/BlinkID.swiftmodule/arm64-apple-ios-simulator.abi.json +0 -78651
  220. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Modules/BlinkID.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +0 -2304
  221. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Modules/BlinkID.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
  222. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Modules/BlinkID.swiftmodule/x86_64-apple-ios-simulator.abi.json +0 -78651
  223. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Modules/BlinkID.swiftmodule/x86_64-apple-ios-simulator.swiftdoc +0 -0
  224. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Modules/BlinkID.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +0 -2304
  225. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Modules/module.private.modulemap +0 -12
  226. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/PrivateHeaders/SwiftCxxBridge.hpp +0 -19
  227. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/_CodeSignature/CodeResources +0 -300
  228. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/conan.xcconfig +0 -40
  229. package/lib/module/blinkIdUtilities.js +0 -21
  230. package/lib/module/blinkIdUtilities.js.map +0 -1
  231. package/lib/typescript/src/blinkIdUtilities.d.ts +0 -8
  232. package/lib/typescript/src/blinkIdUtilities.d.ts.map +0 -1
  233. package/src/android/.project +0 -28
  234. package/src/blinkIdUtilities.ts +0 -20
@@ -1,365 +1,463 @@
1
1
  package com.microblink.blinkid.reactnative
2
2
 
3
+ import android.graphics.Bitmap
3
4
  import android.graphics.BitmapFactory
4
- import android.os.Parcelable
5
+ import android.util.Base64
5
6
  import com.microblink.blinkid.core.BlinkIdSdkSettings
6
- import com.microblink.blinkid.core.result.AlphabetType
7
+ import com.microblink.blinkid.core.settings.ResourcesConfig
8
+ import com.microblink.blinkid.core.settings.OtaResourcesConfig
7
9
  import com.microblink.blinkid.core.result.FieldType
8
- import com.microblink.blinkid.core.result.classinfo.Country
10
+ import com.microblink.blinkid.core.result.classinfo.CountryId
9
11
  import com.microblink.blinkid.core.result.classinfo.DocumentClassInfo
10
- import com.microblink.blinkid.core.result.classinfo.Region
11
- import com.microblink.blinkid.core.result.classinfo.Type
12
+ import com.microblink.blinkid.core.result.classinfo.RegionId
13
+ import com.microblink.blinkid.core.result.classinfo.DocumentTypeId
12
14
  import com.microblink.blinkid.core.session.BlinkIdSessionSettings
13
15
  import com.microblink.blinkid.core.session.ScanningMode
14
- import com.microblink.blinkid.core.settings.CroppedImageSettings
15
- import com.microblink.blinkid.core.settings.DetailedFieldType
16
- import com.microblink.blinkid.core.settings.DocumentFilter
17
- import com.microblink.blinkid.core.settings.DocumentRules
18
- import com.microblink.blinkid.core.settings.RecognitionModeFilter
16
+ import com.microblink.blinkid.core.settings.DocumentNumberRedactionSettings
17
+ import com.microblink.blinkid.core.settings.RedactionSettings
18
+ import com.microblink.blinkid.core.settings.RedactionSettingsResolver
19
19
  import com.microblink.blinkid.core.settings.ScanningSettings
20
+ import com.microblink.blinkid.core.settings.SensitivityLevel
21
+ import com.microblink.blinkid.core.image.InputImageCropType
22
+ import com.microblink.blinkid.core.image.InputImageSelectionStrategy
23
+ import com.microblink.blinkid.core.settings.scanning.BarcodeModuleSettings
24
+ import com.microblink.blinkid.core.settings.scanning.DocumentCaptureModuleSettings
25
+ import com.microblink.blinkid.core.settings.scanning.MrzModuleSettings
26
+ import com.microblink.blinkid.core.settings.scanning.VizModuleSettings
20
27
  import com.microblink.blinkid.ux.settings.BlinkIdUxSettings
21
- import com.microblink.blinkid.core.settings.DocumentAnonymizationSettings
22
28
  import com.microblink.blinkid.ux.settings.ClassFilter
23
- import com.microblink.core.utils.defaultResourceDownloadUrl
24
- import com.microblink.core.utils.defaultResourcesLocalFolder
29
+ import com.microblink.blinkid.core.network.RequestTimeout
30
+ import com.microblink.blinkid.core.session.InputImageSource
31
+ import com.microblink.blinkid.core.settings.RedactionMode
32
+ import com.microblink.blinkid.ux.camera.CameraLensFacing
33
+ import com.microblink.blinkid.ux.camera.CameraSettings
34
+ import kotlin.time.Duration
25
35
  import kotlin.time.Duration.Companion.milliseconds
36
+ import android.os.Parcelable
26
37
  import kotlinx.parcelize.Parcelize
27
- import kotlinx.parcelize.RawValue
28
- import android.graphics.Bitmap
29
- import android.util.Base64
30
- import com.microblink.blinkid.core.settings.DocumentNumberAnonymizationSettings
31
- import com.microblink.core.network.RequestTimeout
32
- import com.microblink.core.session.InputImageSource
33
- import com.microblink.core.settings.AnonymizationMode
34
- import com.microblink.core.settings.DetectionLevel
35
- import com.microblink.ux.camera.CameraLensFacing
36
- import com.microblink.ux.camera.CameraSettings
37
38
  import org.json.JSONArray
38
39
  import org.json.JSONObject
39
40
 
40
41
  object BlinkIdDeserializationUtilities {
41
42
 
43
+ private const val DEFAULT_RESOURCE_DOWNLOAD_URL = "https://models.cdn.microblink.com/resources"
44
+ private const val DEFAULT_RESOURCES_LOCAL_FOLDER = "microblink/blinkid"
45
+
46
+ private const val DEFAULT_OTA_DOWNLOAD_URL = "https://blinkid-ota.microblink.com"
47
+ private const val DEFAULT_OTA_RESOURCES_LOCAL_FOLDER = "microblink/blinkid/ota"
48
+
42
49
  fun deserializeBlinkIdSdkSettings(blinkIdSdkSettingsMap: JSONObject?): BlinkIdSdkSettings? {
43
- val licenseKey = blinkIdSdkSettingsMap?.get("licenseKey") as? String ?: return null
50
+ val licenseKey = blinkIdSdkSettingsMap?.optString("licenseKey")?.takeIf { it.isNotBlank() }
51
+ ?: return null
52
+
53
+ val resourcesMap = blinkIdSdkSettingsMap.optJSONObject("resourcesConfig")
54
+ val otaResourcesMap = blinkIdSdkSettingsMap.optJSONObject("otaResourcesConfig")
44
55
 
45
56
  return BlinkIdSdkSettings(
46
57
  licenseKey = licenseKey,
47
- licensee = if (blinkIdSdkSettingsMap.has("licensee")) blinkIdSdkSettingsMap.getString("licensee") else null,
48
- downloadResources = blinkIdSdkSettingsMap.optBoolean("downloadResources", true),
49
- resourceDownloadUrl = blinkIdSdkSettingsMap.optString(
50
- "resourceDownloadUrl",
51
- defaultResourceDownloadUrl
52
- ),
53
- resourceLocalFolder = blinkIdSdkSettingsMap.optString(
54
- "resourceLocalFolder",
55
- defaultResourcesLocalFolder
58
+ licensee = blinkIdSdkSettingsMap.optString("licensee").takeIf { it.isNotBlank() },
59
+ resourcesConfig = ResourcesConfig(
60
+ download = resourcesMap?.optBoolean("download", true) ?: true,
61
+ serviceUrl = resourcesMap?.optString("serviceUrl")
62
+ ?.takeIf { it.isNotBlank() }
63
+ ?: DEFAULT_RESOURCE_DOWNLOAD_URL,
64
+ localFolder = resourcesMap?.optString("localFolder")
65
+ ?.takeIf { it.isNotBlank() }
66
+ ?: DEFAULT_RESOURCES_LOCAL_FOLDER,
67
+ requestTimeout = deserializeResourceRequestTimeout(
68
+ resourcesMap?.opt("requestTimeout")
69
+ ),
56
70
  ),
57
- resourceRequestTimeout = deserializeResourceRequestTimeout(
58
- blinkIdSdkSettingsMap.optJSONObject(
59
- "resourceRequestTimeout"
60
- )
71
+ otaResourcesConfig = OtaResourcesConfig(
72
+ checkForUpdates = otaResourcesMap?.optBoolean("checkForUpdates", true) ?: true,
73
+ strict = otaResourcesMap?.optBoolean("strict", false) ?: false,
74
+ serviceUrl = otaResourcesMap?.optString("serviceUrl")
75
+ ?.takeIf { it.isNotBlank() }
76
+ ?: DEFAULT_OTA_DOWNLOAD_URL,
77
+ localFolder = otaResourcesMap?.optString("localFolder")
78
+ ?.takeIf { it.isNotBlank() }
79
+ ?: DEFAULT_OTA_RESOURCES_LOCAL_FOLDER,
80
+ requestTimeout = deserializeResourceRequestTimeout(
81
+ otaResourcesMap?.opt("requestTimeout")
82
+ ),
61
83
  ),
62
- microblinkProxyUrl = if (blinkIdSdkSettingsMap.has("microblinkProxyURL")) blinkIdSdkSettingsMap.getString("microblinkProxyURL") else null,
84
+ microblinkProxyUrl = blinkIdSdkSettingsMap.optString("microblinkProxyURL")
85
+ .takeIf { it.isNotBlank() },
63
86
  )
64
87
  }
65
88
 
66
89
  fun deserializeBlinkIdSessionSettings(
67
- blinkIdSdkSessionSettingsMap: JSONObject?,
90
+ sessionSettingsMap: JSONObject?,
68
91
  isDirectApi: Boolean
69
92
  ): BlinkIdSessionSettings {
70
- if (blinkIdSdkSessionSettingsMap == null) return BlinkIdSessionSettings()
93
+ if (sessionSettingsMap == null) {
94
+ return BlinkIdSessionSettings(
95
+ inputImageSource = if (isDirectApi) InputImageSource.Photo else InputImageSource.Video
96
+ )
97
+ }
71
98
 
72
99
  return BlinkIdSessionSettings(
73
100
  inputImageSource = if (isDirectApi) InputImageSource.Photo else InputImageSource.Video,
74
- scanningMode = ScanningMode.entries[blinkIdSdkSessionSettingsMap.optInt("scanningMode", ScanningMode.Automatic.ordinal)],
75
- scanningSettings = deserializeScanningSettings(blinkIdSdkSessionSettingsMap.optJSONObject("scanningSettings")),
101
+ scanningMode = deserializeScanningMode(sessionSettingsMap.optString("scanningMode")),
102
+ scanningSettings = deserializeScanningSettings(
103
+ sessionSettingsMap.optJSONObject("scanningSettings")
104
+ ),
76
105
  )
77
106
  }
78
107
 
79
- private fun deserializeScanningSettings(scanningSettingsMap: JSONObject?): ScanningSettings {
80
- if (scanningSettingsMap == null) return ScanningSettings()
81
- return ScanningSettings(
82
- blurDetectionLevel = DetectionLevel.entries[scanningSettingsMap.optInt("blurDetectionLevel", DetectionLevel.Mid.ordinal)],
83
- skipImagesWithBlur = scanningSettingsMap.optBoolean("skipImagesWithBlur", true),
84
- glareDetectionLevel = DetectionLevel.entries[scanningSettingsMap.optInt("glareDetectionLevel", DetectionLevel.Mid.ordinal)],
85
- skipImagesWithGlare = scanningSettingsMap["skipImagesWithGlare"] as? Boolean ?: true,
86
- tiltDetectionLevel = DetectionLevel.entries[scanningSettingsMap.optInt("tiltDetectionLevel", DetectionLevel.Off.ordinal)],
87
- skipImagesWithInadequateLightingConditions = scanningSettingsMap.optBoolean(
88
- "skipImagesWithInadequateLightingConditions",
89
- true
90
- ),
91
- skipImagesOccludedByHand = scanningSettingsMap.optBoolean("skipImagesOccludedByHand", true),
92
- combineResultsFromMultipleInputImages = scanningSettingsMap.optBoolean(
93
- "combineResultsFromMultipleInputImages",
94
- true
95
- ),
96
- enableBarcodeScanOnly = scanningSettingsMap.optBoolean("enableBarcodeScanOnly", false),
97
- customDocumentRules = deserializeDocumentRules(scanningSettingsMap.optJSONArray("customDocumentRules")),
98
- anonymizationMode = enumValueOf<AnonymizationMode>(
99
- scanningSettingsMap.optString(
100
- "anonymizationMode",
101
- AnonymizationMode.FullResult.name
102
- ).replaceFirstChar { char -> char.uppercase() }),
103
- customDocumentAnonymizationSettings = deserializeCustomAnonymizationSettings(
104
- scanningSettingsMap.optJSONArray("customDocumentAnonymizationSettings")
105
- ),
106
- returnInputImages = scanningSettingsMap.optBoolean("returnInputImages", false),
107
- scanCroppedDocumentImage = scanningSettingsMap.optBoolean("scanCroppedDocumentImage", false),
108
- recognitionModeFilter = deserializeRecognitionModeFilter(scanningSettingsMap.optJSONObject("recognitionModeFilter")),
109
- enableCharacterValidation = scanningSettingsMap.optBoolean("enableCharacterValidation", true),
110
- inputImageMargin = (scanningSettingsMap.optDouble("inputImageMargin", 0.02)).toFloat(),
111
- scanUnsupportedBack = scanningSettingsMap.optBoolean("scanUnsupportedBack", false),
112
- allowUncertainFrontSideScan = scanningSettingsMap.optBoolean(
113
- "allowUncertainFrontSideScan",
114
- false
115
- ),
116
- maxAllowedMismatchesPerField = (scanningSettingsMap.optInt(
117
- "maxAllowedMismatchesPerField",
118
- 0
119
- )).toUInt(),
120
- scanPassportDataPageOnly = scanningSettingsMap.optBoolean("scanPassportDataPageOnly", true),
121
- croppedImageSettings = deserializeCroppedImageSettings(scanningSettingsMap.optJSONObject("croppedImageSettings")),
108
+ fun deserializeBlinkIdUxSettings(
109
+ scanningUxSettingsMap: JSONObject?,
110
+ sessionSettingsMap: JSONObject?,
111
+ classFilterMap: JSONObject?,
112
+ redactionSettingsResolverMap: JSONObject?
113
+ ): BlinkIdUxSettings {
114
+ val stepTimeoutMs = sessionSettingsMap?.optInt("stepTimeoutDuration")
115
+ ?: scanningUxSettingsMap?.optInt("stepTimeoutDuration")
116
+ ?: 60_000
117
+ val inactivityTimeoutMs = sessionSettingsMap?.optInt("inactivityTimeoutDuration")
118
+ ?: scanningUxSettingsMap?.optInt("inactivityTimeoutDuration")
119
+ ?: 10_000
120
+
121
+ return BlinkIdUxSettings(
122
+ stepTimeoutDuration = stepTimeoutMs.milliseconds,
123
+ inactivityTimeoutDuration = inactivityTimeoutMs.milliseconds,
124
+ allowHapticFeedback = scanningUxSettingsMap?.optBoolean("allowHapticFeedback", true) ?: true,
125
+ classFilter = classFilterMap?.let { CustomClassFilter(it.toString()) },
126
+ redactionSettingsResolver = redactionSettingsResolverMap?.let {
127
+ CustomRedactionSettingsResolver(it.toString())
128
+ },
122
129
  )
123
130
  }
124
-
125
- private fun deserializeCroppedImageSettings(croppedImageSettingsMap: JSONObject?): CroppedImageSettings {
126
- if (croppedImageSettingsMap == null) return CroppedImageSettings()
127
- return CroppedImageSettings(
128
- dotsPerInch = (croppedImageSettingsMap.optInt("dotsPerInch", 250)).toUShort(),
129
- extensionFactor = croppedImageSettingsMap.optDouble("extensionFactor", 0.0).toFloat(),
130
- returnDocumentImage = croppedImageSettingsMap.optBoolean("returnDocumentImage", false),
131
- returnFaceImage = croppedImageSettingsMap.optBoolean("returnFaceImage", false),
132
- returnSignatureImage = croppedImageSettingsMap.optBoolean("returnSignatureImage", false)
131
+
132
+ fun deserializeCameraSettings(scanningUxSettingsMap: JSONObject?): CameraSettings {
133
+ if (scanningUxSettingsMap == null) return CameraSettings()
134
+ return CameraSettings(
135
+ lensFacing = deserializeLensFacingCamera(
136
+ scanningUxSettingsMap.optString("preferredCamera")
137
+ )
133
138
  )
134
139
  }
135
140
 
136
- private fun deserializeResourceRequestTimeout(resourceRequestTimeoutMap: JSONObject?): RequestTimeout {
137
- if (resourceRequestTimeoutMap == null) return RequestTimeout.DEFAULT
138
- return RequestTimeout(
139
- connectionTimeoutMillis = resourceRequestTimeoutMap.optInt(
140
- "connectionTimeoutMilliseconds",
141
- 10000
141
+ fun deserializeRedactionSettings(redactionSettingsMap: JSONObject?): RedactionSettings? {
142
+ if (redactionSettingsMap == null || redactionSettingsMap.length() == 0) return null
143
+
144
+ val fieldsArray = redactionSettingsMap.optJSONArray("fields") ?: return null
145
+ val fields = mutableListOf<FieldType>()
146
+ for (i in 0 until fieldsArray.length()) {
147
+ parseFieldType(fieldsArray.optString(i))?.let { fields.add(it) }
148
+ }
149
+ if (fields.isEmpty()) return null
150
+
151
+ return RedactionSettings(
152
+ redactionMode = parseRedactionMode(redactionSettingsMap.optString("mode", "fullResult")),
153
+ fields = fields,
154
+ documentNumberRedactionSettings = redactionSettingsMap
155
+ .optJSONObject("documentNumberRedactionSettings")
156
+ ?.let { deserializeDocumentNumberRedactionSettings(it) },
157
+ redactMrz = redactionSettingsMap.optBoolean(
158
+ "redactMrz",
159
+ redactionSettingsMap.optBoolean("redactMrzResult", false)
160
+ ),
161
+ redactBarcode = redactionSettingsMap.optBoolean(
162
+ "redactBarcode",
163
+ redactionSettingsMap.optBoolean("redactBarcodeResult", false)
142
164
  ),
143
- writeTimeoutMillis = resourceRequestTimeoutMap.optInt("writeTimeoutMilliseconds", 10000),
144
- readTimeoutMillis = resourceRequestTimeoutMap.optInt("readTimeoutMilliseconds", 10000)
145
165
  )
146
166
  }
147
167
 
148
- private fun deserializeDocumentRules(documentRulesJsonArray: JSONArray?): List<DocumentRules> {
149
- if (documentRulesJsonArray == null) return emptyList()
150
-
151
- val documentRulesList = mutableListOf<DocumentRules>()
152
-
153
- for (i in 0 until documentRulesJsonArray.length()) {
154
- val documentRuleJson = documentRulesJsonArray.optJSONObject(i) ?: continue
168
+ fun deserializeClassFilter(
169
+ classFilterMap: JSONObject?,
170
+ classInfo: DocumentClassInfo
171
+ ): Boolean {
172
+ if (classFilterMap == null || classFilterMap.length() == 0) return true
155
173
 
156
- val documentFilterJson = documentRuleJson.optJSONObject("documentFilter")
157
- val fieldsJsonArray = documentRuleJson.optJSONArray("fields")
174
+ var includeClass = false
175
+ var excludeClass = true
158
176
 
159
- if (fieldsJsonArray != null) {
160
- val fields = mutableListOf<DetailedFieldType>()
161
- for (j in 0 until fieldsJsonArray.length()) {
162
- val fieldTypeJson = fieldsJsonArray.optJSONObject(j)
163
- deserializeDetailedFieldType(fieldTypeJson)?.let { deserialized ->
164
- fields.add(deserialized)
165
- }
166
- }
177
+ val includedClasses = classFilterMap.optJSONArray("includeDocuments")
178
+ if (includedClasses != null && includedClasses.length() > 0) {
179
+ for (i in 0 until includedClasses.length()) {
180
+ includeClass = includeClass || matchClassFilter(includedClasses.optJSONObject(i), classInfo)
181
+ }
182
+ } else {
183
+ includeClass = true
184
+ }
167
185
 
168
- val documentFilter = documentFilterJson?.let { deserializeDocumentFilter(it) }
169
- documentFilter?.let {
170
- documentRulesList.add(DocumentRules(documentFilter, fields))
171
- }
186
+ val excludedClasses = classFilterMap.optJSONArray("excludeDocuments")
187
+ if (excludedClasses != null && excludedClasses.length() > 0) {
188
+ for (i in 0 until excludedClasses.length()) {
189
+ excludeClass =
190
+ excludeClass && !matchClassFilter(excludedClasses.optJSONObject(i), classInfo)
172
191
  }
173
192
  }
174
- return documentRulesList
193
+
194
+ return includeClass && excludeClass
175
195
  }
176
196
 
197
+ fun resolveRedactionSettings(
198
+ redactionResolverMap: JSONObject?,
199
+ classInfo: DocumentClassInfo
200
+ ): RedactionSettings? {
201
+ if (redactionResolverMap == null || redactionResolverMap.length() == 0) return null
177
202
 
178
- private fun deserializeDetailedFieldType(detailedFieldTypeMap: JSONObject?): DetailedFieldType? {
179
- val fieldTypeName = detailedFieldTypeMap?.optString("fieldType")
180
- val alphabetTypeName = detailedFieldTypeMap?.optString("alphabetType")
203
+ val documentRedactionList =
204
+ redactionResolverMap.optJSONArray("documentRedactionList") ?: return null
181
205
 
182
- return if (fieldTypeName != null && alphabetTypeName != null) {
183
- DetailedFieldType(
184
- enumValueOf<FieldType>(fieldTypeName.replaceFirstChar { char -> char.uppercase() }),
185
- enumValueOf<AlphabetType>(alphabetTypeName.replaceFirstChar { char -> char.uppercase() })
186
- )
187
- } else {
188
- null
206
+ for (i in 0 until documentRedactionList.length()) {
207
+ val redactionEntry = documentRedactionList.optJSONObject(i) ?: continue
208
+ if (shouldUseRedactionSettings(redactionEntry, classInfo)) {
209
+ return deserializeRedactionSettings(redactionEntry)
210
+ }
189
211
  }
212
+ return null
190
213
  }
191
214
 
192
- private fun deserializeDocumentFilter(documentFilterMap: JSONObject?): DocumentFilter {
193
- return if (documentFilterMap != null) {
194
- val filter = DocumentFilter()
195
-
196
- if (!documentFilterMap.optString("country").isNullOrEmpty()) {
197
- filter.country = enumValueOf<Country>(documentFilterMap.optString("country").replaceFirstChar { char -> char.uppercase() })
198
- }
199
- if (!documentFilterMap.optString("region").isNullOrEmpty()) {
200
- println("Region fam: ${documentFilterMap.optString("region")}")
201
- filter.region = enumValueOf<Region>(documentFilterMap.optString("region").replaceFirstChar { char -> char.uppercase() })
202
- }
203
- if (!documentFilterMap.optString("documentType").isNullOrEmpty()) {
204
- filter.type = enumValueOf<Type>(documentFilterMap.optString("documentType").replaceFirstChar { char -> char.uppercase() })
205
- }
206
- filter
207
- } else {
208
- DocumentFilter()
215
+ fun base64ToBitmap(base64Str: String?): Bitmap? {
216
+ return try {
217
+ val decodedBytes = Base64.decode(base64Str, Base64.DEFAULT)
218
+ BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.size)
219
+ } catch (_: IllegalArgumentException) {
220
+ null
209
221
  }
210
222
  }
211
223
 
212
- private fun deserializeCustomAnonymizationSettings(
213
- customAnonymizationSettingsMapArray: JSONArray?
214
- ): List<DocumentAnonymizationSettings> {
215
- if (customAnonymizationSettingsMapArray == null) return emptyList()
224
+ private fun deserializeScanningSettings(scanningSettingsMap: JSONObject?): ScanningSettings {
225
+ if (scanningSettingsMap == null) return ScanningSettings()
216
226
 
217
- val customAnonymizationList = mutableListOf<DocumentAnonymizationSettings>()
227
+ return ScanningSettings(
228
+ documentCaptureModule = scanningSettingsMap.optJSONObject("documentCaptureModule")
229
+ ?.let { deserializeDocumentCaptureModule(it) },
230
+ barcodeModule = scanningSettingsMap.optJSONObject("barcodeModule")
231
+ ?.let { deserializeBarcodeModule(it) },
232
+ mrzModule = scanningSettingsMap.optJSONObject("mrzModule")
233
+ ?.let { deserializeMrzModule(it) },
234
+ vizModule = scanningSettingsMap.optJSONObject("vizModule")
235
+ ?.let { deserializeVizModule(it) },
236
+ maxAllowedMismatchesPerField = scanningSettingsMap
237
+ .optInt("maxAllowedMismatchesPerField", 0)
238
+ .toUInt(),
239
+ )
240
+ }
218
241
 
219
- for (i in 0 until customAnonymizationSettingsMapArray.length()) {
220
- val item = customAnonymizationSettingsMapArray.optJSONObject(i) ?: continue
242
+ private fun deserializeDocumentCaptureModule(
243
+ moduleMap: JSONObject
244
+ ): DocumentCaptureModuleSettings {
245
+ return DocumentCaptureModuleSettings(
246
+ cropType = parseInputImageCropType(moduleMap.optString("cropType", "not-cropped")),
247
+ inputImageSelectionStrategy = parseInputImageSelectionStrategy(moduleMap.optString("inputImageSelectionStrategy", "balanced")),
248
+ unsupportedDocumentsAllowed = moduleMap.optBoolean("unsupportedDocumentsAllowed", false),
249
+ secondSideWithNoExtractableDataSkipped = moduleMap.optBoolean(
250
+ "secondSideWithNoExtractableDataSkipped",
251
+ true
252
+ ),
253
+ passportDataPageScanOnly = moduleMap.optBoolean("passportDataPageScanOnly", true),
254
+ faceImageExtractionEnabled = moduleMap.optBoolean("faceImageExtractionEnabled", false),
255
+ faceImagePresenceMandatory = moduleMap.optBoolean("faceImagePresenceMandatory", false),
256
+ inputImageReturnEnabled = moduleMap.optBoolean("inputImageReturnEnabled", false),
257
+ documentImageReturnEnabled = moduleMap.optBoolean("documentImageReturnEnabled", false),
258
+ inputImageMargin = moduleMap.optDouble("inputImageMargin", 0.02).toFloat(),
259
+ dotsPerInch = moduleMap.optInt("dotsPerInch", 250),
260
+ extensionFactor = moduleMap.optDouble("extensionFactor", 0.0).toFloat(),
261
+ blurSensitivityLevel = parseSensitivityLevel(
262
+ moduleMap.optString("blurSensitivityLevel", "mid")
263
+ ),
264
+ imageWithBlurRejected = moduleMap.optBoolean("imageWithBlurRejected", true),
265
+ glareSensitivityLevel = parseSensitivityLevel(
266
+ moduleMap.optString("glareSensitivityLevel", "mid")
267
+ ),
268
+ imageWithGlareRejected = moduleMap.optBoolean("imageWithGlareRejected", true),
269
+ tiltSensitivityLevel = parseSensitivityLevel(
270
+ moduleMap.optString("tiltSensitivityLevel", "mid")
271
+ ),
272
+ imageWithPoorLightingRejected = moduleMap.optBoolean("imageWithPoorLightingRejected", true),
273
+ imageWithHandOcclusionRejected = moduleMap.optBoolean("imageWithHandOcclusionRejected", true),
274
+ )
275
+ }
221
276
 
222
- val fieldsJsonArray = item.optJSONArray("fields") ?: continue
223
- val deserializedFields = mutableListOf<FieldType>()
224
- for (j in 0 until fieldsJsonArray.length()) {
225
- val raw = fieldsJsonArray.optString(j, null)
226
- if (!raw.isNullOrBlank()) {
227
- val enumName = raw.replaceFirstChar { it.uppercase() }
228
- runCatching { enumValueOf<FieldType>(enumName) }
229
- .onSuccess { deserializedFields.add(it) }
230
- }
231
- }
277
+ private fun deserializeBarcodeModule(moduleMap: JSONObject): BarcodeModuleSettings {
278
+ return BarcodeModuleSettings(
279
+ presenceMandatory = moduleMap.optBoolean("presenceMandatory", false),
280
+ barcodeImageReturnEnabled = moduleMap.optBoolean("barcodeImageReturnEnabled", false),
281
+ pdf417ScanningEnabled = moduleMap.optBoolean("pdf417ScanningEnabled", true),
282
+ qrScanningEnabled = moduleMap.optBoolean("qrScanningEnabled", true),
283
+ upceScanningEnabled = moduleMap.optBoolean("upceScanningEnabled", false),
284
+ upcaScanningEnabled = moduleMap.optBoolean("upcaScanningEnabled", false),
285
+ code128ScanningEnabled = moduleMap.optBoolean("code128ScanningEnabled", false),
286
+ code39ScanningEnabled = moduleMap.optBoolean("code39ScanningEnabled", false),
287
+ ean8ScanningEnabled = moduleMap.optBoolean("ean8ScanningEnabled", false),
288
+ ean13ScanningEnabled = moduleMap.optBoolean("ean13ScanningEnabled", false),
289
+ itfScanningEnabled = moduleMap.optBoolean("itfScanningEnabled", false),
290
+ dataMatrixScanningEnabled = moduleMap.optBoolean("dataMatrixScanningEnabled", false),
291
+ aztecScanningEnabled = moduleMap.optBoolean("aztecScanningEnabled", false),
292
+ )
293
+ }
232
294
 
233
- val documentFilter = deserializeDocumentFilter(item.optJSONObject("documentFilter"))
234
- val documentNumberAnonymizationSettings = item
235
- .optJSONObject("documentNumberAnonymizationSettings")
236
- ?.let { deserializeDocumentNumberAnonymizationSettings(it) }
237
-
238
- customAnonymizationList.add(
239
- DocumentAnonymizationSettings(
240
- documentFilter,
241
- deserializedFields,
242
- documentNumberAnonymizationSettings
243
- )
244
- )
245
- }
295
+ private fun deserializeMrzModule(moduleMap: JSONObject): MrzModuleSettings {
296
+ return MrzModuleSettings(
297
+ presenceMandatory = moduleMap.optBoolean("presenceMandatory", false)
298
+ )
299
+ }
246
300
 
247
- return customAnonymizationList
301
+ private fun deserializeVizModule(moduleMap: JSONObject): VizModuleSettings {
302
+ return VizModuleSettings(
303
+ presenceMandatory = moduleMap.optBoolean("presenceMandatory", false),
304
+ signatureImageExtractionEnabled = moduleMap.optBoolean(
305
+ "signatureImageExtractionEnabled",
306
+ false
307
+ ),
308
+ characterValidationEnabled = moduleMap.optBoolean("characterValidationEnabled", true),
309
+ resultAggregationEnabled = if (moduleMap.has("resultAggregationEnabled")) {
310
+ moduleMap.optBoolean("resultAggregationEnabled")
311
+ } else {
312
+ true
313
+ },
314
+ )
248
315
  }
249
316
 
317
+ private fun deserializeDocumentNumberRedactionSettings(
318
+ settingsMap: JSONObject
319
+ ): DocumentNumberRedactionSettings {
320
+ return DocumentNumberRedactionSettings(
321
+ prefixDigitsVisible = settingsMap.optInt("prefixDigitsVisible", 0).toUByte(),
322
+ suffixDigitsVisible = settingsMap.optInt("suffixDigitsVisible", 0).toUByte(),
323
+ )
324
+ }
250
325
 
251
- private fun deserializeDocumentNumberAnonymizationSettings(documentNumberAnonymizationSettingsMap: JSONObject?): DocumentNumberAnonymizationSettings? {
252
- if (documentNumberAnonymizationSettingsMap == null) return null
253
- return DocumentNumberAnonymizationSettings(
254
- prefixDigitsVisible = (documentNumberAnonymizationSettingsMap.optInt(
255
- "prefixDigitsVisible",
256
- 0
257
- )).toUByte(),
258
- suffixDigitsVisible = (documentNumberAnonymizationSettingsMap.optInt(
259
- "suffixDigitsVisible",
260
- 0
261
- )).toUByte()
326
+ private fun deserializeResourceRequestTimeout(timeoutValue: Any?): RequestTimeout {
327
+ val resourceRequestTimeoutMap = timeoutValue as? JSONObject ?: return RequestTimeout.DEFAULT
328
+ val defaultTimeout = RequestTimeout.DEFAULT
329
+ return RequestTimeout(
330
+ connectionTimeout = deserializeTimeoutMilliseconds(
331
+ resourceRequestTimeoutMap.opt("connectionTimeoutMilliseconds"),
332
+ defaultTimeout.connectionTimeout,
333
+ ),
334
+ writeTimeout = deserializeTimeoutMilliseconds(
335
+ resourceRequestTimeoutMap.opt("writeTimeoutMilliseconds"),
336
+ defaultTimeout.writeTimeout,
337
+ ),
338
+ readTimeout = deserializeTimeoutMilliseconds(
339
+ resourceRequestTimeoutMap.opt("readTimeoutMilliseconds"),
340
+ defaultTimeout.readTimeout,
341
+ ),
262
342
  )
263
343
  }
264
344
 
265
- private fun deserializeRecognitionModeFilter(recognitionModeFilterMap: JSONObject?): RecognitionModeFilter {
266
- if (recognitionModeFilterMap == null) return RecognitionModeFilter()
267
- val filter = RecognitionModeFilter()
268
- filter.enableMrzId = recognitionModeFilterMap.optBoolean("enableMrzId", true)
269
- filter.enableMrzVisa = recognitionModeFilterMap.optBoolean("enableMrzVisa", true)
270
- filter.enablePhotoId = recognitionModeFilterMap.optBoolean("enablePhotoId", true)
271
- filter.enableBarcodeId = recognitionModeFilterMap.optBoolean("enableBarcodeId", true)
272
- filter.enableMrzPassport = recognitionModeFilterMap.optBoolean("enableMrzPassport", true)
273
- filter.enableFullDocumentRecognition =
274
- recognitionModeFilterMap.optBoolean("enableFullDocumentRecognition", true)
275
- return filter
345
+ private fun deserializeTimeoutMilliseconds(value: Any?, default: Duration): Duration {
346
+ return when (value) {
347
+ is Number -> value.toInt().milliseconds
348
+ else -> default
349
+ }
276
350
  }
277
351
 
352
+ private fun deserializeScanningMode(value: String?): ScanningMode {
353
+ return when (value?.lowercase()) {
354
+ "single" -> ScanningMode.Single
355
+ else -> ScanningMode.Automatic
356
+ }
357
+ }
278
358
 
279
- fun deserializeBlinkIdScanningUxSettings(
280
- blinkidScanningUxSettingsMap: JSONObject?,
281
- classFilterMap: JSONObject?
282
- ): BlinkIdUxSettings {
283
- if (blinkidScanningUxSettingsMap == null) return BlinkIdUxSettings()
284
- return BlinkIdUxSettings(
285
- stepTimeoutDuration = (blinkidScanningUxSettingsMap.optInt(
286
- "stepTimeoutDuration",
287
- 15000
288
- ).milliseconds),
289
- allowHapticFeedback = blinkidScanningUxSettingsMap.optBoolean("allowHapticFeedback", true),
290
- classFilter = classFilterMap?.let { CustomClassFilter(it.toString()) },
291
- )
359
+ private fun parseInputImageCropType(value: String): InputImageCropType {
360
+ return when (value.lowercase()) {
361
+ "cropped" -> InputImageCropType.Cropped
362
+ "unknown" -> InputImageCropType.Unknown
363
+ else -> InputImageCropType.NotCropped
364
+ }
292
365
  }
293
- fun deserializeCameraSettings(blinkidScanningUxSettingsMap: JSONObject?): CameraSettings {
294
- if (blinkidScanningUxSettingsMap == null) return CameraSettings()
295
- return CameraSettings(lensFacing = deserializeLensFacingCamera(blinkidScanningUxSettingsMap.optString("preferredCamera")))
366
+
367
+ private fun parseInputImageSelectionStrategy(value: String): InputImageSelectionStrategy {
368
+ return when (value.lowercase()) {
369
+ "single-image" -> InputImageSelectionStrategy.SingleImage
370
+ "optimize-for-speed" -> InputImageSelectionStrategy.OptimizeForSpeed
371
+ "balanced" -> InputImageSelectionStrategy.Balanced
372
+ "optimize-for-quality" -> InputImageSelectionStrategy.OptimizeForQuality
373
+ else -> InputImageSelectionStrategy.Balanced
374
+ }
375
+ }
376
+
377
+ private fun parseSensitivityLevel(value: String): SensitivityLevel {
378
+ return when (value.lowercase()) {
379
+ "off" -> SensitivityLevel.Off
380
+ "low" -> SensitivityLevel.Low
381
+ "high" -> SensitivityLevel.High
382
+ else -> SensitivityLevel.Mid
383
+ }
384
+ }
385
+
386
+ private fun parseRedactionMode(value: String): RedactionMode {
387
+ return when (value) {
388
+ "none" -> RedactionMode.None
389
+ "imageOnly" -> RedactionMode.ImageOnly
390
+ "resultFieldsOnly" -> RedactionMode.ResultFieldsOnly
391
+ else -> RedactionMode.FullResult
392
+ }
296
393
  }
297
394
 
298
- fun deserializeLensFacingCamera(lens: String?): CameraLensFacing {
395
+ private fun parseFieldType(value: String?): FieldType? {
396
+ if (value.isNullOrBlank()) return null
397
+ val normalized = value.replaceFirstChar { it.lowercase() }
398
+ return FieldType.entries.find {
399
+ it.name.replaceFirstChar { char -> char.lowercase() } == normalized
400
+ }
401
+ }
402
+
403
+ private fun deserializeLensFacingCamera(lens: String?): CameraLensFacing {
299
404
  return when (lens?.lowercase()) {
300
405
  "front" -> CameraLensFacing.LensFacingFront
301
- "back" -> CameraLensFacing.LensFacingBack
302
406
  else -> CameraLensFacing.LensFacingBack
303
407
  }
304
408
  }
305
409
 
306
- fun deserializeClassFilter(
307
- classFilterMap: JSONObject?,
410
+ private fun shouldUseRedactionSettings(
411
+ redactionMap: JSONObject,
308
412
  classInfo: DocumentClassInfo
309
413
  ): Boolean {
310
- if (classFilterMap == null) return true
311
-
312
- var includeClass = false
313
- var excludeClass = true
314
-
315
- val includedClasses = classFilterMap.optJSONArray("includeDocuments")
316
- if (includedClasses != null) {
317
- for (i in 0 until includedClasses.length()) {
318
- includeClass = includeClass || matchClassFilter(includedClasses.optJSONObject(i), classInfo)
414
+ val documentFilters = redactionMap.optJSONArray("documentFilter")
415
+ if (documentFilters != null) {
416
+ if (documentFilters.length() == 0) return true
417
+ for (i in 0 until documentFilters.length()) {
418
+ if (matchClassFilter(documentFilters.optJSONObject(i), classInfo)) {
419
+ return true
420
+ }
319
421
  }
320
- } else {
321
- includeClass = true
422
+ return false
322
423
  }
323
424
 
324
- val excludedClasses = classFilterMap.optJSONArray("excludeDocuments")
325
- if (excludedClasses != null) {
326
- for (i in 0 until excludedClasses.length()) {
327
- excludeClass =
328
- excludeClass && !matchClassFilter(excludedClasses.optJSONObject(i), classInfo)
329
- }
425
+ if (redactionMap.has("documentFilter")) {
426
+ return matchClassFilter(redactionMap.optJSONObject("documentFilter"), classInfo)
330
427
  }
331
428
 
332
- return includeClass && excludeClass
429
+ return true
333
430
  }
334
431
 
335
432
  private fun matchClassFilter(
336
433
  filteredClass: JSONObject?,
337
434
  classInfo: DocumentClassInfo
338
435
  ): Boolean {
339
- val country = filteredClass?.optString("country")
340
- val region = filteredClass?.optString("region")
341
- val documentType = filteredClass?.optString("documentType")
436
+ if (filteredClass == null) return true
342
437
 
343
- return (country.isNullOrEmpty() || enumValueOf<Country>(country.replaceFirstChar { char -> char.uppercase() }) == classInfo.country) &&
344
- (region.isNullOrEmpty() || enumValueOf<Region>(region.replaceFirstChar { char -> char.uppercase() }) == classInfo.region) &&
345
- (documentType.isNullOrEmpty() || enumValueOf<Type>(documentType.replaceFirstChar { char -> char.uppercase() }) == classInfo.type)
346
- }
438
+ val country = filteredClass.optString("country").takeIf { it.isNotBlank() }
439
+ val region = filteredClass.optString("region").takeIf { it.isNotBlank() }
440
+ val documentType = filteredClass.optString("documentType").takeIf { it.isNotBlank() }
347
441
 
348
- fun base64ToBitmap(base64Str: String?): Bitmap? {
349
- return try {
350
- val decodedBytes = Base64.decode(base64Str, Base64.DEFAULT)
351
- BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.size)
352
- } catch (e: IllegalArgumentException) {
353
- null
354
- }
442
+ return (country == null || parseCountryId(country) == classInfo.country?.id) &&
443
+ (region == null || parseRegionId(region) == classInfo.region?.id) &&
444
+ (documentType == null || parseDocumentTypeId(documentType) == classInfo.documentType?.id)
355
445
  }
446
+
447
+ private fun parseCountryId(value: String): CountryId? =
448
+ BlinkIdClassInfoIdMappings.parseCountryId(value)
449
+
450
+ private fun parseRegionId(value: String): RegionId? =
451
+ BlinkIdClassInfoIdMappings.parseRegionId(value)
452
+
453
+ private fun parseDocumentTypeId(value: String): DocumentTypeId? =
454
+ BlinkIdClassInfoIdMappings.parseDocumentTypeId(value)
356
455
  }
357
456
 
358
457
  @Parcelize
359
458
  private class CustomClassFilter(
360
- private val classFilterMap: @RawValue String
459
+ private val classFilterMap: String
361
460
  ) : ClassFilter, Parcelable {
362
-
363
461
  override fun classAllowed(documentClass: DocumentClassInfo): Boolean {
364
462
  return BlinkIdDeserializationUtilities.deserializeClassFilter(
365
463
  JSONObject(classFilterMap),
@@ -367,3 +465,17 @@ private class CustomClassFilter(
367
465
  )
368
466
  }
369
467
  }
468
+
469
+ @Parcelize
470
+ private class CustomRedactionSettingsResolver(
471
+ private val redactionResolverMap: String
472
+ ) : RedactionSettingsResolver, Parcelable {
473
+ override fun resolveRedactionSettings(
474
+ classInfo: DocumentClassInfo
475
+ ): RedactionSettings? {
476
+ return BlinkIdDeserializationUtilities.resolveRedactionSettings(
477
+ JSONObject(redactionResolverMap),
478
+ classInfo
479
+ )
480
+ }
481
+ }