diff --git a/packages/nextjs/src/AsgardeoNextClient.ts b/packages/nextjs/src/AsgardeoNextClient.ts index 093eff24..b2ba624e 100644 --- a/packages/nextjs/src/AsgardeoNextClient.ts +++ b/packages/nextjs/src/AsgardeoNextClient.ts @@ -433,6 +433,12 @@ class AsgardeoNextClient exte return this.asgardeo.getDecodedIdToken(sessionId as string, idToken); } + async getIdToken(sessionId?: string): Promise { + await this.ensureInitialized(); + const resolvedSessionId: string = sessionId || ((await getSessionId()) as string); + return this.asgardeo.getIdToken(resolvedSessionId); + } + override getConfiguration(): T { return this.asgardeo.getConfigData() as unknown as T; } diff --git a/packages/nextjs/src/client/contexts/Asgardeo/AsgardeoContext.ts b/packages/nextjs/src/client/contexts/Asgardeo/AsgardeoContext.ts index 56a756ce..4b8a131f 100644 --- a/packages/nextjs/src/client/contexts/Asgardeo/AsgardeoContext.ts +++ b/packages/nextjs/src/client/contexts/Asgardeo/AsgardeoContext.ts @@ -19,7 +19,7 @@ 'use client'; import {AsgardeoContextProps as AsgardeoReactContextProps} from '@asgardeo/react'; -import {EmbeddedFlowExecuteRequestConfig, EmbeddedSignInFlowHandleRequestPayload, User} from '@asgardeo/node'; +import {EmbeddedFlowExecuteRequestConfig, EmbeddedSignInFlowHandleRequestPayload, User, TokenExchangeRequestConfig, TokenResponse, IdToken} from '@asgardeo/node'; import {Context, createContext} from 'react'; /** @@ -44,6 +44,10 @@ const AsgardeoContext: Context = createContext Promise.resolve({} as any), signUp: () => Promise.resolve({} as any), user: null, + getDecodedIdToken: async (sessionId?:string) => Promise.resolve({} as IdToken), + getIdToken: async (sessionId?:string) => Promise.resolve(''), + getAccessToken: async (sessionId?:string) => Promise.resolve(''), + exchangeToken: async (config: TokenExchangeRequestConfig, sessionId?:string) => Promise.resolve({} as TokenResponse | Response), }); AsgardeoContext.displayName = 'AsgardeoContext'; diff --git a/packages/nextjs/src/client/contexts/Asgardeo/AsgardeoProvider.tsx b/packages/nextjs/src/client/contexts/Asgardeo/AsgardeoProvider.tsx index 4b52db7d..6dedefcb 100644 --- a/packages/nextjs/src/client/contexts/Asgardeo/AsgardeoProvider.tsx +++ b/packages/nextjs/src/client/contexts/Asgardeo/AsgardeoProvider.tsx @@ -77,6 +77,10 @@ export type AsgardeoClientProviderProps = Partial Promise<{data: {user: User}; error: string; success: boolean}>; user: User | null; userProfile: UserProfile; + getIdToken: AsgardeoContextProps['getIdToken']; + getDecodedIdToken: AsgardeoContextProps['getDecodedIdToken']; + getAccessToken: AsgardeoContextProps['getAccessToken']; + exchangeToken: AsgardeoContextProps['exchangeToken']; }; const AsgardeoClientProvider: FC> = ({ @@ -102,6 +106,10 @@ const AsgardeoClientProvider: FC> getAllOrganizations, switchOrganization, brandingPreference, + getIdToken, + getDecodedIdToken, + getAccessToken, + exchangeToken, }: PropsWithChildren) => { const reRenderCheckRef: RefObject = useRef(false); const router = useRouter(); @@ -309,8 +317,12 @@ const AsgardeoClientProvider: FC> signUpUrl, applicationId, organizationHandle, + getIdToken, + getDecodedIdToken, + getAccessToken, + exchangeToken, }), - [baseUrl, user, isSignedIn, isLoading, signInUrl, signUpUrl, applicationId, organizationHandle], + [baseUrl, user, isSignedIn, isLoading, signInUrl, signUpUrl, applicationId, organizationHandle, getIdToken, getDecodedIdToken, getAccessToken, exchangeToken], ); const handleProfileUpdate = (payload: User): void => { diff --git a/packages/nextjs/src/server/AsgardeoProvider.tsx b/packages/nextjs/src/server/AsgardeoProvider.tsx index b053fa72..89611cb3 100644 --- a/packages/nextjs/src/server/AsgardeoProvider.tsx +++ b/packages/nextjs/src/server/AsgardeoProvider.tsx @@ -194,6 +194,10 @@ const AsgardeoServerProvider: FC> switchOrganization={switchOrganization} brandingPreference={brandingPreference} createOrganization={createOrganization} + getDecodedIdToken={async () => await asgardeoClient.getDecodedIdToken(sessionId)} + getIdToken={async () => await asgardeoClient.getIdToken(sessionId)} + getAccessToken={async () => await asgardeoClient.getAccessToken(sessionId)} + exchangeToken={async (config) => await asgardeoClient.exchangeToken(config, sessionId)} > {children}