accurascan_kyc 1.4.3 → 1.4.4

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.
@@ -13,30 +13,36 @@ Pod::Spec.new do |s|
13
13
 
14
14
  s.platforms = { :ios => "12.0" }
15
15
  s.ios.deployment_target = '12.0'
16
- s.source = { :git => "https://git.accurascan.com/mahdi/hybrid-react-kyc.git, :tag => "#{s.version}"
17
- }
16
+ s.source = {
17
+ :git => "https://git.accurascan.com/mahdi/hybrid-react-kyc.git",
18
+ :tag => "#{s.version}"
19
+ }
18
20
 
19
21
  s.source_files = "ios/**/*.{h,m,mm,swift}"
20
22
  s.resources = "ios/**/*.{png,jpeg,jpg,xib,xcassets,imageset,gif,mp3,storyboard}"
21
23
 
22
24
  s.dependency "React-Core"
23
25
  s.static_framework = true
24
- # s.dependency "AccuraKYC","4.0.2"
25
- s.dependency "AccuraKYC","4.2.9"
26
+ s.dependency "AccuraKYC_Sim","4.2.2"
27
+
28
+ # s.dependency "AccuraKYC","4.2.9"
29
+
26
30
  #s.dependency 'AccuraKYC_Enc', '4.1.3'
27
31
  # s.dependency "AccuraKYC","4.3.8.4"
28
32
  # Don't install the dependencies when we run `pod install` in the old architecture.
29
33
  if ENV['RCT_NEW_ARCH_ENABLED'] == '1' then
30
34
  s.compiler_flags = folly_compiler_flags + " -DRCT_NEW_ARCH_ENABLED=1"
31
- s.pod_target_xcconfig = {
32
- "HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\"",
33
- "OTHER_CPLUSPLUSFLAGS" => "-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1",
34
- "CLANG_CXX_LANGUAGE_STANDARD" => "c++17"
35
+
36
+ s.pod_target_xcconfig = {
37
+ "HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\"",
38
+ "OTHER_CPLUSPLUSFLAGS" => folly_compiler_flags,
39
+ "CLANG_CXX_LANGUAGE_STANDARD" => "c++20"
35
40
  }
36
- # s.dependency "React-Codegen"
37
- # s.dependency "RCT-Folly"
38
- # s.dependency "RCTRequired"
39
- # s.dependency "RCTTypeSafety"
40
- # s.dependency "ReactCommon/turbomodule/core"
41
+
42
+ s.dependency "React-Codegen"
43
+ s.dependency "RCT-Folly"
44
+ s.dependency "RCTRequired"
45
+ s.dependency "RCTTypeSafety"
46
+ s.dependency "ReactCommon/turbomodule/core"
41
47
  end
42
48
  end
@@ -12,18 +12,19 @@ buildscript {
12
12
  }
13
13
  }
14
14
 
15
+ apply plugin: "com.facebook.react"
16
+ apply plugin: "com.android.library"
17
+
15
18
  def isNewArchitectureEnabled() {
16
19
  return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true"
17
20
  }
18
21
 
19
- apply plugin: "com.android.library"
20
-
21
22
 
22
23
  def appProject = rootProject.allprojects.find { it.plugins.hasPlugin('com.android.application') }
23
24
 
24
- if (isNewArchitectureEnabled()) {
25
- apply plugin: "com.facebook.react"
26
- }
25
+ // if (isNewArchitectureEnabled()) {
26
+ // apply plugin: "com.facebook.react"
27
+ // }
27
28
 
