@microblink/blinkid-react-native 7.7.0 → 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 (221) 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 -249
  6. package/android/src/main/java/com/microblink/blinkid/reactnative/BlinkIdSerializationUtilities.kt +109 -31
  7. package/android/src/main/java/com/microblink/blinkid/reactnative/BlinkidReactNativeModule.kt +39 -31
  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 +7535 -2758
  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 +17584 -4445
  15. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/Modules/BlinkID.swiftmodule/arm64-apple-ios.private.swiftinterface +352 -122
  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 +352 -122
  18. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/_CodeSignature/CodeResources +17 -28
  19. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/conan.xcconfig +3 -3
  20. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/BlinkID +0 -0
  21. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Headers/BlinkID-Swift.h +42778 -33224
  22. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Headers/BlinkID.h +2 -1
  23. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Info.plist +0 -0
  24. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Modules/BlinkID.swiftmodule/arm64-apple-ios-simulator.abi.json +17584 -4445
  25. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Modules/BlinkID.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +352 -122
  26. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Modules/BlinkID.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
  27. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Modules/BlinkID.swiftmodule/arm64-apple-ios-simulator.swiftinterface +352 -122
  28. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Modules/BlinkID.swiftmodule/x86_64-apple-ios-simulator.abi.json +17584 -4445
  29. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Modules/BlinkID.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +352 -122
  30. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Modules/BlinkID.swiftmodule/x86_64-apple-ios-simulator.swiftdoc +0 -0
  31. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Modules/BlinkID.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +352 -122
  32. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/_CodeSignature/CodeResources +27 -38
  33. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/conan.xcconfig +3 -3
  34. package/ios/Frameworks/BlinkIDUX.xcframework/_CodeSignature/CodeDirectory +0 -0
  35. package/ios/Frameworks/BlinkIDUX.xcframework/_CodeSignature/CodeResources +276 -276
  36. package/ios/Frameworks/BlinkIDUX.xcframework/_CodeSignature/CodeSignature +0 -0
  37. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX +0 -0
  38. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/Assets.car +0 -0
  39. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/Info.plist +0 -0
  40. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ak.lproj/Localizable.strings +0 -0
  41. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/am.lproj/Localizable.strings +0 -0
  42. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ar.lproj/Localizable.strings +0 -0
  43. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/bn.lproj/Localizable.strings +0 -0
  44. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/cs.lproj/Localizable.strings +0 -0
  45. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/da.lproj/Localizable.strings +0 -0
  46. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/de.lproj/Localizable.strings +0 -0
  47. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/el.lproj/Localizable.strings +0 -0
  48. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/en-GB.lproj/Localizable.strings +0 -0
  49. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/en.lproj/Localizable.strings +0 -0
  50. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/es-MX.lproj/Localizable.strings +0 -0
  51. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/es.lproj/Localizable.strings +0 -0
  52. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/fa.lproj/Localizable.strings +0 -0
  53. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/fi.lproj/Localizable.strings +0 -0
  54. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/fil.lproj/Localizable.strings +0 -0
  55. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/fr-CA.lproj/Localizable.strings +0 -0
  56. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/fr.lproj/Localizable.strings +0 -0
  57. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ha.lproj/Localizable.strings +0 -0
  58. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/he.lproj/Localizable.strings +0 -0
  59. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/hi.lproj/Localizable.strings +0 -0
  60. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/hr.lproj/Localizable.strings +0 -0
  61. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/hu.lproj/Localizable.strings +0 -0
  62. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/id.lproj/Localizable.strings +0 -0
  63. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/is.lproj/Localizable.strings +0 -0
  64. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/it.lproj/Localizable.strings +0 -0
  65. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ja.lproj/Localizable.strings +0 -0
  66. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ka-GE.lproj/Localizable.strings +0 -0
  67. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/kk.lproj/Localizable.strings +0 -0
  68. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/km-KH.lproj/Localizable.strings +0 -0
  69. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ko.lproj/Localizable.strings +0 -0
  70. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/lv.lproj/Localizable.strings +0 -0
  71. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ms.lproj/Localizable.strings +0 -0
  72. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/nb.lproj/Localizable.strings +0 -0
  73. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ne.lproj/Localizable.strings +0 -0
  74. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/nl.lproj/Localizable.strings +0 -0
  75. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/pl.lproj/Localizable.strings +0 -0
  76. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ps-AF.lproj/Localizable.strings +0 -0
  77. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/pt-BR.lproj/Localizable.strings +0 -0
  78. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/pt.lproj/Localizable.strings +0 -0
  79. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ro.lproj/Localizable.strings +0 -0
  80. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ru.lproj/Localizable.strings +0 -0
  81. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/si.lproj/Localizable.strings +0 -0
  82. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/sk.lproj/Localizable.strings +0 -0
  83. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/sl.lproj/Localizable.strings +0 -0
  84. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/sr.lproj/Localizable.strings +0 -0
  85. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/sv.lproj/Localizable.strings +0 -0
  86. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/sw.lproj/Localizable.strings +0 -0
  87. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/th.lproj/Localizable.strings +0 -0
  88. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/tr.lproj/Localizable.strings +0 -0
  89. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/uk.lproj/Localizable.strings +0 -0
  90. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ur.lproj/Localizable.strings +0 -0
  91. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/uz.lproj/Localizable.strings +0 -0
  92. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/vi.lproj/Localizable.strings +0 -0
  93. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/yo.lproj/Localizable.strings +0 -0
  94. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/zh-Hans.lproj/Localizable.strings +0 -0
  95. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/zh-Hant.lproj/Localizable.strings +0 -0
  96. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/Info.plist +0 -0
  97. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios.abi.json +2551 -1166
  98. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios.package.swiftinterface +60 -24
  99. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios.private.swiftinterface +60 -24
  100. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
  101. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios.swiftinterface +60 -24
  102. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX +0 -0
  103. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/Assets.car +0 -0
  104. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/Info.plist +0 -0
  105. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/_CodeSignature/CodeDirectory +0 -0
  106. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/_CodeSignature/CodeResources +114 -114
  107. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ak.lproj/Localizable.strings +0 -0
  108. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/am.lproj/Localizable.strings +0 -0
  109. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ar.lproj/Localizable.strings +0 -0
  110. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/bn.lproj/Localizable.strings +0 -0
  111. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/cs.lproj/Localizable.strings +0 -0
  112. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/da.lproj/Localizable.strings +0 -0
  113. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/de.lproj/Localizable.strings +0 -0
  114. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/el.lproj/Localizable.strings +0 -0
  115. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/en-GB.lproj/Localizable.strings +0 -0
  116. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/en.lproj/Localizable.strings +0 -0
  117. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/es-MX.lproj/Localizable.strings +0 -0
  118. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/es.lproj/Localizable.strings +0 -0
  119. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/fa.lproj/Localizable.strings +0 -0
  120. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/fi.lproj/Localizable.strings +0 -0
  121. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/fil.lproj/Localizable.strings +0 -0
  122. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/fr-CA.lproj/Localizable.strings +0 -0
  123. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/fr.lproj/Localizable.strings +0 -0
  124. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ha.lproj/Localizable.strings +0 -0
  125. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/he.lproj/Localizable.strings +0 -0
  126. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/hi.lproj/Localizable.strings +0 -0
  127. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/hr.lproj/Localizable.strings +0 -0
  128. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/hu.lproj/Localizable.strings +0 -0
  129. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/id.lproj/Localizable.strings +0 -0
  130. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/is.lproj/Localizable.strings +0 -0
  131. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/it.lproj/Localizable.strings +0 -0
  132. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ja.lproj/Localizable.strings +0 -0
  133. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ka-GE.lproj/Localizable.strings +0 -0
  134. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/kk.lproj/Localizable.strings +0 -0
  135. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/km-KH.lproj/Localizable.strings +0 -0
  136. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ko.lproj/Localizable.strings +0 -0
  137. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/lv.lproj/Localizable.strings +0 -0
  138. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ms.lproj/Localizable.strings +0 -0
  139. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/nb.lproj/Localizable.strings +0 -0
  140. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ne.lproj/Localizable.strings +0 -0
  141. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/nl.lproj/Localizable.strings +0 -0
  142. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/pl.lproj/Localizable.strings +0 -0
  143. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ps-AF.lproj/Localizable.strings +0 -0
  144. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/pt-BR.lproj/Localizable.strings +0 -0
  145. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/pt.lproj/Localizable.strings +0 -0
  146. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ro.lproj/Localizable.strings +0 -0
  147. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ru.lproj/Localizable.strings +0 -0
  148. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/si.lproj/Localizable.strings +0 -0
  149. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/sk.lproj/Localizable.strings +0 -0
  150. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/sl.lproj/Localizable.strings +0 -0
  151. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/sr.lproj/Localizable.strings +0 -0
  152. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/sv.lproj/Localizable.strings +0 -0
  153. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/sw.lproj/Localizable.strings +0 -0
  154. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/th.lproj/Localizable.strings +0 -0
  155. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/tr.lproj/Localizable.strings +0 -0
  156. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/uk.lproj/Localizable.strings +0 -0
  157. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/ur.lproj/Localizable.strings +0 -0
  158. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/uz.lproj/Localizable.strings +0 -0
  159. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/vi.lproj/Localizable.strings +0 -0
  160. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/yo.lproj/Localizable.strings +0 -0
  161. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/zh-Hans.lproj/Localizable.strings +0 -0
  162. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/BlinkIDUX_BlinkIDUX.bundle/zh-Hant.lproj/Localizable.strings +0 -0
  163. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Info.plist +0 -0
  164. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios-simulator.abi.json +2551 -1166
  165. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios-simulator.package.swiftinterface +60 -24
  166. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +60 -24
  167. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
  168. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/arm64-apple-ios-simulator.swiftinterface +60 -24
  169. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/x86_64-apple-ios-simulator.abi.json +2551 -1166
  170. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/x86_64-apple-ios-simulator.package.swiftinterface +60 -24
  171. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +60 -24
  172. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/x86_64-apple-ios-simulator.swiftdoc +0 -0
  173. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/Modules/BlinkIDUX.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +60 -24
  174. package/ios/Frameworks/BlinkIDUX.xcframework/ios-arm64_x86_64-simulator/BlinkIDUX.framework/_CodeSignature/CodeResources +1 -1
  175. package/ios/Serialization/BlinkIdDeserializationUtils.swift +492 -0
  176. package/ios/{BlinkIdSerializationUtilities.swift → Serialization/BlinkIdSerializationUtils.swift} +246 -256
  177. package/lib/module/NativeBlinkidReactNative.js.map +1 -1
  178. package/lib/module/blinkIdResult.js +1 -822
  179. package/lib/module/blinkIdResult.js.map +1 -1
  180. package/lib/module/blinkIdSettings.js +1 -496
  181. package/lib/module/blinkIdSettings.js.map +1 -1
  182. package/lib/module/index.js +81 -17
  183. package/lib/module/index.js.map +1 -1
  184. package/lib/module/types.js +694 -3406
  185. package/lib/module/types.js.map +1 -1
  186. package/lib/typescript/src/NativeBlinkidReactNative.d.ts +26 -5
  187. package/lib/typescript/src/NativeBlinkidReactNative.d.ts.map +1 -1
  188. package/lib/typescript/src/blinkIdResult.d.ts +12 -20
  189. package/lib/typescript/src/blinkIdResult.d.ts.map +1 -1
  190. package/lib/typescript/src/blinkIdSettings.d.ts +36 -297
  191. package/lib/typescript/src/blinkIdSettings.d.ts.map +1 -1
  192. package/lib/typescript/src/index.d.ts +38 -10
  193. package/lib/typescript/src/index.d.ts.map +1 -1
  194. package/lib/typescript/src/types.d.ts +960 -1182
  195. package/lib/typescript/src/types.d.ts.map +1 -1
  196. package/package.json +5 -4
  197. package/src/NativeBlinkidReactNative.ts +28 -5
  198. package/src/blinkIdResult.ts +13 -466
  199. package/src/blinkIdSettings.ts +53 -373
  200. package/src/index.tsx +208 -35
  201. package/src/types.ts +1116 -1442
  202. package/android/.gradle/8.9/checksums/checksums.lock +0 -0
  203. package/android/.gradle/8.9/checksums/md5-checksums.bin +0 -0
  204. package/android/.gradle/8.9/checksums/sha1-checksums.bin +0 -0
  205. package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
  206. package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
  207. package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
  208. package/android/.gradle/8.9/gc.properties +0 -0
  209. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  210. package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
  211. package/android/.gradle/vcs-1/gc.properties +0 -0
  212. package/android/.project +0 -28
  213. package/ios/BlinkIdDeserializationUtilities.swift +0 -374
  214. package/ios/Frameworks/BlinkID.xcframework/ios-arm64/BlinkID.framework/Headers/MBSampleBufferWrapper.h +0 -28
  215. package/ios/Frameworks/BlinkID.xcframework/ios-arm64_x86_64-simulator/BlinkID.framework/Headers/MBSampleBufferWrapper.h +0 -28
  216. package/lib/module/blinkIdUtilities.js +0 -21
  217. package/lib/module/blinkIdUtilities.js.map +0 -1
  218. package/lib/typescript/src/blinkIdUtilities.d.ts +0 -8
  219. package/lib/typescript/src/blinkIdUtilities.d.ts.map +0 -1
  220. package/src/android/.project +0 -28
  221. 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,355 +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.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
