@myazahq/kyc-sdk-react-native 2.0.1 → 2.1.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 (283) hide show
  1. package/README.md +111 -8
  2. package/android/build.gradle +6 -0
  3. package/android/src/main/AndroidManifest.xml +14 -4
  4. package/android/src/main/java/com/margelo/nitro/myazakyc/HybridMyazaEmrtd.kt +358 -0
  5. package/android/src/main/java/com/margelo/nitro/myazakyc/HybridMyazaFaceDetector.kt +88 -1
  6. package/android/src/main/java/com/margelo/nitro/myazakyc/HybridMyazaRectDetector.kt +34 -0
  7. package/android/src/main/java/com/margelo/nitro/myazakyc/HybridMyazaTextRecognizer.kt +118 -0
  8. package/android/src/main/java/com/margelo/nitro/myazakyc/Jp2Decoder.kt +117 -0
  9. package/app.plugin.js +102 -13
  10. package/ios/HybridMyazaEmrtd.swift +447 -0
  11. package/ios/HybridMyazaFaceDetector.swift +104 -2
  12. package/ios/HybridMyazaRectDetector.swift +103 -0
  13. package/ios/HybridMyazaTextRecognizer.swift +111 -0
  14. package/nitrogen/generated/.gitattributes +1 -0
  15. package/nitrogen/generated/android/KycSdkReactNative+autolinking.cmake +87 -0
  16. package/nitrogen/generated/android/KycSdkReactNative+autolinking.gradle +27 -0
  17. package/nitrogen/generated/android/KycSdkReactNativeOnLoad.cpp +102 -0
  18. package/nitrogen/generated/android/KycSdkReactNativeOnLoad.hpp +34 -0
  19. package/nitrogen/generated/android/c++/JDetectedRect.hpp +81 -0
  20. package/nitrogen/generated/android/c++/JEmrtdApduResponse.hpp +61 -0
  21. package/nitrogen/generated/android/c++/JEmrtdTagInfo.hpp +61 -0
  22. package/nitrogen/generated/android/c++/JFaceResult.hpp +113 -0
  23. package/nitrogen/generated/android/c++/JHybridMyazaEmrtdSpec.cpp +176 -0
  24. package/nitrogen/generated/android/c++/JHybridMyazaEmrtdSpec.hpp +75 -0
  25. package/nitrogen/generated/android/c++/JHybridMyazaFaceDetectorSpec.cpp +60 -0
  26. package/nitrogen/generated/android/c++/JHybridMyazaFaceDetectorSpec.hpp +63 -0
  27. package/nitrogen/generated/android/c++/JHybridMyazaRectDetectorSpec.cpp +60 -0
  28. package/nitrogen/generated/android/c++/JHybridMyazaRectDetectorSpec.hpp +63 -0
  29. package/nitrogen/generated/android/c++/JHybridMyazaTextRecognizerSpec.cpp +80 -0
  30. package/nitrogen/generated/android/c++/JHybridMyazaTextRecognizerSpec.hpp +64 -0
  31. package/nitrogen/generated/android/c++/JTextResult.hpp +76 -0
  32. package/nitrogen/generated/android/kotlin/com/margelo/nitro/myazakyc/DetectedRect.kt +81 -0
  33. package/nitrogen/generated/android/kotlin/com/margelo/nitro/myazakyc/EmrtdApduResponse.kt +56 -0
  34. package/nitrogen/generated/android/kotlin/com/margelo/nitro/myazakyc/EmrtdTagInfo.kt +56 -0
  35. package/nitrogen/generated/android/kotlin/com/margelo/nitro/myazakyc/FaceResult.kt +121 -0
  36. package/nitrogen/generated/android/kotlin/com/margelo/nitro/myazakyc/HybridMyazaEmrtdSpec.kt +103 -0
  37. package/nitrogen/generated/android/kotlin/com/margelo/nitro/myazakyc/HybridMyazaFaceDetectorSpec.kt +55 -0
  38. package/nitrogen/generated/android/kotlin/com/margelo/nitro/myazakyc/HybridMyazaRectDetectorSpec.kt +55 -0
  39. package/nitrogen/generated/android/kotlin/com/margelo/nitro/myazakyc/HybridMyazaTextRecognizerSpec.kt +60 -0
  40. package/nitrogen/generated/android/kotlin/com/margelo/nitro/myazakyc/KycSdkReactNativeOnLoad.kt +35 -0
  41. package/nitrogen/generated/android/kotlin/com/margelo/nitro/myazakyc/TextResult.kt +51 -0
  42. package/nitrogen/generated/ios/KycSdkReactNative+autolinking.rb +62 -0
  43. package/nitrogen/generated/ios/KycSdkReactNative-Swift-Cxx-Bridge.cpp +143 -0
  44. package/nitrogen/generated/ios/KycSdkReactNative-Swift-Cxx-Bridge.hpp +423 -0
  45. package/nitrogen/generated/ios/KycSdkReactNative-Swift-Cxx-Umbrella.hpp +81 -0
  46. package/nitrogen/generated/ios/KycSdkReactNativeAutolinking.mm +57 -0
  47. package/nitrogen/generated/ios/KycSdkReactNativeAutolinking.swift +62 -0
  48. package/nitrogen/generated/ios/c++/HybridMyazaEmrtdSpecSwift.cpp +11 -0
  49. package/nitrogen/generated/ios/c++/HybridMyazaEmrtdSpecSwift.hpp +184 -0
  50. package/nitrogen/generated/ios/c++/HybridMyazaFaceDetectorSpecSwift.cpp +11 -0
  51. package/nitrogen/generated/ios/c++/HybridMyazaFaceDetectorSpecSwift.hpp +87 -0
  52. package/nitrogen/generated/ios/c++/HybridMyazaRectDetectorSpecSwift.cpp +11 -0
  53. package/nitrogen/generated/ios/c++/HybridMyazaRectDetectorSpecSwift.hpp +87 -0
  54. package/nitrogen/generated/ios/c++/HybridMyazaTextRecognizerSpecSwift.cpp +11 -0
  55. package/nitrogen/generated/ios/c++/HybridMyazaTextRecognizerSpecSwift.hpp +98 -0
  56. package/nitrogen/generated/ios/swift/DetectedRect.swift +59 -0
  57. package/nitrogen/generated/ios/swift/EmrtdApduResponse.swift +34 -0
  58. package/nitrogen/generated/ios/swift/EmrtdTagInfo.swift +34 -0
  59. package/nitrogen/generated/ios/swift/FaceResult.swift +99 -0
  60. package/nitrogen/generated/ios/swift/Func_void.swift +46 -0
  61. package/nitrogen/generated/ios/swift/Func_void_EmrtdApduResponse.swift +46 -0
  62. package/nitrogen/generated/ios/swift/Func_void_EmrtdTagInfo.swift +46 -0
  63. package/nitrogen/generated/ios/swift/Func_void_TextResult.swift +46 -0
  64. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +46 -0
  65. package/nitrogen/generated/ios/swift/Func_void_std__string.swift +46 -0
  66. package/nitrogen/generated/ios/swift/HybridMyazaEmrtdSpec.swift +67 -0
  67. package/nitrogen/generated/ios/swift/HybridMyazaEmrtdSpec_cxx.swift +317 -0
  68. package/nitrogen/generated/ios/swift/HybridMyazaFaceDetectorSpec.swift +56 -0
  69. package/nitrogen/generated/ios/swift/HybridMyazaFaceDetectorSpec_cxx.swift +143 -0
  70. package/nitrogen/generated/ios/swift/HybridMyazaRectDetectorSpec.swift +56 -0
  71. package/nitrogen/generated/ios/swift/HybridMyazaRectDetectorSpec_cxx.swift +143 -0
  72. package/nitrogen/generated/ios/swift/HybridMyazaTextRecognizerSpec.swift +57 -0
  73. package/nitrogen/generated/ios/swift/HybridMyazaTextRecognizerSpec_cxx.swift +162 -0
  74. package/nitrogen/generated/ios/swift/TextResult.swift +35 -0
  75. package/nitrogen/generated/shared/c++/DetectedRect.hpp +107 -0
  76. package/nitrogen/generated/shared/c++/EmrtdApduResponse.hpp +87 -0
  77. package/nitrogen/generated/shared/c++/EmrtdTagInfo.hpp +87 -0
  78. package/nitrogen/generated/shared/c++/FaceResult.hpp +139 -0
  79. package/nitrogen/generated/shared/c++/HybridMyazaEmrtdSpec.cpp +33 -0
  80. package/nitrogen/generated/shared/c++/HybridMyazaEmrtdSpec.hpp +80 -0
  81. package/nitrogen/generated/shared/c++/HybridMyazaFaceDetectorSpec.cpp +21 -0
  82. package/nitrogen/generated/shared/c++/HybridMyazaFaceDetectorSpec.hpp +67 -0
  83. package/nitrogen/generated/shared/c++/HybridMyazaRectDetectorSpec.cpp +21 -0
  84. package/nitrogen/generated/shared/c++/HybridMyazaRectDetectorSpec.hpp +67 -0
  85. package/nitrogen/generated/shared/c++/HybridMyazaTextRecognizerSpec.cpp +22 -0
  86. package/nitrogen/generated/shared/c++/HybridMyazaTextRecognizerSpec.hpp +70 -0
  87. package/nitrogen/generated/shared/c++/TextResult.hpp +84 -0
  88. package/package.json +16 -4
  89. package/src/MyazaKYC.tsx +115 -22
  90. package/src/capture/documentIdentity.ts +153 -0
  91. package/src/capture/documentSignals.ts +177 -0
  92. package/src/capture/documentTextGate.ts +171 -0
  93. package/src/capture/hints.ts +57 -0
  94. package/src/capture/index.ts +24 -0
  95. package/src/capture/rectDetector.ts +84 -0
  96. package/src/capture/rectGate.ts +91 -0
  97. package/src/capture/useAutoCapture.ts +198 -0
  98. package/src/components/CameraPermissionView.tsx +39 -3
  99. package/src/components/CameraViewfinder.tsx +226 -70
  100. package/src/components/ContactCodeEntry.tsx +139 -0
  101. package/src/components/CountryField.tsx +87 -0
  102. package/src/components/CountryFlag.tsx +15 -15
  103. package/src/components/DialCodePicker.tsx +186 -0
  104. package/src/components/DocumentCropper.tsx +1 -1
  105. package/src/components/DocumentReview.tsx +142 -0
  106. package/src/components/DocumentReviewSide.tsx +135 -0
  107. package/src/components/DocumentReviewZoom.tsx +119 -0
  108. package/src/components/ExpiryCountdown.tsx +52 -0
  109. package/src/components/FlashOverlay.tsx +156 -0
  110. package/src/components/Icon.tsx +67 -1
  111. package/src/components/KycFlow.tsx +66 -94
  112. package/src/components/KycSheet.tsx +148 -18
  113. package/src/components/MediaSourceSheet.tsx +163 -0
  114. package/src/components/MyazaButton.tsx +14 -2
  115. package/src/components/MyazaDateField.tsx +240 -0
  116. package/src/components/MyazaInput.tsx +73 -26
  117. package/src/components/MyazaSelect.tsx +283 -0
  118. package/src/components/MyazaWordmark.tsx +33 -0
  119. package/src/components/OptionRow.tsx +132 -0
  120. package/src/components/PhoneNumberInput.tsx +149 -0
  121. package/src/components/PoweredBy.tsx +89 -0
  122. package/src/components/ReadyPrimer.tsx +149 -0
  123. package/src/components/StepView.tsx +91 -0
  124. package/src/components/Typography.tsx +18 -3
  125. package/src/components/VerifiedNotice.tsx +38 -0
  126. package/src/components/WhatsAppIcon.tsx +29 -0
  127. package/src/components/WorkflowGate.tsx +128 -0
  128. package/src/components/brand-font.ts +113 -0
  129. package/src/components/flashHoleGeometry.ts +35 -0
  130. package/src/components/flow/FatalConfigError.tsx +56 -0
  131. package/src/components/fonts.ts +2 -19
  132. package/src/components/readyPrimerContent.ts +52 -0
  133. package/src/components/runtime.tsx +38 -43
  134. package/src/components/stepHeaderMeta.tsx +87 -0
  135. package/src/components/theme-provider.tsx +89 -0
  136. package/src/components/useWorkflowMount.ts +116 -0
  137. package/src/components/viewfinder/CardGuide.tsx +60 -0
  138. package/src/components/viewfinder/DocumentGhost.tsx +149 -0
  139. package/src/components/viewfinder/ImmersiveBottomBar.tsx +172 -0
  140. package/src/components/viewfinder/ImmersiveControls.tsx +127 -0
  141. package/src/components/viewfinder/ImmersiveGuide.tsx +174 -0
  142. package/src/components/viewfinder/ImmersiveOverlay.tsx +79 -0
  143. package/src/components/viewfinder/ViewfinderControls.tsx +154 -0
  144. package/src/config/brand.ts +97 -0
  145. package/src/config/business.ts +179 -0
  146. package/src/config/businessSteps.ts +105 -0
  147. package/src/config/contact.ts +159 -0
  148. package/src/config/countryNames.g.ts +254 -0
  149. package/src/config/currencyFlags.ts +144 -0
  150. package/src/config/font-resolve.ts +78 -0
  151. package/src/config/idTypes.ts +98 -1
  152. package/src/config/keyPeople.ts +152 -0
  153. package/src/config/phone.ts +39 -0
  154. package/src/config/proofOfAddress.ts +75 -0
  155. package/src/config/questionnaire.ts +153 -0
  156. package/src/config/regions.ts +118 -0
  157. package/src/config/registrationHint.ts +87 -0
  158. package/src/config/stepOrder.ts +118 -0
  159. package/src/config/theme.ts +38 -2
  160. package/src/config/workflowMerge.ts +124 -0
  161. package/src/emrtd/bac.ts +128 -0
  162. package/src/emrtd/bytes.ts +127 -0
  163. package/src/emrtd/crypto.ts +163 -0
  164. package/src/emrtd/der.ts +192 -0
  165. package/src/emrtd/dg2.ts +111 -0
  166. package/src/emrtd/files.ts +215 -0
  167. package/src/emrtd/index.ts +30 -0
  168. package/src/emrtd/mrzKey.ts +54 -0
  169. package/src/emrtd/native.ts +79 -0
  170. package/src/emrtd/optionalRead.ts +42 -0
  171. package/src/emrtd/read.ts +224 -0
  172. package/src/emrtd/retry.ts +98 -0
  173. package/src/emrtd/secureMessaging.ts +178 -0
  174. package/src/emrtd/session.ts +200 -0
  175. package/src/emrtd/stages.ts +122 -0
  176. package/src/index.ts +110 -0
  177. package/src/lib/calendar.ts +71 -0
  178. package/src/lib/use-keyboard-inset.ts +34 -0
  179. package/src/liveness/challengeManager.ts +27 -1
  180. package/src/liveness/faceContinuity.ts +153 -0
  181. package/src/liveness/flashDetector.ts +145 -0
  182. package/src/liveness/flashReadyGate.ts +106 -0
  183. package/src/liveness/flashRunner.ts +118 -0
  184. package/src/liveness/integritySignals.ts +60 -0
  185. package/src/liveness/livenessState.ts +139 -0
  186. package/src/liveness/speech.ts +19 -1
  187. package/src/liveness/types.ts +48 -1
  188. package/src/liveness/useFlashPhase.ts +78 -0
  189. package/src/liveness/useLiveness.ts +260 -75
  190. package/src/liveness/visionCameraFaceDetector.ts +14 -0
  191. package/src/mrz/extract.ts +101 -0
  192. package/src/mrz/parse.ts +178 -0
  193. package/src/mrz/textRecognizer.ts +149 -0
  194. package/src/screens/ApplicantRoleStep.tsx +331 -0
  195. package/src/screens/BusinessDetailsStep.tsx +212 -0
  196. package/src/screens/BusinessDocumentSlot.tsx +167 -0
  197. package/src/screens/BusinessDocumentsStep.tsx +213 -0
  198. package/src/screens/BusinessKeyPeopleStep.tsx +151 -0
  199. package/src/screens/BusinessKeyPersonRow.tsx +170 -0
  200. package/src/screens/CompanyInfoFields.tsx +83 -0
  201. package/src/screens/ConsentStep.tsx +68 -68
  202. package/src/screens/ContactChannelChoice.tsx +133 -0
  203. package/src/screens/ContactCodeStep.tsx +130 -0
  204. package/src/screens/ContactDestinationField.tsx +70 -0
  205. package/src/screens/ContactFooterNote.tsx +34 -0
  206. package/src/screens/ContactVerificationStep.tsx +199 -0
  207. package/src/screens/ContactVerifiedPanel.tsx +36 -0
  208. package/src/screens/CountrySelectStep.tsx +210 -0
  209. package/src/screens/DocumentCaptureStep.tsx +190 -145
  210. package/src/screens/IdInputStep.tsx +19 -9
  211. package/src/screens/IdTypeStep.tsx +74 -33
  212. package/src/screens/KeyPeopleInviteLinks.tsx +239 -0
  213. package/src/screens/LivenessStep.tsx +181 -267
  214. package/src/screens/MrzScanView.tsx +173 -0
  215. package/src/screens/NfcStep.tsx +290 -0
  216. package/src/screens/ProofOfAddressStep.tsx +238 -0
  217. package/src/screens/QuestionnaireField.tsx +219 -0
  218. package/src/screens/QuestionnaireMoneyField.tsx +134 -0
  219. package/src/screens/QuestionnaireStep.tsx +76 -0
  220. package/src/screens/SubmittedStep.tsx +5 -0
  221. package/src/screens/consent/model.ts +109 -0
  222. package/src/screens/document/CameraPhase.tsx +150 -0
  223. package/src/screens/document/RequiredPill.tsx +60 -0
  224. package/src/screens/liveness/LightingBanner.tsx +50 -0
  225. package/src/screens/liveness/LivenessOutcome.tsx +109 -0
  226. package/src/screens/liveness/ProgressDots.tsx +67 -0
  227. package/src/screens/liveness/SelfiePreview.tsx +39 -0
  228. package/src/screens/liveness/constants.ts +31 -0
  229. package/src/screens/liveness/index.ts +8 -0
  230. package/src/screens/liveness/resolveGuidance.ts +27 -0
  231. package/src/screens/liveness/useSelfieUpload.ts +107 -0
  232. package/src/screens/nfc/NfcMrzPrompt.tsx +40 -0
  233. package/src/screens/nfc/NfcReadBody.tsx +63 -0
  234. package/src/screens/nfc/NfcReadProgress.tsx +96 -0
  235. package/src/screens/nfc/NfcScanIllustration.tsx +244 -0
  236. package/src/screens/nfc/NfcScannedSummary.tsx +74 -0
  237. package/src/screens/nfc/NfcSuccessPanel.tsx +162 -0
  238. package/src/screens/nfc/availability.ts +73 -0
  239. package/src/screens/nfc/readErrorMessage.ts +93 -0
  240. package/src/screens/nfc/useChipPortrait.ts +58 -0
  241. package/src/screens/nfc/useNfcAvailability.ts +82 -0
  242. package/src/screens/useFlashHole.ts +105 -0
  243. package/src/screens/useFlashSequence.ts +96 -0
  244. package/src/screens/usePoaAttach.ts +121 -0
  245. package/src/services/api-types.ts +164 -0
  246. package/src/services/api-verify-types.ts +99 -0
  247. package/src/services/api.ts +72 -102
  248. package/src/services/cardCrop.ts +25 -10
  249. package/src/services/contactErrors.ts +43 -0
  250. package/src/services/deviceMetadata.ts +1 -1
  251. package/src/services/documentPicker.ts +20 -0
  252. package/src/services/fingerprint-sources.ts +129 -0
  253. package/src/services/fingerprint.ts +101 -0
  254. package/src/services/haptics.ts +38 -0
  255. package/src/services/mediaCompress.ts +7 -2
  256. package/src/services/resolveUrl.ts +3 -2
  257. package/src/services/validators.ts +3 -0
  258. package/src/services/workflowGate.ts +138 -0
  259. package/src/specs/MyazaEmrtd.nitro.ts +114 -0
  260. package/src/specs/MyazaFaceDetector.nitro.ts +10 -0
  261. package/src/specs/MyazaRectDetector.nitro.ts +50 -0
  262. package/src/specs/MyazaTextRecognizer.nitro.ts +48 -0
  263. package/src/store/derive.ts +225 -0
  264. package/src/store/kycStore.ts +250 -149
  265. package/src/store/state.ts +253 -0
  266. package/src/store/submit.ts +101 -0
  267. package/src/store/submitApplicant.ts +81 -0
  268. package/src/types/appearance.ts +113 -0
  269. package/src/types/business.ts +131 -0
  270. package/src/types/config.ts +150 -119
  271. package/src/types/id-types.ts +57 -0
  272. package/src/types/verification.ts +5 -0
  273. package/src/types/workflow.ts +141 -0
  274. package/src/utils/amountFormat.ts +73 -0
  275. package/src/utils/tokens.ts +4 -2
  276. package/src/__tests__/cardCrop.test.ts +0 -39
  277. package/src/__tests__/deviceMetadata.test.ts +0 -34
  278. package/src/__tests__/errors.test.ts +0 -34
  279. package/src/__tests__/flow.test.ts +0 -61
  280. package/src/__tests__/gestureDetector.test.ts +0 -37
  281. package/src/__tests__/liveness.test.ts +0 -112
  282. package/src/__tests__/resolveUrl.test.ts +0 -64
  283. package/src/__tests__/validators.test.ts +0 -38