28
29
  def getExtOrDefault(name) {
29
30
  return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties["AccurascanKyc_" + name]
@@ -107,7 +108,7 @@ dependencies {
107
108
  // Update OCR
108
109
  implementation 'com.github.accurascan:AccuraOCR:6.2.6'
109
110
  // FaceMatch has no issue
110
- implementation 'com.github.accurascan:AccuraFaceMatch:4.0.0'
111
+ implementation 'com.github.accurascan:AccuraFaceMatch:4.0.1'
111
112
  // Update Liveness
112
113
  implementation 'com.github.accurascan:Liveness-Android:3.7.0'
113
114
  implementation 'com.squareup.picasso:picasso:2.71828'
@@ -0,0 +1,246 @@
1
+ package com.accurascankyc;
2
+
3
+ import android.content.Context;
4
+ import android.graphics.Bitmap;
5
+ import android.util.Base64;
6
+
7
+ import com.accurascan.ocr.mrz.interfaces.OcrCallback;
8
+ import com.accurascan.ocr.mrz.model.OcrData;
9
+ import com.accurascan.ocr.mrz.util.AccuraLog;
10
+ import com.docrecog.scan.MRZDocumentType;
11
+ import com.docrecog.scan.RecogEngine;
12
+ import com.docrecog.scan.RecogType;
13
+ //import com.docrecog.scan.RecogResult;
14
+
15
+ import org.json.JSONArray;
16
+ import org.json.JSONObject;
17
+
18
+ import java.io.File;
19
+ import java.io.FileOutputStream;
20
+ import java.util.List;
21
+ import org.json.JSONException;
22
+ // import android.os.Handler;
23
+ // import android.os.Looper;
24
+
25
+ public class AccuraUploadOcrActivity implements OcrCallback {
26
+
27
+ private static final String TAG = AccuraUploadOcrActivity.class.getSimpleName();
28
+ private Context context;
29
+ private com.facebook.react.bridge.Callback callback;
30
+ private RecogEngine recogEngine;
31
+ // private boolean hasReturned = false;
32
+ // public static JSONObject accuraErrorConfg;
33
+
34
+ public void startOCR(
35
+ Context ctx,
36
+ int countryId,
37
+ int cardId,
38
+ int cardSide,
39
+ Bitmap bitmap,
40
+ com.facebook.react.bridge.Callback cb
41
+ ) {
42
+ try {
43
+ this.context = ctx;
44
+ this.callback = cb;
45
+
46
+ recogEngine = new RecogEngine();
47
+ recogEngine.setDialog(false);
48
+
49
+
50
+ recogEngine.detectOCRFromCapturedImage(
51
+ ctx,
52
+ bitmap,
53
+ MRZDocumentType.NONE,
54
+ countryId,
55
+ cardId,
56
+ cardSide,
57
+ this
58
+ );
59
+
60
+ } catch (Exception e) {
61
+ sendOnce(e.getMessage(), null);
62
+ }
63
+ }
64
+
65
+ private void sendOnce(Object error, Object result) {
66
+ // if (hasReturned) return;
67
+ // hasReturned = true;
68
+ callback.invoke(error, result);
69
+ }
70
+
71
+ // =============================
72
+ // OcrCallback Methods
73
+ // =============================
74
+
75
+ @Override
76
+ public void onUpdateLayout(int width, int height) {
77
+ // Not needed in headless
78
+ }
79
+
80
+ @Override
81
+ public void onProcessUpdate(int titleCode, String errorMessage, boolean isFlip) {
82
+ // Ignore processing updates in headless mode
83
+ // System.out.println("onProcessUpdate called");
84
+ // System.out.println("titleCode " + titleCode);
85
+ // System.out.println("errorMessage " + errorMessage);
86
+ // System.out.println("isFlip " + isFlip);
87
+
88
+ AccuraLog.loge(TAG, "onProcessUpdate :-> " + titleCode + "," + errorMessage + "," + isFlip);
89
+
90
+ if (errorMessage != null) {
91
+ String error = getErrorMessage(errorMessage);
92
+ sendOnce(error, null);
93
+ }
94
+ }
95
+
96
+ @Override
97
+ public void onScannedComplete(Object result) {
98
+ System.out.println("onScannedComplete called ");
99
+ try {
100
+
101
+ if (!(result instanceof OcrData)) {
102
+ sendOnce("Invalid OCR Result", null);
103
+ return;
104
+ }
105
+
106
+ OcrData data = (OcrData) result;
107
+
108
+ JSONObject results = new JSONObject();
109
+ JSONObject frontResult = new JSONObject();
110
+ JSONObject backResult = new JSONObject();
111
+
112
+ String fileDir = context.getFilesDir().getAbsolutePath();
113
+
114
+ String frontUri = null;
115
+ String backUri = null;
116
+ String faceUri = null;
117
+
118
+ if (data.getFaceImage() != null) {
119
+ faceUri = AccurascanKycModule.getImageUri(data.getFaceImage(), "face", fileDir);
120
+ results.put("face", faceUri);
121
+ }
122
+
123
+ if (data.getFrontimage() != null) {
124
+ frontUri = AccurascanKycModule.getImageUri(data.getFrontimage(), "front", fileDir);
125
+ results.put("front_img", frontUri);
126
+ }
127
+
128
+ if (data.getBackimage() != null) {
129
+ backUri = AccurascanKycModule.getImageUri(data.getBackimage(), "back", fileDir);
130
+ results.put("back_img", backUri);
131
+ }
132
+
133
+ // FRONT DATA
134
+ OcrData.MapData frontData = data.getFrontData();
135
+ if (frontData != null) {
136
+ List<OcrData.MapData.ScannedData> list = frontData.getOcr_data();
137
+ for (OcrData.MapData.ScannedData scan : list) {
138
+ if (scan.getKey() != null) {
139
+ frontResult.put(scan.getKey(), scan.getKey_data());
140
+ }
141
+ }
142
+ }
143
+
144
+ // BACK DATA
145
+ OcrData.MapData backData = data.getBackData();
146
+ if (backData != null) {
147
+ List<OcrData.MapData.ScannedData> list = backData.getOcr_data();
148
+ for (OcrData.MapData.ScannedData scan : list) {
149
+ if (scan.getKey() != null) {
150
+ backResult.put(scan.getKey(), scan.getKey_data());
151
+ }
152
+ }
153
+ }
154
+
155
+ results.put("front_data", frontResult);
156
+ results.put("back_data", backResult);
157
+ results.put("type", "OCR");
158
+
159
+ sendOnce(null, results.toString());
160
+
161
+ } catch (Exception e) {
162
+ sendOnce(e.getMessage(), null);
163
+ }
164
+ }
165
+
166
+ private String getErrorMessage(String s) {
167
+ switch (s) {
168
+ case RecogEngine.ACCURA_ERROR_CODE_MOTION:
169
+
170
+ return "Keep Document Steady";
171
+
172
+ case RecogEngine.ACCURA_ERROR_CODE_DOCUMENT_IN_FRAME:
173
+
174
+ return "Keep document in frame";
175
+
176
+ case RecogEngine.ACCURA_ERROR_CODE_BRING_DOCUMENT_IN_FRAME:
177
+
178
+ return "Bring card near to frame.";
179
+
180
+ case RecogEngine.ACCURA_ERROR_CODE_PROCESSING:
181
+
182
+ return "Processing...";
183
+
184
+ case RecogEngine.ACCURA_ERROR_CODE_BLUR_DOCUMENT:
185
+
186
+ return "Blur detect in document";
187
+
188
+ case RecogEngine.ACCURA_ERROR_CODE_FACE_BLUR:
189
+
190
+ return "Blur detected over face";
191
+
192
+ case RecogEngine.ACCURA_ERROR_CODE_GLARE_DOCUMENT:
193
+
194
+ return "Glare detect in document";
195
+
196
+ case RecogEngine.ACCURA_ERROR_CODE_HOLOGRAM:
197
+
198
+ return "Hologram Detected";
199
+
200
+ case RecogEngine.ACCURA_ERROR_CODE_DARK_DOCUMENT:
201
+
202
+ return "Low lighting detected";
203
+
204
+ case RecogEngine.ACCURA_ERROR_CODE_PHOTO_COPY_DOCUMENT:
205
+
206
+ return "Can not accept Photo Copy Document";
207
+
208
+ case RecogEngine.ACCURA_ERROR_CODE_FACE:
209
+
210
+ return "Face not detected";
211
+
212
+ case RecogEngine.ACCURA_ERROR_CODE_MRZ:
213
+
214
+ return "MRZ not detected";
215
+
216
+ case RecogEngine.ACCURA_ERROR_CODE_PASSPORT_MRZ:
217
+
218
+ return "Passport MRZ not detected";
219
+
220
+ case RecogEngine.ACCURA_ERROR_CODE_ID_MRZ:
221
+
222
+ return "ID card MRZ not detected";
223
+
224
+ case RecogEngine.ACCURA_ERROR_CODE_VISA_MRZ:
225
+
226
+ return "Visa MRZ not detected";
227
+
228
+ case RecogEngine.ACCURA_ERROR_CODE_WRONG_SIDE:
229
+
230
+ return "Scanning wrong side of document";
231
+
232
+ case RecogEngine.ACCURA_ERROR_CODE_UPSIDE_DOWN_SIDE:
233
+
234
+ return "Document is upside down. Place it properly";
235
+
236
+ default:
237
+ return s;
238
+ }
239
+ }
240
+
241
+ @Override
242
+ public void onError(String errorMessage) {
243
+ // System.out.println("onError called ");
244
+ sendOnce(errorMessage, null);
245
+ }
246
+ }
@@ -30,7 +30,9 @@ import android.content.pm.PackageManager;
30
30
  import android.graphics.Bitmap;
31
31
  import android.graphics.BitmapFactory;
32
32
  import android.net.Uri;
33
+ import android.provider.MediaStore;
33
34
  import android.util.Base64;
35
+ import android.util.Log;
34
36
 
35
37
  import org.json.JSONArray;
36
38
  import org.json.JSONException;
@@ -681,6 +683,91 @@ public class AccurascanKycModule extends ReactContextBaseJavaModule {
681
683
  return true;
682
684
  };
683
685
 
686
+ @ReactMethod
687
+ public void startUploadOcrWithCard(ReadableArray argsNew, Callback callbackContext) {
688
+
689
+ // System.out.println("======== startUploadOcrWithCard CALLED ========");
690
+
691
+ try {
692
+
693
+ if (argsNew == null) {
694
+ callbackContext.invoke("Arguments are null", null);
695
+ return;
696
+ }
697
+
698
+ JSONArray args = ReactNativeJSON.convertArrayToJson(argsNew);
699
+ // System.out.println("Converted args: " + args.toString());
700
+
701
+ int countryId = args.getInt(0);
702
+ int cardId = args.getInt(1);
703
+ String cardName = args.getString(2);
704
+ int cardType = args.getInt(3);
705
+ String imagePath = args.getString(4);
706
+ String side = args.getString(5);
707
+
708
+ // System.out.println("countryId: " + countryId);
709
+ // System.out.println("cardId: " + cardId);
710
+ // System.out.println("cardName: " + cardName);
711
+ // System.out.println("cardType: " + cardType);
712
+ // System.out.println("imagePath (raw): " + imagePath);
713
+ // System.out.println("side: " + side);
714
+
715
+ int cardSide = side.equalsIgnoreCase("back") ? 1 : 0;
716
+ // System.out.println("cardSide int: " + cardSide);
717
+
718
+ Bitmap bitmap;
719
+
720
+ if (imagePath.startsWith("content://")) {
721
+
722
+ // System.out.println("Loading image from content URI");
723
+
724
+ bitmap = MediaStore.Images.Media.getBitmap(
725
+ getReactApplicationContext().getContentResolver(),
726
+ Uri.parse(imagePath)
727
+ );
728
+
729
+ } else {
730
+
731
+ String cleanPath = imagePath.replace("file://", "");
732
+ // System.out.println("Loading image from file path: " + cleanPath);
733
+
734
+ File file = new File(cleanPath);
735
+ // System.out.println("File exists? " + file.exists());
736
+
737
+ bitmap = BitmapFactory.decodeFile(cleanPath);
738
+ }
739
+
740
+ if (bitmap == null) {
741
+ // System.out.println("ERROR: Bitmap decoding failed");
742
+ callbackContext.invoke("Bitmap decoding failed", null);
743
+ return;
744
+ }
745
+
746
+ // System.out.println("Bitmap loaded SUCCESSFULLY");
747
+ // System.out.println("Bitmap width: " + bitmap.getWidth());
748
+ // System.out.println("Bitmap height: " + bitmap.getHeight());
749
+
750
+ // System.out.println("Starting OCR now...");
751
+
752
+ AccuraUploadOcrActivity processor = new AccuraUploadOcrActivity();
753
+
754
+ processor.startOCR(
755
+ getReactApplicationContext(),
756
+ countryId,
757
+ cardId,
758
+ cardSide,
759
+ bitmap,
760
+ callbackContext
761
+ );
762
+
763
+ } catch (Exception e) {
764
+
765
+ // System.out.println("EXCEPTION OCCURRED:");
766
+ e.printStackTrace();
767
+
768
+ callbackContext.invoke(e.getMessage(), null);
769
+ }
770
+ }
684
771
 
685
772
 
686
773
  @ReactMethod
@@ -0,0 +1,627 @@
1
+ import Foundation
2
+ import UIKit
3
+ import AccuraOCR
4
+
5
+ class AccuraUploadViewController: UIViewController, VideoCameraWrapperDelegate {
6
+ var wrapper: AccuraCameraWrapper?
7
+ // var callBack: RCTResponseSenderBlock? = nil
8
+ var cardImage: UIImage?
9
+ var cardSide: String = "front"
10
+ // result data var
11
+ var dictFaceDataFront: NSMutableDictionary = [:]
12
+ var dictFaceDataBack: NSMutableDictionary = [:]
13
+ var dictOCRTypeData:NSMutableDictionary = [:]
14
+ var dictSecuretyData : NSMutableDictionary = [:]
15
+ var arrFrontResultKey : [String] = []
16
+ var arrFrontResultValue : [String] = []
17
+ var shareScanningListing: NSMutableDictionary = [:]
18
+ var arrBackResultKey : [String] = []
19
+ var arrBackResultValue : [String] = []
20
+ // recog_msg var
21
+ var accuraErrorCode:NSDictionary = [:]
22
+ var accuraTitleMsg:NSDictionary = [:]
23
+
24
+ private var callback: RCTResponseSenderBlock?
25
+ // private var hasReturnedResult = false
26
+ // override func viewDidLoad() {
27
+ // super.viewDidLoad()
28
+ // // view.backgroundColor = .black
29
+ // }
30
+
31
+ // MARK: - Start OCR
32
+ // MARK: - OCR
33
+ func startOCR(countryId: Int32,
34
+ cardId: Int32,
35
+ cardName: String,
36
+ cardType: Int32,
37
+ image: UIImage,
38
+ side: String,
39
+ callback: @escaping RCTResponseSenderBlock) {
40
+
41
+ // Reset old session
42
+ self.wrapper = nil
43
+ self.callback = nil
44
+ self.shareScanningListing.removeAllObjects()
45
+ self.dictFaceDataFront.removeAllObjects()
46
+ self.dictFaceDataBack.removeAllObjects()
47
+ self.dictSecuretyData.removeAllObjects()
48
+
49
+ // assign new callback
50
+ self.callback = callback
51
+
52
+ // self.hasReturnedResult = false
53
+
54
+ wrapper = AccuraCameraWrapper(
55
+ delegate: self,
56
+ cardId: cardId,
57
+ countryID: countryId,
58
+ isScanOCR: true,
59
+ andcardName: cardName,
60
+ andcardType: cardType
61
+ )
62
+
63
+ if side.lowercased() == "front" {
64
+ wrapper?.getOCRDetails(image, isBack: .Front)
65
+ } else {
66
+ wrapper?.getOCRDetails(image, isBack: .Back)
67
+ }
68
+ }
69
+
70
+ // MARK: - MRZ
71
+ func startMRZ(docType: String,
72
+ mrzType: Int32,
73
+ image: UIImage,
74
+ detectFace: Bool,
75
+ callback: @escaping RCTResponseSenderBlock) {
76
+
77
+ // Reset session
78
+ self.wrapper = nil
79
+ self.callback = nil
80
+ self.shareScanningListing.removeAllObjects()
81
+ self.dictFaceDataFront.removeAllObjects()
82
+ self.dictFaceDataBack.removeAllObjects()
83
+ self.dictSecuretyData.removeAllObjects()
84
+
85
+ self.callback = callback
86
+
87
+ wrapper = AccuraCameraWrapper(
88
+ delegate: self,
89
+ cardId: 0,
90
+ countryID: 0,
91
+ isScanOCR: false,
92
+ andcardName: docType,
93
+ andcardType: mrzType
94
+ )
95
+
96
+ wrapper?.getMRZDetails(image, isFace: detectFace)
97
+ }
98
+
99
+ // MARK: - Safe Callback
100
+
101
+ private func sendResultOnce(_ error: Any?, _ response: Any?) {
102
+ // guard !hasReturnedResult else { return }
103
+ // hasReturnedResult = true
104
+
105
+ callback?([error ?? NSNull(), response ?? NSNull()])
106
+ callback = nil
107
+ }
108
+
109
+ // ocr response
110
+ func resultData(_ resultmodel: ResultModel!) {
111
+
112
+ var results:[String: Any] = [:]
113
+ var frontData:[String: Any] = [:]
114
+ var backData:[String: Any] = [:]
115
+ var mrzData:[String: Any] = [:]
116
+ if let faceUri = AccurascanKyc.getImageUri(img: resultmodel.faceImage, name: nil) {
117
+ results["face"] = faceUri
118
+ }
119
+ if let frontUri = AccurascanKyc.getImageUri(img: resultmodel.frontSideImage, name: nil) {
120
+ results["front_img"] = frontUri
121
+ }
122
+ if let backUri = AccurascanKyc.getImageUri(img: resultmodel.backSideImage, name: nil) {
123
+ results["back_img"] = backUri
124
+ }
125
+ self.dictFaceDataFront = resultmodel.ocrFaceFrontData
126
+ for data in dictFaceDataFront {
127
+ if let k = data.key as? String {
128
+ if k == "Signature" {
129
+ if let base64img = data.value as? String {
130
+ let dataDecoded : Data = Data(base64Encoded: base64img, options: .ignoreUnknownCharacters)!
131
+ let decodedimage:UIImage = UIImage(data: dataDecoded)!
132
+ if let sigUri = AccurascanKyc.getImageUri(img: decodedimage, name: nil) {
133
+ frontData["signature"] = sigUri
134
+ }
135
+ }
136
+ } else {
137
+ frontData[k] = data.value as? String ?? data.value as? Int ?? ""
138
+ }
139
+ }
140
+
141
+ }
142
+
143
+ self.dictFaceDataBack = resultmodel.ocrFaceBackData
144
+ for data in dictFaceDataBack {
145
+ if let k = data.key as? String {
146
+ if k == "Signature" {
147
+ if let base64img = data.value as? String {
148
+ let dataDecoded : Data = Data(base64Encoded: base64img, options: .ignoreUnknownCharacters)!
149
+ let decodedimage:UIImage = UIImage(data: dataDecoded)!
150
+ if let sigUri = AccurascanKyc.getImageUri(img: decodedimage, name: nil) {
151
+ backData["signature"] = sigUri
152
+ }
153
+ }
154
+ } else {
155
+ backData[k] = data.value as? String ?? data.value as? Int ?? ""
156
+ }
157
+ }
158
+
159
+ }
160
+
161
+ self.dictSecuretyData = resultmodel.ocrSecurityData
162
+ for data in dictSecuretyData {
163
+ frontData[data.key as! String] = data.value as? String ?? data.value as? Int ?? ""
164
+ }
165
+
166
+ self.arrFrontResultKey = resultmodel.arrayocrFrontSideDataKey as! [String]
167
+ self.arrFrontResultValue = resultmodel.arrayocrFrontSideDataValue as! [String]
168
+ for i in arrFrontResultKey.indices {
169
+ if arrFrontResultKey[i] != "MRZ" {
170
+ frontData[arrFrontResultKey[i]] = arrFrontResultValue[i]
171
+ } else {
172
+ self.shareScanningListing = resultmodel.shareScanningMRZListing
173
+ let kK = shareScanningListing.allKeys
174
+ let vV = shareScanningListing.allValues
175
+ let dD : NSMutableDictionary = [:]
176
+ for i in (0 ..< kK.count) {
177
+ if (kK[i] as! String != "fontImageRotation") && (kK[i] as! String != "backImageRotation"){
178
+ if kK[i] as! String == "birth" || kK[i] as! String == "expirationDate" || kK[i] as! String == "issuedate" || kK[i] as! String == "issueDate"{
179
+ let daTE = date(toFormatedDate: (vV[i] as! String))
180
+ dD.setValue(daTE, forKey: (kK[i] as? String)!)
181
+ }else{
182
+ dD.setValue(vV[i] as? String, forKey: (kK[i] as? String)!)
183
+ }
184
+ }
185
+ }
186
+ mrzData = getMRZKeyValue()
187
+ // mrzData = dD as! [String : Any] //self.getMRZKeyValue()
188
+ // mrzData["Other Id2"] = shareScanningListing["personalNumber2"]
189
+ // mrzData["Document Type"] = shareScanningListing["passportType"]
190
+ }
191
+ }
192
+
193
+ self.arrBackResultKey = resultmodel.arrayocrBackSideDataKey as! [String]
194
+ self.arrBackResultValue = resultmodel.arrayocrBackSideDataValue as! [String]
195
+ for i in arrBackResultKey.indices {
196
+ if arrBackResultKey[i] != "MRZ" {
197
+ backData[arrBackResultKey[i]] = arrBackResultValue[i]
198
+ } else {
199
+ self.shareScanningListing = resultmodel.shareScanningMRZListing
200
+ let kK = shareScanningListing.allKeys
201
+ let vV = shareScanningListing.allValues
202
+ let dD : NSMutableDictionary = [:]
203
+ for i in (0 ..< kK.count) {
204
+ if (kK[i] as! String != "fontImageRotation") && (kK[i] as! String != "backImageRotation"){
205
+ if kK[i] as! String == "birth" || kK[i] as! String == "expirationDate" || kK[i] as! String == "issuedate" || kK[i] as! String == "issueDate"{
206
+ let daTE = date(toFormatedDate: (vV[i] as! String))
207
+ dD.setValue(daTE, forKey: (kK[i] as? String)!)
208
+ }else{
209
+ dD.setValue(vV[i] as? String, forKey: (kK[i] as? String)!)
210
+ }
211
+
212
+ }
213
+ }
214
+ mrzData = getMRZKeyValue()
215
+ // mrzData = dD as! [String : Any] //self.getMRZKeyValue()
216
+ // mrzData["Other Id2"] = shareScanningListing["personalNumber2"]
217
+ // mrzData["Document Type"] = shareScanningListing["passportType"]
218
+ }
219
+ }
220
+ results["front_data"] = frontData
221
+ results["back_data"] = backData
222
+ results["mrz_data"] = mrzData
223
+ results["type"] = "OCR"
224
+
225
+ // callBack!([NSNull(),AccurascanKyc.convertJSONString(results:results)])
226
+ // self.dismiss(animated: true)
227
+ let jsonString = AccurascanKyc.convertJSONString(results: results)
228
+ sendResultOnce(NSNull(), jsonString)
229
+ }
230
+
231
+ func reco_msg(_ message: String!) {
232
+ var msg = String();
233
+ if(message == ACCURA_ERROR_CODE_MOTION) {
234
+ if accuraErrorCode["ACCURA_ERROR_CODE_MOTION"] != nil{
235
+ msg = accuraErrorCode["ACCURA_ERROR_CODE_MOTION"] as! String
236
+
237
+ }else{
238
+ msg = "Keep Document Steady";
239
+ }
240
+ } else if(message == ACCURA_ERROR_CODE_DOCUMENT_IN_FRAME) {
241
+ if accuraErrorCode["ACCURA_ERROR_CODE_DOCUMENT_IN_FRAME"] != nil{
242
+
243
+ msg = accuraErrorCode["ACCURA_ERROR_CODE_DOCUMENT_IN_FRAME"] as! String
244
+
245
+ }else{
246
+ msg = "Keep document in frame";
247
+ }
248
+ } else if(message == ACCURA_ERROR_CODE_BRING_DOCUMENT_IN_FRAME) {
249
+ if accuraErrorCode["ACCURA_ERROR_CODE_BRING_DOCUMENT_IN_FRAME"] != nil{
250
+ msg = accuraErrorCode["ACCURA_ERROR_CODE_BRING_DOCUMENT_IN_FRAME"] as! String
251
+
252
+ }else{
253
+ msg = "Bring card near to frame";
254
+ }
255
+ } else if(message == ACCURA_ERROR_CODE_PROCESSING) {
256
+ if accuraErrorCode["ACCURA_ERROR_CODE_PROCESSING"] != nil{
257
+ msg = accuraErrorCode["ACCURA_ERROR_CODE_PROCESSING"] as! String
258
+
259
+ }else{
260
+ msg = "Processing...";
261
+ }
262
+ } else if(message == ACCURA_ERROR_CODE_BLUR_DOCUMENT) {
263
+ if accuraErrorCode["ACCURA_ERROR_CODE_BLUR_DOCUMENT"] != nil{
264
+ msg = accuraErrorCode["ACCURA_ERROR_CODE_BLUR_DOCUMENT"] as! String
265
+
266
+ }else{
267
+ msg = "Blur detect in document";
268
+ }
269
+ } else if(message == ACCURA_ERROR_CODE_FACE_BLUR) {
270
+ if accuraErrorCode["ACCURA_ERROR_CODE_FACE_BLUR"] != nil{
271
+ msg = accuraErrorCode["ACCURA_ERROR_CODE_FACE_BLUR"] as! String
272
+
273
+ }else{
274
+ msg = "Blur detected over face";
275
+ }
276
+ } else if(message == ACCURA_ERROR_CODE_GLARE_DOCUMENT) {
277
+ if accuraErrorCode["ACCURA_ERROR_CODE_GLARE_DOCUMENT"] != nil{
278
+ msg = accuraErrorCode["ACCURA_ERROR_CODE_GLARE_DOCUMENT"] as! String
279
+
280
+ }else{
281
+ msg = "Glare detect in document";
282
+ }
283
+ } else if(message == ACCURA_ERROR_CODE_HOLOGRAM) {
284
+ if accuraErrorCode["ACCURA_ERROR_CODE_HOLOGRAM"] != nil{
285
+ msg = accuraErrorCode["ACCURA_ERROR_CODE_HOLOGRAM"] as! String
286
+
287
+ }else{
288
+ msg = "Hologram Detected";
289
+ }
290
+ } else if(message == ACCURA_ERROR_CODE_DARK_DOCUMENT) {
291
+ if accuraErrorCode["ACCURA_ERROR_CODE_DARK_DOCUMENT"] != nil{
292
+ msg = accuraErrorCode["ACCURA_ERROR_CODE_DARK_DOCUMENT"] as! String
293
+
294
+ }else{
295
+ msg = "Low lighting detected";
296
+ }
297
+ } else if(message == ACCURA_ERROR_CODE_PHOTO_COPY_DOCUMENT) {
298
+ if accuraErrorCode["ACCURA_ERROR_CODE_PHOTO_COPY_DOCUMENT"] != nil{
299
+ msg = accuraErrorCode["ACCURA_ERROR_CODE_PHOTO_COPY_DOCUMENT"] as! String
300
+
301
+ }else{
302
+ msg = "Can not accept Photo Copy Document";
303
+ }
304
+ } else if(message == ACCURA_ERROR_CODE_FACE) {
305
+ if accuraErrorCode["ACCURA_ERROR_CODE_FACE"] != nil{
306
+ msg = accuraErrorCode["ACCURA_ERROR_CODE_FACE"] as! String
307
+
308
+ }else{
309
+ msg = "Face not detected";
310
+ }
311
+ } else if(message == ACCURA_ERROR_CODE_MRZ) {
312
+ if accuraErrorCode["ACCURA_ERROR_CODE_MRZ"] != nil{
313
+ msg = accuraErrorCode["ACCURA_ERROR_CODE_MRZ"] as! String
314
+
315
+ }else{
316
+ msg = "MRZ not detected";
317
+ }
318
+ } else if(message == ACCURA_ERROR_CODE_PASSPORT_MRZ) {
319
+ if accuraErrorCode["ACCURA_ERROR_CODE_PASSPORT_MRZ"] != nil{
320
+ msg = accuraErrorCode["ACCURA_ERROR_CODE_PASSPORT_MRZ"] as! String
321
+
322
+ }else{
323
+ msg = "Passport MRZ not detected";
324
+ }
325
+ } else if(message == ACCURA_ERROR_CODE_ID_MRZ) {
326
+ if accuraErrorCode["ACCURA_ERROR_CODE_ID_MRZ"] != nil{
327
+ msg = accuraErrorCode["ACCURA_ERROR_CODE_ID_MRZ"] as! String
328
+
329
+ }else{
330
+ msg = "ID MRZ not detected"
331
+ }
332
+ } else if(message == ACCURA_ERROR_CODE_VISA_MRZ) {
333
+ if accuraErrorCode["ACCURA_ERROR_CODE_VISA_MRZ"] != nil{
334
+ msg = accuraErrorCode["ACCURA_ERROR_CODE_VISA_MRZ"] as! String
335
+
336
+ }else{
337
+ msg = "Visa MRZ not detected"
338
+ }
339
+ }else if(message == ACCURA_ERROR_CODE_UPSIDE_DOWN_SIDE) {
340
+ if accuraErrorCode["ACCURA_ERROR_CODE_UPSIDE_DOWN_SIDE"] != nil{
341
+ msg = accuraErrorCode["ACCURA_ERROR_CODE_UPSIDE_DOWN_SIDE"] as! String
342
+
343
+ }else{
344
+ msg = "Document is upside down. Place it properly"
345
+ }
346
+ }else if(message == ACCURA_ERROR_CODE_WRONG_SIDE) {
347
+ if accuraErrorCode["ACCURA_ERROR_CODE_WRONG_SIDE"] != nil{
348
+ msg = accuraErrorCode["ACCURA_ERROR_CODE_WRONG_SIDE"] as! String
349
+
350
+ }else{
351
+ msg = "Scanning wrong side of Document"
352
+ }
353
+ }else {
354
+ msg = message;
355
+ }
356
+ // lblOCRMsg.text = msg
357
+ sendResultOnce(msg, NSNull())
358
+ }
359
+
360
+ func recognizeFailed(_ message: String!) {
361
+ // print("MRZ Failed:", message ?? "")
362
+ let alert = UIAlertController(title: "AccuraSDK", message: message, preferredStyle: .alert)
363
+ let yesButton = UIAlertAction(title: "OK", style: .default) { _ in
364
+ }
365
+ alert.addAction(yesButton)
366
+ self.present(alert, animated: true, completion: nil)
367
+ }
368
+
369
+ func recognizeSucceed(_ scanedInfo: NSMutableDictionary!, recType: RecType, bRecDone: Bool, bFaceReplace: Bool, bMrzFirst: Bool, photoImage: UIImage, docFrontImage: UIImage!, docbackImage: UIImage!) {
370
+
371
+
372
+ var results:[String: Any] = [:]
373
+ var mrzData:[String: String] = [:]
374
+ // print("----------- MRZ recognizeSucceed -----------")
375
+ // print("bMrzFirst:", bMrzFirst)
376
+ // print("scanedInfo:")
377
+ // if let info = scanedInfo {
378
+ // print(info)
379
+ // } else {
380
+ // print("scanedInfo = nil")
381
+ // }
382
+ //
383
+ // print("recType:", recType.rawValue)
384
+ //
385
+ // print("bRecDone:", bRecDone)
386
+ // print("bFaceReplace:", bFaceReplace)
387
+ //
388
+ //
389
+ // if let photo = photoImage.cgImage {
390
+ // print("photoImage size:", photo.width, "x", photo.height)
391
+ // } else {
392
+ // print("photoImage exists but no CGImage")
393
+ // }
394
+ //
395
+ // if let front = docFrontImage {
396
+ // print("docFrontImage size:", front.size)
397
+ // } else {
398
+ // print("docFrontImage = nil")
399
+ // }
400
+ //
401
+ // if let back = docbackImage {
402
+ // print("docBackImage size:", back.size)
403
+ // } else {
404
+ // print("docBackImage = nil")
405
+ // }
406
+ //
407
+ // print("---------------------------------------------")
408
+ //
409
+ //
410
+
411
+ if let frontUri = AccurascanKyc.getImageUri(img: docFrontImage, name: nil) {
412
+ results["front_img"] = frontUri
413
+ }
414
+
415
+ if let backUri = AccurascanKyc.getImageUri(img: docbackImage, name: nil) {
416
+ results["back_img"] = backUri
417
+ }
418
+
419
+ if let faceUri = AccurascanKyc.getImageUri(img: photoImage, name: nil) {
420
+ results["face"] = faceUri
421
+ }
422
+
423
+ // MRZ values
424
+ self.shareScanningListing = scanedInfo
425
+ mrzData = getMRZKeyValue()
426
+
427
+ results["mrz_data"] = mrzData
428
+ results["type"] = "MRZ"
429
+
430
+ let jsonString = AccurascanKyc.convertJSONString(results: results)
431
+
432
+ sendResultOnce(NSNull(), jsonString)
433
+ // }
434
+ }
435
+ // MARK: - Helper function
436
+ func getMRZKeyValue() -> [String: String] {
437
+ var mrzData:[String: String] = [:]
438
+ // print("\(shareScanningListing)")
439
+ if let line = shareScanningListing["lines"] as? String {
440
+ mrzData["MRZ"] = line
441
+
442
+ }
443
+
444
+ if let docLivenessFront = shareScanningListing["Document Liveness"] as? String {
445
+ mrzData["Document Liveness Front"] = docLivenessFront
446
+ }
447
+ if let docLivenessBack = shareScanningListing["Document Back Liveness"] as? String {
448
+ mrzData["Document Liveness Back"] = docLivenessBack
449
+ }
450
+
451
+ if let givenname = shareScanningListing["givenname"] as? String {
452
+ mrzData["First Name"] = givenname
453
+ } else if let givenname = shareScanningListing["givenNames"] as? String {
454
+ mrzData["First Name"] = givenname
455
+ }
456
+
457
+ if let surname = shareScanningListing["surname"] as? String {
458
+ mrzData["Last Name"] = surname
459
+
460
+ } else if let surname = shareScanningListing["surName"] as? String {
461
+ mrzData["Last Name"] = surname
462
+
463
+ }
464
+
465
+ if let docnumber = shareScanningListing["passportNumber"] as? String {
466
+ mrzData["Document No."] = docnumber
467
+
468
+ } else if let docnumber = shareScanningListing["docNumber"] as? String {
469
+ mrzData["Document No."] = docnumber
470
+
471
+ }
472
+ if let documentType = shareScanningListing["passportType"] as? String {
473
+ mrzData["Document Type"] = documentType
474
+
475
+ } else if let docnumber = shareScanningListing["docNumber"] as? String {
476
+ mrzData["Document No."] = docnumber
477
+
478
+ }
479
+
480
+ if let docchecksum = shareScanningListing["docchecksum"] as? String {
481
+ mrzData["Document check No."] = docchecksum
482
+ } else if let docchecksum = shareScanningListing["passportNumberChecksum"] as? String {
483
+ mrzData["Document check No."] = docchecksum
484
+ }
485
+
486
+ if let correctdocchecksum = shareScanningListing["correctdocchecksum"] as? String {
487
+ mrzData["Correct Document check No."] = correctdocchecksum
488
+
489
+ } else if let correctdocchecksum = shareScanningListing["correctPassportChecksum"] as? String {
490
+ mrzData["Correct Document check No."] = correctdocchecksum
491
+
492
+ }
493
+ if let contri = shareScanningListing["country"] as? String {
494
+ mrzData["Country"] = contri
495
+
496
+ }
497
+ if let nationality = shareScanningListing["nationality"] as? String {
498
+ mrzData["Nationality"] = nationality
499
+
500
+ }
501
+ if let birth = shareScanningListing["birth"] as? String {
502
+ mrzData["Date of Birth"] = date(toFormatedDate: birth)
503
+
504
+ }
505
+ if let birthchecksum = shareScanningListing["birthchecksum"] as? String {
506
+ mrzData["Birth Check No."] = birthchecksum
507
+
508
+ } else if let birthchecksum = shareScanningListing["BirthChecksum"] as? String {
509
+ mrzData["Birth Check No."] = birthchecksum
510
+
511
+ }
512
+ if let correctbirthchecksum = shareScanningListing["correctbirthchecksum"] as? String {
513
+ mrzData["Correct Birth Check No."] = correctbirthchecksum
514
+
515
+ } else if let correctbirthchecksum = shareScanningListing["correctBirthChecksum"] as? String {
516
+ mrzData["Correct Birth Check No."] = correctbirthchecksum
517
+
518
+ }
519
+ if let expirationdate = shareScanningListing["expirationDate"] as? String {
520
+ mrzData["Date of Expiry"] = date(toFormatedDate: expirationdate)
521
+
522
+ }
523
+ if let expirationchecksum = shareScanningListing["expirationchecksum"] as? String {
524
+ mrzData["Expiration Check No."] = expirationchecksum
525
+
526
+ } else if let expirationchecksum = shareScanningListing["expirationDateChecksum"] as? String {
527
+ mrzData["Expiration Check No."] = expirationchecksum
528
+
529
+ }
530
+ if let correctexpirationchecksum = shareScanningListing["correctexpirationchecksum"] as? String {
531
+ mrzData["Correct Expiration Check No."] = correctexpirationchecksum
532
+
533
+ } else if let correctexpirationchecksum = shareScanningListing["correctExpirationChecksum"] as? String {
534
+ mrzData["Correct Expiration Check No."] = correctexpirationchecksum
535
+
536
+ }
537
+ if let issuedate = shareScanningListing["issuedate"] as? String {
538
+ mrzData["Date Of Issue"] = date(toFormatedDate: issuedate)
539
+
540
+ } else if let issuedate = shareScanningListing["issueDate"] as? String {
541
+ mrzData["Date Of Issue"] = date(toFormatedDate: issuedate)
542
+
543
+ }
544
+ if let departmentnumber = shareScanningListing["departmentnumber"] as? String {
545
+ mrzData["Department No."] = departmentnumber
546
+
547
+ }else if let departmentnumber = shareScanningListing["departmentNumber"] as? String {
548
+ mrzData["Department No."] = departmentnumber
549
+
550
+ }
551
+ if let otherid = shareScanningListing["otherid"] as? String {
552
+ mrzData["Other ID"] = otherid
553
+
554
+ } else if let otherid = shareScanningListing["personalNumber"] as? String {
555
+ mrzData["Other ID"] = otherid
556
+
557
+ }
558
+ if let otherid = shareScanningListing["otherid"] as? String {
559
+ mrzData["Other ID2"] = otherid
560
+
561
+ } else if let otherid = shareScanningListing["personalNumber2"] as? String {
562
+ if otherid != "" {
563
+ mrzData["Other ID2"] = otherid
564
+ }
565
+ }
566
+
567
+
568
+ if let otheridchecksum = shareScanningListing["personalNumberChecksum"] as? String {
569
+ mrzData["Other ID Check"] = otheridchecksum
570
+
571
+ } else if let otheridchecksum = shareScanningListing["otherIdChecksum"] as? String {
572
+ mrzData["Other ID Check"] = otheridchecksum
573
+
574
+ }
575
+ if let secondrowchecksum = shareScanningListing["secondrowchecksum"] as? String {
576
+ mrzData["Second Row Check No."] = secondrowchecksum
577
+
578
+ } else if let secondrowchecksum = shareScanningListing["secondRowChecksum"] as? String {
579
+ mrzData["Second Row Check No."] = secondrowchecksum
580
+
581
+ }
582
+ if let correctsecondrowchecksum = shareScanningListing["correctsecondrowchecksum"] as? String {
583
+ mrzData["Correct Second Row Check No."] = correctsecondrowchecksum
584
+
585
+ } else if let correctsecondrowchecksum = shareScanningListing["correctSecondrowChecksum"] as? String {
586
+ mrzData["Correct Second Row Check No."] = correctsecondrowchecksum
587
+
588
+ }
589
+ mrzData["sex"] = ""
590
+ if let sx = shareScanningListing["sex"] as? String {
591
+ if sx == "F" {
592
+ mrzData["sex"] = "FEMALE"
593
+ } else if sx == "M" {
594
+ mrzData["sex"] = "MALE"
595
+ } else if sx == "X"{
596
+ mrzData["sex"] = "OTHER"
597
+ }else{
598
+ mrzData["sex"] = sx
599
+ }
600
+ }
601
+
602
+ return mrzData
603
+ }
604
+
605
+ func date(toFormatedDate dateStr: String?) -> String? {
606
+ let dateFormatter = DateFormatter()
607
+ dateFormatter.dateFormat = "yyMMdd"
608
+ let date: Date? = dateFormatter.date(from: dateStr ?? "")
609
+ dateFormatter.dateFormat = "dd-MM-yy"
610
+ if let date = date {
611
+ return dateFormatter.string(from: date)
612
+ }
613
+ return nil
614
+ }
615
+
616
+ func date(to dateStr: String?) -> String? {
617
+ // Convert string to date object
618
+ let dateFormat = DateFormatter()
619
+ dateFormat.dateFormat = "yyMMdd"
620
+ let date: Date? = dateFormat.date(from: dateStr ?? "")
621
+ dateFormat.dateFormat = "yy-MM-dd"
622
+ if let date = date {
623
+ return dateFormat.string(from: date)
624
+ }
625
+ return nil
626
+ }
627
+ }
@@ -28,6 +28,10 @@ RCT_EXTERN_METHOD(openGallery1:(NSArray *)argsNew callback:(RCTResponseSenderBlo
28
28
 
29
29
  RCT_EXTERN_METHOD(openGallery2:(NSArray *)argsNew callback:(RCTResponseSenderBlock)callback)
30
30
 
31
+ RCT_EXTERN_METHOD(startUploadOcrWithCard:(NSArray *)argsNew callback:(RCTResponseSenderBlock)callback)
32
+
33
+ //RCT_EXTERN_METHOD(startUploadMRZ:(NSArray *)argsNew callback:(RCTResponseSenderBlock)callback)
34
+
31
35
  + (BOOL)requiresMainQueueSetup
32
36
  {
33
37
  return NO;
@@ -792,9 +792,99 @@ class AccurascanKyc: NSObject {
792
792
  // }
793
793
  }
794
794
  }
795
-
796
-
797
-
795
+ // MARK: - Static OCR and MRZ
796
+ @objc(startUploadOcrWithCard:callback:)
797
+ func startUploadOcrWithCard(_ argsNew: NSArray,
798
+ callback: @escaping RCTResponseSenderBlock) {
799
+
800
+ guard
801
+ let countryId = argsNew[0] as? Int,
802
+ let cardId = argsNew[1] as? Int,
803
+ let cardName = argsNew[2] as? String,
804
+ let cardType = argsNew[3] as? Int,
805
+ let imagePath = argsNew[4] as? String,
806
+ let side = argsNew[5] as? String
807
+ else {
808
+ callback(["Invalid parameters", NSNull()])
809
+ return
810
+ }
811
+ // print("imagePath: \(imagePath)")
812
+ let cleanedPath = imagePath.replacingOccurrences(of: "file://", with: "")
813
+ let imageURL = URL(fileURLWithPath: cleanedPath)
814
+ // print("imageURL: \(imageURL)")
815
+ guard
816
+ let data = try? Data(contentsOf: imageURL),
817
+ let image = UIImage(data: data)
818
+ else {
819
+ callback(["Invalid image path", NSNull()])
820
+ return
821
+ }
822
+
823
+ DispatchQueue.main.async {
824
+ let processor = AccuraUploadViewController()
825
+ processor.startOCR(
826
+ countryId: Int32(countryId),
827
+ cardId: Int32(cardId),
828
+ cardName: cardName,
829
+ cardType: Int32(cardType),
830
+ image: image,
831
+ side: side,
832
+ callback: callback
833
+ )
834
+ }
835
+ }
836
+
837
+ // @objc(startUploadMRZ:callback:)
838
+ // func startUploadMRZ(_ argsNew: NSArray, callback: @escaping RCTResponseSenderBlock) {
839
+ //
840
+ // guard
841
+ // let docType = argsNew[0] as? String,
842
+ // let imagePath = argsNew[1] as? String,
843
+ // let detectFace = argsNew[2] as? Bool
844
+ // else {
845
+ // callback(["Invalid parameters", NSNull()])
846
+ // return
847
+ // }
848
+ //
849
+ // print("MRZ imagePath: \(imagePath)")
850
+ //
851
+ // let cleanedPath = imagePath.replacingOccurrences(of: "file://", with: "")
852
+ // let imageURL = URL(fileURLWithPath: cleanedPath)
853
+ //
854
+ // guard
855
+ // let data = try? Data(contentsOf: imageURL),
856
+ // let image = UIImage(data: data)
857
+ // else {
858
+ // callback(["Invalid image path", NSNull()])
859
+ // return
860
+ // }
861
+ //
862
+ // DispatchQueue.main.async {
863
+ //
864
+ //
865
+ // let processor = AccuraUploadViewController()
866
+ //
867
+ // var mrzType:Int32 = 0
868
+ //
869
+ // if docType == "passport_mrz" {
870
+ // mrzType = 1
871
+ // } else if docType == "id_mrz" {
872
+ // mrzType = 2
873
+ // } else if docType == "visa_card" {
874
+ // mrzType = 3
875
+ // }
876
+ //
877
+ // processor.startMRZ(
878
+ // docType: docType,
879
+ // mrzType: mrzType,
880
+ // image: image,
881
+ // detectFace: detectFace,
882
+ // callback: callback
883
+ // )
884
+ //
885
+ // }
886
+ // }
887
+ // MARK: - Helper method
798
888
  static func convertJSONString(results: [String: Any]) -> String {
799
889
 
800
890
  if let theJSONData = try? JSONSerialization.data( withJSONObject: results, options: .prettyPrinted ),
@@ -8,5 +8,6 @@ var _reactNative = require("react-native");
8
8
  const {
9
9
  AccurascanKyc
10
10
  } = _reactNative.NativeModules;
11
+ // const AccurascanKyc = TurboModuleRegistry.get('AccurascanKyc') ?? NativeModules.AccurascanKyc;
11
12
  var _default = exports.default = AccurascanKyc;
12
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","AccurascanKyc","NativeModules","_default","exports","default"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEA,MAAM;EAAEC;AAAc,CAAC,GAAGC,0BAAa;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEzBJ,aAAa","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","AccurascanKyc","NativeModules","_default","exports","default"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,MAAM;EAAEC;AAAc,CAAC,GAAGC,0BAAa;AACvC;AAAA,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEeJ,aAAa","ignoreList":[]}
@@ -2,5 +2,7 @@ import { NativeModules } from 'react-native';
2
2
  const {
3
3
  AccurascanKyc
4
4
  } = NativeModules;
5
+ // const AccurascanKyc = TurboModuleRegistry.get('AccurascanKyc') ?? NativeModules.AccurascanKyc;
6
+
5
7
  export default AccurascanKyc;
6
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["NativeModules","AccurascanKyc"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"AAAA,SAASA,aAAa,QAAQ,cAAc;AAE5C,MAAM;EAAEC;AAAc,CAAC,GAAGD,aAAa;AAEvC,eAAeC,aAAa","ignoreList":[]}
1
+ {"version":3,"names":["NativeModules","AccurascanKyc"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"AAAA,SAASA,aAAa,QAAQ,cAAc;AAC5C,MAAM;EAAEC;AAAc,CAAC,GAAGD,aAAa;AACvC;;AAEA,eAAeC,aAAa","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAEA,QAAA,MAAQ,aAAa,KAAkB,CAAC;AAExC,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AACA,QAAA,MAAQ,aAAa,KAAkB,CAAC;AAGxC,eAAe,aAAa,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "accurascan_kyc",
3
- "version": "1.4.3",
3
+ "version": "1.4.4",
4
4
  "description": "Accura Scan",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -57,7 +57,7 @@
57
57
  "@react-native-community/bob": "^0.17.1",
58
58
  "@react-native-community/eslint-config": "^3.0.2",
59
59
  "@release-it/conventional-changelog": "^5.0.0",
60
- "@types/jest": "^29.5.12",
60
+ "@types/jest": "^29.5.13",
61
61
  "@types/react": "~18.2.64",
62
62
  "@types/react-native": "0.73.0",
63
63
  "commitlint": "^17.0.2",
@@ -69,7 +69,7 @@
69
69
  "pod-install": "^0.1.0",
70
70
  "prettier": "^3.3.3",
71
71
  "react": "18.2.0",
72
- "react-native": "0.76.9",
72
+ "react-native": "0.77.3",
73
73
  "react-native-builder-bob": "^0.20.0",
74
74
  "release-it": "^17.10.0",
75
75
  "typescript": "^5.4.5"
package/src/index.tsx CHANGED
@@ -1,5 +1,5 @@
1
1
  import { NativeModules } from 'react-native';
2
-
3
2
  const { AccurascanKyc } = NativeModules;
3
+ // const AccurascanKyc = TurboModuleRegistry.get('AccurascanKyc') ?? NativeModules.AccurascanKyc;
4
4
 
5
- export default AccurascanKyc;
5
+ export default AccurascanKyc;