diff --git a/src/core/classes/Iterable.ts b/src/core/classes/Iterable.ts index 75321d4bc..4c64cb7da 100644 --- a/src/core/classes/Iterable.ts +++ b/src/core/classes/Iterable.ts @@ -23,6 +23,23 @@ import { IterableLogger } from './IterableLogger'; const RNEventEmitter = new NativeEventEmitter(RNIterableAPI); +/** + * Checks if the response is an IterableAuthResponse + */ +const isIterableAuthResponse = ( + response: IterableAuthResponse | string | undefined | null +): response is IterableAuthResponse => { + if (typeof response === 'string') return false; + if ( + response?.authToken || + response?.successCallback || + response?.failureCallback + ) { + return true; + } + return false; +}; + /* eslint-disable tsdoc/syntax */ /** * The main class for the Iterable React Native SDK. @@ -952,25 +969,23 @@ export class Iterable { // Promise result can be either just String OR of type AuthResponse. // 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. // Else it will be looked for as a String. - if (typeof promiseResult === typeof new IterableAuthResponse()) { - Iterable.authManager.passAlongAuthToken( - (promiseResult as IterableAuthResponse).authToken - ); + if (isIterableAuthResponse(promiseResult)) { + Iterable.authManager.passAlongAuthToken(promiseResult.authToken); setTimeout(() => { if ( authResponseCallback === IterableAuthResponseResult.SUCCESS ) { - if ((promiseResult as IterableAuthResponse).successCallback) { - (promiseResult as IterableAuthResponse).successCallback?.(); + if (promiseResult.successCallback) { + promiseResult.successCallback?.(); } } else if ( authResponseCallback === IterableAuthResponseResult.FAILURE ) { // We are currently only reporting JWT related errors. In // the future, we should handle other types of errors as well. - if ((promiseResult as IterableAuthResponse).failureCallback) { - (promiseResult as IterableAuthResponse).failureCallback?.(); + if (promiseResult.failureCallback) { + promiseResult.failureCallback?.(); } } else { IterableLogger?.log('No callback received from native layer'); @@ -978,7 +993,7 @@ export class Iterable { }, 1000); } else if (typeof promiseResult === 'string') { //If promise only returns string - Iterable.authManager.passAlongAuthToken(promiseResult as string); + Iterable.authManager.passAlongAuthToken(promiseResult); } else { IterableLogger?.log( 'Unexpected promise returned. Auth token expects promise of String or AuthResponse type.'