@vppos/react-native-nfc 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/LICENSE +20 -0
  2. package/NFCSDK.podspec +40 -0
  3. package/android/build.gradle +85 -0
  4. package/android/gradle.properties +5 -0
  5. package/android/src/main/AndroidManifest.xml +31 -0
  6. package/android/src/main/AndroidManifestNew.xml +30 -0
  7. package/android/src/main/java/com/nfcsdk/ChipReader.kt +237 -0
  8. package/android/src/main/java/com/nfcsdk/NFCSDKModule.kt +78 -0
  9. package/android/src/main/java/com/nfcsdk/NFCSDKPackage.kt +17 -0
  10. package/android/src/main/java/com/nfcsdk/NFCScanActivity.kt +299 -0
  11. package/android/src/main/java/com/nfcsdk/utils/Dg13Parser.kt +278 -0
  12. package/android/src/main/java/com/nfcsdk/utils/FaceExtractor.kt +40 -0
  13. package/android/src/main/java/com/nfcsdk/utils/MrzUtils.kt +75 -0
  14. package/android/src/main/res/drawable/bg_nfc_bottom_sheet.xml +13 -0
  15. package/android/src/main/res/drawable/bg_nfc_sheet_handle.xml +9 -0
  16. package/android/src/main/res/layout/activity_nfc.xml +110 -0
  17. package/android/src/main/res/values/styles.xml +10 -0
  18. package/android/src/main/res/xml/nfc_tech_filter.xml +8 -0
  19. package/ios/ChipReader.swift +258 -0
  20. package/ios/NFCSDK-Bridging-Header.h +2 -0
  21. package/ios/NFCSDK.mm +9 -0
  22. package/ios/NFCSDK.swift +112 -0
  23. package/ios/NFCSDKSession.swift +5 -0
  24. package/ios/utils/DG13Parser.swift +302 -0
  25. package/ios/utils/MrzUtils.swift +49 -0
  26. package/lib/module/errors.js +9 -0
  27. package/lib/module/errors.js.map +1 -0
  28. package/lib/module/index.js +118 -0
  29. package/lib/module/index.js.map +1 -0
  30. package/lib/module/package.json +1 -0
  31. package/lib/module/types.js +2 -0
  32. package/lib/module/types.js.map +1 -0
  33. package/lib/typescript/package.json +1 -0
  34. package/lib/typescript/src/errors.d.ts +4 -0
  35. package/lib/typescript/src/errors.d.ts.map +1 -0
  36. package/lib/typescript/src/index.d.ts +80 -0
  37. package/lib/typescript/src/index.d.ts.map +1 -0
  38. package/lib/typescript/src/types.d.ts +45 -0
  39. package/lib/typescript/src/types.d.ts.map +1 -0
  40. package/package.json +155 -0
  41. package/src/errors.ts +6 -0
  42. package/src/index.tsx +141 -0
  43. package/src/types.ts +45 -0
  44. package/vendor/ios-passport-reader/CHANGELOG +362 -0
  45. package/vendor/ios-passport-reader/CODE_OF_CONDUCT.md +77 -0
  46. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/AppDelegate.swift +39 -0
  47. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/Contents.json +158 -0
  48. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-40.png +0 -0
  49. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png +0 -0
  50. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png +0 -0
  51. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png +0 -0
  52. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png +0 -0
  53. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-72.png +0 -0
  54. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png +0 -0
  55. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-76.png +0 -0
  56. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png +0 -0
  57. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png +0 -0
  58. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small-50.png +0 -0
  59. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small-50@2x.png +0 -0
  60. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small.png +0 -0
  61. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small@2x.png +0 -0
  62. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small@3x.png +0 -0
  63. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon.png +0 -0
  64. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon@2x.png +0 -0
  65. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/ios-marketing.png +0 -0
  66. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon@2x.png +0 -0
  67. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon@3x.png +0 -0
  68. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad.png +0 -0
  69. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad@2x.png +0 -0
  70. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/Contents.json +6 -0
  71. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/background.imageset/Contents.json +21 -0
  72. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/background.imageset/background.png +0 -0
  73. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/head.imageset/Contents.json +21 -0
  74. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Assets.xcassets/head.imageset/head.png +0 -0
  75. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Base.lproj/LaunchScreen.storyboard +25 -0
  76. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Extensions/FileManagerExt.swift +16 -0
  77. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Extensions/StringExt.swift +40 -0
  78. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Extensions/UIApplicationExt.swift +21 -0
  79. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Info.plist +77 -0
  80. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Model/PassportUtils.swift +76 -0
  81. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Model/SettingsStore.swift +107 -0
  82. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/NFCPassportReader.entitlements +10 -0
  83. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/SceneDelegate.swift +57 -0
  84. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/DetailsView.swift +197 -0
  85. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/ExportPassportView.swift +164 -0
  86. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/HelperViews/CheckBoxView.swift +48 -0
  87. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/HelperViews/ViewExt.swift +20 -0
  88. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/HelperViews/ViewModifiers.swift +41 -0
  89. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/MRZEntryView.swift +125 -0
  90. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/MRZScannerViewController.swift +90 -0
  91. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/MainView.swift +214 -0
  92. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/PassportSummaryView.swift +111 -0
  93. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/PassportView.swift +73 -0
  94. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/SettingsView.swift +63 -0
  95. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/Views/StoredPassportView.swift +152 -0
  96. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/masterList.pem +32 -0
  97. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp/readme.md +10 -0
  98. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp.xcodeproj/project.pbxproj +695 -0
  99. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp.xcodeproj/xcshareddata/xcschemes/NFCPassportReader.xcscheme +106 -0
  100. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp.xcworkspace/contents.xcworkspacedata +10 -0
  101. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  102. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderApp.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +8 -0
  103. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderAppTests/DataGroupParsingTests.swift +189 -0
  104. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderAppTests/Info.plist +22 -0
  105. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderAppTests/NFCPassportReaderTests.swift +260 -0
  106. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/NFCPassportReaderAppTests/PACETests.swift +112 -0
  107. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/Podfile +22 -0
  108. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/Podfile.lock +35 -0
  109. package/vendor/ios-passport-reader/Examples/Example_CocoaPods/README.md +2 -0
  110. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/AppDelegate.swift +39 -0
  111. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/Contents.json +158 -0
  112. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-40.png +0 -0
  113. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png +0 -0
  114. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png +0 -0
  115. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png +0 -0
  116. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png +0 -0
  117. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-72.png +0 -0
  118. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png +0 -0
  119. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-76.png +0 -0
  120. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png +0 -0
  121. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png +0 -0
  122. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small-50.png +0 -0
  123. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small-50@2x.png +0 -0
  124. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small.png +0 -0
  125. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small@2x.png +0 -0
  126. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon-small@3x.png +0 -0
  127. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon.png +0 -0
  128. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/icon@2x.png +0 -0
  129. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/ios-marketing.png +0 -0
  130. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon@2x.png +0 -0
  131. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon@3x.png +0 -0
  132. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad.png +0 -0
  133. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad@2x.png +0 -0
  134. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/Contents.json +6 -0
  135. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/background.imageset/Contents.json +21 -0
  136. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/background.imageset/background.png +0 -0
  137. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/head.imageset/Contents.json +21 -0
  138. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Assets.xcassets/head.imageset/head.png +0 -0
  139. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Base.lproj/LaunchScreen.storyboard +25 -0
  140. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Extensions/FileManagerExt.swift +16 -0
  141. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Extensions/StringExt.swift +40 -0
  142. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Extensions/UIApplicationExt.swift +21 -0
  143. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Info.plist +79 -0
  144. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Model/PassportUtils.swift +99 -0
  145. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Model/SettingsStore.swift +98 -0
  146. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Model/SettingsStoreCAN.swift +75 -0
  147. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/MrzScanner/LICENSE +21 -0
  148. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/MrzScanner/PreviewView.swift +34 -0
  149. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/MrzScanner/StringUtils.swift +160 -0
  150. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/MrzScanner/ViewController.swift +320 -0
  151. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/MrzScanner/VisionViewController.swift +163 -0
  152. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/NFCPassportReader.entitlements +10 -0
  153. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/SceneDelegate.swift +58 -0
  154. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/CANViews/CanKeyView.swift +251 -0
  155. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/CANViews/MRZEntryViewCanKey.swift +65 -0
  156. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/CANViews/PassportViewCAN.swift +73 -0
  157. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/DetailsView.swift +193 -0
  158. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/ExportPassportView.swift +164 -0
  159. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/HelperViews/CheckBoxView.swift +48 -0
  160. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/HelperViews/ViewExt.swift +20 -0
  161. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/HelperViews/ViewModifiers.swift +41 -0
  162. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/MRZEntryView.swift +125 -0
  163. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/MRZScannerViewController.swift +90 -0
  164. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/MainView.swift +264 -0
  165. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/PassportSummaryView.swift +111 -0
  166. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/PassportView.swift +73 -0
  167. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/SettingsView.swift +47 -0
  168. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/Views/StoredPassportView.swift +149 -0
  169. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/masterList.pem +32 -0
  170. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp/readme.md +10 -0
  171. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp.xcodeproj/project.pbxproj +683 -0
  172. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  173. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +25 -0
  174. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderApp.xcodeproj/xcshareddata/xcschemes/NFCPassportReader.xcscheme +106 -0
  175. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderAppTests/DataGroupParsingTests.swift +190 -0
  176. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderAppTests/Info.plist +22 -0
  177. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderAppTests/NFCPassportReaderTests.swift +260 -0
  178. package/vendor/ios-passport-reader/Examples/Example_SPM/NFCPassportReaderAppTests/PACETests.swift +112 -0
  179. package/vendor/ios-passport-reader/LICENSE +21 -0
  180. package/vendor/ios-passport-reader/NFCPassportReader.podspec +27 -0
  181. package/vendor/ios-passport-reader/Package.swift +29 -0
  182. package/vendor/ios-passport-reader/README.md +141 -0
  183. package/vendor/ios-passport-reader/Sources/NFCPassportReader/AES_3DES_DESEncryption.swift +377 -0
  184. package/vendor/ios-passport-reader/Sources/NFCPassportReader/BACHandler.swift +194 -0
  185. package/vendor/ios-passport-reader/Sources/NFCPassportReader/ChipAuthenticationHandler.swift +224 -0
  186. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroupHash.swift +16 -0
  187. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroupParser.swift +36 -0
  188. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/ActiveAuthenticationInfo.swift +69 -0
  189. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/COM.swift +61 -0
  190. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/CardAccess.swift +38 -0
  191. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/ChipAuthenticationInfo.swift +135 -0
  192. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/ChipAuthenticationPublicKeyInfo.swift +53 -0
  193. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup.swift +103 -0
  194. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup1.swift +111 -0
  195. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup11.swift +66 -0
  196. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup12.swift +75 -0
  197. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup14.swift +37 -0
  198. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup15.swift +46 -0
  199. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup2.swift +163 -0
  200. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroup7.swift +46 -0
  201. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/DataGroupId.swift +105 -0
  202. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/NotImplementedDG.swift +16 -0
  203. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/PACEInfo.swift +415 -0
  204. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/SOD.swift +240 -0
  205. package/vendor/ios-passport-reader/Sources/NFCPassportReader/DataGroups/SecurityInfo.swift +136 -0
  206. package/vendor/ios-passport-reader/Sources/NFCPassportReader/Errors.swift +148 -0
  207. package/vendor/ios-passport-reader/Sources/NFCPassportReader/Logging.swift +32 -0
  208. package/vendor/ios-passport-reader/Sources/NFCPassportReader/Models/FaceImageInfo.swift +161 -0
  209. package/vendor/ios-passport-reader/Sources/NFCPassportReader/NFCPassportModel.swift +540 -0
  210. package/vendor/ios-passport-reader/Sources/NFCPassportReader/NFCViewDisplayMessage.swift +60 -0
  211. package/vendor/ios-passport-reader/Sources/NFCPassportReader/OpenSSLUtils.swift +705 -0
  212. package/vendor/ios-passport-reader/Sources/NFCPassportReader/PACEHandler.swift +627 -0
  213. package/vendor/ios-passport-reader/Sources/NFCPassportReader/PassportReader.swift +387 -0
  214. package/vendor/ios-passport-reader/Sources/NFCPassportReader/Resources/PrivacyInfo.xcprivacy +14 -0
  215. package/vendor/ios-passport-reader/Sources/NFCPassportReader/ResponseAPDU.swift +25 -0
  216. package/vendor/ios-passport-reader/Sources/NFCPassportReader/SecureMessaging.swift +301 -0
  217. package/vendor/ios-passport-reader/Sources/NFCPassportReader/SecureMessagingSessionKeyGenerator.swift +156 -0
  218. package/vendor/ios-passport-reader/Sources/NFCPassportReader/SimpleASN1DumpParser.swift +173 -0
  219. package/vendor/ios-passport-reader/Sources/NFCPassportReader/TagReader.swift +374 -0
  220. package/vendor/ios-passport-reader/Sources/NFCPassportReader/Utils.swift +430 -0
  221. package/vendor/ios-passport-reader/Sources/NFCPassportReader/X509Wrapper.swift +168 -0
  222. package/vendor/ios-passport-reader/scripts/README.md +45 -0
  223. package/vendor/ios-passport-reader/scripts/extract.py +197 -0
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <shape xmlns:android="http://schemas.android.com/apk/res/android"
3
+ android:shape="rectangle">
4
+ <size
5
+ android:width="52dp"
6
+ android:height="5dp" />
7
+ <corners android:radius="999dp" />
8
+ <solid android:color="#FDBA74" />
9
+ </shape>
@@ -0,0 +1,110 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <FrameLayout
3
+ xmlns:android="http://schemas.android.com/apk/res/android"
4
+ android:layout_width="match_parent"
5
+ android:layout_height="match_parent"
6
+ android:background="@android:color/transparent">
7
+
8
+ <View
9
+ android:id="@+id/sheetScrim"
10
+ android:layout_width="match_parent"
11
+ android:layout_height="match_parent"
12
+ android:background="#660F172A" />
13
+
14
+ <LinearLayout
15
+ android:id="@+id/sheetContainer"
16
+ android:layout_width="match_parent"
17
+ android:layout_height="wrap_content"
18
+ android:layout_gravity="bottom"
19
+ android:layout_marginStart="12dp"
20
+ android:layout_marginEnd="12dp"
21
+ android:layout_marginBottom="12dp"
22
+ android:background="@drawable/bg_nfc_bottom_sheet"
23
+ android:elevation="12dp"
24
+ android:gravity="center_horizontal"
25
+ android:orientation="vertical"
26
+ android:paddingStart="24dp"
27
+ android:paddingTop="16dp"
28
+ android:paddingEnd="24dp"
29
+ android:paddingBottom="28dp">
30
+
31
+ <View
32
+ android:layout_width="52dp"
33
+ android:layout_height="5dp"
34
+ android:background="@drawable/bg_nfc_sheet_handle" />
35
+
36
+
37
+
38
+ <TextView
39
+ android:layout_width="wrap_content"
40
+ android:layout_height="wrap_content"
41
+ android:layout_marginTop="16dp"
42
+ android:text="Quét chip CCCD"
43
+ android:textColor="#0F172A"
44
+ android:textSize="22sp"
45
+ android:textStyle="bold" />
46
+
47
+ <TextView
48
+ android:id="@+id/tvGuide"
49
+ android:layout_width="match_parent"
50
+ android:layout_height="wrap_content"
51
+ android:layout_marginTop="8dp"
52
+ android:gravity="center"
53
+ android:text="Đặt CCCD sát mặt lưng điện thoại và giữ cố định để đọc chip."
54
+ android:textColor="#475569"
55
+ android:textSize="14sp" />
56
+
57
+ <LinearLayout
58
+ android:layout_width="match_parent"
59
+ android:layout_height="wrap_content"
60
+ android:layout_marginTop="24dp"
61
+ android:gravity="center_vertical"
62
+ android:orientation="horizontal">
63
+
64
+ <TextView
65
+ android:layout_width="0dp"
66
+ android:layout_height="wrap_content"
67
+ android:layout_weight="1"
68
+ android:text="Tiến độ đọc chip"
69
+ android:textColor="#0F172A"
70
+ android:textSize="15sp"
71
+ android:textStyle="bold" />
72
+
73
+ <TextView
74
+ android:id="@+id/tvProgressPercent"
75
+ android:layout_width="wrap_content"
76
+ android:layout_height="wrap_content"
77
+ android:text="0%"
78
+ android:textColor="#EA580C"
79
+ android:textSize="15sp"
80
+ android:textStyle="bold" />
81
+ </LinearLayout>
82
+
83
+ <ProgressBar
84
+ android:id="@+id/nfcProgressBar"
85
+ style="?android:attr/progressBarStyleHorizontal"
86
+ android:layout_width="match_parent"
87
+ android:layout_height="10dp"
88
+ android:layout_marginTop="12dp"
89
+ android:max="100"
90
+ android:progress="0"
91
+ android:progressBackgroundTint="#E2E8F0"
92
+ android:progressTint="#EA580C" />
93
+
94
+
95
+
96
+ <Button
97
+ android:id="@+id/btnRetry"
98
+ android:layout_width="match_parent"
99
+ android:layout_height="54dp"
100
+ android:layout_marginTop="24dp"
101
+ android:backgroundTint="#EA580C"
102
+ android:text="THỬ LẠI"
103
+ android:textColor="#FFFFFF"
104
+ android:textSize="15sp"
105
+ android:textStyle="bold"
106
+ android:visibility="gone" />
107
+
108
+ </LinearLayout>
109
+
110
+ </FrameLayout>
@@ -0,0 +1,10 @@
1
+ <resources>
2
+ <style name="NfcBottomSheetTheme" parent="Theme.AppCompat.Light.NoActionBar">
3
+ <item name="android:windowBackground">@android:color/transparent</item>
4
+ <item name="android:windowIsTranslucent">true</item>
5
+ <item name="android:windowNoTitle">true</item>
6
+ <item name="android:backgroundDimEnabled">false</item>
7
+ <item name="android:statusBarColor">@android:color/transparent</item>
8
+ <item name="android:navigationBarColor">#660F172A</item>
9
+ </style>
10
+ </resources>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
3
+ <tech-list>
4
+ <tech>android.nfc.tech.IsoDep</tech>
5
+ <tech>android.nfc.tech.NfcA</tech>
6
+ <tech>android.nfc.tech.NfcB</tech>
7
+ </tech-list>
8
+ </resources>
@@ -0,0 +1,258 @@
1
+ import Foundation
2
+
3
+ struct ChipReadResult {
4
+ let citizenId: String
5
+ let fullName: String
6
+ let dob: String
7
+ let gender: String
8
+ let nationality: String
9
+ let permanentAddress: String
10
+ let issueDate: String
11
+ let issuePlace: String
12
+ let expireDate: String
13
+ let imageFromChipBase64: String
14
+ let dg1DataB64: String
15
+ let dg2DataB64: String
16
+ let dg13DataB64: String
17
+ let dg14DataB64: String
18
+ let sodData: String
19
+ }
20
+
21
+ enum ChipReadError: LocalizedError {
22
+ case invalidCitizenId
23
+ case nfcNotSupported
24
+ case userCanceled
25
+ case sessionTimeout
26
+ case readFailed(String)
27
+
28
+ var errorDescription: String? {
29
+ switch self {
30
+ case .invalidCitizenId:
31
+ return "CCCD không hợp lệ"
32
+ case .nfcNotSupported:
33
+ return "Thiết bị không hỗ trợ NFC"
34
+ case .userCanceled:
35
+ return "Phiên NFC đã bị hủy"
36
+ case .sessionTimeout:
37
+ return "Phiên NFC đã hết thời gian, vui lòng thử lại"
38
+ case .readFailed(let message):
39
+ return "Đọc NFC thất bại: \(message)"
40
+ }
41
+ }
42
+ }
43
+
44
+ typealias ChipReadProgressListener = (_ progress: Int, _ message: String) -> Void
45
+
46
+ final class ChipReader {
47
+ private let passportReader = PassportReader()
48
+
49
+ @MainActor
50
+ func read(
51
+ citizenId: String,
52
+ progressListener: @escaping ChipReadProgressListener
53
+ ) async throws -> ChipReadResult {
54
+ let cleanCitizenId = citizenId.trimmingCharacters(
55
+ in: .whitespacesAndNewlines
56
+ )
57
+
58
+ guard cleanCitizenId.count >= 6 else {
59
+ throw ChipReadError.invalidCitizenId
60
+ }
61
+
62
+ progressListener(10, "Đang khởi tạo NFC...")
63
+
64
+ let canCode = String(cleanCitizenId.suffix(6))
65
+ let requiredTags: [DataGroupId] = [
66
+ .COM,
67
+ .DG1,
68
+ .DG2,
69
+ .DG13,
70
+ .DG14,
71
+ .SOD,
72
+ ]
73
+
74
+ do {
75
+ let passport = try await passportReader.readPassport(
76
+ canKey: canCode,
77
+ tags: requiredTags,
78
+ skipCA: true,
79
+ useExtendedMode: true,
80
+ customDisplayMessage: { displayMessage in
81
+ self.handleInternalProgress(
82
+ displayMessage,
83
+ progressListener: progressListener
84
+ )
85
+ return self.getDisplayString(from: displayMessage)
86
+ }
87
+ )
88
+
89
+ progressListener(100, "Đọc NFC thành công")
90
+ return mapResult(passport: passport, citizenId: cleanCitizenId)
91
+ } catch {
92
+ if let readerError = error as? NFCPassportReaderError,
93
+ case .NFCNotSupported = readerError {
94
+ throw ChipReadError.nfcNotSupported
95
+ }
96
+
97
+ if let readerError = error as? NFCPassportReaderError {
98
+ switch readerError {
99
+ case .UserCanceled:
100
+ throw ChipReadError.userCanceled
101
+ case .InvalidMRZKey:
102
+ throw ChipReadError.readFailed("Khóa CAN không hợp lệ")
103
+ case .Unknown(let wrappedError):
104
+ let wrappedDescription = wrappedError.localizedDescription
105
+ if self.isTimeoutDescription(wrappedDescription) {
106
+ throw ChipReadError.sessionTimeout
107
+ }
108
+ if wrappedDescription.localizedCaseInsensitiveContains("Session invalidated") {
109
+ throw ChipReadError.readFailed("Phiên NFC bị ngắt giữa chừng")
110
+ }
111
+ throw ChipReadError.readFailed(readerError.localizedDescription)
112
+ default:
113
+ if self.isTimeoutDescription(readerError.localizedDescription) {
114
+ throw ChipReadError.sessionTimeout
115
+ }
116
+ throw ChipReadError.readFailed(readerError.localizedDescription)
117
+ }
118
+ }
119
+
120
+ if error.localizedDescription == "NFCNotSupported" {
121
+ throw ChipReadError.nfcNotSupported
122
+ }
123
+
124
+ if error.localizedDescription.localizedCaseInsensitiveContains("Session invalidated") {
125
+ throw ChipReadError.readFailed("Phiên NFC bị ngắt giữa chừng")
126
+ }
127
+
128
+ if self.isTimeoutDescription(error.localizedDescription) {
129
+ throw ChipReadError.sessionTimeout
130
+ }
131
+
132
+ throw ChipReadError.readFailed(error.localizedDescription)
133
+ }
134
+ }
135
+ }
136
+
137
+ private extension ChipReader {
138
+ func isTimeoutDescription(_ description: String) -> Bool {
139
+ let normalized = description.trimmingCharacters(in: .whitespacesAndNewlines)
140
+ .lowercased()
141
+
142
+ return normalized.contains("timeout") ||
143
+ normalized.contains("timed out") ||
144
+ normalized.contains("time out")
145
+ }
146
+
147
+ func getDisplayString(
148
+ from message: NFCViewDisplayMessage
149
+ ) -> String {
150
+ switch message {
151
+ case .requestPresentPassport:
152
+ return "Đưa mặt sau CCCD sát đỉnh iPhone và giữ cố định."
153
+ case .authenticatingWithPassport:
154
+ return "Đang mở khóa chip bằng CAN..."
155
+ case .readingDataGroupProgress(let dg, let progress):
156
+ return "Đang đọc \(dg): \(progress)%"
157
+ case .successfulRead:
158
+ return "Đọc thành công!"
159
+ case .error(let error):
160
+ return "Lỗi: \(error.localizedDescription)"
161
+ default:
162
+ return "Vui lòng giữ CCCD cố định"
163
+ }
164
+ }
165
+
166
+ func handleInternalProgress(
167
+ _ message: NFCViewDisplayMessage,
168
+ progressListener: ChipReadProgressListener
169
+ ) {
170
+ switch message {
171
+ case .authenticatingWithPassport(let progress):
172
+ // PACE Authentication ranges from 10% to 25% of overall progress
173
+ let overallProgress = 10 + (progress * 15 / 100)
174
+ progressListener(overallProgress, "Đang mở khóa chip CCCD...")
175
+ case .readingDataGroupProgress(let dg, let progress):
176
+ // Assign overall progress ranges based on the specific Data Group being read
177
+ let overallProgress: Int
178
+ switch dg {
179
+ case .COM:
180
+ overallProgress = 25 + (progress * 5 / 100)
181
+ case .DG1:
182
+ overallProgress = 30 + (progress * 5 / 100)
183
+ case .DG2:
184
+ // DG2 (face photo) is usually the largest, taking 35% - 75% of overall progress
185
+ overallProgress = 35 + (progress * 40 / 100)
186
+ case .DG13:
187
+ // DG13 (VN custom details) takes 75% - 85%
188
+ overallProgress = 75 + (progress * 10 / 100)
189
+ case .DG14:
190
+ overallProgress = 85 + (progress * 5 / 100)
191
+ case .SOD:
192
+ overallProgress = 90 + (progress * 5 / 100)
193
+ default:
194
+ overallProgress = 95
195
+ }
196
+ progressListener(overallProgress, "Đang đọc \(dg.getName())...")
197
+ default:
198
+ break
199
+ }
200
+ }
201
+
202
+ func mapResult(
203
+ passport: NFCPassportModel,
204
+ citizenId: String
205
+ ) -> ChipReadResult {
206
+ var imageFromChipBase64 = ""
207
+ if let image = passport.passportImage,
208
+ let imageData = image.jpegData(compressionQuality: 0.8) {
209
+ imageFromChipBase64 = imageData.base64EncodedString()
210
+ }
211
+
212
+ let dg1DataB64 = passport.dataGroupsRead[.DG1]
213
+ .map { Data($0.data).base64EncodedString() } ?? ""
214
+ let dg2DataB64 = passport.dataGroupsRead[.DG2]
215
+ .map { Data($0.data).base64EncodedString() } ?? ""
216
+ let dg13Data = passport.dataGroupsRead[.DG13].map { Data($0.data) }
217
+ let dg13DataB64 = dg13Data?.base64EncodedString() ?? ""
218
+ let dg14DataB64 = passport.dataGroupsRead[.DG14]
219
+ .map { Data($0.data).base64EncodedString() } ?? ""
220
+ let sodData = passport.dataGroupsRead[.SOD]
221
+ .map { Data($0.data).base64EncodedString() } ?? ""
222
+
223
+ let parsedDg13 = dg13Data.map {
224
+ DG13Parser.parse($0, fallbackIssuePlace: "")
225
+ } ?? DG13ParsedData()
226
+
227
+ let normalizedGender = DG13Parser.normalizeGender(passport.gender)
228
+ let finalGender =
229
+ parsedDg13.gender.isEmpty ? normalizedGender : parsedDg13.gender
230
+ let mrzExpireDate = MrzUtils.formatDate(passport.documentExpiryDate)
231
+ let finalExpireDate =
232
+ parsedDg13.expireDate.isEmpty ? mrzExpireDate : parsedDg13.expireDate
233
+ let mrzFullName = MrzUtils.normalizeName(
234
+ firstName: passport.firstName,
235
+ lastName: passport.lastName
236
+ )
237
+ let finalFullName =
238
+ parsedDg13.fullName.isEmpty ? mrzFullName : parsedDg13.fullName
239
+
240
+ return ChipReadResult(
241
+ citizenId: citizenId,
242
+ fullName: finalFullName,
243
+ dob: MrzUtils.formatDate(passport.dateOfBirth),
244
+ gender: finalGender,
245
+ nationality: MrzUtils.normalizeNationality(passport.nationality),
246
+ permanentAddress: parsedDg13.permanentAddress,
247
+ issueDate: parsedDg13.issueDate,
248
+ issuePlace: parsedDg13.issuePlace,
249
+ expireDate: finalExpireDate,
250
+ imageFromChipBase64: imageFromChipBase64,
251
+ dg1DataB64: dg1DataB64,
252
+ dg2DataB64: dg2DataB64,
253
+ dg13DataB64: dg13DataB64,
254
+ dg14DataB64: dg14DataB64,
255
+ sodData: sodData
256
+ )
257
+ }
258
+ }
@@ -0,0 +1,2 @@
1
+ #import <React/RCTBridgeModule.h>
2
+ #import <React/RCTViewManager.h>
package/ios/NFCSDK.mm ADDED
@@ -0,0 +1,9 @@
1
+ #import <React/RCTBridgeModule.h>
2
+ #import <React/RCTEventEmitter.h>
3
+
4
+ @interface RCT_EXTERN_MODULE(NFCSDK, RCTEventEmitter)
5
+
6
+ RCT_EXTERN_METHOD(setCitizenId:(NSString *)citizenId)
7
+ RCT_EXTERN_METHOD(startNfcScan)
8
+
9
+ @end
@@ -0,0 +1,112 @@
1
+ import Foundation
2
+ import React
3
+
4
+ @objc(NFCSDK)
5
+ class NFCSDK: RCTEventEmitter {
6
+
7
+ static var shared: NFCSDK?
8
+ private let chipReader = ChipReader()
9
+ private var currentReadTask: Task<Void, Never>?
10
+
11
+ override init() {
12
+ super.init()
13
+ NFCSDK.shared = self
14
+ }
15
+
16
+ override static func requiresMainQueueSetup() -> Bool {
17
+ true
18
+ }
19
+
20
+ override func supportedEvents() -> [String]! {
21
+ [
22
+ "onNfcProgress",
23
+ "onNfcCompleted",
24
+ ]
25
+ }
26
+
27
+ @objc
28
+ func setCitizenId(_ citizenId: String) {
29
+ NFCSDKSession.citizenId = citizenId.trimmingCharacters(
30
+ in: .whitespacesAndNewlines
31
+ )
32
+ }
33
+
34
+ @objc
35
+ func startNfcScan() {
36
+ if currentReadTask != nil {
37
+ return
38
+ }
39
+
40
+ let citizenId = NFCSDKSession.citizenId
41
+ currentReadTask = Task { @MainActor [weak self] in
42
+ guard let self else {
43
+ return
44
+ }
45
+
46
+ defer {
47
+ self.currentReadTask = nil
48
+ }
49
+
50
+ do {
51
+ let result = try await self.chipReader.read(
52
+ citizenId: citizenId,
53
+ progressListener: { progress, message in
54
+ self.emitProgress(progress: progress, message: message)
55
+ }
56
+ )
57
+ self.emitCompleted(result)
58
+ } catch {
59
+ self.emitProgress(
60
+ progress: -1,
61
+ message: error.localizedDescription
62
+ )
63
+ }
64
+ }
65
+ }
66
+
67
+ private func emitProgress(
68
+ progress: Int,
69
+ message: String
70
+ ) {
71
+ DispatchQueue.main.async {
72
+ self.sendEvent(
73
+ withName: "onNfcProgress",
74
+ body: [
75
+ "progress": progress,
76
+ "message": message,
77
+ ]
78
+ )
79
+ }
80
+ }
81
+
82
+ private func emitCompleted(
83
+ _ result: ChipReadResult
84
+ ) {
85
+ let payload: [String: Any] = [
86
+ "citizenId": result.citizenId,
87
+ "fullName": result.fullName,
88
+ "dob": result.dob,
89
+ "gender": result.gender,
90
+ "nationality": result.nationality,
91
+ "permanentAddress": result.permanentAddress,
92
+ "issueDate": result.issueDate,
93
+ "issuePlace": result.issuePlace,
94
+ "expireDate": result.expireDate,
95
+ "imageFromChip": result.imageFromChipBase64,
96
+ "frontCardBase64": "",
97
+ "backCardBase64": "",
98
+ "dg1DataB64": result.dg1DataB64,
99
+ "dg2DataB64": result.dg2DataB64,
100
+ "dg13DataB64": result.dg13DataB64,
101
+ "dg14DataB64": result.dg14DataB64,
102
+ "sodData": result.sodData,
103
+ ]
104
+
105
+ DispatchQueue.main.async {
106
+ self.sendEvent(
107
+ withName: "onNfcCompleted",
108
+ body: payload
109
+ )
110
+ }
111
+ }
112
+ }
@@ -0,0 +1,5 @@
1
+ import Foundation
2
+
3
+ enum NFCSDKSession {
4
+ static var citizenId = ""
5
+ }