@smile_identity/react-native 10.3.2 → 10.3.3

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