UNPKG

29.1 kBPlain TextView Raw
1//Copyright (c) 2019 Facebook. All rights reserved.
2
3import Foundation
4import CYBAVOWallet
5
6@objc(RNAuth)
7class 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
542extension 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
572extension 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}