@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.
Files changed (60) hide show
  1. package/android/gradle.properties +1 -1
  2. package/android/src/main/java/com/smileidentity/react/SmileIdModule.kt +10 -0
  3. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDBiometricKYCViewManager.kt +2 -0
  4. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDConsentViewManager.kt +0 -1
  5. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDDocumentCaptureViewManager.kt +0 -1
  6. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDDocumentVerificationViewManager.kt +2 -0
  7. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDEnhancedDocumentVerificationViewManager.kt +2 -0
  8. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieAuthenticationViewManager.kt +1 -0
  9. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieCaptureViewManager.kt +1 -0
  10. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieEnrollmentViewManager.kt +1 -0
  11. package/android/src/main/java/com/smileidentity/react/views/SmileIDBiometricKYCView.kt +2 -0
  12. package/android/src/main/java/com/smileidentity/react/views/SmileIDConsentView.kt +1 -0
  13. package/android/src/main/java/com/smileidentity/react/views/SmileIDDocumentCaptureView.kt +0 -10
  14. package/android/src/main/java/com/smileidentity/react/views/SmileIDDocumentVerificationView.kt +2 -0
  15. package/android/src/main/java/com/smileidentity/react/views/SmileIDEnhancedDocumentVerificationView.kt +2 -0
  16. package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieAuthenticationView.kt +1 -0
  17. package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieCaptureView.kt +17 -4
  18. package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieEnrollmentView.kt +1 -0
  19. package/android/src/main/java/com/smileidentity/react/views/SmileIDView.kt +5 -6
  20. package/android/src/oldarch/SmileIdSpec.kt +2 -0
  21. package/ios/RNSmileID.mm +1 -0
  22. package/ios/RNSmileID.swift +476 -469
  23. package/ios/View/SmileIDBiometricKYCView.swift +2 -0
  24. package/ios/View/SmileIDDocumentVerificationView.swift +1 -0
  25. package/ios/View/SmileIDEnhancedDocumentVerificationView.swift +1 -0
  26. package/ios/View/SmileIDSmartSelfieAuthView.swift +1 -0
  27. package/ios/View/SmileIDSmartSelfieCaptureView.swift +58 -38
  28. package/ios/View/SmileIDSmartSelfieEnrollmentView.swift +1 -0
  29. package/ios/ViewManagers/SmileIDBiometricKYCViewManager.swift +2 -0
  30. package/ios/ViewManagers/SmileIDDocumentCaptureViewManager.swift +0 -1
  31. package/ios/ViewManagers/SmileIDDocumentVerificationViewManager.swift +1 -0
  32. package/ios/ViewManagers/SmileIDEnhancedDocumentVerificationViewManager.swift +1 -0
  33. package/ios/ViewManagers/SmileIDSmartSelfieAuthenticationViewManager.swift +1 -0
  34. package/ios/ViewManagers/SmileIDSmartSelfieCaptureViewManager.swift +5 -7
  35. package/ios/ViewManagers/SmileIDSmartSelfieEnrollmentViewManager.swift +1 -0
  36. package/ios/ViewModels/SmileIDProductModel.swift +2 -0
  37. package/lib/commonjs/NativeSmileId.js.map +1 -1
  38. package/lib/commonjs/index.js +8 -0
  39. package/lib/commonjs/index.js.map +1 -1
  40. package/lib/commonjs/types.js.map +1 -1
  41. package/lib/commonjs/useSmileIDView.js +1 -1
  42. package/lib/commonjs/useSmileIDView.js.map +1 -1
  43. package/lib/module/NativeSmileId.js.map +1 -1
  44. package/lib/module/index.js +9 -1
  45. package/lib/module/index.js.map +1 -1
  46. package/lib/module/types.js.map +1 -1
  47. package/lib/module/useSmileIDView.js +1 -1
  48. package/lib/module/useSmileIDView.js.map +1 -1
  49. package/lib/typescript/NativeSmileId.d.ts +8 -1
  50. package/lib/typescript/NativeSmileId.d.ts.map +1 -1
  51. package/lib/typescript/index.d.ts +10 -2
  52. package/lib/typescript/index.d.ts.map +1 -1
  53. package/lib/typescript/types.d.ts +7 -2
  54. package/lib/typescript/types.d.ts.map +1 -1
  55. package/package.json +4 -3
  56. package/react-native-smile-id.podspec +1 -1
  57. package/src/NativeSmileId.ts +9 -1
  58. package/src/index.tsx +24 -15
  59. package/src/types.ts +12 -2
  60. package/src/useSmileIDView.tsx +1 -1