@@ -0,0 +1,111 @@
1
+ import Foundation
2
+ import Vision
3
+ import CoreImage
4
+ import CoreMedia
5
+ import CoreVideo
6
+ import VisionCamera
7
+ import NitroModules
8
+
9
+ // ---------------------------------------------------------------------------
10
+ // HybridMyazaTextRecognizer — the iOS half of on-device text recognition,
11
+ // implementing the nitrogen-generated `HybridMyazaTextRecognizerSpec` from
12
+ // src/specs/MyazaTextRecognizer.nitro.ts. The Android half is
13
+ // HybridMyazaTextRecognizer.kt (Google ML Kit).
14
+ //
15
+ // Used for reading the MRZ off a passport or ID card. Returns LINES only —
16
+ // parsing lives in TypeScript, where it is testable against the ICAO specimen
17
+ // without a device, and where the check digits do the actual deciding.
18
+ //
19
+ // Two choices matter for MRZ specifically:
20
+ //
21
+ // • `.accurate` recognition, not `.fast`. OCR-B at a glancing angle is
22
+ // exactly where fast mode invents characters, and one wrong character
23
+ // fails a check digit — costing a frame at best, and a wrong document
24
+ // number at worst.
25
+ // • Language correction OFF. It is trained on prose and would happily
26
+ // "correct" a passport's filler runs and surname into English words.
27
+ // ---------------------------------------------------------------------------
28
+
29
+ final class HybridMyazaTextRecognizer: HybridMyazaTextRecognizerSpec {
30
+
31
+ func recognizeText(frame: any HybridFrameSpec, bottomFraction: Double) throws -> TextResult {
32
+ guard
33
+ let nativeFrame = frame as? NativeFrame,
34
+ let sampleBuffer = nativeFrame.sampleBuffer,
35
+ let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
36
+ else {
37
+ return TextResult(lines: [])
38
+ }
39
+
40
+ let request = VNRecognizeTextRequest()
41
+ request.recognitionLevel = .accurate
42
+ request.usesLanguageCorrection = false
43
+ // The MRZ alphabet. Vision has no charset restriction, but naming Latin
44
+ // keeps it from trying scripts the document does not use.
45
+ request.recognitionLanguages = ["en-US"]
46
+
47
+ // Restrict recognition to the bottom slice, where the MRZ sits. Vision's
48
+ // regionOfInterest is in normalised, BOTTOM-LEFT-origin coordinates, so the
49
+ // bottom fraction of the image starts at y = 0.
50
+ let fraction = min(1.0, max(0.05, bottomFraction))
51
+ if fraction < 1.0 {
52
+ request.regionOfInterest = CGRect(x: 0, y: 0, width: 1, height: fraction)
53
+ }
54
+
55
+ // The camera delivers the buffer rotated 90° relative to how the document
56
+ // is held; `.right` puts the text upright for the recogniser. Reading it
57
+ // sideways does not fail loudly — it returns confident nonsense.
58
+ let handler = VNImageRequestHandler(
59
+ cvPixelBuffer: pixelBuffer, orientation: .right, options: [:]
60
+ )
61
+
62
+ do {
63
+ try handler.perform([request])
64
+ } catch {
65
+ return TextResult(lines: [])
66
+ }
67
+
68
+ guard let observations = request.results else { return TextResult(lines: []) }
69
+
70
+ // Top to bottom. Vision's y grows upward, so descending y IS reading order,
71
+ // and the MRZ's two lines have to arrive adjacent and in order for the
72
+ // extractor's grouping to work.
73
+ let ordered = observations.sorted { $0.boundingBox.midY > $1.boundingBox.midY }
74
+ let lines = ordered.compactMap { $0.topCandidates(1).first?.string }
75
+
76
+ return TextResult(lines: lines)
77
+ }
78
+
79
+ func recognizeTextInImage(uri: String, bottomFraction: Double) throws -> Promise<TextResult> {
80
+ Promise.async {
81
+ // A local file path, with or without the scheme — both forms reach here
82
+ // depending on which picker produced it.
83
+ let path = uri.hasPrefix("file://") ? String(uri.dropFirst(7)) : uri
84
+ guard let image = CIImage(contentsOf: URL(fileURLWithPath: path)) else {
85
+ return TextResult(lines: [])
86
+ }
87
+
88
+ let request = VNRecognizeTextRequest()
89
+ request.recognitionLevel = .accurate
90
+ request.usesLanguageCorrection = false
91
+
92
+ let fraction = min(1.0, max(0.05, bottomFraction))
93
+ if fraction < 1.0 {
94
+ request.regionOfInterest = CGRect(x: 0, y: 0, width: 1, height: fraction)
95
+ }
96
+
97
+ // A still from the photo library or camera roll is already upright, so no
98
+ // orientation correction here — unlike the live frame, which arrives
99
+ // rotated by the camera pipeline.
100
+ let handler = VNImageRequestHandler(ciImage: image, options: [:])
101
+ do {
102
+ try handler.perform([request])
103
+ } catch {
104
+ return TextResult(lines: [])
105
+ }
106
+
107
+ let ordered = (request.results ?? []).sorted { $0.boundingBox.midY > $1.boundingBox.midY }
108
+ return TextResult(lines: ordered.compactMap { $0.topCandidates(1).first?.string })
109
+ }
110
+ }
111
+ }
@@ -0,0 +1 @@
1
+ ** linguist-generated=true
@@ -0,0 +1,87 @@
1
+ #
2
+ # KycSdkReactNative+autolinking.cmake
3
+ # This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ # https://github.com/mrousavy/nitro
5
+ # Copyright © Marc Rousavy @ Margelo
6
+ #
7
+
8
+ # This is a CMake file that adds all files generated by Nitrogen
9
+ # to the current CMake project.
10
+ #
11
+ # To use it, add this to your CMakeLists.txt:
12
+ # ```cmake
13
+ # include(${CMAKE_SOURCE_DIR}/../nitrogen/generated/android/KycSdkReactNative+autolinking.cmake)
14
+ # ```
15
+
16
+ # Define a flag to check if we are building properly
17
+ add_definitions(-DBUILDING_KYCSDKREACTNATIVE_WITH_GENERATED_CMAKE_PROJECT)
18
+
19
+ # Enable Raw Props parsing in react-native (for Nitro Views)
20
+ add_definitions(-DRN_SERIALIZABLE_STATE)
21
+
22
+ # Add all headers that were generated by Nitrogen
23
+ include_directories(
24
+ "../nitrogen/generated/shared/c++"
25
+ "../nitrogen/generated/android/c++"
26
+ "../nitrogen/generated/android/"
27
+ )
28
+
29
+ # Add all .cpp sources that were generated by Nitrogen
30
+ target_sources(
31
+ # CMake project name (Android C++ library name)
32
+ KycSdkReactNative PRIVATE
33
+ # Autolinking Setup
34
+ ../nitrogen/generated/android/KycSdkReactNativeOnLoad.cpp
35
+ # Shared Nitrogen C++ sources
36
+ ../nitrogen/generated/shared/c++/HybridMyazaEmrtdSpec.cpp
37
+ ../nitrogen/generated/shared/c++/HybridMyazaFaceDetectorSpec.cpp
38
+ ../nitrogen/generated/shared/c++/HybridMyazaRectDetectorSpec.cpp
39
+ ../nitrogen/generated/shared/c++/HybridMyazaTextRecognizerSpec.cpp
40
+ # Android-specific Nitrogen C++ sources
41
+ ../nitrogen/generated/android/c++/JHybridMyazaEmrtdSpec.cpp
42
+ ../nitrogen/generated/android/c++/JHybridMyazaFaceDetectorSpec.cpp
43
+ ../nitrogen/generated/android/c++/JHybridMyazaRectDetectorSpec.cpp
44
+ ../nitrogen/generated/android/c++/JHybridMyazaTextRecognizerSpec.cpp
45
+ )
46
+
47
+ # From node_modules/react-native/ReactAndroid/cmake-utils/folly-flags.cmake
48
+ # Used in node_modules/react-native/ReactAndroid/cmake-utils/ReactNative-application.cmake
49
+ target_compile_definitions(
50
+ KycSdkReactNative PRIVATE
51
+ -DFOLLY_NO_CONFIG=1
52
+ -DFOLLY_HAVE_CLOCK_GETTIME=1
53
+ -DFOLLY_USE_LIBCPP=1
54
+ -DFOLLY_CFG_NO_COROUTINES=1
55
+ -DFOLLY_MOBILE=1
56
+ -DFOLLY_HAVE_RECVMMSG=1
57
+ -DFOLLY_HAVE_PTHREAD=1
58
+ # Once we target android-23 above, we can comment
59
+ # the following line. NDK uses GNU style stderror_r() after API 23.
60
+ -DFOLLY_HAVE_XSI_STRERROR_R=1
61
+ )
62
+
63
+ # Add all libraries required by the generated specs
64
+ find_package(fbjni REQUIRED) # <-- Used for communication between Java <-> C++
65
+ find_package(ReactAndroid REQUIRED) # <-- Used to set up React Native bindings (e.g. CallInvoker/TurboModule)
66
+ find_package(react-native-nitro-modules REQUIRED) # <-- Used to create all HybridObjects and use the Nitro core library
67
+
68
+ # Link all libraries together
69
+ target_link_libraries(
70
+ KycSdkReactNative
71
+ fbjni::fbjni # <-- Facebook C++ JNI helpers
72
+ ReactAndroid::jsi # <-- RN: JSI
73
+ react-native-nitro-modules::NitroModules # <-- NitroModules Core :)
74
+ )
75
+
76
+ # Link react-native (different prefab between RN 0.75 and RN 0.76)
77
+ if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76)
78
+ target_link_libraries(
79
+ KycSdkReactNative
80
+ ReactAndroid::reactnative # <-- RN: Native Modules umbrella prefab
81
+ )
82
+ else()
83
+ target_link_libraries(
84
+ KycSdkReactNative
85
+ ReactAndroid::react_nativemodule_core # <-- RN: TurboModules Core
86
+ )
87
+ endif()
@@ -0,0 +1,27 @@
1
+ ///
2
+ /// KycSdkReactNative+autolinking.gradle
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ /// This is a Gradle file that adds all files generated by Nitrogen
9
+ /// to the current Gradle project.
10
+ ///
11
+ /// To use it, add this to your build.gradle:
12
+ /// ```gradle
13
+ /// apply from: '../nitrogen/generated/android/KycSdkReactNative+autolinking.gradle'
14
+ /// ```
15
+
16
+ logger.warn("[NitroModules] 🔥 KycSdkReactNative is boosted by nitro!")
17
+
18
+ android {
19
+ sourceSets {
20
+ main {
21
+ java.srcDirs += [
22
+ // Nitrogen files
23
+ "${project.projectDir}/../nitrogen/generated/android/kotlin"
24
+ ]
25
+ }
26
+ }
27
+ }
@@ -0,0 +1,102 @@
1
+ ///
2
+ /// KycSdkReactNativeOnLoad.cpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #ifndef BUILDING_KYCSDKREACTNATIVE_WITH_GENERATED_CMAKE_PROJECT
9
+ #error KycSdkReactNativeOnLoad.cpp is not being built with the autogenerated CMakeLists.txt project. Is a different CMakeLists.txt building this?
10
+ #endif
11
+
12
+ #include "KycSdkReactNativeOnLoad.hpp"
13
+
14
+ #include <jni.h>
15
+ #include <fbjni/fbjni.h>
16
+ #include <NitroModules/HybridObjectRegistry.hpp>
17
+
18
+ #include "JHybridMyazaEmrtdSpec.hpp"
19
+ #include "JHybridMyazaFaceDetectorSpec.hpp"
20
+ #include "JHybridMyazaRectDetectorSpec.hpp"
21
+ #include "JHybridMyazaTextRecognizerSpec.hpp"
22
+ #include <NitroModules/DefaultConstructableObject.hpp>
23
+
24
+ namespace margelo::nitro::myazakyc {
25
+
26
+ int initialize(JavaVM* vm) {
27
+ return facebook::jni::initialize(vm, []() {
28
+ ::margelo::nitro::myazakyc::registerAllNatives();
29
+ });
30
+ }
31
+
32
+ struct JHybridMyazaFaceDetectorSpecImpl: public jni::JavaClass<JHybridMyazaFaceDetectorSpecImpl, JHybridMyazaFaceDetectorSpec::JavaPart> {
33
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/myazakyc/HybridMyazaFaceDetector;";
34
+ static std::shared_ptr<JHybridMyazaFaceDetectorSpec> create() {
35
+ static const auto constructorFn = javaClassStatic()->getConstructor<JHybridMyazaFaceDetectorSpecImpl::javaobject()>();
36
+ jni::local_ref<JHybridMyazaFaceDetectorSpec::JavaPart> javaPart = javaClassStatic()->newObject(constructorFn);
37
+ return javaPart->getJHybridMyazaFaceDetectorSpec();
38
+ }
39
+ };
40
+ struct JHybridMyazaTextRecognizerSpecImpl: public jni::JavaClass<JHybridMyazaTextRecognizerSpecImpl, JHybridMyazaTextRecognizerSpec::JavaPart> {
41
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/myazakyc/HybridMyazaTextRecognizer;";
42
+ static std::shared_ptr<JHybridMyazaTextRecognizerSpec> create() {
43
+ static const auto constructorFn = javaClassStatic()->getConstructor<JHybridMyazaTextRecognizerSpecImpl::javaobject()>();
44
+ jni::local_ref<JHybridMyazaTextRecognizerSpec::JavaPart> javaPart = javaClassStatic()->newObject(constructorFn);
45
+ return javaPart->getJHybridMyazaTextRecognizerSpec();
46
+ }
47
+ };
48
+ struct JHybridMyazaEmrtdSpecImpl: public jni::JavaClass<JHybridMyazaEmrtdSpecImpl, JHybridMyazaEmrtdSpec::JavaPart> {
49
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/myazakyc/HybridMyazaEmrtd;";
50
+ static std::shared_ptr<JHybridMyazaEmrtdSpec> create() {
51
+ static const auto constructorFn = javaClassStatic()->getConstructor<JHybridMyazaEmrtdSpecImpl::javaobject()>();
52
+ jni::local_ref<JHybridMyazaEmrtdSpec::JavaPart> javaPart = javaClassStatic()->newObject(constructorFn);
53
+ return javaPart->getJHybridMyazaEmrtdSpec();
54
+ }
55
+ };
56
+ struct JHybridMyazaRectDetectorSpecImpl: public jni::JavaClass<JHybridMyazaRectDetectorSpecImpl, JHybridMyazaRectDetectorSpec::JavaPart> {
57
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/myazakyc/HybridMyazaRectDetector;";
58
+ static std::shared_ptr<JHybridMyazaRectDetectorSpec> create() {
59
+ static const auto constructorFn = javaClassStatic()->getConstructor<JHybridMyazaRectDetectorSpecImpl::javaobject()>();
60
+ jni::local_ref<JHybridMyazaRectDetectorSpec::JavaPart> javaPart = javaClassStatic()->newObject(constructorFn);
61
+ return javaPart->getJHybridMyazaRectDetectorSpec();
62
+ }
63
+ };
64
+
65
+ void registerAllNatives() {
66
+ using namespace margelo::nitro;
67
+ using namespace margelo::nitro::myazakyc;
68
+
69
+ // Register native JNI methods
70
+ margelo::nitro::myazakyc::JHybridMyazaEmrtdSpec::CxxPart::registerNatives();
71
+ margelo::nitro::myazakyc::JHybridMyazaFaceDetectorSpec::CxxPart::registerNatives();
72
+ margelo::nitro::myazakyc::JHybridMyazaRectDetectorSpec::CxxPart::registerNatives();
73
+ margelo::nitro::myazakyc::JHybridMyazaTextRecognizerSpec::CxxPart::registerNatives();
74
+
75
+ // Register Nitro Hybrid Objects
76
+ HybridObjectRegistry::registerHybridObjectConstructor(
77
+ "MyazaFaceDetector",
78
+ []() -> std::shared_ptr<HybridObject> {
79
+ return JHybridMyazaFaceDetectorSpecImpl::create();
80
+ }
81
+ );
82
+ HybridObjectRegistry::registerHybridObjectConstructor(
83
+ "MyazaTextRecognizer",
84
+ []() -> std::shared_ptr<HybridObject> {
85
+ return JHybridMyazaTextRecognizerSpecImpl::create();
86
+ }
87
+ );
88
+ HybridObjectRegistry::registerHybridObjectConstructor(
89
+ "MyazaEmrtd",
90
+ []() -> std::shared_ptr<HybridObject> {
91
+ return JHybridMyazaEmrtdSpecImpl::create();
92
+ }
93
+ );
94
+ HybridObjectRegistry::registerHybridObjectConstructor(
95
+ "MyazaRectDetector",
96
+ []() -> std::shared_ptr<HybridObject> {
97
+ return JHybridMyazaRectDetectorSpecImpl::create();
98
+ }
99
+ );
100
+ }
101
+
102
+ } // namespace margelo::nitro::myazakyc
@@ -0,0 +1,34 @@
1
+ ///
2
+ /// KycSdkReactNativeOnLoad.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #include <jni.h>
9
+ #include <functional>
10
+ #include <NitroModules/NitroDefines.hpp>
11
+
12
+ namespace margelo::nitro::myazakyc {
13
+
14
+ [[deprecated("Use registerNatives() instead.")]]
15
+ int initialize(JavaVM* vm);
16
+
17
+ /**
18
+ * Register the native (C++) part of KycSdkReactNative, and autolinks all Hybrid Objects.
19
+ * Call this in your `JNI_OnLoad` function (probably inside `cpp-adapter.cpp`),
20
+ * inside a `facebook::jni::initialize(vm, ...)` call.
21
+ * Example:
22
+ * ```cpp (cpp-adapter.cpp)
23
+ * JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) {
24
+ * return facebook::jni::initialize(vm, []() {
25
+ * // register all KycSdkReactNative HybridObjects
26
+ * margelo::nitro::myazakyc::registerNatives();
27
+ * // any other custom registrations go here.
28
+ * });
29
+ * }
30
+ * ```
31
+ */
32
+ void registerAllNatives();
33
+
34
+ } // namespace margelo::nitro::myazakyc
@@ -0,0 +1,81 @@
1
+ ///
2
+ /// JDetectedRect.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <fbjni/fbjni.h>
11
+ #include "DetectedRect.hpp"
12
+
13
+
14
+
15
+ namespace margelo::nitro::myazakyc {
16
+
17
+ using namespace facebook;
18
+
19
+ /**
20
+ * The C++ JNI bridge between the C++ struct "DetectedRect" and the the Kotlin data class "DetectedRect".
21
+ */
22
+ struct JDetectedRect final: public jni::JavaClass<JDetectedRect> {
23
+ public:
24
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/myazakyc/DetectedRect;";
25
+
26
+ public:
27
+ /**
28
+ * Convert this Java/Kotlin-based struct to the C++ struct DetectedRect by copying all values to C++.
29
+ */
30
+ [[maybe_unused]]
31
+ [[nodiscard]]
32
+ DetectedRect toCpp() const {
33
+ static const auto clazz = javaClassStatic();
34
+ static const auto fieldFound = clazz->getField<jboolean>("found");
35
+ jboolean found = this->getFieldValue(fieldFound);
36
+ static const auto fieldX = clazz->getField<double>("x");
37
+ double x = this->getFieldValue(fieldX);
38
+ static const auto fieldY = clazz->getField<double>("y");
39
+ double y = this->getFieldValue(fieldY);
40
+ static const auto fieldWidth = clazz->getField<double>("width");
41
+ double width = this->getFieldValue(fieldWidth);
42
+ static const auto fieldHeight = clazz->getField<double>("height");
43
+ double height = this->getFieldValue(fieldHeight);
44
+ static const auto fieldAspect = clazz->getField<double>("aspect");
45
+ double aspect = this->getFieldValue(fieldAspect);
46
+ static const auto fieldConfidence = clazz->getField<double>("confidence");
47
+ double confidence = this->getFieldValue(fieldConfidence);
48
+ return DetectedRect(
49
+ static_cast<bool>(found),
50
+ x,
51
+ y,
52
+ width,
53
+ height,
54
+ aspect,
55
+ confidence
56
+ );
57
+ }
58
+
59
+ public:
60
+ /**
61
+ * Create a Java/Kotlin-based struct by copying all values from the given C++ struct to Java.
62
+ */
63
+ [[maybe_unused]]
64
+ static jni::local_ref<JDetectedRect::javaobject> fromCpp(const DetectedRect& value) {
65
+ using JSignature = JDetectedRect(jboolean, double, double, double, double, double, double);
66
+ static const auto clazz = javaClassStatic();
67
+ static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
68
+ return create(
69
+ clazz,
70
+ value.found,
71
+ value.x,
72
+ value.y,
73
+ value.width,
74
+ value.height,
75
+ value.aspect,
76
+ value.confidence
77
+ );
78
+ }
79
+ };
80
+
81
+ } // namespace margelo::nitro::myazakyc
@@ -0,0 +1,61 @@
1
+ ///
2
+ /// JEmrtdApduResponse.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <fbjni/fbjni.h>
11
+ #include "EmrtdApduResponse.hpp"
12
+
13
+ #include <string>
14
+
15
+ namespace margelo::nitro::myazakyc {
16
+
17
+ using namespace facebook;
18
+
19
+ /**
20
+ * The C++ JNI bridge between the C++ struct "EmrtdApduResponse" and the the Kotlin data class "EmrtdApduResponse".
21
+ */
22
+ struct JEmrtdApduResponse final: public jni::JavaClass<JEmrtdApduResponse> {
23
+ public:
24
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/myazakyc/EmrtdApduResponse;";
25
+
26
+ public:
27
+ /**
28
+ * Convert this Java/Kotlin-based struct to the C++ struct EmrtdApduResponse by copying all values to C++.
29
+ */
30
+ [[maybe_unused]]
31
+ [[nodiscard]]
32
+ EmrtdApduResponse toCpp() const {
33
+ static const auto clazz = javaClassStatic();
34
+ static const auto fieldData = clazz->getField<jni::JString>("data");
35
+ jni::local_ref<jni::JString> data = this->getFieldValue(fieldData);
36
+ static const auto fieldStatusWord = clazz->getField<double>("statusWord");
37
+ double statusWord = this->getFieldValue(fieldStatusWord);
38
+ return EmrtdApduResponse(
39
+ data->toStdString(),
40
+ statusWord
41
+ );
42
+ }
43
+
44
+ public:
45
+ /**
46
+ * Create a Java/Kotlin-based struct by copying all values from the given C++ struct to Java.
47
+ */
48
+ [[maybe_unused]]
49
+ static jni::local_ref<JEmrtdApduResponse::javaobject> fromCpp(const EmrtdApduResponse& value) {
50
+ using JSignature = JEmrtdApduResponse(jni::alias_ref<jni::JString>, double);
51
+ static const auto clazz = javaClassStatic();
52
+ static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
53
+ return create(
54
+ clazz,
55
+ jni::make_jstring(value.data),
56
+ value.statusWord
57
+ );
58
+ }
59
+ };
60
+
61
+ } // namespace margelo::nitro::myazakyc
@@ -0,0 +1,61 @@
1
+ ///
2
+ /// JEmrtdTagInfo.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <fbjni/fbjni.h>
11
+ #include "EmrtdTagInfo.hpp"
12
+
13
+ #include <string>
14
+
15
+ namespace margelo::nitro::myazakyc {
16
+
17
+ using namespace facebook;
18
+
19
+ /**
20
+ * The C++ JNI bridge between the C++ struct "EmrtdTagInfo" and the the Kotlin data class "EmrtdTagInfo".
21
+ */
22
+ struct JEmrtdTagInfo final: public jni::JavaClass<JEmrtdTagInfo> {
23
+ public:
24
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/myazakyc/EmrtdTagInfo;";
25
+
26
+ public:
27
+ /**
28
+ * Convert this Java/Kotlin-based struct to the C++ struct EmrtdTagInfo by copying all values to C++.
29
+ */
30
+ [[maybe_unused]]
31
+ [[nodiscard]]
32
+ EmrtdTagInfo toCpp() const {
33
+ static const auto clazz = javaClassStatic();
34
+ static const auto fieldConnected = clazz->getField<jboolean>("connected");
35
+ jboolean connected = this->getFieldValue(fieldConnected);
36
+ static const auto fieldUid = clazz->getField<jni::JString>("uid");
37
+ jni::local_ref<jni::JString> uid = this->getFieldValue(fieldUid);
38
+ return EmrtdTagInfo(
39
+ static_cast<bool>(connected),
40
+ uid->toStdString()
41
+ );
42
+ }
43
+
44
+ public:
45
+ /**
46
+ * Create a Java/Kotlin-based struct by copying all values from the given C++ struct to Java.
47
+ */
48
+ [[maybe_unused]]
49
+ static jni::local_ref<JEmrtdTagInfo::javaobject> fromCpp(const EmrtdTagInfo& value) {
50
+ using JSignature = JEmrtdTagInfo(jboolean, jni::alias_ref<jni::JString>);
51
+ static const auto clazz = javaClassStatic();
52
+ static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
53
+ return create(
54
+ clazz,
55
+ value.connected,
56
+ jni::make_jstring(value.uid)
57
+ );
58
+ }
59
+ };
60
+
61
+ } // namespace margelo::nitro::myazakyc
@@ -0,0 +1,113 @@
1
+ ///
2
+ /// JFaceResult.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <fbjni/fbjni.h>
11
+ #include "FaceResult.hpp"
12
+
13
+
14
+
15
+ namespace margelo::nitro::myazakyc {
16
+
17
+ using namespace facebook;
18
+
19
+ /**
20
+ * The C++ JNI bridge between the C++ struct "FaceResult" and the the Kotlin data class "FaceResult".
21
+ */
22
+ struct JFaceResult final: public jni::JavaClass<JFaceResult> {
23
+ public:
24
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/myazakyc/FaceResult;";
25
+
26
+ public:
27
+ /**
28
+ * Convert this Java/Kotlin-based struct to the C++ struct FaceResult by copying all values to C++.
29
+ */
30
+ [[maybe_unused]]
31
+ [[nodiscard]]
32
+ FaceResult toCpp() const {
33
+ static const auto clazz = javaClassStatic();
34
+ static const auto fieldHeadEulerAngleX = clazz->getField<double>("headEulerAngleX");
35
+ double headEulerAngleX = this->getFieldValue(fieldHeadEulerAngleX);
36
+ static const auto fieldHeadEulerAngleY = clazz->getField<double>("headEulerAngleY");
37
+ double headEulerAngleY = this->getFieldValue(fieldHeadEulerAngleY);
38
+ static const auto fieldHeadEulerAngleZ = clazz->getField<double>("headEulerAngleZ");
39
+ double headEulerAngleZ = this->getFieldValue(fieldHeadEulerAngleZ);
40
+ static const auto fieldSmilingProbability = clazz->getField<double>("smilingProbability");
41
+ double smilingProbability = this->getFieldValue(fieldSmilingProbability);
42
+ static const auto fieldLeftEyeOpenProbability = clazz->getField<double>("leftEyeOpenProbability");
43
+ double leftEyeOpenProbability = this->getFieldValue(fieldLeftEyeOpenProbability);
44
+ static const auto fieldRightEyeOpenProbability = clazz->getField<double>("rightEyeOpenProbability");
45
+ double rightEyeOpenProbability = this->getFieldValue(fieldRightEyeOpenProbability);
46
+ static const auto fieldFaceSizeRatio = clazz->getField<double>("faceSizeRatio");
47
+ double faceSizeRatio = this->getFieldValue(fieldFaceSizeRatio);
48
+ static const auto fieldFaceCount = clazz->getField<double>("faceCount");
49
+ double faceCount = this->getFieldValue(fieldFaceCount);
50
+ static const auto fieldBrightness = clazz->getField<double>("brightness");
51
+ double brightness = this->getFieldValue(fieldBrightness);
52
+ static const auto fieldFaceCenterX = clazz->getField<double>("faceCenterX");
53
+ double faceCenterX = this->getFieldValue(fieldFaceCenterX);
54
+ static const auto fieldFaceCenterY = clazz->getField<double>("faceCenterY");
55
+ double faceCenterY = this->getFieldValue(fieldFaceCenterY);
56
+ static const auto fieldTrackingId = clazz->getField<double>("trackingId");
57
+ double trackingId = this->getFieldValue(fieldTrackingId);
58
+ static const auto fieldFaceR = clazz->getField<double>("faceR");
59
+ double faceR = this->getFieldValue(fieldFaceR);
60
+ static const auto fieldFaceG = clazz->getField<double>("faceG");
61
+ double faceG = this->getFieldValue(fieldFaceG);
62
+ static const auto fieldFaceB = clazz->getField<double>("faceB");
63
+ double faceB = this->getFieldValue(fieldFaceB);
64
+ return FaceResult(
65
+ headEulerAngleX,
66
+ headEulerAngleY,
67
+ headEulerAngleZ,
68
+ smilingProbability,
69
+ leftEyeOpenProbability,
70
+ rightEyeOpenProbability,
71
+ faceSizeRatio,
72
+ faceCount,
73
+ brightness,
74
+ faceCenterX,
75
+ faceCenterY,
76
+ trackingId,
77
+ faceR,
78
+ faceG,
79
+ faceB
80
+ );
81
+ }
82
+
83
+ public:
84
+ /**
85
+ * Create a Java/Kotlin-based struct by copying all values from the given C++ struct to Java.
86
+ */
87
+ [[maybe_unused]]
88
+ static jni::local_ref<JFaceResult::javaobject> fromCpp(const FaceResult& value) {
89
+ using JSignature = JFaceResult(double, double, double, double, double, double, double, double, double, double, double, double, double, double, double);
90
+ static const auto clazz = javaClassStatic();
91
+ static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
92
+ return create(
93
+ clazz,
94
+ value.headEulerAngleX,
95
+ value.headEulerAngleY,
96
+ value.headEulerAngleZ,
97
+ value.smilingProbability,
98
+ value.leftEyeOpenProbability,
99
+ value.rightEyeOpenProbability,
100
+ value.faceSizeRatio,
101
+ value.faceCount,
102
+ value.brightness,
103
+ value.faceCenterX,
104
+ value.faceCenterY,
105
+ value.trackingId,
106
+ value.faceR,
107
+ value.faceG,
108
+ value.faceB
109
+ );
110
+ }
111
+ };
112
+
113
+ } // namespace margelo::nitro::myazakyc