@smile_identity/react-native 11.1.7 → 11.1.9
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.
- package/android/gradle.properties +1 -1
- package/android/src/main/java/com/smileidentity/react/SmileIdModule.kt +10 -0
- package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDBiometricKYCViewManager.kt +2 -0
- package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDConsentViewManager.kt +0 -1
- package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDDocumentCaptureViewManager.kt +0 -1
- package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDDocumentVerificationViewManager.kt +2 -0
- package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDEnhancedDocumentVerificationViewManager.kt +2 -0
- package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieAuthenticationViewManager.kt +1 -0
- package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieCaptureViewManager.kt +1 -0
- package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieEnrollmentViewManager.kt +1 -0
- package/android/src/main/java/com/smileidentity/react/views/SmileIDBiometricKYCView.kt +2 -0
- package/android/src/main/java/com/smileidentity/react/views/SmileIDConsentView.kt +1 -0
- package/android/src/main/java/com/smileidentity/react/views/SmileIDDocumentCaptureView.kt +0 -10
- package/android/src/main/java/com/smileidentity/react/views/SmileIDDocumentVerificationView.kt +2 -0
- package/android/src/main/java/com/smileidentity/react/views/SmileIDEnhancedDocumentVerificationView.kt +2 -0
- package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieAuthenticationView.kt +1 -0
- package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieCaptureView.kt +17 -4
- package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieEnrollmentView.kt +1 -0
- package/android/src/main/java/com/smileidentity/react/views/SmileIDView.kt +5 -6
- package/android/src/oldarch/SmileIdSpec.kt +2 -0
- package/ios/RNSmileID.mm +1 -0
- package/ios/RNSmileID.swift +476 -469
- package/ios/View/SmileIDBiometricKYCView.swift +2 -0
- package/ios/View/SmileIDDocumentVerificationView.swift +1 -0
- package/ios/View/SmileIDEnhancedDocumentVerificationView.swift +1 -0
- package/ios/View/SmileIDSmartSelfieAuthView.swift +1 -0
- package/ios/View/SmileIDSmartSelfieCaptureView.swift +58 -38
- package/ios/View/SmileIDSmartSelfieEnrollmentView.swift +1 -0
- package/ios/ViewManagers/SmileIDBiometricKYCViewManager.swift +2 -0
- package/ios/ViewManagers/SmileIDDocumentCaptureViewManager.swift +0 -1
- package/ios/ViewManagers/SmileIDDocumentVerificationViewManager.swift +1 -0
- package/ios/ViewManagers/SmileIDEnhancedDocumentVerificationViewManager.swift +1 -0
- package/ios/ViewManagers/SmileIDSmartSelfieAuthenticationViewManager.swift +1 -0
- package/ios/ViewManagers/SmileIDSmartSelfieCaptureViewManager.swift +5 -7
- package/ios/ViewManagers/SmileIDSmartSelfieEnrollmentViewManager.swift +1 -0
- package/ios/ViewModels/SmileIDProductModel.swift +2 -0
- package/lib/commonjs/NativeSmileId.js.map +1 -1
- package/lib/commonjs/index.js +8 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/useSmileIDView.js +1 -1
- package/lib/commonjs/useSmileIDView.js.map +1 -1
- package/lib/module/NativeSmileId.js.map +1 -1
- package/lib/module/index.js +9 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/module/useSmileIDView.js +1 -1
- package/lib/module/useSmileIDView.js.map +1 -1
- package/lib/typescript/NativeSmileId.d.ts +8 -1
- package/lib/typescript/NativeSmileId.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +10 -2
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +7 -2
- package/lib/typescript/types.d.ts.map +1 -1
- package/package.json +4 -3
- package/react-native-smile-id.podspec +1 -1
- package/src/NativeSmileId.ts +9 -1
- package/src/index.tsx +24 -15
- package/src/types.ts +12 -2
- package/src/useSmileIDView.tsx +1 -1
package/ios/RNSmileID.swift
CHANGED
|
@@ -2,532 +2,539 @@ import SmileID
|
|
|
2
2
|
|
|
3
3
|
@objc(RNSmileID)
|
|
4
4
|
class RNSmileID: NSObject {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
SmileID.initialize(
|
|
34
|
-
config: config.toConfig(),
|
|
35
|
-
useSandbox: useSandBox
|
|
36
|
-
)
|
|
37
|
-
} else {
|
|
38
|
-
// Basic initialization with just sandbox flag
|
|
39
|
-
SmileID.initialize(useSandbox: useSandBox)
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
resolve(nil)
|
|
5
|
+
@objc(initialize:enableCrashReporting:config:apiKey:withResolver:withRejecter:)
|
|
6
|
+
func initialize(
|
|
7
|
+
useSandBox: Bool,
|
|
8
|
+
enableCrashReporting _: Bool,
|
|
9
|
+
config: NSDictionary?,
|
|
10
|
+
apiKey: String?,
|
|
11
|
+
resolve: @escaping RCTPromiseResolveBlock,
|
|
12
|
+
reject _: @escaping RCTPromiseRejectBlock
|
|
13
|
+
) {
|
|
14
|
+
SmileID.setWrapperInfo(name: .reactNative, version: "11.1.9")
|
|
15
|
+
|
|
16
|
+
// Handle different initialization scenarios based on provided parameters
|
|
17
|
+
if let apiKey = apiKey, let config = config {
|
|
18
|
+
// Initialize with API key and config
|
|
19
|
+
SmileID.initialize(
|
|
20
|
+
apiKey: apiKey,
|
|
21
|
+
config: config.toConfig(),
|
|
22
|
+
useSandbox: useSandBox
|
|
23
|
+
)
|
|
24
|
+
} else if let config = config {
|
|
25
|
+
// Initialize with just config
|
|
26
|
+
SmileID.initialize(
|
|
27
|
+
config: config.toConfig(),
|
|
28
|
+
useSandbox: useSandBox
|
|
29
|
+
)
|
|
30
|
+
} else {
|
|
31
|
+
// Basic initialization with just sandbox flag
|
|
32
|
+
SmileID.initialize(useSandbox: useSandBox)
|
|
43
33
|
}
|
|
44
34
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
35
|
+
resolve(nil)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@objc(setCallbackUrl:withResolver:withRejecter:)
|
|
39
|
+
func setCallbackUrl(callbackUrl: String, resolve: @escaping RCTPromiseResolveBlock, reject _: @escaping RCTPromiseRejectBlock) {
|
|
40
|
+
SmileID.setCallbackUrl(url: URL(string: callbackUrl))
|
|
41
|
+
resolve(nil)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
@objc(setAllowOfflineMode:withResolver:withRejecter:)
|
|
45
|
+
func setAllowOfflineMode(allowOfflineMode: Bool, resolve: @escaping RCTPromiseResolveBlock, reject _: @escaping RCTPromiseRejectBlock) {
|
|
46
|
+
SmileID.setAllowOfflineMode(allowOfflineMode: allowOfflineMode)
|
|
47
|
+
resolve(nil)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@objc(submitJob:withResolver:withRejecter:)
|
|
51
|
+
func submitJob(jobId: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
52
|
+
do {
|
|
53
|
+
try SmileID.submitJob(jobId: jobId)
|
|
54
|
+
resolve(nil)
|
|
55
|
+
} catch let error as NSError {
|
|
56
|
+
reject("Error", error.localizedDescription, error)
|
|
49
57
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
@objc(getSubmittedJobs:withRejecter:)
|
|
61
|
+
func getSubmittedJobs(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
62
|
+
do {
|
|
63
|
+
let jobs: [String] = SmileID.getUnsubmittedJobs()
|
|
64
|
+
resolve(jobs)
|
|
65
|
+
} catch let error as NSError {
|
|
66
|
+
reject("Error", error.localizedDescription, error)
|
|
55
67
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
@objc(getUnsubmittedJobs:withRejecter:)
|
|
71
|
+
func getUnsubmittedJobs(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
72
|
+
do {
|
|
73
|
+
let jobs: [String] = SmileID.getUnsubmittedJobs()
|
|
74
|
+
resolve(jobs)
|
|
75
|
+
} catch let error as NSError {
|
|
76
|
+
reject("Error", error.localizedDescription, error)
|
|
65
77
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
@objc(cleanup:withResolver:withRejecter:)
|
|
81
|
+
func cleanup(jobId: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
82
|
+
do {
|
|
83
|
+
try SmileID.cleanup(jobId: jobId)
|
|
84
|
+
resolve(nil)
|
|
85
|
+
} catch let error as NSError {
|
|
86
|
+
reject("Error", error.localizedDescription, error)
|
|
75
87
|
}
|
|
88
|
+
}
|
|
76
89
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
} catch let error as NSError {
|
|
83
|
-
reject("Error", error.localizedDescription, error)
|
|
84
|
-
}
|
|
90
|
+
@objc(authenticate:withResolver:withRejecter:)
|
|
91
|
+
func authenticate(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
92
|
+
guard let authenticationRequest = request.toAuthenticationRequest() else {
|
|
93
|
+
reject("Error", "Invalid request data", nil)
|
|
94
|
+
return
|
|
85
95
|
}
|
|
86
96
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
}
|
|
97
|
+
Task {
|
|
98
|
+
do {
|
|
99
|
+
let response = try await SmileID.api.authenticate(request: authenticationRequest)
|
|
100
|
+
self.resolveResponse(response, resolve: resolve, reject: reject)
|
|
101
|
+
} catch {
|
|
102
|
+
reject("Error", error.localizedDescription, error)
|
|
103
|
+
}
|
|
95
104
|
}
|
|
105
|
+
}
|
|
96
106
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
Task {
|
|
105
|
-
do {
|
|
106
|
-
let response = try await SmileID.api.authenticate(request: authenticationRequest)
|
|
107
|
-
self.resolveResponse(response, resolve: resolve, reject: reject)
|
|
108
|
-
} catch {
|
|
109
|
-
reject("Error", error.localizedDescription, error)
|
|
110
|
-
}
|
|
111
|
-
}
|
|
107
|
+
@objc(prepUpload:withResolver:withRejecter:)
|
|
108
|
+
func prepUpload(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
109
|
+
guard let prepUploadRequest = request.toPrepUploadRequest() else {
|
|
110
|
+
reject("Error", "Invalid prep upload request", nil)
|
|
111
|
+
return
|
|
112
112
|
}
|
|
113
113
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
Task {
|
|
122
|
-
do {
|
|
123
|
-
let response = try await SmileID.api.prepUpload(request: prepUploadRequest)
|
|
124
|
-
self.resolveResponse(response, resolve: resolve, reject: reject)
|
|
125
|
-
} catch {
|
|
126
|
-
reject("Error", error.localizedDescription, error)
|
|
127
|
-
}
|
|
128
|
-
}
|
|
114
|
+
Task {
|
|
115
|
+
do {
|
|
116
|
+
let response = try await SmileID.api.prepUpload(request: prepUploadRequest)
|
|
117
|
+
self.resolveResponse(response, resolve: resolve, reject: reject)
|
|
118
|
+
} catch {
|
|
119
|
+
reject("Error", error.localizedDescription, error)
|
|
120
|
+
}
|
|
129
121
|
}
|
|
122
|
+
}
|
|
130
123
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
124
|
+
@objc(upload:request:withResolver:withRejecter:)
|
|
125
|
+
func upload(url: String, request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
126
|
+
guard let uploadRequest = request.toUploadRequest() else {
|
|
127
|
+
reject("Error", "Invalid upload request", nil)
|
|
128
|
+
return
|
|
129
|
+
}
|
|
137
130
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
}
|
|
131
|
+
guard let zipData = try? LocalStorage.toZip(uploadRequest: uploadRequest) else {
|
|
132
|
+
reject("Error", "Unable to zip file", nil)
|
|
133
|
+
return
|
|
134
|
+
}
|
|
135
|
+
Task {
|
|
136
|
+
do {
|
|
137
|
+
try await SmileID.api.upload(zip: zipData, to: url)
|
|
138
|
+
resolve(nil)
|
|
139
|
+
} catch {
|
|
140
|
+
reject("Error", error.localizedDescription, error)
|
|
141
|
+
}
|
|
150
142
|
}
|
|
143
|
+
}
|
|
151
144
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
145
|
+
@objc(doEnhancedKyc:withResolver:withRejecter:)
|
|
146
|
+
func doEnhancedKyc(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
147
|
+
guard let partnerParamsDict = request["partnerParams"] as? NSDictionary else {
|
|
148
|
+
reject("doEnhancedKyc", "partnerParams is required", nil)
|
|
149
|
+
return
|
|
150
|
+
}
|
|
151
|
+
guard let partnerParams = partnerParamsDict.toPartnerParams() else {
|
|
152
|
+
reject("doEnhancedKyc", "partnerParams is missing required data", nil)
|
|
153
|
+
return
|
|
154
|
+
}
|
|
155
|
+
guard let country = request["country"] as? String else {
|
|
156
|
+
reject("doEnhancedKyc", "country is required", nil)
|
|
157
|
+
return
|
|
158
|
+
}
|
|
159
|
+
guard let idType = request["idType"] as? String else {
|
|
160
|
+
reject("doEnhancedKyc", "idType is required", nil)
|
|
161
|
+
return
|
|
162
|
+
}
|
|
163
|
+
guard let idNumber = request["idNumber"] as? String else {
|
|
164
|
+
reject("doEnhancedKyc", "idNumber is required", nil)
|
|
165
|
+
return
|
|
166
|
+
}
|
|
167
|
+
guard let timestamp = request["timestamp"] as? String else {
|
|
168
|
+
reject("doEnhancedKyc", "timestamp is required", nil)
|
|
169
|
+
return
|
|
170
|
+
}
|
|
171
|
+
guard let signature = request["signature"] as? String else {
|
|
172
|
+
reject("doEnhancedKyc", "signature is required", nil)
|
|
173
|
+
return
|
|
174
|
+
}
|
|
182
175
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
176
|
+
let consentInfo: ConsentInformation
|
|
177
|
+
if let consentInformation = request["consentInformation"] as? NSDictionary {
|
|
178
|
+
consentInfo = consentInformation.toConsentInfo()
|
|
179
|
+
} else {
|
|
180
|
+
consentInfo = ConsentInformation(consented: ConsentedInformation(consentGrantedDate: getCurrentIsoTimestamp(),
|
|
181
|
+
personalDetails: false,
|
|
182
|
+
contactInformation: false,
|
|
183
|
+
documentInformation: false)
|
|
184
|
+
)
|
|
185
|
+
}
|
|
193
186
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
}
|
|
219
|
-
// Assuming you have a method to convert response to a dictionary
|
|
220
|
-
resolve(["result": String(data: jsonData, encoding: .utf8)!])
|
|
221
|
-
} catch {
|
|
222
|
-
reject("Error", error.localizedDescription, error)
|
|
223
|
-
}
|
|
187
|
+
let request = EnhancedKycRequest(
|
|
188
|
+
country: country,
|
|
189
|
+
idType: idType,
|
|
190
|
+
idNumber: idNumber,
|
|
191
|
+
consentInformation: consentInfo,
|
|
192
|
+
firstName: request["firstName"] as? String,
|
|
193
|
+
middleName: request["middleName"] as? String,
|
|
194
|
+
lastName: request["lastName"] as? String,
|
|
195
|
+
dob: request["dob"] as? String,
|
|
196
|
+
phoneNumber: request["phoneNumber"] as? String,
|
|
197
|
+
bankCode: request["bankCode"] as? String,
|
|
198
|
+
callbackUrl: request["callbackUrl"] as? String,
|
|
199
|
+
partnerParams: partnerParams,
|
|
200
|
+
sourceSdk: "ios (react-native)",
|
|
201
|
+
timestamp: timestamp,
|
|
202
|
+
signature: signature
|
|
203
|
+
)
|
|
204
|
+
|
|
205
|
+
Task {
|
|
206
|
+
do {
|
|
207
|
+
let response = try await SmileID.api.doEnhancedKyc(request: request)
|
|
208
|
+
let encoder = JSONEncoder()
|
|
209
|
+
guard let jsonData = try? encoder.encode(response) else {
|
|
210
|
+
throw SmileIDError.unknown("doEnhancedKyc encoding error")
|
|
224
211
|
}
|
|
212
|
+
// Assuming you have a method to convert response to a dictionary
|
|
213
|
+
resolve(["result": String(data: jsonData, encoding: .utf8)!])
|
|
214
|
+
} catch {
|
|
215
|
+
reject("Error", error.localizedDescription, error)
|
|
216
|
+
}
|
|
225
217
|
}
|
|
218
|
+
}
|
|
226
219
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
220
|
+
@objc(doEnhancedKycAsync:withResolver:withRejecter:)
|
|
221
|
+
func doEnhancedKycAsync(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
222
|
+
guard let partnerParamsDict = request["partnerParams"] as? NSDictionary else {
|
|
223
|
+
reject("doEnhancedKyc", "partnerParams is required", nil)
|
|
224
|
+
return
|
|
225
|
+
}
|
|
226
|
+
guard let partnerParams = partnerParamsDict.toPartnerParams() else {
|
|
227
|
+
reject("doEnhancedKyc", "partnerParams is missing required data", nil)
|
|
228
|
+
return
|
|
229
|
+
}
|
|
230
|
+
guard let country = request["country"] as? String else {
|
|
231
|
+
reject("doEnhancedKyc", "country is required", nil)
|
|
232
|
+
return
|
|
233
|
+
}
|
|
234
|
+
guard let idType = request["idType"] as? String else {
|
|
235
|
+
reject("doEnhancedKyc", "idType is required", nil)
|
|
236
|
+
return
|
|
237
|
+
}
|
|
238
|
+
guard let idNumber = request["idNumber"] as? String else {
|
|
239
|
+
reject("doEnhancedKyc", "idNumber is required", nil)
|
|
240
|
+
return
|
|
241
|
+
}
|
|
242
|
+
guard let timestamp = request["timestamp"] as? String else {
|
|
243
|
+
reject("doEnhancedKyc", "timestamp is required", nil)
|
|
244
|
+
return
|
|
245
|
+
}
|
|
246
|
+
guard let signature = request["signature"] as? String else {
|
|
247
|
+
reject("doEnhancedKyc", "signature is required", nil)
|
|
248
|
+
return
|
|
249
|
+
}
|
|
257
250
|
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
251
|
+
guard let consentInformation = request["consentInformation"] as? NSDictionary else {
|
|
252
|
+
reject("doEnhancedKyc", "consentInformation is required", nil)
|
|
253
|
+
return
|
|
254
|
+
}
|
|
262
255
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
}
|
|
288
|
-
// Assuming you have a method to convert response to a dictionary
|
|
289
|
-
resolve(["result": String(data: jsonData, encoding: .utf8)!])
|
|
290
|
-
} catch {
|
|
291
|
-
reject("Error", error.localizedDescription, error)
|
|
292
|
-
}
|
|
256
|
+
let request = EnhancedKycRequest(
|
|
257
|
+
country: country,
|
|
258
|
+
idType: idType,
|
|
259
|
+
idNumber: idNumber,
|
|
260
|
+
consentInformation: consentInformation.toConsentInfo(),
|
|
261
|
+
firstName: request["firstName"] as? String,
|
|
262
|
+
middleName: request["middleName"] as? String,
|
|
263
|
+
lastName: request["lastName"] as? String,
|
|
264
|
+
dob: request["dob"] as? String,
|
|
265
|
+
phoneNumber: request["phoneNumber"] as? String,
|
|
266
|
+
bankCode: request["bankCode"] as? String,
|
|
267
|
+
callbackUrl: request["callbackUrl"] as? String,
|
|
268
|
+
partnerParams: partnerParams,
|
|
269
|
+
sourceSdk: "ios (react-native)",
|
|
270
|
+
timestamp: timestamp,
|
|
271
|
+
signature: signature
|
|
272
|
+
)
|
|
273
|
+
|
|
274
|
+
Task {
|
|
275
|
+
do {
|
|
276
|
+
let response = try await SmileID.api.doEnhancedKycAsync(request: request)
|
|
277
|
+
let encoder = JSONEncoder()
|
|
278
|
+
guard let jsonData = try? encoder.encode(response) else {
|
|
279
|
+
throw SmileIDError.unknown("doEnhancedKyc encoding error")
|
|
293
280
|
}
|
|
281
|
+
// Assuming you have a method to convert response to a dictionary
|
|
282
|
+
resolve(["result": String(data: jsonData, encoding: .utf8)!])
|
|
283
|
+
} catch {
|
|
284
|
+
reject("Error", error.localizedDescription, error)
|
|
285
|
+
}
|
|
294
286
|
}
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
@objc(getSmartSelfieJobStatus:withResolver:withRejecter:)
|
|
290
|
+
func getSmartSelfieJobStatus(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
291
|
+
getJobStatus(request: request, resolve: resolve, reject: reject)
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
@objc(getDocumentVerificationJobStatus:withResolver:withRejecter:)
|
|
295
|
+
func getDocumentVerificationJobStatus(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
296
|
+
getJobStatus(request: request, resolve: resolve, reject: reject)
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
@objc(getBiometricKycJobStatus:withResolver:withRejecter:)
|
|
300
|
+
func getBiometricKycJobStatus(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
301
|
+
getJobStatus(request: request, resolve: resolve, reject: reject)
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
@objc(getEnhancedDocumentVerificationJobStatus:withResolver:withRejecter:)
|
|
305
|
+
func getEnhancedDocumentVerificationJobStatus(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
306
|
+
getJobStatus(request: request, resolve: resolve, reject: reject)
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
@objc(getProductsConfig:withResolver:withRejecter:)
|
|
310
|
+
func getProductsConfig(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
311
|
+
guard let productsConfigRequest = request.toProductsConfigRequest() else {
|
|
312
|
+
reject("Error", "Invalid products config request", nil)
|
|
313
|
+
return
|
|
299
314
|
}
|
|
300
315
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
316
|
+
Task {
|
|
317
|
+
do {
|
|
318
|
+
let response = try await SmileID.api.getProductsConfig(request: productsConfigRequest)
|
|
319
|
+
self.resolveResponse(response, resolve: resolve, reject: reject)
|
|
320
|
+
} catch {
|
|
321
|
+
reject("Error", error.localizedDescription, error)
|
|
322
|
+
}
|
|
304
323
|
}
|
|
324
|
+
}
|
|
305
325
|
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
326
|
+
@objc(getValidDocuments:withResolver:withRejecter:)
|
|
327
|
+
func getValidDocuments(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
328
|
+
guard let validDocumentsRequest = request.toProductsConfigRequest() else {
|
|
329
|
+
reject("Error", "Invalid valid documents request", nil)
|
|
330
|
+
return
|
|
309
331
|
}
|
|
310
332
|
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
333
|
+
Task {
|
|
334
|
+
do {
|
|
335
|
+
let response = try await SmileID.api.getValidDocuments(request: validDocumentsRequest)
|
|
336
|
+
self.resolveResponse(response, resolve: resolve, reject: reject)
|
|
337
|
+
} catch {
|
|
338
|
+
reject("Error", error.localizedDescription, error)
|
|
339
|
+
}
|
|
314
340
|
}
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
self.resolveResponse(response, resolve: resolve, reject: reject)
|
|
327
|
-
} catch {
|
|
328
|
-
reject("Error", error.localizedDescription, error)
|
|
329
|
-
}
|
|
330
|
-
}
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
@objc(getServicesWithResolver:withRejecter:)
|
|
344
|
+
func getServices(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
345
|
+
Task {
|
|
346
|
+
do {
|
|
347
|
+
let response = try await SmileID.api.getServices()
|
|
348
|
+
self.resolveResponse(response, resolve: resolve, reject: reject)
|
|
349
|
+
} catch {
|
|
350
|
+
reject("Error", error.localizedDescription, error)
|
|
351
|
+
}
|
|
331
352
|
}
|
|
353
|
+
}
|
|
332
354
|
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
Task {
|
|
341
|
-
do {
|
|
342
|
-
let response = try await SmileID.api.getValidDocuments(request: validDocumentsRequest)
|
|
343
|
-
self.resolveResponse(response, resolve: resolve, reject: reject)
|
|
344
|
-
} catch {
|
|
345
|
-
reject("Error", error.localizedDescription, error)
|
|
346
|
-
}
|
|
347
|
-
}
|
|
355
|
+
@objc(getJobStatus:withResolver:withRejecter:)
|
|
356
|
+
func getJobStatus(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
357
|
+
guard let jobStatusRequest = request.toJobStatusRequest() else {
|
|
358
|
+
reject("Error", "Invalid job status request", nil)
|
|
359
|
+
return
|
|
348
360
|
}
|
|
349
361
|
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
reject("Error", error.localizedDescription, error)
|
|
358
|
-
}
|
|
359
|
-
}
|
|
362
|
+
Task {
|
|
363
|
+
do {
|
|
364
|
+
let response = try await SmileID.api.getJobStatus(request: jobStatusRequest)
|
|
365
|
+
self.resolveResponse(response, resolve: resolve, reject: reject)
|
|
366
|
+
} catch {
|
|
367
|
+
reject("Error", error.localizedDescription, error)
|
|
368
|
+
}
|
|
360
369
|
}
|
|
370
|
+
}
|
|
361
371
|
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
372
|
+
@objc(pollSmartSelfieJobStatus:withResolver:withRejecter:)
|
|
373
|
+
func pollSmartSelfieJobStatus(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
374
|
+
guard let jobStatusRequest = request.toJobStatusRequest() else {
|
|
375
|
+
reject("Error", "Invalid job status request", nil)
|
|
376
|
+
return
|
|
377
|
+
}
|
|
368
378
|
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
self.resolveResponse(response, resolve: resolve, reject: reject)
|
|
373
|
-
} catch {
|
|
374
|
-
reject("Error", error.localizedDescription, error)
|
|
375
|
-
}
|
|
376
|
-
}
|
|
379
|
+
guard let interval = request["interval"] as? Int64 else {
|
|
380
|
+
reject("Error", "interval is required", nil)
|
|
381
|
+
return
|
|
377
382
|
}
|
|
378
383
|
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
return
|
|
384
|
-
}
|
|
384
|
+
guard let numAttempts = request["numAttempts"] as? Int64 else {
|
|
385
|
+
reject("Error", "numAttempts is required", nil)
|
|
386
|
+
return
|
|
387
|
+
}
|
|
385
388
|
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
389
|
+
pollJobStatus(
|
|
390
|
+
apiCall: SmileID.api.pollSmartSelfieJobStatus,
|
|
391
|
+
request: jobStatusRequest,
|
|
392
|
+
interval: interval,
|
|
393
|
+
numAttempts: numAttempts,
|
|
394
|
+
resolve: resolve,
|
|
395
|
+
reject: reject
|
|
396
|
+
)
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
@objc(pollDocumentVerificationJobStatus:withResolver:withRejecter:)
|
|
400
|
+
func pollDocumentVerificationJobStatus(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
401
|
+
guard let jobStatusRequest = request.toJobStatusRequest() else {
|
|
402
|
+
reject("Error", "Invalid job status request", nil)
|
|
403
|
+
return
|
|
404
|
+
}
|
|
390
405
|
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
406
|
+
guard let interval = request["interval"] as? Int64 else {
|
|
407
|
+
reject("Error", "interval is required", nil)
|
|
408
|
+
return
|
|
409
|
+
}
|
|
395
410
|
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
numAttempts: numAttempts,
|
|
401
|
-
resolve: resolve,
|
|
402
|
-
reject: reject
|
|
403
|
-
)
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
@objc(pollDocumentVerificationJobStatus:withResolver:withRejecter:)
|
|
407
|
-
func pollDocumentVerificationJobStatus(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
408
|
-
guard let jobStatusRequest = request.toJobStatusRequest() else {
|
|
409
|
-
reject("Error", "Invalid job status request", nil)
|
|
410
|
-
return
|
|
411
|
-
}
|
|
411
|
+
guard let numAttempts = request["numAttempts"] as? Int64 else {
|
|
412
|
+
reject("Error", "numAttempts is required", nil)
|
|
413
|
+
return
|
|
414
|
+
}
|
|
412
415
|
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
416
|
+
pollJobStatus(
|
|
417
|
+
apiCall: SmileID.api.pollDocumentVerificationJobStatus,
|
|
418
|
+
request: jobStatusRequest,
|
|
419
|
+
interval: interval,
|
|
420
|
+
numAttempts: numAttempts,
|
|
421
|
+
resolve: resolve,
|
|
422
|
+
reject: reject
|
|
423
|
+
)
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
@objc(pollBiometricKycJobStatus:withResolver:withRejecter:)
|
|
427
|
+
func pollBiometricKycJobStatus(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
428
|
+
guard let jobStatusRequest = request.toJobStatusRequest() else {
|
|
429
|
+
reject("Error", "Invalid job status request", nil)
|
|
430
|
+
return
|
|
431
|
+
}
|
|
417
432
|
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
433
|
+
guard let interval = request["interval"] as? Int64 else {
|
|
434
|
+
reject("Error", "interval is required", nil)
|
|
435
|
+
return
|
|
436
|
+
}
|
|
422
437
|
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
numAttempts: numAttempts,
|
|
428
|
-
resolve: resolve,
|
|
429
|
-
reject: reject
|
|
430
|
-
)
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
@objc(pollBiometricKycJobStatus:withResolver:withRejecter:)
|
|
434
|
-
func pollBiometricKycJobStatus(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
435
|
-
guard let jobStatusRequest = request.toJobStatusRequest() else {
|
|
436
|
-
reject("Error", "Invalid job status request", nil)
|
|
437
|
-
return
|
|
438
|
-
}
|
|
438
|
+
guard let numAttempts = request["numAttempts"] as? Int64 else {
|
|
439
|
+
reject("Error", "numAttempts is required", nil)
|
|
440
|
+
return
|
|
441
|
+
}
|
|
439
442
|
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
443
|
+
pollJobStatus(
|
|
444
|
+
apiCall: SmileID.api.pollBiometricKycJobStatus,
|
|
445
|
+
request: jobStatusRequest,
|
|
446
|
+
interval: interval,
|
|
447
|
+
numAttempts: numAttempts,
|
|
448
|
+
resolve: resolve,
|
|
449
|
+
reject: reject
|
|
450
|
+
)
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
@objc(pollEnhancedDocumentVerificationJobStatus:withResolver:withRejecter:)
|
|
454
|
+
func pollEnhancedDocumentVerificationJobStatus(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
455
|
+
guard let jobStatusRequest = request.toJobStatusRequest() else {
|
|
456
|
+
reject("Error", "Invalid job status request", nil)
|
|
457
|
+
return
|
|
458
|
+
}
|
|
444
459
|
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
460
|
+
guard let interval = request["interval"] as? Int64 else {
|
|
461
|
+
reject("Error", "interval is required", nil)
|
|
462
|
+
return
|
|
463
|
+
}
|
|
449
464
|
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
numAttempts: numAttempts,
|
|
455
|
-
resolve: resolve,
|
|
456
|
-
reject: reject
|
|
457
|
-
)
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
@objc(pollEnhancedDocumentVerificationJobStatus:withResolver:withRejecter:)
|
|
461
|
-
func pollEnhancedDocumentVerificationJobStatus(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
462
|
-
guard let jobStatusRequest = request.toJobStatusRequest() else {
|
|
463
|
-
reject("Error", "Invalid job status request", nil)
|
|
464
|
-
return
|
|
465
|
-
}
|
|
465
|
+
guard let numAttempts = request["numAttempts"] as? Int64 else {
|
|
466
|
+
reject("Error", "numAttempts is required", nil)
|
|
467
|
+
return
|
|
468
|
+
}
|
|
466
469
|
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
470
|
+
pollJobStatus(
|
|
471
|
+
apiCall: SmileID.api.pollEnhancedDocumentVerificationJobStatus,
|
|
472
|
+
request: jobStatusRequest,
|
|
473
|
+
interval: interval,
|
|
474
|
+
numAttempts: numAttempts,
|
|
475
|
+
resolve: resolve,
|
|
476
|
+
reject: reject
|
|
477
|
+
)
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
func pollJobStatus<RequestType, T: JobResult>(
|
|
481
|
+
apiCall: @escaping (RequestType, TimeInterval, Int) async throws -> AsyncThrowingStream<JobStatusResponse<T>, Error>,
|
|
482
|
+
request: RequestType,
|
|
483
|
+
interval: Int64,
|
|
484
|
+
numAttempts: Int64,
|
|
485
|
+
resolve: @escaping RCTPromiseResolveBlock,
|
|
486
|
+
reject: @escaping RCTPromiseRejectBlock
|
|
487
|
+
) {
|
|
488
|
+
let timeInterval = convertToTimeInterval(milliSeconds: interval)
|
|
489
|
+
guard let numAttemptsInt = Int(exactly: numAttempts) else {
|
|
490
|
+
reject("InvalidNumAttempts", "Invalid numAttempts value", NSError(domain: "Invalid numAttempts value", code: -1, userInfo: nil))
|
|
491
|
+
return
|
|
492
|
+
}
|
|
471
493
|
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
494
|
+
Task {
|
|
495
|
+
do {
|
|
496
|
+
let pollStream = try await apiCall(request, timeInterval, numAttemptsInt)
|
|
497
|
+
var result: JobStatusResponse<T>?
|
|
476
498
|
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
request: jobStatusRequest,
|
|
480
|
-
interval: interval,
|
|
481
|
-
numAttempts: numAttempts,
|
|
482
|
-
resolve: resolve,
|
|
483
|
-
reject: reject
|
|
484
|
-
)
|
|
485
|
-
}
|
|
486
|
-
|
|
487
|
-
func pollJobStatus<RequestType, T: JobResult>(
|
|
488
|
-
apiCall: @escaping (RequestType, TimeInterval, Int) async throws -> AsyncThrowingStream<JobStatusResponse<T>, Error>,
|
|
489
|
-
request: RequestType,
|
|
490
|
-
interval: Int64,
|
|
491
|
-
numAttempts: Int64,
|
|
492
|
-
resolve: @escaping RCTPromiseResolveBlock,
|
|
493
|
-
reject: @escaping RCTPromiseRejectBlock
|
|
494
|
-
) {
|
|
495
|
-
let timeInterval = convertToTimeInterval(milliSeconds: interval)
|
|
496
|
-
guard let numAttemptsInt = Int(exactly: numAttempts) else {
|
|
497
|
-
reject("InvalidNumAttempts", "Invalid numAttempts value", NSError(domain: "Invalid numAttempts value", code: -1, userInfo: nil))
|
|
498
|
-
return
|
|
499
|
+
for try await res in pollStream {
|
|
500
|
+
result = res
|
|
499
501
|
}
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
var result: JobStatusResponse<T>?
|
|
505
|
-
|
|
506
|
-
for try await res in pollStream {
|
|
507
|
-
result = res
|
|
508
|
-
}
|
|
509
|
-
if let finalResult = result {
|
|
510
|
-
self.resolveResponse(finalResult, resolve: resolve, reject: reject)
|
|
511
|
-
} else {
|
|
512
|
-
reject("NoResult", "Polling completed without a result", NSError(domain: "No result obtained", code: -1, userInfo: nil))
|
|
513
|
-
}
|
|
514
|
-
} catch {
|
|
515
|
-
reject("ApiCallFailure", "API call failed with error: \(error.localizedDescription)", error)
|
|
516
|
-
}
|
|
502
|
+
if let finalResult = result {
|
|
503
|
+
self.resolveResponse(finalResult, resolve: resolve, reject: reject)
|
|
504
|
+
} else {
|
|
505
|
+
reject("NoResult", "Polling completed without a result", NSError(domain: "No result obtained", code: -1, userInfo: nil))
|
|
517
506
|
}
|
|
507
|
+
} catch {
|
|
508
|
+
reject("ApiCallFailure", "API call failed with error: \(error.localizedDescription)", error)
|
|
509
|
+
}
|
|
518
510
|
}
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
resolve(String(data: jsonData, encoding: .utf8) ?? "")
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
func convertToTimeInterval(milliSeconds: Int64) -> TimeInterval {
|
|
514
|
+
let seconds = milliSeconds / 1000
|
|
515
|
+
return TimeInterval(seconds)
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
private func resolveResponse<T: Encodable>(_ response: T, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
519
|
+
let encoder = JSONEncoder()
|
|
520
|
+
guard let jsonData = try? encoder.encode(response) else {
|
|
521
|
+
reject("Error", "Encoding error", nil)
|
|
522
|
+
return
|
|
532
523
|
}
|
|
524
|
+
resolve(String(data: jsonData, encoding: .utf8) ?? "")
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
@objc(applyLocalization:withRejecter:)
|
|
528
|
+
func applyLocalization(
|
|
529
|
+
resolve: @escaping RCTPromiseResolveBlock,
|
|
530
|
+
reject _: @escaping RCTPromiseRejectBlock
|
|
531
|
+
) {
|
|
532
|
+
SmileID.apply(
|
|
533
|
+
SmileIDLocalizableStrings(
|
|
534
|
+
bundle: Bundle.main,
|
|
535
|
+
tablename: "Localizable"
|
|
536
|
+
)
|
|
537
|
+
)
|
|
538
|
+
resolve(nil)
|
|
539
|
+
}
|
|
533
540
|
}
|