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