14
+ import com.microblink.blinkid.core.settings.DocumentNumberRedactionSettings
15
+ import com.microblink.blinkid.core.settings.RedactionSettings
16
+ import com.microblink.blinkid.core.settings.RedactionSettingsResolver
19
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
20
23
  import com.microblink.blinkid.ux.settings.BlinkIdUxSettings
21
- import com.microblink.blinkid.core.settings.DocumentAnonymizationSettings
22
24
  import com.microblink.blinkid.ux.settings.ClassFilter
23
- import com.microblink.core.utils.defaultResourceDownloadUrl
24
- 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
25
30
  import kotlin.time.Duration.Companion.milliseconds
31
+ import android.os.Parcelable
26
32
  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
33
  import org.json.JSONArray
38
34
  import org.json.JSONObject
39
35
 
40
36
  object BlinkIdDeserializationUtilities {
41
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
+
42
41
  fun deserializeBlinkIdSdkSettings(blinkIdSdkSettingsMap: JSONObject?): BlinkIdSdkSettings? {
43
- val licenseKey = blinkIdSdkSettingsMap?.get("licenseKey") as? String ?: return null
42
+ val licenseKey = blinkIdSdkSettingsMap?.optString("licenseKey")?.takeIf { it.isNotBlank() }
43
+ ?: return null
44
44
 
45
45
  return BlinkIdSdkSettings(
46
46
  licenseKey = licenseKey,
47
- licensee = if (blinkIdSdkSettingsMap.has("licensee")) blinkIdSdkSettingsMap.getString("licensee") else null,
47
+ licensee = blinkIdSdkSettingsMap.optString("licensee").takeIf { it.isNotBlank() },
48
48
  downloadResources = blinkIdSdkSettingsMap.optBoolean("downloadResources", true),
49
49
  resourceDownloadUrl = blinkIdSdkSettingsMap.optString(
50
50
  "resourceDownloadUrl",
51
- defaultResourceDownloadUrl
51
+ DEFAULT_RESOURCE_DOWNLOAD_URL
52
52
  ),
53
53
  resourceLocalFolder = blinkIdSdkSettingsMap.optString(
54
54
  "resourceLocalFolder",
55
- defaultResourcesLocalFolder
55
+ DEFAULT_RESOURCES_LOCAL_FOLDER
56
56
  ),
57
57
  resourceRequestTimeout = deserializeResourceRequestTimeout(
58
- blinkIdSdkSettingsMap.optJSONObject(
59
- "resourceRequestTimeout"
60
- )
58
+ blinkIdSdkSettingsMap.opt("resourceRequestTimeout")
61
59
  ),
62
- microblinkProxyUrl = if (blinkIdSdkSettingsMap.has("microblinkProxyURL")) blinkIdSdkSettingsMap.getString("microblinkProxyURL") else null,
60
+ microblinkProxyUrl = blinkIdSdkSettingsMap.optString("microblinkProxyURL")
61
+ .takeIf { it.isNotBlank() },
63
62
  )
64
63
  }
65
64
 
66
65
  fun deserializeBlinkIdSessionSettings(
67
- blinkIdSdkSessionSettingsMap: JSONObject?,
66
+ sessionSettingsMap: JSONObject?,
68
67
  isDirectApi: Boolean
69
68
  ): BlinkIdSessionSettings {
70
- if (blinkIdSdkSessionSettingsMap == null) return BlinkIdSessionSettings()
69
+ if (sessionSettingsMap == null) {
70
+ return BlinkIdSessionSettings(
71
+ inputImageSource = if (isDirectApi) InputImageSource.Photo else InputImageSource.Video
72
+ )
73
+ }
71
74
 
72
75
  return BlinkIdSessionSettings(
73
76
  inputImageSource = if (isDirectApi) InputImageSource.Photo else InputImageSource.Video,
74
- scanningMode = ScanningMode.entries[blinkIdSdkSessionSettingsMap.optInt("scanningMode", ScanningMode.Automatic.ordinal)],
75
- scanningSettings = deserializeScanningSettings(blinkIdSdkSessionSettingsMap.optJSONObject("scanningSettings")),
77
+ scanningMode = deserializeScanningMode(sessionSettingsMap.optString("scanningMode")),
78
+ scanningSettings = deserializeScanningSettings(
79
+ sessionSettingsMap.optJSONObject("scanningSettings")
80
+ ),
76
81
  )
77
82
  }
78
83
 
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")),
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
+ },
122
105
  )
