1 |
|
2 |
|
3 | import Foundation
|
4 | import CYBAVOWallet
|
5 |
|
6 | @objc(RNAuth)
|
7 | class RNAuth: NSObject {
|
8 | var domain = Bundle.main.bundleIdentifier ?? ""
|
9 |
|
10 | override init() {
|
11 | super.init()
|
12 | Auth.shared.addSignInStateDelegate(self)
|
13 | }
|
14 |
|
15 | @objc func signIn(_ token: String, withIdentityProvider identityProvider: String, withExtras extras: NSDictionary, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
|
16 | var e = [String:String]()
|
17 | for (key, value) in extras {
|
18 | if let key = key as? String, let value = value as? String {
|
19 | e[key] = value
|
20 | }
|
21 | }
|
22 | Auth.shared.signIn(token: token, identityProvider: identityProvider, extras: e){ result in
|
23 | switch(result) {
|
24 | case .success(let e):
|
25 | print("signin success \(e)")
|
26 | let dict = RNWalletSDK.toDict(e)
|
27 | resolve(dict)
|
28 | case .failure(let error):
|
29 | let errorCode = error.code.rawValue
|
30 | do{
|
31 | let e = NSError(domain: try String(error.message), code: errorCode, userInfo: nil)
|
32 | reject(String(error.code.rawValue), error.message, e)
|
33 | }catch{
|
34 | let e = NSError(domain: "failed to get error.message", code: errorCode, userInfo: nil)
|
35 | reject(String(errorCode), "failed to get error.message", e)
|
36 | }
|
37 | }
|
38 | }
|
39 | }
|
40 |
|
41 | @objc public func signUp(_ token: String, withIdentityProvider identityProvider: String, withExtras extras: NSDictionary, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock){
|
42 | var e = [String:String]()
|
43 | for (key, value) in extras {
|
44 | if let key = key as? String, let value = value as? String {
|
45 | e[key] = value
|
46 | }
|
47 | }
|
48 | Auth.shared.signUp(token: token, identityProvider: identityProvider, extras: e){ result in
|
49 | switch(result) {
|
50 | case .success(let data):
|
51 | let dict = RNWalletSDK.toDict(data)
|
52 | resolve(dict)
|
53 | case .failure(let error):
|
54 | let errorCode = error.code.rawValue
|
55 | do{
|
56 | let e = NSError(domain: try String(error.message), code: errorCode, userInfo: nil)
|
57 | reject(String(error.code.rawValue), error.message, e)
|
58 | }catch{
|
59 | let e = NSError(domain: "failed to get error.message", code: errorCode, userInfo: nil)
|
60 | reject(String(errorCode), "failed to get error.message", e)
|
61 | }
|
62 | }
|
63 | }
|
64 | }
|
65 |
|
66 | @objc public func signOut(_ resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock){
|
67 | Auth.shared.signOut()
|
68 | resolve(0)
|
69 | }
|
70 |
|
71 | @objc public func getSignInState(_ resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
|
72 | var state: RNSignInState
|
73 | switch Auth.shared.getSignInState() {
|
74 | case .SignedIn:
|
75 | state = .SIGNED_IN
|
76 | case .SignedOut:
|
77 | state = .SIGNED_OUT
|
78 | case .SessionExpired:
|
79 | state = .SESSION_EXPIRED
|
80 | case .SessionInvalid:
|
81 | state = .SESSION_INVALID
|
82 | case .Unknown:
|
83 | state = .UNKNOWN
|
84 | case .needVerifyOtp:
|
85 | state = .SIGNED_IN
|
86 | case .needRegisterPhone:
|
87 | state = .SIGNED_IN
|
88 | @unknown default:
|
89 | state = .UNKNOWN
|
90 | }
|
91 | resolve(state.rawValue)
|
92 | }
|
93 |
|
94 | @objc public func getUserState(_ resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock){
|
95 | Auth.shared.getUserState(){ result in
|
96 | switch(result) {
|
97 | case .success(let data):
|
98 | let user = RNWalletSDK.toDict(data)
|
99 | resolve(user)
|
100 | case .failure(let error):
|
101 | let errorCode = error.code.rawValue
|
102 | do{
|
103 | let e = NSError(domain: try String(error.message), code: errorCode, userInfo: nil)
|
104 | reject(String(error.code.rawValue), error.message, e)
|
105 | }catch{
|
106 | let e = NSError(domain: "failed to get error.message", code: errorCode, userInfo: nil)
|
107 | reject(String(errorCode), "failed to get error.message", e)
|
108 | }
|
109 | }
|
110 | }
|
111 | }
|
112 |
|
113 | @objc public func setupPinCode(_ pinCode: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock){
|
114 | Auth.shared.setupPinCode(pinCode: pinCode) { result in
|
115 | switch(result) {
|
116 | case .success(let data):
|
117 | let dict = RNWalletSDK.toDict(data)
|
118 | resolve(dict)
|
119 | case .failure(let error):
|
120 | let errorCode = error.code.rawValue
|
121 | do{
|
122 | let e = NSError(domain: try String(error.message), code: errorCode, userInfo: nil)
|
123 | reject(String(error.code.rawValue), error.message, e)
|
124 | }catch{
|
125 | let e = NSError(domain: "failed to get error.message", code: errorCode, userInfo: nil)
|
126 | reject(String(errorCode), "failed to get error.message", e)
|
127 | }
|
128 | }
|
129 | }
|
130 | }
|
131 |
|
132 | @objc public func setupPinCodeWithPinSecret(_ byPinSecret: NSDictionary, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock){
|
133 | guard let pinSecret = PinSecretBridge.fromDictionary(dict: byPinSecret) else{
|
134 | reject("0", "PinSecret not found", NSError(domain: "", code: 0, userInfo: nil))
|
135 | return
|
136 | }
|
137 |
|
138 | Auth.shared.setupPinCode(pinSecret: pinSecret) { result in
|
139 | switch(result) {
|
140 | case .success(let data):
|
141 | let dict = RNWalletSDK.toDict(data)
|
142 | resolve(dict)
|
143 | case .failure(let error):
|
144 | let errorCode = error.code.rawValue
|
145 | do{
|
146 | let e = NSError(domain: try String(error.message), code: errorCode, userInfo: nil)
|
147 | reject(String(error.code.rawValue), error.message, e)
|
148 | }catch{
|
149 | let e = NSError(domain: "failed to get error.message", code: errorCode, userInfo: nil)
|
150 | reject(String(errorCode), "failed to get error.message", e)
|
151 | }
|
152 | }
|
153 | }
|
154 | }
|
155 |
|
156 | @objc public func setupBackupChallenge(_ pinCode: String, withChallenge1 challenge1: NSDictionary, withChallenge2 challenge2: NSDictionary, withChallenge3 challenge3: NSDictionary, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock){
|
157 | do {
|
158 | guard let q1 = challenge1["question"] as? String, let q2 = challenge2["question"] as? String, let q3 = challenge3["question"] as? String,
|
159 | let a1 = challenge1["answer"] as? String, let a2 = challenge2["answer"] as? String, let a3 = challenge3["answer"] as? String else {
|
160 | reject("0", "invalid question/answer pairs", NSError(domain: "", code: 0, userInfo: nil))
|
161 | return
|
162 | }
|
163 |
|
164 | let c1 = try BackupChallenge(question: q1, answer: a1)
|
165 | let c2 = try BackupChallenge(question: q2, answer: a2)
|
166 | let c3 = try BackupChallenge(question: q3, answer: a3)
|
167 |
|
168 | Auth.shared.setupBackupChallenge(pinCode: pinCode, challenge1: c1, challenge2: c2, challenge3: c3){ result in
|
169 | switch(result) {
|
170 | case .success(let data):
|
171 | let dict = RNWalletSDK.toDict(data)
|
172 | resolve(dict)
|
173 | case .failure(let error):
|
174 | let errorCode = error.code.rawValue
|
175 | do{
|
176 | let e = NSError(domain: try String(error.message), code: errorCode, userInfo: nil)
|
177 | reject(String(error.code.rawValue), error.message, e)
|
178 | }catch{
|
179 | let e = NSError(domain: "failed to get error.message", code: errorCode, userInfo: nil)
|
180 | reject(String(errorCode), "failed to get error.message", e)
|
181 | }
|
182 | }
|
183 | }
|
184 | } catch(let error) {
|
185 | reject("0", error.localizedDescription, error)
|
186 | }
|
187 | }
|
188 |
|
189 | @objc public func setupBackupChallengeWithPinSecret(_ byPinSecret: NSDictionary, withChallenge1 challenge1: NSDictionary, withChallenge2 challenge2: NSDictionary, withChallenge3 challenge3: NSDictionary, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock){
|
190 | do {
|
191 | guard let q1 = challenge1["question"] as? String, let q2 = challenge2["question"] as? String, let q3 = challenge3["question"] as? String,
|
192 | let a1 = challenge1["answer"] as? String, let a2 = challenge2["answer"] as? String, let a3 = challenge3["answer"] as? String else {
|
193 | reject("0", "invalid question/answer pairs", NSError(domain: "", code: 0, userInfo: nil))
|
194 | return
|
195 | }
|
196 |
|
197 | guard let pinSecret = PinSecretBridge.fromDictionary(dict: byPinSecret) else{
|
198 | reject("0", "PinSecret not found", NSError(domain: "", code: 0, userInfo: nil))
|
199 | return
|
200 | }
|
201 | let c1 = try BackupChallenge(question: q1, answer: a1)
|
202 | let c2 = try BackupChallenge(question: q2, answer: a2)
|
203 | let c3 = try BackupChallenge(question: q3, answer: a3)
|
204 |
|
205 | Auth.shared.setupBackupChallenge(pinSecret: pinSecret, challenge1: c1, challenge2: c2, challenge3: c3){ result in
|
206 | switch(result) {
|
207 | case .success(let data):
|
208 | let dict = RNWalletSDK.toDict(data)
|
209 | resolve(dict)
|
210 | case .failure(let error):
|
211 | let errorCode = error.code.rawValue
|
212 | do{
|
213 | let e = NSError(domain: try String(error.message), code: errorCode, userInfo: nil)
|
214 | reject(String(error.code.rawValue), error.message, e)
|
215 | }catch{
|
216 | let e = NSError(domain: "failed to get error.message", code: errorCode, userInfo: nil)
|
217 | reject(String(errorCode), "failed to get error.message", e)
|
218 | }
|
219 | }
|
220 | }
|
221 | } catch(let error) {
|
222 | reject("0", error.localizedDescription, error)
|
223 | }
|
224 | }
|
225 | @objc public func restorePinCode(_ pinCode: String, withChallenge1 challenge1: NSDictionary, withChallenge2 challenge2: NSDictionary, withChallenge3 challenge3: NSDictionary, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock){
|
226 | do {
|
227 | guard let q1 = challenge1["question"] as? String, let q2 = challenge2["question"] as? String, let q3 = challenge3["question"] as? String,
|
228 | let a1 = challenge1["answer"] as? String, let a2 = challenge2["answer"] as? String, let a3 = challenge3["answer"] as? String else {
|
229 | reject("0", "invalid question/answer pairs", NSError(domain: "", code: 0, userInfo: nil))
|
230 | return
|
231 | }
|
232 |
|
233 | let c1 = try BackupChallenge(question: q1, answer: a1)
|
234 | let c2 = try BackupChallenge(question: q2, answer: a2)
|
235 | let c3 = try BackupChallenge(question: q3, answer: a3)
|
236 |
|
237 | Auth.shared.restorePinCode(pinCode: pinCode, challenge1: c1, challenge2: c2, challenge3: c3){ result in
|
238 | switch(result) {
|
239 | case .success(let data):
|
240 | let dict = RNWalletSDK.toDict(data)
|
241 | resolve(dict)
|
242 | case .failure(let error):
|
243 | let errorCode = error.code.rawValue
|
244 | do{
|
245 | let e = NSError(domain: try String(error.message), code: errorCode, userInfo: nil)
|
246 | reject(String(error.code.rawValue), error.message, e)
|
247 | }catch{
|
248 | let e = NSError(domain: "failed to get error.message", code: errorCode, userInfo: nil)
|
249 | reject(String(errorCode), "failed to get error.message", e)
|
250 | }
|
251 | }
|
252 | }
|
253 | } catch(let error) {
|
254 | reject("0", error.localizedDescription, error)
|
255 | }
|
256 | }
|
257 |
|
258 | @objc public func restorePinCodeWithPinSecret(_ byPinSecret: NSDictionary, withChallenge1 challenge1: NSDictionary, withChallenge2 challenge2: NSDictionary, withChallenge3 challenge3: NSDictionary, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock){
|
259 | do {
|
260 | guard let q1 = challenge1["question"] as? String, let q2 = challenge2["question"] as? String, let q3 = challenge3["question"] as? String,
|
261 | let a1 = challenge1["answer"] as? String, let a2 = challenge2["answer"] as? String, let a3 = challenge3["answer"] as? String else {
|
262 | reject("0", "invalid question/answer pairs", NSError(domain: "", code: 0, userInfo: nil))
|
263 | return
|
264 | }
|
265 | guard let pinSecret = PinSecretBridge.fromDictionary(dict: byPinSecret) else{
|
266 | reject("0", "PinSecret not found", NSError(domain: "", code: 0, userInfo: nil))
|
267 | return
|
268 | }
|
269 |
|
270 | let c1 = try BackupChallenge(question: q1, answer: a1)
|
271 | let c2 = try BackupChallenge(question: q2, answer: a2)
|
272 | let c3 = try BackupChallenge(question: q3, answer: a3)
|
273 |
|
274 | Auth.shared.restorePinCode(pinSecret: pinSecret, challenge1: c1, challenge2: c2, challenge3: c3){ result in
|
275 | switch(result) {
|
276 | case .success(let data):
|
277 | let dict = RNWalletSDK.toDict(data)
|
278 | resolve(dict)
|
279 | case .failure(let error):
|
280 | let errorCode = error.code.rawValue
|
281 | do{
|
282 | let e = NSError(domain: try String(error.message), code: errorCode, userInfo: nil)
|
283 | reject(String(error.code.rawValue), error.message, e)
|
284 | }catch{
|
285 | let e = NSError(domain: "failed to get error.message", code: errorCode, userInfo: nil)
|
286 | reject(String(errorCode), "failed to get error.message", e)
|
287 | }
|
288 | }
|
289 | }
|
290 | } catch(let error) {
|
291 | reject("0", error.localizedDescription, error)
|
292 | }
|
293 | }
|
294 | @objc public func changePinCode(_ newPinCode: String, current currentPinCode: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock){
|
295 | Auth.shared.changePinCode(newPinCode: newPinCode, currentPinCode: currentPinCode){ result in
|
296 | switch(result) {
|
297 | case .success(let data):
|
298 | let dict = RNWalletSDK.toDict(data)
|
299 | resolve(dict)
|
300 | case .failure(let error):
|
301 | let errorCode = error.code.rawValue
|
302 | do{
|
303 | let e = NSError(domain: try String(error.message), code: errorCode, userInfo: nil)
|
304 | reject(String(error.code.rawValue), error.message, e)
|
305 | }catch{
|
306 | let e = NSError(domain: "failed to get error.message", code: errorCode, userInfo: nil)
|
307 | reject(String(errorCode), "failed to get error.message", e)
|
308 | }
|
309 | }
|
310 | }
|
311 | }
|
312 |
|
313 | @objc public func changePinCodeWithPinSecret(_ byNewPinSecret: NSDictionary, byCurrentPinSecret: NSDictionary, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock){
|
314 |
|
315 | guard let newPinSecret = PinSecretBridge.fromDictionary(dict: byNewPinSecret) else{
|
316 | reject("0", "new PinSecret not found", NSError(domain: "", code: 0, userInfo: nil))
|
317 | return
|
318 | }
|
319 | guard let currentPinSecret = PinSecretBridge.fromDictionary(dict: byCurrentPinSecret) else{
|
320 | reject("0", "current PinSecret not found", NSError(domain: "", code: 0, userInfo: nil))
|
321 | return
|
322 | }
|
323 | Auth.shared.changePinCode(newPinSecret: newPinSecret, currentPinSecret: currentPinSecret){ result in
|
324 | switch(result) {
|
325 | case .success(let data):
|
326 | let dict = RNWalletSDK.toDict(data)
|
327 | resolve(dict)
|
328 | case .failure(let error):
|
329 | let errorCode = error.code.rawValue
|
330 | do{
|
331 | let e = NSError(domain: try String(error.message), code: errorCode, userInfo: nil)
|
332 | reject(String(error.code.rawValue), error.message, e)
|
333 | }catch{
|
334 | let e = NSError(domain: "failed to get error.message", code: errorCode, userInfo: nil)
|
335 | reject(String(errorCode), "failed to get error.message", e)
|
336 | }
|
337 | }
|
338 | }
|
339 | }
|
340 |
|
341 | @objc public func getRestoreQuestions(_ resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
|
342 | Auth.shared.getRestoreQuestions(){ result in
|
343 | switch(result) {
|
344 | case .success(let data):
|
345 | if data.questions.count < 3 {
|
346 | reject("0", "invalid parameter", NSError(domain: "", code: 0, userInfo: nil))
|
347 | return
|
348 | }
|
349 | let questions: [String: Any] = [
|
350 | "question1": data.questions[0],
|
351 | "question2": data.questions[1],
|
352 | "question3": data.questions[2]
|
353 | ]
|
354 | resolve(questions)
|
355 | case .failure(let error):
|
356 | let errorCode = error.code.rawValue
|
357 | do{
|
358 | let e = NSError(domain: try String(error.message), code: errorCode, userInfo: nil)
|
359 | reject(String(error.code.rawValue), error.message, e)
|
360 | }catch{
|
361 | let e = NSError(domain: "failed to get error.message", code: errorCode, userInfo: nil)
|
362 | reject(String(errorCode), "failed to get error.message", e)
|
363 | }
|
364 | }
|
365 | }
|
366 | }
|
367 |
|
368 | @objc public func verifyRestoreQuestions(_ challenge1: NSDictionary, withChallenge2 challenge2: NSDictionary, withChallenge3 challenge3: NSDictionary, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock){
|
369 | do {
|
370 | guard let q1 = challenge1["question"] as? String, let q2 = challenge2["question"] as? String, let q3 = challenge3["question"] as? String,
|
371 | let a1 = challenge1["answer"] as? String, let a2 = challenge2["answer"] as? String, let a3 = challenge3["answer"] as? String else {
|
372 | reject("0", "invalid question/answer pairs", NSError(domain: "", code: 0, userInfo: nil))
|
373 | return
|
374 | }
|
375 |
|
376 | let c1 = try BackupChallenge(question: q1, answer: a1)
|
377 | let c2 = try BackupChallenge(question: q2, answer: a2)
|
378 | let c3 = try BackupChallenge(question: q3, answer: a3)
|
379 |
|
380 | Auth.shared.verifyRestoreQuestions(challenge1: c1, challenge2: c2, challenge3: c3) { result in
|
381 | switch(result) {
|
382 | case .success(let data):
|
383 | let dict = RNWalletSDK.toDict(data)
|
384 | resolve(dict)
|
385 | case .failure(let error):
|
386 | let errorCode = error.code.rawValue
|
387 | do{
|
388 | let e = NSError(domain: try String(error.message), code: errorCode, userInfo: nil)
|
389 | reject(String(error.code.rawValue), error.message, e)
|
390 | }catch{
|
391 | let e = NSError(domain: "failed to get error.message", code: errorCode, userInfo: nil)
|
392 | reject(String(errorCode), "failed to get error.message", e)
|
393 | }
|
394 | }
|
395 | }
|
396 | } catch(let error) {
|
397 | reject("0", error.localizedDescription, error)
|
398 | }
|
399 | }
|
400 |
|
401 | @objc public func forgotPinCode(_ resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock){
|
402 | Auth.shared.forgotPinCode() { result in
|
403 | switch(result) {
|
404 | case .success(let data):
|
405 | let dict = RNWalletSDK.toDict(data)
|
406 | resolve(dict)
|
407 | case .failure(let error):
|
408 | let errorCode = error.code.rawValue
|
409 | do{
|
410 | let e = NSError(domain: try String(error.message), code: errorCode, userInfo: nil)
|
411 | reject(String(error.code.rawValue), error.message, e)
|
412 | }catch{
|
413 | let e = NSError(domain: "failed to get error.message", code: errorCode, userInfo: nil)
|
414 | reject(String(errorCode), "failed to get error.message", e)
|
415 | }
|
416 | }
|
417 | }
|
418 | }
|
419 |
|
420 | @objc public func verifyRecoveryCode(_ recoveryCode: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock){
|
421 | print("verifyRecoveryCode \(recoveryCode)")
|
422 | Auth.shared.verifyRecoveryCode(recoveryCode: recoveryCode) { result in
|
423 | switch(result) {
|
424 | case .success(let data):
|
425 | let dict = RNWalletSDK.toDict(data)
|
426 | print("verifyRecoveryCode dict \(recoveryCode)")
|
427 | resolve(dict)
|
428 | case .failure(let error):
|
429 | let errorCode = error.code.rawValue
|
430 | do{
|
431 | let e = NSError(domain: try String(error.message), code: errorCode, userInfo: nil)
|
432 | reject(String(error.code.rawValue), error.message, e)
|
433 | }catch{
|
434 | let e = NSError(domain: "failed to get error.message", code: errorCode, userInfo: nil)
|
435 | reject(String(errorCode), "failed to get error.message", e)
|
436 | }
|
437 | }
|
438 | }
|
439 | }
|
440 |
|
441 | @objc public func recoverPinCode(_ pinCode: String, withCode recoveryCode: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
|
442 | Auth.shared.recoverPinCode(pinCode: pinCode, recoveryCode: recoveryCode) { result in
|
443 | switch(result) {
|
444 | case .success(let data):
|
445 | let dict = RNWalletSDK.toDict(data)
|
446 | resolve(dict)
|
447 | case .failure(let error):
|
448 | let errorCode = error.code.rawValue
|
449 | do{
|
450 | let e = NSError(domain: try String(error.message), code: errorCode, userInfo: nil)
|
451 | reject(String(error.code.rawValue), error.message, e)
|
452 | }catch{
|
453 | let e = NSError(domain: "failed to get error.message", code: errorCode, userInfo: nil)
|
454 | reject(String(errorCode), "failed to get error.message", e)
|
455 | }
|
456 | }
|
457 | }
|
458 | }
|
459 |
|
460 | @objc public func recoverPinCodeWithPinSecret(_ byPinSecret: NSDictionary, withCode recoveryCode: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
|
461 | guard let pinSecret = PinSecretBridge.fromDictionary(dict: byPinSecret) else{
|
462 | reject("0", "PinSecret not found", NSError(domain: "", code: 0, userInfo: nil))
|
463 | return
|
464 | }
|
465 |
|
466 | Auth.shared.recoverPinCode(pinSecret: pinSecret, recoveryCode: recoveryCode) { result in
|
467 | switch(result) {
|
468 | case .success(let data):
|
469 | let dict = RNWalletSDK.toDict(data)
|
470 | resolve(dict)
|
471 | case .failure(let error):
|
472 | let errorCode = error.code.rawValue
|
473 | do{
|
474 | let e = NSError(domain: try String(error.message), code: errorCode, userInfo: nil)
|
475 | reject(String(error.code.rawValue), error.message, e)
|
476 | }catch{
|
477 | let e = NSError(domain: "failed to get error.message", code: errorCode, userInfo: nil)
|
478 | reject(String(errorCode), "failed to get error.message", e)
|
479 | }
|
480 | }
|
481 | }
|
482 | }
|
483 |
|
484 | @objc public func setPushDeviceToken(_ pushDeviceToken: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
|
485 | Auth.shared.setPushDeviceToken(deviceToken: pushDeviceToken) { result in
|
486 | switch(result) {
|
487 | case .success(let data):
|
488 | let dict = RNWalletSDK.toDict(data)
|
489 | resolve(dict)
|
490 | case .failure(let error):
|
491 | let errorCode = error.code.rawValue
|
492 | do{
|
493 | let e = NSError(domain: try String(error.message), code: errorCode, userInfo: nil)
|
494 | reject(String(error.code.rawValue), error.message, e)
|
495 | }catch{
|
496 | let e = NSError(domain: "failed to get error.message", code: errorCode, userInfo: nil)
|
497 | reject(String(errorCode), "failed to get error.message", e)
|
498 | }
|
499 | }
|
500 | }
|
501 | }
|
502 | @objc public func registerPhoneNumber(_ countryCode: String, phone: String, duration: NSInteger, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
|
503 | Auth.shared.registerPhoneNumber(contryCode: countryCode, phone: phone, duration: Int64(duration)){result in
|
504 | switch(result) {
|
505 | case .success(let data):
|
506 | let dict = RNWalletSDK.toDict(data)
|
507 | resolve(dict)
|
508 | case .failure(let error):
|
509 | let errorCode = error.code.rawValue
|
510 | do{
|
511 | let e = NSError(domain: try String(error.message), code: errorCode, userInfo: nil)
|
512 | reject(String(error.code.rawValue), error.message, e)
|
513 | }catch{
|
514 | let e = NSError(domain: "failed to get error.message", code: errorCode, userInfo: nil)
|
515 | reject(String(errorCode), "failed to get error.message", e)
|
516 | }
|
517 | }
|
518 |
|
519 | }
|
520 | }
|
521 | @objc public func verifyOtp(_ actionToken: String, code: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
|
522 | Auth.shared.verifyOtp(actionToken: actionToken, code: code){result in
|
523 | switch(result) {
|
524 | case .success(let data):
|
525 | let dict = RNWalletSDK.toDict(data)
|
526 | resolve(dict)
|
527 | case .failure(let error):
|
528 | let errorCode = error.code.rawValue
|
529 | do{
|
530 | let e = NSError(domain: try String(error.message), code: errorCode, userInfo: nil)
|
531 | reject(String(error.code.rawValue), error.message, e)
|
532 | }catch{
|
533 | let e = NSError(domain: "failed to get error.message", code: errorCode, userInfo: nil)
|
534 | reject(String(errorCode), "failed to get error.message", e)
|
535 | }
|
536 | }
|
537 |
|
538 | }
|
539 | }
|
540 | }
|
541 |
|
542 | extension RNAuth : SignInStateDelegate {
|
543 | func onUserStateChanged(state: SignInState) {
|
544 | var newState: RNSignInState
|
545 | switch state {
|
546 | case .SignedIn:
|
547 | newState = .SIGNED_IN
|
548 | case .SignedOut:
|
549 | newState = .SIGNED_OUT
|
550 | case .SessionExpired:
|
551 | newState = .SESSION_EXPIRED
|
552 | case .SessionInvalid:
|
553 | newState = .SESSION_INVALID
|
554 | case .Unknown:
|
555 | newState = .UNKNOWN
|
556 | case .needVerifyOtp:
|
557 | newState = .SIGNED_IN
|
558 | EventEmitter.sharedInstance.dispatch(name: "onSignInStateChanged", body: RNSignInState.NEED_VERIFY_OTP.rawValue)
|
559 | return
|
560 | case .needRegisterPhone:
|
561 | EventEmitter.sharedInstance.dispatch(name: "onSignInStateChanged", body: RNSignInState.NEED_REGISTER_PHONE.rawValue)
|
562 | newState = .SIGNED_IN
|
563 | return
|
564 | @unknown default:
|
565 | newState = .UNKNOWN
|
566 | }
|
567 |
|
568 | EventEmitter.sharedInstance.dispatch(name: "onSignInStateChanged", body: newState.rawValue)
|
569 | }
|
570 | }
|
571 |
|
572 | extension RNAuth {
|
573 | @objc func constantsToExport() -> [AnyHashable : Any]! {
|
574 | var constants = [AnyHashable : Any]()
|
575 | var signInState = [String : Any]()
|
576 | for state in RNSignInState.allCases {
|
577 | signInState[state.name] = state.rawValue
|
578 | }
|
579 | constants["SignInState"] = signInState
|
580 |
|
581 | let events: [AnyHashable : Any] = [
|
582 | "onSignInStateChanged": "onSignInStateChanged",
|
583 | ]
|
584 | constants["Events"] = events
|
585 | return constants
|
586 | }
|
587 | @objc static func requiresMainQueueSetup() -> Bool {
|
588 | return true
|
589 | }
|
590 | }
|