@@ -15,7 +15,7 @@ import {
1515
1616import IterableInAppManager from './IterableInAppManager'
1717import IterableInAppMessage from './IterableInAppMessage'
18- import IterableConfig from './IterableConfig'
18+ import IterableConfig , { AuthResponse } from './IterableConfig'
1919import { IterableLogger } from './IterableLogger'
2020
2121const RNIterableAPI = NativeModules . RNIterableAPI
@@ -30,6 +30,11 @@ enum IterableActionSource {
3030 inApp = 2
3131}
3232
33+ enum AuthResponseCallback {
34+ SUCCESS ,
35+ FAILURE ,
36+ }
37+
3338/**
3439* Enum representing what level of logs will Android and iOS project be printing on their consoles respectively.
3540*/
@@ -118,7 +123,9 @@ enum EventName {
118123 handleCustomActionCalled = "handleCustomActionCalled" ,
119124 handleInAppCalled = "handleInAppCalled" ,
120125 handleAuthCalled = "handleAuthCalled" ,
121- receivedIterableInboxChanged = "receivedIterableInboxChanged"
126+ receivedIterableInboxChanged = "receivedIterableInboxChanged" ,
127+ handleAuthSuccessCalled = "handleAuthSuccessCalled" ,
128+ handleAuthFailureCalled = "handleAuthFailureCalled"
122129}
123130
124131class Iterable {
@@ -634,13 +641,52 @@ class Iterable {
634641 }
635642
636643 if ( Iterable . savedConfig . authHandler ) {
644+ var authResponseCallback : AuthResponseCallback
637645 RNEventEmitter . addListener (
638646 EventName . handleAuthCalled ,
639647 ( ) => {
640648 Iterable . savedConfig . authHandler ! ( )
641- . then ( authToken => {
642- RNIterableAPI . passAlongAuthToken ( authToken )
643- } )
649+ . then ( promiseResult => {
650+ // Promise result can be either just String OR of type AuthResponse.
651+ // If type AuthReponse, authToken will be parsed looking for `authToken` within promised object. Two additional listeners will be registered for success and failure callbacks sent by native bridge layer.
652+ // Else it will be looked for as a String.
653+ if ( typeof promiseResult === typeof ( new AuthResponse ( ) ) ) {
654+
655+ RNIterableAPI . passAlongAuthToken ( ( promiseResult as AuthResponse ) . authToken )
656+
657+ setTimeout ( ( ) => {
658+ if ( authResponseCallback === AuthResponseCallback . SUCCESS ) {
659+ if ( ( promiseResult as AuthResponse ) . successCallback ) {
660+ ( promiseResult as AuthResponse ) . successCallback ! ( )
661+ }
662+ } else if ( authResponseCallback === AuthResponseCallback . FAILURE ) {
663+ if ( ( promiseResult as AuthResponse ) . failureCallback ) {
664+ ( promiseResult as AuthResponse ) . failureCallback ! ( )
665+ }
666+ } else {
667+ Iterable . logger . log ( 'No callback received from native layer' )
668+ }
669+ } , 1000 )
670+ } else if ( typeof promiseResult === typeof "" ) {
671+ //If promise only returns string
672+ RNIterableAPI . passAlongAuthToken ( ( promiseResult as String ) )
673+ } else {
674+ Iterable . logger . log ( 'Unexpected promise returned. Auth token expects promise of String or AuthResponse type.' )
675+ }
676+ } ) . catch ( e => Iterable . logger . log ( e ) )
677+ }
678+ )
679+
680+ RNEventEmitter . addListener (
681+ EventName . handleAuthSuccessCalled ,
682+ ( ) => {
683+ authResponseCallback = AuthResponseCallback . SUCCESS
684+ }
685+ )
686+ RNEventEmitter . addListener (
687+ EventName . handleAuthFailureCalled ,
688+ ( ) => {
689+ authResponseCallback = AuthResponseCallback . FAILURE
644690 }
645691 )
646692 }
0 commit comments