123
106
  }
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)
107
+
108
+ fun deserializeCameraSettings(scanningUxSettingsMap: JSONObject?): CameraSettings {
109
+ if (scanningUxSettingsMap == null) return CameraSettings()
110
+ return CameraSettings(
111
+ lensFacing = deserializeLensFacingCamera(
112
+ scanningUxSettingsMap.optString("preferredCamera")
113
+ )
133
114
  )
134
115
  }
135
116
 
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
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)
142
140
  ),
143
- writeTimeoutMillis = resourceRequestTimeoutMap.optInt("writeTimeoutMilliseconds", 10000),
144
- readTimeoutMillis = resourceRequestTimeoutMap.optInt("readTimeoutMilliseconds", 10000)
145
141
  )
146
142
  }
147
143
 
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
144
+ fun deserializeClassFilter(
145
+ classFilterMap: JSONObject?,
146
+ classInfo: DocumentClassInfo
147
+ ): Boolean {
148
+ if (classFilterMap == null || classFilterMap.length() == 0) return true
155
149
 
156
- val documentFilterJson = documentRuleJson.optJSONObject("documentFilter")
157
- val fieldsJsonArray = documentRuleJson.optJSONArray("fields")
150
+ var includeClass = false
151
+ var excludeClass = true
158
152
 
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
- }
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
+ }
167
161
 