@@ -2,532 +2,539 @@ 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
- // Set wrapper info for React Native SDK using compile-time constant
15
- #if SMILE_ID_VERSION
16
- let sdkVersion = SMILE_ID_VERSION
17
- #else
18
- let sdkVersion = "unknown" // Fallback version
19
- #endif
20
-
21
- SmileID.setWrapperInfo(name: .reactNative, version: sdkVersion)
22
-
23
- // Handle different initialization scenarios based on provided parameters
24
- if let apiKey = apiKey, let config = config {
25
- // Initialize with API key and config
26
- SmileID.initialize(
27
- apiKey: apiKey,
28
- config: config.toConfig(),
29
- useSandbox: useSandBox
30
- )
31
- } else if let config = config {
32
- // Initialize with just config
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
- @objc(setCallbackUrl:withResolver:withRejecter:)
46
- func setCallbackUrl(callbackUrl: String, resolve: @escaping RCTPromiseResolveBlock, reject _: @escaping RCTPromiseRejectBlock) {
47
- SmileID.setCallbackUrl(url: URL(string: callbackUrl))
48
- resolve(nil)
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
- @objc(setAllowOfflineMode:withResolver:withRejecter:)
52
- func setAllowOfflineMode(allowOfflineMode: Bool, resolve: @escaping RCTPromiseResolveBlock, reject _: @escaping RCTPromiseRejectBlock) {
53
- SmileID.setAllowOfflineMode(allowOfflineMode: allowOfflineMode)
54
- resolve(nil)
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
- @objc(submitJob:withResolver:withRejecter:)
58
- func submitJob(jobId: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
59
- do {
60
- try SmileID.submitJob(jobId: jobId)
61
- resolve(nil)
62
- } catch let error as NSError {
63
- reject("Error", error.localizedDescription, error)
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
- @objc(getSubmittedJobs:withRejecter:)
68
- func getSubmittedJobs(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
69
- do {
70
- let jobs: [String] = SmileID.getUnsubmittedJobs()
71
- resolve(jobs)
72
- } catch let error as NSError {
73
- reject("Error", error.localizedDescription, error)
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
- @objc(getUnsubmittedJobs:withRejecter:)
78
- func getUnsubmittedJobs(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
79
- do {
80
- let jobs: [String] = SmileID.getUnsubmittedJobs()
81
- resolve(jobs)
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
- @objc(cleanup:withResolver:withRejecter:)
88
- func cleanup(jobId: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
89
- do {
90
- try SmileID.cleanup(jobId: jobId)
91
- resolve(nil)
92
- } catch let error as NSError {
93
- reject("Error", error.localizedDescription, error)
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
- @objc(authenticate:withResolver:withRejecter:)
98
- func authenticate(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
99
- guard let authenticationRequest = request.toAuthenticationRequest() else {
100
- reject("Error", "Invalid request data", nil)
101
- return
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
- @objc(prepUpload:withResolver:withRejecter:)
115
- func prepUpload(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
116
- guard let prepUploadRequest = request.toPrepUploadRequest() else {
117
- reject("Error", "Invalid prep upload request", nil)
118
- return
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
- @objc(upload:request:withResolver:withRejecter:)
132
- func upload(url: String, request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
133
- guard let uploadRequest = request.toUploadRequest() else {
134
- reject("Error", "Invalid upload request", nil)
135
- return
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
- guard let zipData = try? LocalStorage.toZip(uploadRequest: uploadRequest) else {
139
- reject("Error", "Unable to zip file", nil)
140
- return
141
- }
142
- Task {
143
- do {
144
- try await SmileID.api.upload(zip: zipData, to: url)
145
- resolve(nil)
146
- } catch {
147
- reject("Error", error.localizedDescription, error)
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
- @objc(doEnhancedKyc:withResolver:withRejecter:)
153
- func doEnhancedKyc(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
154
- guard let partnerParamsDict = request["partnerParams"] as? NSDictionary else {
155
- reject("doEnhancedKyc", "partnerParams is required", nil)
156
- return
157
- }
158
- guard let partnerParams = partnerParamsDict.toPartnerParams() else {
159
- reject("doEnhancedKyc", "partnerParams is missing required data", nil)
160
- return
161
- }
162
- guard let country = request["country"] as? String else {
163
- reject("doEnhancedKyc", "country is required", nil)
164
- return
165
- }
166
- guard let idType = request["idType"] as? String else {
167
- reject("doEnhancedKyc", "idType is required", nil)
168
- return
169
- }
170
- guard let idNumber = request["idNumber"] as? String else {
171
- reject("doEnhancedKyc", "idNumber is required", nil)
172
- return
173
- }
174
- guard let timestamp = request["timestamp"] as? String else {
175
- reject("doEnhancedKyc", "timestamp is required", nil)
176
- return
177
- }
178
- guard let signature = request["signature"] as? String else {
179
- reject("doEnhancedKyc", "signature is required", nil)
180
- return
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
- let consentInfo: ConsentInformation
184
- if let consentInformation = request["consentInformation"] as? NSDictionary {
185
- consentInfo = consentInformation.toConsentInfo()
186
- } else {
187
- consentInfo = ConsentInformation(consented: ConsentedInformation(consentGrantedDate: getCurrentIsoTimestamp(),
188
- personalDetails: false,
189
- contactInformation: false,
190
- documentInformation: false)
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
- let request = EnhancedKycRequest(
195
- country: country,
196
- idType: idType,
197
- idNumber: idNumber,
198
- consentInformation: consentInfo,
199
- firstName: request["firstName"] as? String,
200
- middleName: request["middleName"] as? String,
201
- lastName: request["lastName"] as? String,
202
- dob: request["dob"] as? String,
203
- phoneNumber: request["phoneNumber"] as? String,
204
- bankCode: request["bankCode"] as? String,
205
- callbackUrl: request["callbackUrl"] as? String,
206
- partnerParams: partnerParams,
207
- sourceSdk: "ios (react-native)",
208
- timestamp: timestamp,
209
- signature: signature
210
- )
211
-
212
- Task {
213
- do {
214
- let response = try await SmileID.api.doEnhancedKyc(request: request)
215
- let encoder = JSONEncoder()
216
- guard let jsonData = try? encoder.encode(response) else {
217
- throw SmileIDError.unknown("doEnhancedKyc encoding error")
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
- @objc(doEnhancedKycAsync:withResolver:withRejecter:)
228
- func doEnhancedKycAsync(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
229
- guard let partnerParamsDict = request["partnerParams"] as? NSDictionary else {
230
- reject("doEnhancedKyc", "partnerParams is required", nil)
231
- return
232
- }
233
- guard let partnerParams = partnerParamsDict.toPartnerParams() else {
234
- reject("doEnhancedKyc", "partnerParams is missing required data", nil)
235
- return
236
- }
237
- guard let country = request["country"] as? String else {
238
- reject("doEnhancedKyc", "country is required", nil)
239
- return
240
- }
241
- guard let idType = request["idType"] as? String else {
242
- reject("doEnhancedKyc", "idType is required", nil)
243
- return
244
- }
245
- guard let idNumber = request["idNumber"] as? String else {
246
- reject("doEnhancedKyc", "idNumber is required", nil)
247
- return
248
- }
249
- guard let timestamp = request["timestamp"] as? String else {
250
- reject("doEnhancedKyc", "timestamp is required", nil)
251
- return
252
- }
253
- guard let signature = request["signature"] as? String else {
254
- reject("doEnhancedKyc", "signature is required", nil)
255
- return
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
- guard let consentInformation = request["consentInformation"] as? NSDictionary else {
259
- reject("doEnhancedKyc", "consentInformation is required", nil)
260
- return
261
- }
251
+ guard let consentInformation = request["consentInformation"] as? NSDictionary else {
252
+ reject("doEnhancedKyc", "consentInformation is required", nil)
253
+ return
254
+ }
262
255
 
263
- let request = EnhancedKycRequest(
264
- country: country,
265
- idType: idType,
266
- idNumber: idNumber,
267
- consentInformation: consentInformation.toConsentInfo(),
268
- firstName: request["firstName"] as? String,
269
- middleName: request["middleName"] as? String,
270
- lastName: request["lastName"] as? String,
271
- dob: request["dob"] as? String,
272
- phoneNumber: request["phoneNumber"] as? String,
273
- bankCode: request["bankCode"] as? String,
274
- callbackUrl: request["callbackUrl"] as? String,
275
- partnerParams: partnerParams,
276
- sourceSdk: "ios (react-native)",
277
- timestamp: timestamp,
278
- signature: signature
279
- )
280
-
281
- Task {
282
- do {
283
- let response = try await SmileID.api.doEnhancedKycAsync(request: request)
284
- let encoder = JSONEncoder()
285
- guard let jsonData = try? encoder.encode(response) else {
286
- throw SmileIDError.unknown("doEnhancedKyc encoding error")
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
- @objc(getSmartSelfieJobStatus:withResolver:withRejecter:)
297
- func getSmartSelfieJobStatus(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
298
- getJobStatus(request: request, resolve: resolve, reject: reject)
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
- @objc(getDocumentVerificationJobStatus:withResolver:withRejecter:)
302
- func getDocumentVerificationJobStatus(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
303
- getJobStatus(request: request, resolve: resolve, reject: reject)
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
- @objc(getBiometricKycJobStatus:withResolver:withRejecter:)
307
- func getBiometricKycJobStatus(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
308
- getJobStatus(request: request, resolve: resolve, reject: reject)
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
- @objc(getEnhancedDocumentVerificationJobStatus:withResolver:withRejecter:)
312
- func getEnhancedDocumentVerificationJobStatus(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
313
- getJobStatus(request: request, resolve: resolve, reject: reject)
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
- @objc(getProductsConfig:withResolver:withRejecter:)
317
- func getProductsConfig(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
318
- guard let productsConfigRequest = request.toProductsConfigRequest() else {
319
- reject("Error", "Invalid products config request", nil)
320
- return
321
- }
322
-
323
- Task {
324
- do {
325
- let response = try await SmileID.api.getProductsConfig(request: productsConfigRequest)
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
- @objc(getValidDocuments:withResolver:withRejecter:)
334
- func getValidDocuments(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
335
- guard let validDocumentsRequest = request.toProductsConfigRequest() else {
336
- reject("Error", "Invalid valid documents request", nil)
337
- return
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
- @objc(getServicesWithResolver:withRejecter:)
351
- func getServices(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
352
- Task {
353
- do {
354
- let response = try await SmileID.api.getServices()
355
- self.resolveResponse(response, resolve: resolve, reject: reject)
356
- } catch {
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
- @objc(getJobStatus:withResolver:withRejecter:)
363
- func getJobStatus(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
364
- guard let jobStatusRequest = request.toJobStatusRequest() else {
365
- reject("Error", "Invalid job status request", nil)
366
- return
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
- Task {
370
- do {
371
- let response = try await SmileID.api.getJobStatus(request: jobStatusRequest)
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
- @objc(pollSmartSelfieJobStatus:withResolver:withRejecter:)
380
- func pollSmartSelfieJobStatus(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
381
- guard let jobStatusRequest = request.toJobStatusRequest() else {
382
- reject("Error", "Invalid job status request", nil)
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
- guard let interval = request["interval"] as? Int64 else {
387
- reject("Error", "interval is required", nil)
388
- return
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
- guard let numAttempts = request["numAttempts"] as? Int64 else {
392
- reject("Error", "numAttempts is required", nil)
393
- return
394
- }
406
+ guard let interval = request["interval"] as? Int64 else {
407
+ reject("Error", "interval is required", nil)
408
+ return
409
+ }
395
410
 
396
- pollJobStatus(
397
- apiCall: SmileID.api.pollSmartSelfieJobStatus,
398
- request: jobStatusRequest,
399
- interval: interval,
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
- guard let interval = request["interval"] as? Int64 else {
414
- reject("Error", "interval is required", nil)
415
- return
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
- guard let numAttempts = request["numAttempts"] as? Int64 else {
419
- reject("Error", "numAttempts is required", nil)
420
- return
421
- }
433
+ guard let interval = request["interval"] as? Int64 else {
434
+ reject("Error", "interval is required", nil)
435
+ return
436
+ }
422
437
 
423
- pollJobStatus(
424
- apiCall: SmileID.api.pollDocumentVerificationJobStatus,
425
- request: jobStatusRequest,
426
- interval: interval,
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
- guard let interval = request["interval"] as? Int64 else {
441
- reject("Error", "interval is required", nil)
442
- return
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
- guard let numAttempts = request["numAttempts"] as? Int64 else {
446
- reject("Error", "numAttempts is required", nil)
447
- return
448
- }
460
+ guard let interval = request["interval"] as? Int64 else {
461
+ reject("Error", "interval is required", nil)
462
+ return
463
+ }
449
464
 
450
- pollJobStatus(
451
- apiCall: SmileID.api.pollBiometricKycJobStatus,
452
- request: jobStatusRequest,
453
- interval: interval,
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
- guard let interval = request["interval"] as? Int64 else {
468
- reject("Error", "interval is required", nil)
469
- return
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
- guard let numAttempts = request["numAttempts"] as? Int64 else {
473
- reject("Error", "numAttempts is required", nil)
474
- return
475
- }
494
+ Task {
495
+ do {
496
+ let pollStream = try await apiCall(request, timeInterval, numAttemptsInt)
497
+ var result: JobStatusResponse<T>?
476
498
 
477
- pollJobStatus(
478
- apiCall: SmileID.api.pollEnhancedDocumentVerificationJobStatus,
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
- Task {
502
- do {
503
- let pollStream = try await apiCall(request, timeInterval, numAttemptsInt)
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
- func convertToTimeInterval(milliSeconds: Int64) -> TimeInterval {
521
- let seconds = milliSeconds / 1000
522
- return TimeInterval(seconds)
523
- }
524
-
525
- private func resolveResponse<T: Encodable>(_ response: T, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
526
- let encoder = JSONEncoder()
527
- guard let jsonData = try? encoder.encode(response) else {
528
- reject("Error", "Encoding error", nil)
529
- return
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
  }