Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .changeset/spicy-dots-swim.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@asgardeo/javascript': patch
'@asgardeo/nextjs': patch
'@asgardeo/react': patch
---

Expose `reInitialize` from `@asgardeo/react` & `@asgardeo/nextjs`
2 changes: 2 additions & 0 deletions packages/javascript/src/AsgardeoJavaScriptClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ abstract class AsgardeoJavaScriptClient<T = Config> implements AsgardeoClient<T>

abstract initialize(config: T, storage?: Storage): Promise<boolean>;

abstract reInitialize(config: Partial<T>): Promise<boolean>;

abstract getUser(options?: any): Promise<User>;

abstract getAllOrganizations(options?: any, sessionId?: string): Promise<AllOrganizationsApiResponse>;
Expand Down
11 changes: 11 additions & 0 deletions packages/javascript/src/models/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,17 @@ export interface AsgardeoClient<T> {
*/
initialize(config: T, storage?: Storage): Promise<boolean>;

/**
* Re-initializes the client with a new configuration.
*
* @remarks
* This can be partial configuration to update only specific fields.
*
* @param config - New configuration to re-initialize the client with.
* @returns Promise resolving to boolean indicating success.
*/
reInitialize(config: Partial<T>): Promise<boolean>;

/**
* Checks if the client is currently loading.
* This can be used to determine if the client is in the process of initializing or fetching user data.
Expand Down
19 changes: 19 additions & 0 deletions packages/nextjs/src/AsgardeoNextClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,25 @@ class AsgardeoNextClient<T extends AsgardeoNextConfig = AsgardeoNextConfig> exte
);
}

override async reInitialize(config: Partial<T>): Promise<boolean> {
let isInitialized: boolean = false;

try {
await this.asgardeo.reInitialize(config as any);

isInitialized = true;
} catch (error) {
throw new AsgardeoRuntimeError(
`Failed to re-initialize the client: ${error instanceof Error ? error.message : String(error)}`,
'AsgardeoNextClient-reInitialize-RuntimeError-001',
'nextjs',
'An error occurred while re-initializing the client. Please check your configuration and network connection.',
);
}

return isInitialized;
}

override async getUser(userId?: string): Promise<User> {
await this.ensureInitialized();
const resolvedSessionId: string = userId || ((await getSessionId()) as string);
Expand Down
7 changes: 7 additions & 0 deletions packages/nextjs/src/server/asgardeo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import {TokenExchangeRequestConfig} from '@asgardeo/node';
import AsgardeoNextClient from '../AsgardeoNextClient';
import getSessionIdAction from './actions/getSessionId';
import {AsgardeoNextConfig} from '../models/config';

const asgardeo = async () => {
const getAccessToken = async (sessionId: string) => {
Expand All @@ -35,10 +36,16 @@ const asgardeo = async () => {
return await client.exchangeToken(config, sessionId);
};

const reInitialize = async (config: Partial<AsgardeoNextConfig>) => {
const client: AsgardeoNextClient = AsgardeoNextClient.getInstance();
return await client.reInitialize(config);
};

return {
getAccessToken,
getSessionId,
exchangeToken,
reInitialize,
};
};

Expand Down
21 changes: 21 additions & 0 deletions packages/react/src/AsgardeoReactClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,27 @@ class AsgardeoReactClient<T extends AsgardeoReactConfig = AsgardeoReactConfig> e
});
}

override reInitialize(config: Partial<AsgardeoReactConfig>): Promise<boolean> {
return this.withLoading(async () => {
let isInitialized: boolean;

try {
await this.asgardeo.reInitialize(config);

isInitialized = true;
} catch (error) {
throw new AsgardeoRuntimeError(
`Failed to check if the client is initialized: ${error instanceof Error ? error.message : String(error)}`,
'AsgardeoReactClient-reInitialize-RuntimeError-001',
'react',
'An error occurred while checking the initialization status of the client.',
);
}

return isInitialized;
});
}

override async updateUserProfile(payload: any, userId?: string): Promise<User> {
throw new Error('Not implemented');
}
Expand Down
12 changes: 12 additions & 0 deletions packages/react/src/contexts/Asgardeo/AsgardeoContext.ts
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,17 @@ export type AsgardeoContextProps = {
* @returns A promise that resolves to the token response or the raw response.
*/
exchangeToken: (config: TokenExchangeRequestConfig) => Promise<TokenResponse | Response>;

/**
* Re-initializes the client with a new configuration.
*
* @remarks
* This can be partial configuration to update only specific fields.
*
* @param config - New configuration to re-initialize the client with.
* @returns Promise resolving to boolean indicating success.
*/
reInitialize: (config: Partial<AsgardeoReactConfig>) => Promise<boolean>;
} & Pick<AsgardeoReactConfig, 'storage'>;

/**
Expand Down Expand Up @@ -151,6 +162,7 @@ const AsgardeoContext: Context<AsgardeoContextProps | null> = createContext<null
getAccessToken: null,
exchangeToken: null,
storage: 'sessionStorage',
reInitialize: null,
});

AsgardeoContext.displayName = 'AsgardeoContext';
Expand Down
1 change: 1 addition & 0 deletions packages/react/src/contexts/Asgardeo/AsgardeoProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,7 @@ const AsgardeoProvider: FC<PropsWithChildren<AsgardeoProviderProps>> = ({
request: asgardeo.request.bind(asgardeo),
requestAll: asgardeo.requestAll.bind(asgardeo),
},
reInitialize: asgardeo.reInitialize.bind(asgardeo),
signInOptions,
getDecodedIdToken: asgardeo.getDecodedIdToken.bind(asgardeo),
exchangeToken: asgardeo.exchangeToken.bind(asgardeo),
Expand Down
Loading