168
- val documentFilter = documentFilterJson?.let { deserializeDocumentFilter(it) }
169
- documentFilter?.let {
170
- documentRulesList.add(DocumentRules(documentFilter, fields))
171
- }
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)
172
167
  }
173
168
  }
174
- return documentRulesList
169
+
170
+ return includeClass && excludeClass
175
171
  }
176
172
 
173
+ fun resolveRedactionSettings(
174
+ redactionResolverMap: JSONObject?,
175
+ classInfo: DocumentClassInfo
176
+ ): RedactionSettings? {
177
+ if (redactionResolverMap == null || redactionResolverMap.length() == 0) return null
177
178
 
178
- private fun deserializeDetailedFieldType(detailedFieldTypeMap: JSONObject?): DetailedFieldType? {
179
- val fieldTypeName = detailedFieldTypeMap?.optString("fieldType")
180
- val alphabetTypeName = detailedFieldTypeMap?.optString("alphabetType")
179
+ val documentRedactionList =
180
+ redactionResolverMap.optJSONArray("documentRedactionList") ?: return null
181
181
 
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
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
+ }
189
187
  }
188
+ return null
190
189
  }
191
190
 
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()
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
209
197
  }
210
198
  }
211
199
 
212
- private fun deserializeCustomAnonymizationSettings(
213
- customAnonymizationSettingsMapArray: JSONArray?
214
- ): List<DocumentAnonymizationSettings> {
215
- if (customAnonymizationSettingsMapArray == null) return emptyList()
216
-
217
- val customAnonymizationList = mutableListOf<DocumentAnonymizationSettings>()
200
+ private fun deserializeScanningSettings(scanningSettingsMap: JSONObject?): ScanningSettings {
201
+ if (scanningSettingsMap == null) return ScanningSettings()
218
202
 
219
- for (i in 0 until customAnonymizationSettingsMapArray.length()) {
220
- 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
+ }
221
217
 
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
- }
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
+ }
232
251
 
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
- }
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
+ }
246
268
 
