From 7bcebf41c5147dcf323d53106d6e172166fc0838 Mon Sep 17 00:00:00 2001 From: joe goodall Date: Fri, 11 Oct 2024 14:40:31 +0100 Subject: [PATCH 1/4] feat: change native android to support multi access token --- .../ticketmasterignite/AccountsSDKModule.kt | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/android/src/main/java/com/ticketmasterignite/AccountsSDKModule.kt b/android/src/main/java/com/ticketmasterignite/AccountsSDKModule.kt index 141f95c..5a8fb33 100644 --- a/android/src/main/java/com/ticketmasterignite/AccountsSDKModule.kt +++ b/android/src/main/java/com/ticketmasterignite/AccountsSDKModule.kt @@ -240,21 +240,21 @@ class AccountsSDKModule(reactContext: ReactApplicationContext) : val tokenRefreshedParams: WritableMap = Arguments.createMap().apply { putString("accountsSdkTokenRefreshed", "accountsSdkTokenRefreshed") } + val combinedTokens: WritableMap = Arguments.createMap() if (!resHostAccessToken.isNullOrEmpty()) { - GlobalEventEmitter.sendEvent("igniteAnalytics", tokenRefreshedParams) - promise.resolve(resHostAccessToken) - } else if (!resArchticsAccessToken.isNullOrEmpty()) { - GlobalEventEmitter.sendEvent("igniteAnalytics", tokenRefreshedParams) - promise.resolve(resArchticsAccessToken) - } else if (!resMfxAccessToken.isNullOrEmpty()) { - GlobalEventEmitter.sendEvent("igniteAnalytics", tokenRefreshedParams) - promise.resolve(resMfxAccessToken) - } else if (!resSportXRAccessToken.isNullOrEmpty()) { - GlobalEventEmitter.sendEvent("igniteAnalytics", tokenRefreshedParams) - promise.resolve(resSportXRAccessToken) - }else { - promise.resolve(null) + combinedTokens.putString("hostAccessToken", resHostAccessToken) + } + if (!resArchticsAccessToken.isNullOrEmpty()) { + combinedTokens.putString("archticsAccessToken", resArchticsAccessToken) + } + if (!resMfxAccessToken.isNullOrEmpty()) { + combinedTokens.putString("mfxAccessToken", resMfxAccessToken) + } + if (!resSportXRAccessToken.isNullOrEmpty()) { + combinedTokens.putString("sportXRAccessToken", resSportXRAccessToken) } + GlobalEventEmitter.sendEvent("igniteAnalytics", tokenRefreshedParams) + promise.resolve(combinedTokens) } catch (e: Exception) { promise.reject("Accounts SDK refreshToken Error: ", e) } From 0f1fccfc12bb04ac6f79157fa2254fcb9d3aa2da Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 11 Oct 2024 14:48:14 +0100 Subject: [PATCH 2/4] feat: add types to RN token methods --- src/IgniteProvider.tsx | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/IgniteProvider.tsx b/src/IgniteProvider.tsx index 7a872dc..ea29180 100644 --- a/src/IgniteProvider.tsx +++ b/src/IgniteProvider.tsx @@ -34,15 +34,22 @@ type IgniteContextType = { login: (LoginParams?: LoginParams) => Promise; logout: (LogoutParams?: LogoutParams) => Promise; getIsLoggedIn: () => Promise; - getToken: () => Promise; + getToken: () => Promise; getMemberInfo: () => Promise | null>; - refreshToken: () => Promise; + refreshToken: () => Promise; authState: AuthStateParams; isLoggingIn: boolean; }; type Region = 'US' | 'UK'; +type AuthSource = { + hostAccessToken?: string; + archticsAccessToken?: string; + mfxAccessToken?: string; + sportXRAccessToken?: string; +}; + export const IgniteContext = createContext({ login: async () => {}, logout: async () => {}, @@ -225,7 +232,9 @@ export const IgniteProvider: React.FC = ({ // eslint-disable-next-line react-hooks/exhaustive-deps }, []); - const getToken = useCallback(async (): Promise => { + const getToken = useCallback(async (): Promise< + string | AuthSource | null + > => { let accessToken; try { if (Platform.OS === 'ios') { @@ -268,7 +277,9 @@ export const IgniteProvider: React.FC = ({ // eslint-disable-next-line react-hooks/exhaustive-deps }, []); - const refreshToken = useCallback(async (): Promise => { + const refreshToken = useCallback(async (): Promise< + string | AuthSource | null + > => { try { const result = await AccountsSDK.refreshToken(); console.log('Accounts SDK refresh token:', result); From bead63f0f8a4367e7351f1dd0ccecd96c03133e6 Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 11 Oct 2024 14:56:44 +0100 Subject: [PATCH 3/4] docs: update readme --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index c64b0c2..149a4ed 100644 --- a/README.md +++ b/README.md @@ -199,6 +199,18 @@ try { {isLoggedIn && You are logged in} ``` +`getToken` and `refreshToken` return different data types per platform. iOS returns a `string` and Android returns an object. See Android object type below: + +```typescript +type AuthSource = { + hostAccessToken?: string; + archticsAccessToken?: string; + mfxAccessToken?: string; + sportXRAccessToken?: string; +}; +``` + + The `login()` method from the `useIgnite` hook accepts an object with properties `onLogin` and `skipUpdate`: - `onLogin` - a callback that fires after successful authentication From a6a452e9157de2fdba26f65ecda308b90b9cfa03 Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 11 Oct 2024 15:04:12 +0100 Subject: [PATCH 4/4] chore: update tickets sdk [android] --- android/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/build.gradle b/android/build.gradle index 85f7046..494ffe5 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -98,7 +98,7 @@ dependencies { implementation 'com.google.code.gson:gson:2.10.1' implementation 'com.ticketmaster.accounts:authentication:3.9.0_jdk15to18_bouncycastle-SNAPSHOT' - implementation 'com.ticketmaster.tickets:tickets:3.8.0' + implementation 'com.ticketmaster.tickets:tickets:3.8.3' implementation 'com.ticketmaster.tickets:secure-entry:1.2.10' implementation 'com.ticketmaster.retail:purchase:3.2.0' implementation 'com.ticketmaster.retail:prepurchase:3.2.0'