@thunderid/browser 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ThunderIDBrowserClient.d.ts +1 -4
- package/dist/ThunderIDBrowserClient.d.ts.map +1 -1
- package/dist/cjs/index.cjs +68 -289
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/constants/SPAConstants.d.ts +2 -9
- package/dist/constants/SPAConstants.d.ts.map +1 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +67 -280
- package/dist/index.js.map +1 -1
- package/dist/models/BrowserConfig.d.ts +0 -6
- package/dist/models/BrowserConfig.d.ts.map +1 -1
- package/dist/utils/AuthenticationHelper.d.ts +14 -25
- package/dist/utils/AuthenticationHelper.d.ts.map +1 -1
- package/dist/utils/SPAUtils.d.ts +0 -14
- package/dist/utils/SPAUtils.d.ts.map +1 -1
- package/dist/utils/hasAuthParamsInUrl.d.ts +2 -2
- package/package.json +4 -4
- package/dist/utils/SessionManagementHelper.d.ts +0 -26
- package/dist/utils/SessionManagementHelper.d.ts.map +0 -1
|
@@ -7,7 +7,6 @@ declare class ThunderIDBrowserClient<T = BrowserAuthConfig> extends ThunderIDJav
|
|
|
7
7
|
private _browserInstanceId;
|
|
8
8
|
private _httpClient;
|
|
9
9
|
private _spaHelper;
|
|
10
|
-
private _sessionManagementHelper;
|
|
11
10
|
private _authHelper;
|
|
12
11
|
private _storage;
|
|
13
12
|
private _getSignOutURLFromSessionStorage;
|
|
@@ -27,7 +26,7 @@ declare class ThunderIDBrowserClient<T = BrowserAuthConfig> extends ThunderIDJav
|
|
|
27
26
|
isInitialized(): Promise<boolean>;
|
|
28
27
|
private _validateMethod;
|
|
29
28
|
isLoading(): boolean;
|
|
30
|
-
signIn(config?: SignInConfig, authorizationCode?: string,
|
|
29
|
+
signIn(config?: SignInConfig, authorizationCode?: string, state?: string, tokenRequestConfig?: {
|
|
31
30
|
params: Record<string, unknown>;
|
|
32
31
|
}): Promise<User | undefined>;
|
|
33
32
|
private _signInInternal;
|
|
@@ -57,8 +56,6 @@ declare class ThunderIDBrowserClient<T = BrowserAuthConfig> extends ThunderIDJav
|
|
|
57
56
|
disableHttpHandler(): Promise<boolean | undefined>;
|
|
58
57
|
decodeJwtToken<R = Record<string, unknown>>(token: string): Promise<R>;
|
|
59
58
|
on(hook: string, callback: (response?: any) => void | Promise<void>, id?: string): Promise<void>;
|
|
60
|
-
private _checkSession;
|
|
61
|
-
private _shouldStopAuthn;
|
|
62
59
|
private _enableRetrievingSignOutURLFromSession;
|
|
63
60
|
private _constructSilentSignInUrl;
|
|
64
61
|
getInstanceId(): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThunderIDBrowserClient.d.ts","sourceRoot":"","sources":["../src/ThunderIDBrowserClient.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,yBAAyB,EAEzB,IAAI,EACJ,gBAAgB,EAChB,OAAO,EACP,aAAa,
|
|
1
|
+
{"version":3,"file":"ThunderIDBrowserClient.d.ts","sourceRoot":"","sources":["../src/ThunderIDBrowserClient.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -40,19 +40,12 @@ const ERROR = "error";
|
|
|
40
40
|
const ERROR_DESCRIPTION = "error_description";
|
|
41
41
|
const CUSTOM_GRANT_CONFIG = "custom_grant_config";
|
|
42
42
|
const STATE_QUERY = "state";
|
|
43
|
-
const OP_IFRAME = "opIFrame";
|
|
44
|
-
const RP_IFRAME = "rpIFrame";
|
|
45
|
-
const PROMPT_NONE_IFRAME = "promptNoneIFrame";
|
|
46
|
-
const STATE = "Y2hlY2tTZXNzaW9u";
|
|
47
43
|
const SILENT_SIGN_IN_STATE = "sign-in-silently";
|
|
48
|
-
const INITIALIZED_SILENT_SIGN_IN = "initialized-silent-sign-in";
|
|
49
|
-
const PROMPT_NONE_REQUEST_SENT = "promptNoneRequestSent";
|
|
50
44
|
const ACCESS_TOKEN_INVALID = "Access token is invalid";
|
|
51
45
|
const REFRESH_ACCESS_TOKEN_ERR0R = "refresh-access-token-error";
|
|
52
46
|
const TOKEN_REQUEST_CONFIG_KEY = "token_request_config";
|
|
53
|
-
const
|
|
54
|
-
const
|
|
55
|
-
const SET_SESSION_STATE_FROM_IFRAME = "set_session_state_from_iframe";
|
|
47
|
+
const SILENT_SIGN_IN_SIGNED_IN = "silent_sign_in_signed_in";
|
|
48
|
+
const SILENT_SIGN_IN_SIGNED_OUT = "silent_sign_in_signed_out";
|
|
56
49
|
|
|
57
50
|
//#endregion
|
|
58
51
|
//#region src/FetchHttpClient.ts
|
|
@@ -290,13 +283,6 @@ var SPAUtils = class SPAUtils {
|
|
|
290
283
|
return false;
|
|
291
284
|
}
|
|
292
285
|
/**
|
|
293
|
-
* Returns `true` if a silent sign-in was previously initialized in this session.
|
|
294
|
-
*/
|
|
295
|
-
static wasSilentSignInCalled() {
|
|
296
|
-
const raw = sessionStorage.getItem(INITIALIZED_SILENT_SIGN_IN);
|
|
297
|
-
return Boolean(raw ? JSON.parse(raw) : null);
|
|
298
|
-
}
|
|
299
|
-
/**
|
|
300
286
|
* Checks whether the current URL indicates a successful sign-out redirect.
|
|
301
287
|
* Clears the query string and session data if `true`.
|
|
302
288
|
*
|
|
@@ -359,21 +345,6 @@ var SPAUtils = class SPAUtils {
|
|
|
359
345
|
return !!urlObject.searchParams.get(ERROR) && urlObject.searchParams.get(STATE_QUERY) !== __thunderid_javascript.OIDCRequestConstants.Params.SIGN_OUT_SUCCESS;
|
|
360
346
|
}
|
|
361
347
|
/**
|
|
362
|
-
* Returns `true` if no prompt-none request has been sent yet this session.
|
|
363
|
-
*/
|
|
364
|
-
static canSendPromptNoneRequest() {
|
|
365
|
-
const raw = sessionStorage.getItem(PROMPT_NONE_REQUEST_SENT);
|
|
366
|
-
return !(raw ? JSON.parse(raw) : null);
|
|
367
|
-
}
|
|
368
|
-
/**
|
|
369
|
-
* Records whether a prompt-none request has been sent.
|
|
370
|
-
*
|
|
371
|
-
* @param canSend - `true` marks the request as sent.
|
|
372
|
-
*/
|
|
373
|
-
static setPromptNoneRequestSent(canSend) {
|
|
374
|
-
sessionStorage.setItem(PROMPT_NONE_REQUEST_SENT, JSON.stringify(canSend));
|
|
375
|
-
}
|
|
376
|
-
/**
|
|
377
348
|
* Waits until the browser has redirected (non-blocking delay).
|
|
378
349
|
*
|
|
379
350
|
* @param time - Time to wait in seconds (default: 3).
|
|
@@ -402,7 +373,7 @@ var SPAUtils_default = SPAUtils;
|
|
|
402
373
|
//#region src/utils/AuthenticationHelper.ts
|
|
403
374
|
/**
|
|
404
375
|
* Browser-level authentication helper that orchestrates HTTP requests with token attachment,
|
|
405
|
-
* automatic token refresh,
|
|
376
|
+
* automatic token refresh, and the silent sign-in flow.
|
|
406
377
|
*
|
|
407
378
|
* @typeParam T - The browser client config extension type.
|
|
408
379
|
*/
|
|
@@ -462,18 +433,6 @@ var AuthenticationHelper = class {
|
|
|
462
433
|
httpClient?.disableHandler && httpClient.disableHandler();
|
|
463
434
|
}
|
|
464
435
|
/**
|
|
465
|
-
* Initializes OIDC Session Management via an RP iframe.
|
|
466
|
-
*
|
|
467
|
-
* @param config - The current auth config.
|
|
468
|
-
* @param oidcEndpoints - Resolved OIDC provider endpoints.
|
|
469
|
-
* @param getSessionState - Returns the current session state from storage.
|
|
470
|
-
* @param getAuthzURL - Builds an authorization URL with optional params.
|
|
471
|
-
* @param sessionManagementHelper - The session management helper instance.
|
|
472
|
-
*/
|
|
473
|
-
initializeSessionManger(config, oidcEndpoints, getSessionState, getAuthzURL, sessionManagementHelper) {
|
|
474
|
-
sessionManagementHelper.initialize(config.clientId, oidcEndpoints.checkSessionIframe ?? "", getSessionState, config.checkSessionInterval ?? 3, config.sessionRefreshInterval ?? 300, config.afterSignInUrl, getAuthzURL);
|
|
475
|
-
}
|
|
476
|
-
/**
|
|
477
436
|
* Executes a custom token exchange grant, enforcing `allowedExternalUrls` rules when applicable.
|
|
478
437
|
*
|
|
479
438
|
* @param config - The token exchange configuration.
|
|
@@ -643,76 +602,96 @@ var AuthenticationHelper = class {
|
|
|
643
602
|
});
|
|
644
603
|
}
|
|
645
604
|
/**
|
|
646
|
-
* Executes the silent sign-in flow
|
|
605
|
+
* Executes the silent sign-in flow by loading a `prompt=none` authorize request in a hidden iframe.
|
|
647
606
|
*
|
|
648
607
|
* @param constructSilentSignInUrl - Builds the prompt-none authorize URL.
|
|
649
608
|
* @param requestAccessToken - Exchanges the returned code for tokens.
|
|
650
|
-
* @param sessionManagementHelper - Handles the iFrame prompt-none response.
|
|
651
609
|
* @param additionalParams - Extra authorize request params.
|
|
652
610
|
* @param tokenRequestConfig - Additional params for the token request.
|
|
653
611
|
* @returns The user session, or `false` if the user is not signed in.
|
|
654
612
|
*/
|
|
655
|
-
async signInSilently(constructSilentSignInUrl, requestAccessToken,
|
|
613
|
+
async signInSilently(constructSilentSignInUrl, requestAccessToken, additionalParams, tokenRequestConfig) {
|
|
656
614
|
if (SPAUtils_default.isInitializedSilentSignIn()) {
|
|
657
|
-
await
|
|
615
|
+
await this.handleSilentSignInResponse();
|
|
658
616
|
return Promise.resolve({
|
|
659
617
|
allowedScopes: "",
|
|
660
618
|
displayName: "",
|
|
661
619
|
email: "",
|
|
662
|
-
sessionState: "",
|
|
663
620
|
sub: "",
|
|
664
621
|
tenantDomain: "",
|
|
665
622
|
username: ""
|
|
666
623
|
});
|
|
667
624
|
}
|
|
668
|
-
|
|
625
|
+
let url;
|
|
669
626
|
try {
|
|
670
|
-
|
|
627
|
+
url = await constructSilentSignInUrl(additionalParams);
|
|
671
628
|
} catch (error) {
|
|
672
629
|
return Promise.reject(error);
|
|
673
630
|
}
|
|
631
|
+
const silentSignInIFrame = document.createElement("iframe");
|
|
632
|
+
silentSignInIFrame.style.display = "none";
|
|
674
633
|
return new Promise((resolve, reject) => {
|
|
634
|
+
const cleanUp = () => {
|
|
635
|
+
window.removeEventListener("message", listenToSilentSignInIFrame);
|
|
636
|
+
clearTimeout(timer);
|
|
637
|
+
silentSignInIFrame.remove();
|
|
638
|
+
};
|
|
675
639
|
const timer = setTimeout(() => {
|
|
640
|
+
cleanUp();
|
|
676
641
|
resolve(false);
|
|
677
642
|
}, 1e4);
|
|
678
|
-
const
|
|
643
|
+
const listenToSilentSignInIFrame = async (e) => {
|
|
644
|
+
if (e.origin !== window.location.origin || e.source !== silentSignInIFrame.contentWindow) return;
|
|
679
645
|
const data = e.data;
|
|
680
|
-
if (data?.type
|
|
681
|
-
|
|
682
|
-
clearTimeout(timer);
|
|
646
|
+
if (data?.type === SILENT_SIGN_IN_SIGNED_OUT) {
|
|
647
|
+
cleanUp();
|
|
683
648
|
resolve(false);
|
|
684
649
|
}
|
|
685
|
-
if (data?.type
|
|
650
|
+
if (data?.type === SILENT_SIGN_IN_SIGNED_IN && data?.data?.code) {
|
|
686
651
|
const authInfo = data.data;
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
resolve(response);
|
|
690
|
-
}).catch((error) => {
|
|
691
|
-
window.removeEventListener("message", listenToPromptNoneIFrame);
|
|
692
|
-
reject(error);
|
|
693
|
-
}).finally(() => {
|
|
694
|
-
clearTimeout(timer);
|
|
695
|
-
});
|
|
652
|
+
cleanUp();
|
|
653
|
+
requestAccessToken(authInfo.code, authInfo.state, tokenRequestConfig).then(resolve).catch(reject);
|
|
696
654
|
}
|
|
697
655
|
};
|
|
698
|
-
window.addEventListener("message",
|
|
656
|
+
window.addEventListener("message", listenToSilentSignInIFrame);
|
|
657
|
+
silentSignInIFrame.src = url;
|
|
658
|
+
document.body.appendChild(silentSignInIFrame);
|
|
699
659
|
});
|
|
700
660
|
}
|
|
701
661
|
/**
|
|
662
|
+
* Handles the page load inside the silent sign-in iframe: relays the authorization response to the
|
|
663
|
+
* parent window and blanks the iframe.
|
|
664
|
+
*
|
|
665
|
+
* @returns `true` if the current page load was a silent sign-in response.
|
|
666
|
+
*/
|
|
667
|
+
async handleSilentSignInResponse() {
|
|
668
|
+
const url = new URL(window.location.href);
|
|
669
|
+
const state = url.searchParams.get(STATE_QUERY);
|
|
670
|
+
if (state === null || !state.includes(SILENT_SIGN_IN_STATE)) return false;
|
|
671
|
+
const code$1 = url.searchParams.get("code");
|
|
672
|
+
const message = code$1 !== null && code$1.length !== 0 ? {
|
|
673
|
+
data: {
|
|
674
|
+
code: code$1,
|
|
675
|
+
state
|
|
676
|
+
},
|
|
677
|
+
type: SILENT_SIGN_IN_SIGNED_IN
|
|
678
|
+
} : { type: SILENT_SIGN_IN_SIGNED_OUT };
|
|
679
|
+
window.parent.postMessage(message, window.location.origin);
|
|
680
|
+
window.location.href = "about:blank";
|
|
681
|
+
await SPAUtils_default.waitTillPageRedirect();
|
|
682
|
+
return true;
|
|
683
|
+
}
|
|
684
|
+
/**
|
|
702
685
|
* Handles the early-return path of `signIn()` when a session already exists
|
|
703
|
-
* or the page is handling a
|
|
686
|
+
* or the page is handling a silent sign-in response.
|
|
704
687
|
*
|
|
705
|
-
* @param shouldStopAuthn - Returns `true` if we should short-circuit and return early.
|
|
706
|
-
* @param checkSession - Callback to initialize OIDC session management.
|
|
707
688
|
* @returns The current user if already signed in, or `undefined` to continue normal sign-in.
|
|
708
689
|
*/
|
|
709
|
-
async handleSignIn(
|
|
710
|
-
|
|
711
|
-
if (await shouldStopAuthn()) return Promise.resolve({
|
|
690
|
+
async handleSignIn() {
|
|
691
|
+
if (await this.handleSilentSignInResponse()) return Promise.resolve({
|
|
712
692
|
allowedScopes: "",
|
|
713
693
|
displayName: "",
|
|
714
694
|
email: "",
|
|
715
|
-
sessionState: "",
|
|
716
695
|
sub: "",
|
|
717
696
|
tenantDomain: "",
|
|
718
697
|
username: ""
|
|
@@ -720,7 +699,6 @@ var AuthenticationHelper = class {
|
|
|
720
699
|
if (await this._isSignedIn()) {
|
|
721
700
|
await this._spaHelper.clearRefreshTokenTimeout();
|
|
722
701
|
await this._spaHelper.refreshAccessTokenAutomatically(() => this.refreshAccessToken());
|
|
723
|
-
if (configAny.syncSession) checkSession();
|
|
724
702
|
return Promise.resolve(await this._getUser());
|
|
725
703
|
}
|
|
726
704
|
const error = new URL(window.location.href).searchParams.get(ERROR);
|
|
@@ -838,164 +816,6 @@ const navigate = (url) => {
|
|
|
838
816
|
};
|
|
839
817
|
var navigate_default = navigate;
|
|
840
818
|
|
|
841
|
-
//#endregion
|
|
842
|
-
//#region src/utils/SessionManagementHelper.ts
|
|
843
|
-
/**
|
|
844
|
-
* Factory that creates an OIDC Session Management helper using an RP iframe and polling.
|
|
845
|
-
* Appends a hidden RP iframe to the document and returns the helper interface.
|
|
846
|
-
*
|
|
847
|
-
* @param signOut - Returns the sign-out URL for the current session.
|
|
848
|
-
* @param setSessionState - Stores a new session state from a prompt-none response.
|
|
849
|
-
* @returns A `SessionManagementHelperInterface` instance.
|
|
850
|
-
*/
|
|
851
|
-
const createSessionManagementHelper = async (signOut, setSessionState) => {
|
|
852
|
-
let _clientID;
|
|
853
|
-
let _checkSessionEndpoint;
|
|
854
|
-
let _sessionState;
|
|
855
|
-
let _interval;
|
|
856
|
-
let _redirectURL;
|
|
857
|
-
let _sessionRefreshInterval;
|
|
858
|
-
let _sessionRefreshIntervalTimeout;
|
|
859
|
-
let _checkSessionIntervalTimeout;
|
|
860
|
-
let _getSignInUrl;
|
|
861
|
-
const initialize = (clientId, checkSessionEndpoint, getSessionState, interval, sessionRefreshInterval, redirectURL, getSignInUrl) => {
|
|
862
|
-
_clientID = clientId;
|
|
863
|
-
_checkSessionEndpoint = checkSessionEndpoint;
|
|
864
|
-
_sessionState = getSessionState;
|
|
865
|
-
_interval = interval;
|
|
866
|
-
_redirectURL = redirectURL;
|
|
867
|
-
_sessionRefreshInterval = sessionRefreshInterval;
|
|
868
|
-
_getSignInUrl = getSignInUrl;
|
|
869
|
-
if (_interval > -1) initiateCheckSession();
|
|
870
|
-
if (_sessionRefreshInterval > -1) _sessionRefreshIntervalTimeout = setInterval(() => {
|
|
871
|
-
sendPromptNoneRequest();
|
|
872
|
-
}, _sessionRefreshInterval * 1e3);
|
|
873
|
-
};
|
|
874
|
-
const initiateCheckSession = async () => {
|
|
875
|
-
if (!_checkSessionEndpoint || !_clientID || !_redirectURL) return;
|
|
876
|
-
async function checkSession() {
|
|
877
|
-
const sessionState = await _sessionState();
|
|
878
|
-
if (Boolean(_clientID) && Boolean(sessionState)) {
|
|
879
|
-
const message = `${_clientID} ${sessionState}`;
|
|
880
|
-
(document.getElementById(RP_IFRAME)?.contentDocument?.getElementById(OP_IFRAME)).contentWindow?.postMessage(message, _checkSessionEndpoint);
|
|
881
|
-
}
|
|
882
|
-
}
|
|
883
|
-
const opIframe = document.getElementById(RP_IFRAME)?.contentDocument?.getElementById(OP_IFRAME);
|
|
884
|
-
opIframe.src = _checkSessionEndpoint + "?client_id=" + _clientID + "&redirect_uri=" + _redirectURL;
|
|
885
|
-
_checkSessionIntervalTimeout = setInterval(checkSession, _interval * 1e3);
|
|
886
|
-
listenToResponseFromOPIFrame();
|
|
887
|
-
};
|
|
888
|
-
const reset = () => {
|
|
889
|
-
clearInterval(_checkSessionIntervalTimeout);
|
|
890
|
-
clearInterval(_sessionRefreshIntervalTimeout);
|
|
891
|
-
};
|
|
892
|
-
const listenToResponseFromOPIFrame = () => {
|
|
893
|
-
async function receiveMessage(e) {
|
|
894
|
-
const targetOrigin = _checkSessionEndpoint;
|
|
895
|
-
if (!targetOrigin || targetOrigin?.indexOf(e.origin) < 0 || e?.data?.type === SET_SESSION_STATE_FROM_IFRAME) return;
|
|
896
|
-
if (e.data === "unchanged") {} else if (e.data === "error") window.location.href = await signOut();
|
|
897
|
-
else if (e.data === "changed") sendPromptNoneRequest();
|
|
898
|
-
}
|
|
899
|
-
window?.addEventListener("message", receiveMessage, false);
|
|
900
|
-
};
|
|
901
|
-
const sendPromptNoneRequest = async () => {
|
|
902
|
-
const promptNoneIFrame = document.getElementById(RP_IFRAME)?.contentDocument?.getElementById(PROMPT_NONE_IFRAME);
|
|
903
|
-
if (SPAUtils_default.canSendPromptNoneRequest()) {
|
|
904
|
-
SPAUtils_default.setPromptNoneRequestSent(true);
|
|
905
|
-
const receiveMessageListener = (e) => {
|
|
906
|
-
if (e?.data?.type === SET_SESSION_STATE_FROM_IFRAME) {
|
|
907
|
-
setSessionState(e?.data?.data ?? "");
|
|
908
|
-
window?.removeEventListener("message", receiveMessageListener);
|
|
909
|
-
}
|
|
910
|
-
};
|
|
911
|
-
window?.addEventListener("message", receiveMessageListener);
|
|
912
|
-
promptNoneIFrame.src = await _getSignInUrl({
|
|
913
|
-
prompt: "none",
|
|
914
|
-
response_mode: "query",
|
|
915
|
-
state: STATE
|
|
916
|
-
});
|
|
917
|
-
}
|
|
918
|
-
};
|
|
919
|
-
const receivePromptNoneResponse = async (setSessionStateFn) => {
|
|
920
|
-
const state = new URL(window.location.href).searchParams.get(STATE_QUERY);
|
|
921
|
-
const sessionState = new URL(window.location.href).searchParams.get(__thunderid_javascript.OIDCRequestConstants.Params.SESSION_STATE);
|
|
922
|
-
const parent = window.parent.parent;
|
|
923
|
-
if (state !== null && (state.includes(STATE) || state.includes(SILENT_SIGN_IN_STATE))) {
|
|
924
|
-
const code$1 = new URL(window.location.href).searchParams.get("code");
|
|
925
|
-
if (code$1 !== null && code$1.length !== 0) {
|
|
926
|
-
if (state.includes(SILENT_SIGN_IN_STATE)) {
|
|
927
|
-
const message = {
|
|
928
|
-
data: {
|
|
929
|
-
code: code$1,
|
|
930
|
-
sessionState: sessionState ?? "",
|
|
931
|
-
state
|
|
932
|
-
},
|
|
933
|
-
type: CHECK_SESSION_SIGNED_IN
|
|
934
|
-
};
|
|
935
|
-
sessionStorage.setItem(INITIALIZED_SILENT_SIGN_IN, "false");
|
|
936
|
-
parent.postMessage(message, parent.origin);
|
|
937
|
-
SPAUtils_default.setPromptNoneRequestSent(false);
|
|
938
|
-
window.location.href = "about:blank";
|
|
939
|
-
await SPAUtils_default.waitTillPageRedirect();
|
|
940
|
-
return true;
|
|
941
|
-
}
|
|
942
|
-
const newSessionState = new URL(window.location.href).searchParams.get("session_state");
|
|
943
|
-
setSessionStateFn && await setSessionStateFn(newSessionState);
|
|
944
|
-
SPAUtils_default.setPromptNoneRequestSent(false);
|
|
945
|
-
window.location.href = "about:blank";
|
|
946
|
-
await SPAUtils_default.waitTillPageRedirect();
|
|
947
|
-
return true;
|
|
948
|
-
} else {
|
|
949
|
-
if (state.includes(SILENT_SIGN_IN_STATE)) {
|
|
950
|
-
const message = { type: CHECK_SESSION_SIGNED_OUT };
|
|
951
|
-
window.parent.parent.postMessage(message, parent.origin);
|
|
952
|
-
SPAUtils_default.setPromptNoneRequestSent(false);
|
|
953
|
-
window.location.href = "about:blank";
|
|
954
|
-
await SPAUtils_default.waitTillPageRedirect();
|
|
955
|
-
return true;
|
|
956
|
-
}
|
|
957
|
-
SPAUtils_default.setPromptNoneRequestSent(false);
|
|
958
|
-
const signOutURL = await signOut();
|
|
959
|
-
parent.location.href = signOutURL;
|
|
960
|
-
window.location.href = "about:blank";
|
|
961
|
-
await SPAUtils_default.waitTillPageRedirect();
|
|
962
|
-
return true;
|
|
963
|
-
}
|
|
964
|
-
}
|
|
965
|
-
return false;
|
|
966
|
-
};
|
|
967
|
-
let rpIFrame = document.createElement("iframe");
|
|
968
|
-
rpIFrame.setAttribute("id", RP_IFRAME);
|
|
969
|
-
rpIFrame.style.display = "none";
|
|
970
|
-
let rpIframeLoaded = false;
|
|
971
|
-
rpIFrame.onload = () => {
|
|
972
|
-
rpIFrame = document.getElementById(RP_IFRAME);
|
|
973
|
-
const rpDoc = rpIFrame?.contentDocument;
|
|
974
|
-
const opIFrame = rpDoc?.createElement("iframe");
|
|
975
|
-
if (opIFrame) {
|
|
976
|
-
opIFrame.setAttribute("id", OP_IFRAME);
|
|
977
|
-
opIFrame.style.display = "none";
|
|
978
|
-
}
|
|
979
|
-
const promptNoneIFrame = rpDoc?.createElement("iframe");
|
|
980
|
-
if (promptNoneIFrame) {
|
|
981
|
-
promptNoneIFrame.setAttribute("id", PROMPT_NONE_IFRAME);
|
|
982
|
-
promptNoneIFrame.style.display = "none";
|
|
983
|
-
}
|
|
984
|
-
opIFrame && rpIFrame?.contentDocument?.body?.appendChild(opIFrame);
|
|
985
|
-
promptNoneIFrame && rpIFrame?.contentDocument?.body?.appendChild(promptNoneIFrame);
|
|
986
|
-
rpIframeLoaded = true;
|
|
987
|
-
};
|
|
988
|
-
document?.body?.appendChild(rpIFrame);
|
|
989
|
-
const sleep = () => new Promise((resolve) => setTimeout(resolve, 1));
|
|
990
|
-
while (!rpIframeLoaded) await sleep();
|
|
991
|
-
return {
|
|
992
|
-
initialize,
|
|
993
|
-
receivePromptNoneResponse,
|
|
994
|
-
reset
|
|
995
|
-
};
|
|
996
|
-
};
|
|
997
|
-
var SessionManagementHelper_default = createSessionManagementHelper;
|
|
998
|
-
|
|
999
819
|
//#endregion
|
|
1000
820
|
//#region ../../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js
|
|
1001
821
|
var require_base64_js = /* @__PURE__ */ __commonJS({ "../../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js": ((exports) => {
|
|
@@ -2598,10 +2418,7 @@ var SPAHelper_default = SPAHelper;
|
|
|
2598
2418
|
const logger$2 = (0, __thunderid_javascript.createPackageComponentLogger)("@thunderid/browser", "ThunderIDBrowserClient");
|
|
2599
2419
|
const BROWSER_DEFAULT_CONFIG = {
|
|
2600
2420
|
autoLogoutOnTokenRefreshError: false,
|
|
2601
|
-
|
|
2602
|
-
periodicTokenRefresh: false,
|
|
2603
|
-
sessionRefreshInterval: 300,
|
|
2604
|
-
syncSession: false
|
|
2421
|
+
periodicTokenRefresh: false
|
|
2605
2422
|
};
|
|
2606
2423
|
const initiateStore = (storage) => {
|
|
2607
2424
|
switch (storage) {
|
|
@@ -2616,7 +2433,6 @@ var ThunderIDBrowserClient = class ThunderIDBrowserClient extends __thunderid_ja
|
|
|
2616
2433
|
_browserInstanceId = 0;
|
|
2617
2434
|
_httpClient;
|
|
2618
2435
|
_spaHelper;
|
|
2619
|
-
_sessionManagementHelper;
|
|
2620
2436
|
_authHelper;
|
|
2621
2437
|
_storage = BrowserStorage_default.SessionStorage;
|
|
2622
2438
|
_getSignOutURLFromSessionStorage = false;
|
|
@@ -2655,7 +2471,6 @@ var ThunderIDBrowserClient = class ThunderIDBrowserClient extends __thunderid_ja
|
|
|
2655
2471
|
await this._authHelper?.attachTokenToRequestConfig(request);
|
|
2656
2472
|
};
|
|
2657
2473
|
this._httpClient = FetchHttpClient_default.getInstance(this._browserInstanceId, true, attachToken);
|
|
2658
|
-
this._sessionManagementHelper = await SessionManagementHelper_default(async () => this.getSignOutUrl(), (sessionState) => sm.setSessionDataParameter(__thunderid_javascript.OIDCRequestConstants.Params.SESSION_STATE, sessionState));
|
|
2659
2474
|
this._authHelper = new AuthenticationHelper_default(sm, this._spaHelper, this._browserInstanceId, {
|
|
2660
2475
|
exchangeToken: (cfg) => super.exchangeToken(cfg),
|
|
2661
2476
|
getAccessToken: (sessionId) => this.getAccessToken(sessionId),
|
|
@@ -2696,30 +2511,27 @@ var ThunderIDBrowserClient = class ThunderIDBrowserClient extends __thunderid_ja
|
|
|
2696
2511
|
isLoading() {
|
|
2697
2512
|
return false;
|
|
2698
2513
|
}
|
|
2699
|
-
async signIn(config, authorizationCode,
|
|
2514
|
+
async signIn(config, authorizationCode, state, tokenRequestConfig) {
|
|
2700
2515
|
await this.isInitialized();
|
|
2701
2516
|
if (!SPAUtils_default.canContinueSignIn(Boolean(config?.callOnlyOnRedirect), authorizationCode)) return;
|
|
2702
2517
|
delete config?.callOnlyOnRedirect;
|
|
2703
|
-
const user = await this._signInInternal(config, authorizationCode,
|
|
2518
|
+
const user = await this._signInInternal(config, authorizationCode, state, tokenRequestConfig);
|
|
2704
2519
|
if (user && this._onSignInCallback) this._onSignInCallback(user);
|
|
2705
2520
|
return user;
|
|
2706
2521
|
}
|
|
2707
|
-
async _signInInternal(signInConfig, authorizationCode,
|
|
2522
|
+
async _signInInternal(signInConfig, authorizationCode, state, tokenRequestConfig) {
|
|
2708
2523
|
const sm = this.getStorageManager();
|
|
2709
2524
|
const config = await sm.getConfigData();
|
|
2710
|
-
const basicUserInfo = await this._authHelper.handleSignIn(
|
|
2525
|
+
const basicUserInfo = await this._authHelper.handleSignIn();
|
|
2711
2526
|
if (basicUserInfo) return basicUserInfo;
|
|
2712
2527
|
let resolvedAuthorizationCode;
|
|
2713
|
-
let resolvedSessionState;
|
|
2714
2528
|
let resolvedState;
|
|
2715
2529
|
let resolvedTokenRequestConfig = { params: {} };
|
|
2716
2530
|
if (config?.responseMode === "form_post" && authorizationCode) {
|
|
2717
2531
|
resolvedAuthorizationCode = authorizationCode;
|
|
2718
|
-
resolvedSessionState = sessionState ?? "";
|
|
2719
2532
|
resolvedState = state ?? "";
|
|
2720
2533
|
} else {
|
|
2721
2534
|
resolvedAuthorizationCode = new URL(window.location.href).searchParams.get(__thunderid_javascript.OIDCRequestConstants.Params.AUTHORIZATION_CODE) ?? "";
|
|
2722
|
-
resolvedSessionState = new URL(window.location.href).searchParams.get(__thunderid_javascript.OIDCRequestConstants.Params.SESSION_STATE) ?? "";
|
|
2723
2535
|
resolvedState = new URL(window.location.href).searchParams.get(__thunderid_javascript.OIDCRequestConstants.Params.STATE) ?? "";
|
|
2724
2536
|
SPAUtils_default.removeAuthorizationCode();
|
|
2725
2537
|
}
|
|
@@ -2727,7 +2539,7 @@ var ThunderIDBrowserClient = class ThunderIDBrowserClient extends __thunderid_ja
|
|
|
2727
2539
|
sm.setSessionStatus("true");
|
|
2728
2540
|
const storedTokenRequestConfig = await sm.getTemporaryDataParameter(TOKEN_REQUEST_CONFIG_KEY);
|
|
2729
2541
|
if (storedTokenRequestConfig && typeof storedTokenRequestConfig === "string") resolvedTokenRequestConfig = JSON.parse(storedTokenRequestConfig);
|
|
2730
|
-
return this._exchangeCodeForTokens(resolvedAuthorizationCode,
|
|
2542
|
+
return this._exchangeCodeForTokens(resolvedAuthorizationCode, resolvedState, resolvedTokenRequestConfig);
|
|
2731
2543
|
}
|
|
2732
2544
|
return this.getSignInUrl(signInConfig).then(async (url) => {
|
|
2733
2545
|
if (this._storage === BrowserStorage_default.BrowserMemory && config.enablePKCE) {
|
|
@@ -2741,34 +2553,32 @@ var ThunderIDBrowserClient = class ThunderIDBrowserClient extends __thunderid_ja
|
|
|
2741
2553
|
allowedScopes: "",
|
|
2742
2554
|
displayName: "",
|
|
2743
2555
|
email: "",
|
|
2744
|
-
sessionState: "",
|
|
2745
2556
|
sub: "",
|
|
2746
2557
|
tenantDomain: "",
|
|
2747
2558
|
username: ""
|
|
2748
2559
|
};
|
|
2749
2560
|
});
|
|
2750
2561
|
}
|
|
2751
|
-
async _exchangeCodeForTokens(authorizationCode,
|
|
2562
|
+
async _exchangeCodeForTokens(authorizationCode, state, tokenRequestConfig) {
|
|
2752
2563
|
const config = await this.getStorageManager().getConfigData();
|
|
2753
|
-
if (this._storage === BrowserStorage_default.BrowserMemory && config.enablePKCE &&
|
|
2754
|
-
const pkceKey = (0, __thunderid_javascript.extractPkceStorageKeyFromState)(
|
|
2564
|
+
if (this._storage === BrowserStorage_default.BrowserMemory && config.enablePKCE && state) {
|
|
2565
|
+
const pkceKey = (0, __thunderid_javascript.extractPkceStorageKeyFromState)(state);
|
|
2755
2566
|
const pkce = SPAUtils_default.getPKCE(pkceKey);
|
|
2756
2567
|
await this.setPKCECode(pkce, pkceKey);
|
|
2757
2568
|
}
|
|
2758
|
-
await this.requestAccessToken(authorizationCode,
|
|
2569
|
+
await this.requestAccessToken(authorizationCode, state ?? "", void 0, tokenRequestConfig);
|
|
2759
2570
|
try {
|
|
2760
2571
|
const signOutUrl = await this.getSignOutUrl();
|
|
2761
2572
|
SPAUtils_default.setSignOutURL(signOutUrl, config.clientId, this._browserInstanceId);
|
|
2762
2573
|
} catch {}
|
|
2763
2574
|
await this._spaHelper.clearRefreshTokenTimeout();
|
|
2764
2575
|
await this._spaHelper.refreshAccessTokenAutomatically(() => this.refreshAccessToken());
|
|
2765
|
-
if (config.syncSession) this._checkSession();
|
|
2766
2576
|
return this.getUser();
|
|
2767
2577
|
}
|
|
2768
2578
|
async signInSilently(additionalParams, tokenRequestConfig) {
|
|
2769
2579
|
await this.isInitialized();
|
|
2770
2580
|
if (SPAUtils_default.wasSignInCalled()) return;
|
|
2771
|
-
const response = await this._authHelper.signInSilently((params) => this._constructSilentSignInUrl(params), (code$1,
|
|
2581
|
+
const response = await this._authHelper.signInSilently((params) => this._constructSilentSignInUrl(params), (code$1, s, trc) => this._exchangeCodeForTokens(code$1, s, trc), additionalParams, tokenRequestConfig);
|
|
2772
2582
|
if (this._onSignInCallback && response) this._onSignInCallback(response);
|
|
2773
2583
|
return response;
|
|
2774
2584
|
}
|
|
@@ -2867,7 +2677,6 @@ var ThunderIDBrowserClient = class ThunderIDBrowserClient extends __thunderid_ja
|
|
|
2867
2677
|
await this._validateMethod();
|
|
2868
2678
|
const timer = await this._spaHelper.getRefreshTimeoutTimer();
|
|
2869
2679
|
await super.revokeAccessToken(userId);
|
|
2870
|
-
this._sessionManagementHelper?.reset();
|
|
2871
2680
|
await this._spaHelper.clearRefreshTokenTimeout(timer);
|
|
2872
2681
|
this._onEndUserSession && await this._onEndUserSession(true);
|
|
2873
2682
|
return true;
|
|
@@ -2881,17 +2690,7 @@ var ThunderIDBrowserClient = class ThunderIDBrowserClient extends __thunderid_ja
|
|
|
2881
2690
|
}
|
|
2882
2691
|
async reInitialize(config) {
|
|
2883
2692
|
await this.isInitialized();
|
|
2884
|
-
|
|
2885
|
-
const isCheckSessionIframeDifferent = !(existingConfig?.endpoints?.checkSessionIframe && config?.endpoints?.checkSessionIframe && existingConfig.endpoints.checkSessionIframe === config.endpoints.checkSessionIframe);
|
|
2886
|
-
const result = await super.reInitialize(config);
|
|
2887
|
-
if ({
|
|
2888
|
-
...existingConfig,
|
|
2889
|
-
...config
|
|
2890
|
-
}.syncSession && isCheckSessionIframeDifferent) {
|
|
2891
|
-
this._sessionManagementHelper?.reset();
|
|
2892
|
-
this._checkSession();
|
|
2893
|
-
}
|
|
2894
|
-
return result;
|
|
2693
|
+
return super.reInitialize(config);
|
|
2895
2694
|
}
|
|
2896
2695
|
async startAutoRefreshToken() {
|
|
2897
2696
|
await this.isInitialized();
|
|
@@ -2954,18 +2753,6 @@ var ThunderIDBrowserClient = class ThunderIDBrowserClient extends __thunderid_ja
|
|
|
2954
2753
|
default: throw new __thunderid_javascript.ThunderIDAuthException("SPA-AUTH_CLIENT-ON-IV01", "Invalid hook.", `Unknown hook: "${hook}"`);
|
|
2955
2754
|
}
|
|
2956
2755
|
}
|
|
2957
|
-
async _checkSession() {
|
|
2958
|
-
const oidcEndpoints = await this.getOpenIDProviderEndpoints();
|
|
2959
|
-
const sm = this.getStorageManager();
|
|
2960
|
-
const config = await sm.getConfigData();
|
|
2961
|
-
this._authHelper.initializeSessionManger(config, oidcEndpoints, async () => (await sm.getSessionData())?.session_state ?? "", async (params) => this.getSignInUrl(params), this._sessionManagementHelper);
|
|
2962
|
-
}
|
|
2963
|
-
async _shouldStopAuthn() {
|
|
2964
|
-
const sm = this.getStorageManager();
|
|
2965
|
-
return this._sessionManagementHelper.receivePromptNoneResponse(async (sessionState) => {
|
|
2966
|
-
await sm.setSessionDataParameter(__thunderid_javascript.OIDCRequestConstants.Params.SESSION_STATE, sessionState ?? "");
|
|
2967
|
-
});
|
|
2968
|
-
}
|
|
2969
2756
|
_enableRetrievingSignOutURLFromSession(config) {
|
|
2970
2757
|
if (config.preventSignOutURLUpdate) this._getSignOutURLFromSessionStorage = true;
|
|
2971
2758
|
}
|
|
@@ -3014,10 +2801,10 @@ var Hooks_default = Hooks;
|
|
|
3014
2801
|
//#endregion
|
|
3015
2802
|
//#region src/utils/hasAuthParamsInUrl.ts
|
|
3016
2803
|
/**
|
|
3017
|
-
* Utility to check if `code`
|
|
2804
|
+
* Utility to check if `code` is available in the URL as a search param.
|
|
3018
2805
|
*
|
|
3019
2806
|
* @param params - The URL search params to check. Defaults to `window.location.search`.
|
|
3020
|
-
* @return `true` if the URL contains `code`
|
|
2807
|
+
* @return `true` if the URL contains a `code` search param, otherwise `false`.
|
|
3021
2808
|
*/
|
|
3022
2809
|
const hasAuthParamsInUrl = (params = window.location.search) => {
|
|
3023
2810
|
return /[?&]code=[^&]+/.test(params);
|
|
@@ -3953,27 +3740,20 @@ exports.AVATAR_URI_SCHEME = AVATAR_URI_SCHEME;
|
|
|
3953
3740
|
exports.AuthenticationHelper = AuthenticationHelper_default;
|
|
3954
3741
|
exports.BrowserHooks = Hooks;
|
|
3955
3742
|
exports.BrowserStorage = BrowserStorage_default;
|
|
3956
|
-
exports.CHECK_SESSION_SIGNED_IN = CHECK_SESSION_SIGNED_IN;
|
|
3957
|
-
exports.CHECK_SESSION_SIGNED_OUT = CHECK_SESSION_SIGNED_OUT;
|
|
3958
3743
|
exports.CUSTOM_GRANT_CONFIG = CUSTOM_GRANT_CONFIG;
|
|
3959
3744
|
exports.ERROR = ERROR;
|
|
3960
3745
|
exports.ERROR_DESCRIPTION = ERROR_DESCRIPTION;
|
|
3961
3746
|
exports.FetchHttpClient = FetchHttpClient_default;
|
|
3962
3747
|
exports.Hooks = Hooks_default;
|
|
3963
|
-
exports.INITIALIZED_SILENT_SIGN_IN = INITIALIZED_SILENT_SIGN_IN;
|
|
3964
3748
|
exports.LocalStore = LocalStore_default;
|
|
3965
3749
|
exports.MemoryStore = MemoryStore_default;
|
|
3966
|
-
exports.OP_IFRAME = OP_IFRAME;
|
|
3967
|
-
exports.PROMPT_NONE_IFRAME = PROMPT_NONE_IFRAME;
|
|
3968
|
-
exports.PROMPT_NONE_REQUEST_SENT = PROMPT_NONE_REQUEST_SENT;
|
|
3969
3750
|
exports.REFRESH_ACCESS_TOKEN_ERR0R = REFRESH_ACCESS_TOKEN_ERR0R;
|
|
3970
|
-
exports.
|
|
3971
|
-
exports.
|
|
3751
|
+
exports.SILENT_SIGN_IN_SIGNED_IN = SILENT_SIGN_IN_SIGNED_IN;
|
|
3752
|
+
exports.SILENT_SIGN_IN_SIGNED_OUT = SILENT_SIGN_IN_SIGNED_OUT;
|
|
3972
3753
|
exports.SILENT_SIGN_IN_STATE = SILENT_SIGN_IN_STATE;
|
|
3973
3754
|
exports.SPACryptoUtils = SPACryptoUtils_default;
|
|
3974
3755
|
exports.SPAHelper = SPAHelper_default;
|
|
3975
3756
|
exports.SPAUtils = SPAUtils_default;
|
|
3976
|
-
exports.STATE = STATE;
|
|
3977
3757
|
exports.STATE_QUERY = STATE_QUERY;
|
|
3978
3758
|
exports.SessionStore = SessionStore_default;
|
|
3979
3759
|
exports.TOKEN_REQUEST_CONFIG_KEY = TOKEN_REQUEST_CONFIG_KEY;
|
|
@@ -3982,7 +3762,6 @@ exports.buildAvatarSpec = buildAvatarSpec_default;
|
|
|
3982
3762
|
exports.createClassObserver = createClassObserver;
|
|
3983
3763
|
exports.createHttpClientFetcher = createHttpClientFetcher_default;
|
|
3984
3764
|
exports.createMediaQueryListener = createMediaQueryListener;
|
|
3985
|
-
exports.createSessionManagementHelper = SessionManagementHelper_default;
|
|
3986
3765
|
exports.deriveAvatarContent = deriveAvatarContent;
|
|
3987
3766
|
exports.detectThemeMode = detectThemeMode;
|
|
3988
3767
|
exports.extractAvatarParamsFromUri = extractAvatarParamsFromUri_default;
|