247
- return customAnonymizationList
269
+ private fun deserializeMrzModule(moduleMap: JSONObject): MrzModuleSettings {
270
+ return MrzModuleSettings(
271
+ presenceMandatory = moduleMap.optBoolean("presenceMandatory", false)
272
+ )
248
273
  }
249
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
+ }
250
290
 
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()
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(),
262
297
  )
263
298
  }
264
299
 
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
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
+ }
319
+ }
320
+
321
+ private fun deserializeScanningMode(value: String?): ScanningMode {
322
+ return when (value?.lowercase()) {
323
+ "single" -> ScanningMode.Single
324
+ else -> ScanningMode.Automatic
325
+ }
276
326
  }
277
327
 
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
+ }
335
+ }
278
336
 
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
- )
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
+ }
292
344
  }
293
- fun deserializeCameraSettings(blinkidScanningUxSettingsMap: JSONObject?): CameraSettings {
294
- if (blinkidScanningUxSettingsMap == null) return CameraSettings()
295
- return CameraSettings(lensFacing = deserializeLensFacingCamera(blinkidScanningUxSettingsMap.optString("preferredCamera")))
345
+
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
+ }
296
352
  }
297
353
 
298
- fun deserializeLensFacingCamera(lens: String?): CameraLensFacing {
354
+ private fun deserializeLensFacingCamera(lens: String?): CameraLensFacing {
299
355
  return when (lens?.lowercase()) {
300
356
  "front" -> CameraLensFacing.LensFacingFront
301
- "back" -> CameraLensFacing.LensFacingBack
302
357
  else -> CameraLensFacing.LensFacingBack
303
358
  }
304
359
  }
305
360
 
306
- fun deserializeClassFilter(
307
- classFilterMap: JSONObject?,
361
+ private fun shouldUseRedactionSettings(
362
+ redactionMap: JSONObject,
308
363
  classInfo: DocumentClassInfo
309
364
  ): 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)
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
+ }
319
372
  }
