From e68a2eff78650288ba9e966566e9d0778010c95e Mon Sep 17 00:00:00 2001 From: kavindadewmith Date: Thu, 22 Jan 2026 14:17:26 +0530 Subject: [PATCH 1/4] Add support for multi-auth context with instance ID in AsgardeoReactClient and AuthAPI --- packages/react/src/AsgardeoReactClient.ts | 18 ++++++++++++++++-- packages/react/src/__temp__/api.ts | 14 ++++++++++++-- .../src/contexts/Asgardeo/AsgardeoProvider.tsx | 3 ++- packages/react/src/models/config.ts | 9 ++++++++- 4 files changed, 38 insertions(+), 6 deletions(-) diff --git a/packages/react/src/AsgardeoReactClient.ts b/packages/react/src/AsgardeoReactClient.ts index 85d494f48..e581602d0 100644 --- a/packages/react/src/AsgardeoReactClient.ts +++ b/packages/react/src/AsgardeoReactClient.ts @@ -68,12 +68,26 @@ import getAllOrganizations from './api/getAllOrganizations'; class AsgardeoReactClient extends AsgardeoBrowserClient { private asgardeo: AuthAPI; private _isLoading: boolean = false; + private _instanceId: number; - constructor() { + /** + * Creates a new AsgardeoReactClient instance. + * @param instanceId - Optional instance ID for multi-auth context support. Defaults to 0 for backward compatibility. + */ + constructor(instanceId: number = 0) { super(); + this._instanceId = instanceId; // FIXME: This has to be the browser client from `@asgardeo/browser` package. - this.asgardeo = new AuthAPI(); + this.asgardeo = new AuthAPI(undefined, instanceId); + } + + /** + * Get the instance ID for this client. + * @returns The instance ID used for multi-auth context support. + */ + public getInstanceId(): number { + return this._instanceId; } /** diff --git a/packages/react/src/__temp__/api.ts b/packages/react/src/__temp__/api.ts index 35a21908e..ca6064ee5 100644 --- a/packages/react/src/__temp__/api.ts +++ b/packages/react/src/__temp__/api.ts @@ -37,11 +37,13 @@ class AuthAPI { private _authState = AuthAPI.DEFAULT_STATE; private _client: AsgardeoSPAClient; + private _instanceId: number; private _isLoading: boolean; - constructor(spaClient?: AsgardeoSPAClient) { - this._client = spaClient ?? AsgardeoSPAClient.getInstance(); + constructor(spaClient?: AsgardeoSPAClient, instanceId: number = 0) { + this._instanceId = instanceId; + this._client = spaClient ?? AsgardeoSPAClient.getInstance(instanceId); this.getState = this.getState.bind(this); this.init = this.init.bind(this); @@ -50,6 +52,14 @@ class AuthAPI { this.updateState = this.updateState.bind(this); } + /** + * Get the instance ID for this AuthAPI instance. + * @returns The instance ID used for multi-auth context support. + */ + public getInstanceId(): number { + return this._instanceId; + } + public _setIsLoading(isLoading: boolean): void { this._isLoading = isLoading; } diff --git a/packages/react/src/contexts/Asgardeo/AsgardeoProvider.tsx b/packages/react/src/contexts/Asgardeo/AsgardeoProvider.tsx index 797ea1914..10f683ef7 100644 --- a/packages/react/src/contexts/Asgardeo/AsgardeoProvider.tsx +++ b/packages/react/src/contexts/Asgardeo/AsgardeoProvider.tsx @@ -64,10 +64,11 @@ const AsgardeoProvider: FC> = ({ applicationId, signInOptions, syncSession, + instanceId = 0, ...rest }: PropsWithChildren): ReactElement => { const reRenderCheckRef: RefObject = useRef(false); - const asgardeo: AsgardeoReactClient = useMemo(() => new AsgardeoReactClient(), []); + const asgardeo: AsgardeoReactClient = useMemo(() => new AsgardeoReactClient(instanceId), [instanceId]); const {hasAuthParams} = useBrowserUrl(); const [user, setUser] = useState(null); const [currentOrganization, setCurrentOrganization] = useState(null); diff --git a/packages/react/src/models/config.ts b/packages/react/src/models/config.ts index f53fdd48b..af4a37de1 100644 --- a/packages/react/src/models/config.ts +++ b/packages/react/src/models/config.ts @@ -18,4 +18,11 @@ import {AsgardeoBrowserConfig} from '@asgardeo/browser'; -export type AsgardeoReactConfig = AsgardeoBrowserConfig; +export interface AsgardeoReactConfig extends AsgardeoBrowserConfig { + /** + * Optional instance ID for multi-auth context support. + * Use this when you need multiple authentication contexts in the same application. + * Defaults to 0 for backward compatibility. + */ + instanceId?: number; +} \ No newline at end of file From 92a8d5c716490284c5f27848bc936ca083319e59 Mon Sep 17 00:00:00 2001 From: kavindadewmith Date: Thu, 29 Jan 2026 13:41:41 +0530 Subject: [PATCH 2/4] Add instance ID support for multi-auth context in BaseConfig interface --- packages/javascript/src/models/config.ts | 5 +++++ packages/react/src/models/config.ts | 9 +-------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/packages/javascript/src/models/config.ts b/packages/javascript/src/models/config.ts index b2f88891f..ab76f7212 100644 --- a/packages/javascript/src/models/config.ts +++ b/packages/javascript/src/models/config.ts @@ -229,6 +229,11 @@ export interface BaseConfig extends WithPreferences { * The values should be defined at the framework layer. */ storage?: T; + /** + * Optional instance ID for multi-auth context support. + * Use this when you need multiple authentication contexts in the same application. + */ + instanceId?: number; } export interface WithPreferences { diff --git a/packages/react/src/models/config.ts b/packages/react/src/models/config.ts index af4a37de1..1731e9d6a 100644 --- a/packages/react/src/models/config.ts +++ b/packages/react/src/models/config.ts @@ -18,11 +18,4 @@ import {AsgardeoBrowserConfig} from '@asgardeo/browser'; -export interface AsgardeoReactConfig extends AsgardeoBrowserConfig { - /** - * Optional instance ID for multi-auth context support. - * Use this when you need multiple authentication contexts in the same application. - * Defaults to 0 for backward compatibility. - */ - instanceId?: number; -} \ No newline at end of file +export type AsgardeoReactConfig = AsgardeoBrowserConfig; \ No newline at end of file From e5c30c3f348be3766260591a739f543a4647f0c2 Mon Sep 17 00:00:00 2001 From: kavindadewmith Date: Sun, 1 Feb 2026 23:45:33 +0530 Subject: [PATCH 3/4] Fix formatting in AsgardeoReactConfig type definition --- packages/react/src/models/config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react/src/models/config.ts b/packages/react/src/models/config.ts index 1731e9d6a..f53fdd48b 100644 --- a/packages/react/src/models/config.ts +++ b/packages/react/src/models/config.ts @@ -18,4 +18,4 @@ import {AsgardeoBrowserConfig} from '@asgardeo/browser'; -export type AsgardeoReactConfig = AsgardeoBrowserConfig; \ No newline at end of file +export type AsgardeoReactConfig = AsgardeoBrowserConfig; From 45cbc37771d94852fd39316195155a4ed99e7998 Mon Sep 17 00:00:00 2001 From: kavindadewmith Date: Mon, 2 Feb 2026 11:09:29 +0530 Subject: [PATCH 4/4] =?UTF-8?q?Add=20changeset=20=F0=9F=A6=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changeset/light-days-sin.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/light-days-sin.md diff --git a/.changeset/light-days-sin.md b/.changeset/light-days-sin.md new file mode 100644 index 000000000..458d1d8c4 --- /dev/null +++ b/.changeset/light-days-sin.md @@ -0,0 +1,6 @@ +--- +'@asgardeo/javascript': minor +'@asgardeo/react': minor +--- + +Add support to pass `instanceId` externally through `AsgardeoProvider` props to allow multi-organization setups