320
- } else {
321
- includeClass = true
373
+ return false
322
374
  }
323
375
 
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
- }
376
+ if (redactionMap.has("documentFilter")) {
377
+ return matchClassFilter(redactionMap.optJSONObject("documentFilter"), classInfo)
330
378
  }
331
379
 
332
- return includeClass && excludeClass
380
+ return true
333
381
  }
334
382
 
335
383
  private fun matchClassFilter(
336
384
  filteredClass: JSONObject?,
337
385
  classInfo: DocumentClassInfo
338
386
  ): Boolean {
339
- val country = filteredClass?.optString("country")
340
- val region = filteredClass?.optString("region")
341
- val documentType = filteredClass?.optString("documentType")
387
+ if (filteredClass == null) return true
342
388
 
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
- }
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() }
347
392
 
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
- }
393
+ return (country == null || parseCountry(country) == classInfo.country) &&
394
+ (region == null || parseRegion(region) == classInfo.region) &&
395
+ (documentType == null || parseDocumentType(documentType) == classInfo.type)
355
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) }
356
406
  }
357
407
 
358
408
  @Parcelize
359
409
  private class CustomClassFilter(
360
- private val classFilterMap: @RawValue String
410
+ private val classFilterMap: String
361
411
  ) : ClassFilter, Parcelable {
362
-
363
412
  override fun classAllowed(documentClass: DocumentClassInfo): Boolean {
364
413
  return BlinkIdDeserializationUtilities.deserializeClassFilter(
365
414
  JSONObject(classFilterMap),
@@ -367,3 +416,17 @@ private class CustomClassFilter(
367
416
  )
368
417
  }
369
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
+ }