@thunderid/browser 1.1.0 → 1.2.1
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 +2 -4
- package/dist/ThunderIDBrowserClient.d.ts.map +1 -1
- package/dist/cjs/index.cjs +82 -290
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/constants/SPAConstants.d.ts +3 -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 +80 -281
- 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 +16 -26
- 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;
|
|
@@ -35,6 +34,7 @@ declare class ThunderIDBrowserClient<T = BrowserAuthConfig> extends ThunderIDJav
|
|
|
35
34
|
signInSilently(additionalParams?: Record<string, string | boolean>, tokenRequestConfig?: {
|
|
36
35
|
params: Record<string, unknown>;
|
|
37
36
|
}): Promise<User | boolean | undefined>;
|
|
37
|
+
private _signInSilentlyInternal;
|
|
38
38
|
signOut(_options?: any, sessionIdOrAfterSignOut?: string | ((url: string) => void), afterSignOutParam?: (url: string) => void): Promise<string>;
|
|
39
39
|
httpRequest(requestConfig: HttpRequestConfig): Promise<HttpResponse | undefined>;
|
|
40
40
|
httpRequestAll(configs: HttpRequestConfig[]): Promise<HttpResponse[] | undefined>;
|
|
@@ -57,8 +57,6 @@ declare class ThunderIDBrowserClient<T = BrowserAuthConfig> extends ThunderIDJav
|
|
|
57
57
|
disableHttpHandler(): Promise<boolean | undefined>;
|
|
58
58
|
decodeJwtToken<R = Record<string, unknown>>(token: string): Promise<R>;
|
|
59
59
|
on(hook: string, callback: (response?: any) => void | Promise<void>, id?: string): Promise<void>;
|
|
60
|
-
private _checkSession;
|
|
61
|
-
private _shouldStopAuthn;
|
|
62
60
|
private _enableRetrievingSignOutURLFromSession;
|
|
63
61
|
private _constructSilentSignInUrl;
|
|
64
62
|
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,EAGb,OAAO,EACP,aAAa,EAGb,iBAAiB,EACjB,YAAY,EAEb,MAAM,uBAAuB,CAAC;AAE/B,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAC,iBAAiB,EAAC,MAAM,wBAAwB,CAAC;AAEzD,OAAO,YAAY,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAC,sBAAsB,EAAC,MAAM,8BAA8B,CAAC;
|
|
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,13 @@ 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
|
|
49
|
-
const PROMPT_NONE_REQUEST_SENT = "promptNoneRequestSent";
|
|
44
|
+
const SILENT_SIGN_IN_TIMEOUT = 1e4;
|
|
50
45
|
const ACCESS_TOKEN_INVALID = "Access token is invalid";
|
|
51
46
|
const REFRESH_ACCESS_TOKEN_ERR0R = "refresh-access-token-error";
|
|
52
47
|
const TOKEN_REQUEST_CONFIG_KEY = "token_request_config";
|
|
53
|
-
const
|
|
54
|
-
const
|
|
55
|
-
const SET_SESSION_STATE_FROM_IFRAME = "set_session_state_from_iframe";
|
|
48
|
+
const SILENT_SIGN_IN_SIGNED_IN = "silent_sign_in_signed_in";
|
|
49
|
+
const SILENT_SIGN_IN_SIGNED_OUT = "silent_sign_in_signed_out";
|
|
56
50
|
|
|
57
51
|
//#endregion
|
|
58
52
|
//#region src/FetchHttpClient.ts
|
|
@@ -290,13 +284,6 @@ var SPAUtils = class SPAUtils {
|
|
|
290
284
|
return false;
|
|
291
285
|
}
|
|
292
286
|
/**
|
|
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
287
|
* Checks whether the current URL indicates a successful sign-out redirect.
|
|
301
288
|
* Clears the query string and session data if `true`.
|
|
302
289
|
*
|
|
@@ -359,21 +346,6 @@ var SPAUtils = class SPAUtils {
|
|
|
359
346
|
return !!urlObject.searchParams.get(ERROR) && urlObject.searchParams.get(STATE_QUERY) !== __thunderid_javascript.OIDCRequestConstants.Params.SIGN_OUT_SUCCESS;
|
|
360
347
|
}
|
|
361
348
|
/**
|
|
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
349
|
* Waits until the browser has redirected (non-blocking delay).
|
|
378
350
|
*
|
|
379
351
|
* @param time - Time to wait in seconds (default: 3).
|
|
@@ -402,7 +374,7 @@ var SPAUtils_default = SPAUtils;
|
|
|
402
374
|
//#region src/utils/AuthenticationHelper.ts
|
|
403
375
|
/**
|
|
404
376
|
* Browser-level authentication helper that orchestrates HTTP requests with token attachment,
|
|
405
|
-
* automatic token refresh,
|
|
377
|
+
* automatic token refresh, and the silent sign-in flow.
|
|
406
378
|
*
|
|
407
379
|
* @typeParam T - The browser client config extension type.
|
|
408
380
|
*/
|
|
@@ -462,18 +434,6 @@ var AuthenticationHelper = class {
|
|
|
462
434
|
httpClient?.disableHandler && httpClient.disableHandler();
|
|
463
435
|
}
|
|
464
436
|
/**
|
|
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
437
|
* Executes a custom token exchange grant, enforcing `allowedExternalUrls` rules when applicable.
|
|
478
438
|
*
|
|
479
439
|
* @param config - The token exchange configuration.
|
|
@@ -643,76 +603,97 @@ var AuthenticationHelper = class {
|
|
|
643
603
|
});
|
|
644
604
|
}
|
|
645
605
|
/**
|
|
646
|
-
* Executes the silent sign-in flow
|
|
606
|
+
* Executes the silent sign-in flow by loading a `prompt=none` authorize request in a hidden iframe.
|
|
647
607
|
*
|
|
648
608
|
* @param constructSilentSignInUrl - Builds the prompt-none authorize URL.
|
|
649
609
|
* @param requestAccessToken - Exchanges the returned code for tokens.
|
|
650
|
-
* @param sessionManagementHelper - Handles the iFrame prompt-none response.
|
|
651
610
|
* @param additionalParams - Extra authorize request params.
|
|
652
611
|
* @param tokenRequestConfig - Additional params for the token request.
|
|
612
|
+
* @param timeout - How long to wait for the iframe's response, in milliseconds.
|
|
653
613
|
* @returns The user session, or `false` if the user is not signed in.
|
|
654
614
|
*/
|
|
655
|
-
async signInSilently(constructSilentSignInUrl, requestAccessToken,
|
|
615
|
+
async signInSilently(constructSilentSignInUrl, requestAccessToken, additionalParams, tokenRequestConfig, timeout = SILENT_SIGN_IN_TIMEOUT) {
|
|
656
616
|
if (SPAUtils_default.isInitializedSilentSignIn()) {
|
|
657
|
-
await
|
|
617
|
+
await this.handleSilentSignInResponse();
|
|
658
618
|
return Promise.resolve({
|
|
659
619
|
allowedScopes: "",
|
|
660
620
|
displayName: "",
|
|
661
621
|
email: "",
|
|
662
|
-
sessionState: "",
|
|
663
622
|
sub: "",
|
|
664
623
|
tenantDomain: "",
|
|
665
624
|
username: ""
|
|
666
625
|
});
|
|
667
626
|
}
|
|
668
|
-
|
|
627
|
+
let url;
|
|
669
628
|
try {
|
|
670
|
-
|
|
629
|
+
url = await constructSilentSignInUrl(additionalParams);
|
|
671
630
|
} catch (error) {
|
|
672
631
|
return Promise.reject(error);
|
|
673
632
|
}
|
|
633
|
+
const silentSignInIFrame = document.createElement("iframe");
|
|
634
|
+
silentSignInIFrame.style.display = "none";
|
|
674
635
|
return new Promise((resolve, reject) => {
|
|
636
|
+
const cleanUp = () => {
|
|
637
|
+
window.removeEventListener("message", listenToSilentSignInIFrame);
|
|
638
|
+
clearTimeout(timer);
|
|
639
|
+
silentSignInIFrame.remove();
|
|
640
|
+
};
|
|
675
641
|
const timer = setTimeout(() => {
|
|
642
|
+
cleanUp();
|
|
676
643
|
resolve(false);
|
|
677
|
-
},
|
|
678
|
-
const
|
|
644
|
+
}, timeout);
|
|
645
|
+
const listenToSilentSignInIFrame = async (e) => {
|
|
646
|
+
if (e.origin !== window.location.origin || e.source !== silentSignInIFrame.contentWindow) return;
|
|
679
647
|
const data = e.data;
|
|
680
|
-
if (data?.type
|
|
681
|
-
|
|
682
|
-
clearTimeout(timer);
|
|
648
|
+
if (data?.type === SILENT_SIGN_IN_SIGNED_OUT) {
|
|
649
|
+
cleanUp();
|
|
683
650
|
resolve(false);
|
|
684
651
|
}
|
|
685
|
-
if (data?.type
|
|
652
|
+
if (data?.type === SILENT_SIGN_IN_SIGNED_IN && data?.data?.code) {
|
|
686
653
|
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
|
-
});
|
|
654
|
+
cleanUp();
|
|
655
|
+
requestAccessToken(authInfo.code, authInfo.state, tokenRequestConfig).then(resolve).catch(reject);
|
|
696
656
|
}
|
|
697
657
|
};
|
|
698
|
-
window.addEventListener("message",
|
|
658
|
+
window.addEventListener("message", listenToSilentSignInIFrame);
|
|
659
|
+
silentSignInIFrame.src = url;
|
|
660
|
+
document.body.appendChild(silentSignInIFrame);
|
|
699
661
|
});
|
|
700
662
|
}
|
|
701
663
|
/**
|
|
664
|
+
* Handles the page load inside the silent sign-in iframe: relays the authorization response to the
|
|
665
|
+
* parent window and blanks the iframe.
|
|
666
|
+
*
|
|
667
|
+
* @returns `true` if the current page load was a silent sign-in response.
|
|
668
|
+
*/
|
|
669
|
+
async handleSilentSignInResponse() {
|
|
670
|
+
const url = new URL(window.location.href);
|
|
671
|
+
const state = url.searchParams.get(STATE_QUERY);
|
|
672
|
+
if (state === null || !state.includes(SILENT_SIGN_IN_STATE)) return false;
|
|
673
|
+
const code$1 = url.searchParams.get("code");
|
|
674
|
+
const message = code$1 !== null && code$1.length !== 0 ? {
|
|
675
|
+
data: {
|
|
676
|
+
code: code$1,
|
|
677
|
+
state
|
|
678
|
+
},
|
|
679
|
+
type: SILENT_SIGN_IN_SIGNED_IN
|
|
680
|
+
} : { type: SILENT_SIGN_IN_SIGNED_OUT };
|
|
681
|
+
window.parent.postMessage(message, window.location.origin);
|
|
682
|
+
window.location.href = "about:blank";
|
|
683
|
+
await SPAUtils_default.waitTillPageRedirect();
|
|
684
|
+
return true;
|
|
685
|
+
}
|
|
686
|
+
/**
|
|
702
687
|
* Handles the early-return path of `signIn()` when a session already exists
|
|
703
|
-
* or the page is handling a
|
|
688
|
+
* or the page is handling a silent sign-in response.
|
|
704
689
|
*
|
|
705
|
-
* @param shouldStopAuthn - Returns `true` if we should short-circuit and return early.
|
|
706
|
-
* @param checkSession - Callback to initialize OIDC session management.
|
|
707
690
|
* @returns The current user if already signed in, or `undefined` to continue normal sign-in.
|
|
708
691
|
*/
|
|
709
|
-
async handleSignIn(
|
|
710
|
-
|
|
711
|
-
if (await shouldStopAuthn()) return Promise.resolve({
|
|
692
|
+
async handleSignIn() {
|
|
693
|
+
if (await this.handleSilentSignInResponse()) return Promise.resolve({
|
|
712
694
|
allowedScopes: "",
|
|
713
695
|
displayName: "",
|
|
714
696
|
email: "",
|
|
715
|
-
sessionState: "",
|
|
716
697
|
sub: "",
|
|
717
698
|
tenantDomain: "",
|
|
718
699
|
username: ""
|
|
@@ -720,7 +701,6 @@ var AuthenticationHelper = class {
|
|
|
720
701
|
if (await this._isSignedIn()) {
|
|
721
702
|
await this._spaHelper.clearRefreshTokenTimeout();
|
|
722
703
|
await this._spaHelper.refreshAccessTokenAutomatically(() => this.refreshAccessToken());
|
|
723
|
-
if (configAny.syncSession) checkSession();
|
|
724
704
|
return Promise.resolve(await this._getUser());
|
|
725
705
|
}
|
|
726
706
|
const error = new URL(window.location.href).searchParams.get(ERROR);
|
|
@@ -838,164 +818,6 @@ const navigate = (url) => {
|
|
|
838
818
|
};
|
|
839
819
|
var navigate_default = navigate;
|
|
840
820
|
|
|
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
821
|
//#endregion
|
|
1000
822
|
//#region ../../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js
|
|
1001
823
|
var require_base64_js = /* @__PURE__ */ __commonJS({ "../../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js": ((exports) => {
|
|
@@ -2598,10 +2420,7 @@ var SPAHelper_default = SPAHelper;
|
|
|
2598
2420
|
const logger$2 = (0, __thunderid_javascript.createPackageComponentLogger)("@thunderid/browser", "ThunderIDBrowserClient");
|
|
2599
2421
|
const BROWSER_DEFAULT_CONFIG = {
|
|
2600
2422
|
autoLogoutOnTokenRefreshError: false,
|
|
2601
|
-
|
|
2602
|
-
periodicTokenRefresh: false,
|
|
2603
|
-
sessionRefreshInterval: 300,
|
|
2604
|
-
syncSession: false
|
|
2423
|
+
periodicTokenRefresh: false
|
|
2605
2424
|
};
|
|
2606
2425
|
const initiateStore = (storage) => {
|
|
2607
2426
|
switch (storage) {
|
|
@@ -2616,7 +2435,6 @@ var ThunderIDBrowserClient = class ThunderIDBrowserClient extends __thunderid_ja
|
|
|
2616
2435
|
_browserInstanceId = 0;
|
|
2617
2436
|
_httpClient;
|
|
2618
2437
|
_spaHelper;
|
|
2619
|
-
_sessionManagementHelper;
|
|
2620
2438
|
_authHelper;
|
|
2621
2439
|
_storage = BrowserStorage_default.SessionStorage;
|
|
2622
2440
|
_getSignOutURLFromSessionStorage = false;
|
|
@@ -2655,7 +2473,6 @@ var ThunderIDBrowserClient = class ThunderIDBrowserClient extends __thunderid_ja
|
|
|
2655
2473
|
await this._authHelper?.attachTokenToRequestConfig(request);
|
|
2656
2474
|
};
|
|
2657
2475
|
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
2476
|
this._authHelper = new AuthenticationHelper_default(sm, this._spaHelper, this._browserInstanceId, {
|
|
2660
2477
|
exchangeToken: (cfg) => super.exchangeToken(cfg),
|
|
2661
2478
|
getAccessToken: (sessionId) => this.getAccessToken(sessionId),
|
|
@@ -2696,30 +2513,27 @@ var ThunderIDBrowserClient = class ThunderIDBrowserClient extends __thunderid_ja
|
|
|
2696
2513
|
isLoading() {
|
|
2697
2514
|
return false;
|
|
2698
2515
|
}
|
|
2699
|
-
async signIn(config, authorizationCode,
|
|
2516
|
+
async signIn(config, authorizationCode, state, tokenRequestConfig) {
|
|
2700
2517
|
await this.isInitialized();
|
|
2701
2518
|
if (!SPAUtils_default.canContinueSignIn(Boolean(config?.callOnlyOnRedirect), authorizationCode)) return;
|
|
2702
2519
|
delete config?.callOnlyOnRedirect;
|
|
2703
|
-
const user = await this._signInInternal(config, authorizationCode,
|
|
2520
|
+
const user = await this._signInInternal(config, authorizationCode, state, tokenRequestConfig);
|
|
2704
2521
|
if (user && this._onSignInCallback) this._onSignInCallback(user);
|
|
2705
2522
|
return user;
|
|
2706
2523
|
}
|
|
2707
|
-
async _signInInternal(signInConfig, authorizationCode,
|
|
2524
|
+
async _signInInternal(signInConfig, authorizationCode, state, tokenRequestConfig) {
|
|
2708
2525
|
const sm = this.getStorageManager();
|
|
2709
2526
|
const config = await sm.getConfigData();
|
|
2710
|
-
const basicUserInfo = await this._authHelper.handleSignIn(
|
|
2527
|
+
const basicUserInfo = await this._authHelper.handleSignIn();
|
|
2711
2528
|
if (basicUserInfo) return basicUserInfo;
|
|
2712
2529
|
let resolvedAuthorizationCode;
|
|
2713
|
-
let resolvedSessionState;
|
|
2714
2530
|
let resolvedState;
|
|
2715
2531
|
let resolvedTokenRequestConfig = { params: {} };
|
|
2716
2532
|
if (config?.responseMode === "form_post" && authorizationCode) {
|
|
2717
2533
|
resolvedAuthorizationCode = authorizationCode;
|
|
2718
|
-
resolvedSessionState = sessionState ?? "";
|
|
2719
2534
|
resolvedState = state ?? "";
|
|
2720
2535
|
} else {
|
|
2721
2536
|
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
2537
|
resolvedState = new URL(window.location.href).searchParams.get(__thunderid_javascript.OIDCRequestConstants.Params.STATE) ?? "";
|
|
2724
2538
|
SPAUtils_default.removeAuthorizationCode();
|
|
2725
2539
|
}
|
|
@@ -2727,7 +2541,13 @@ var ThunderIDBrowserClient = class ThunderIDBrowserClient extends __thunderid_ja
|
|
|
2727
2541
|
sm.setSessionStatus("true");
|
|
2728
2542
|
const storedTokenRequestConfig = await sm.getTemporaryDataParameter(TOKEN_REQUEST_CONFIG_KEY);
|
|
2729
2543
|
if (storedTokenRequestConfig && typeof storedTokenRequestConfig === "string") resolvedTokenRequestConfig = JSON.parse(storedTokenRequestConfig);
|
|
2730
|
-
return this._exchangeCodeForTokens(resolvedAuthorizationCode,
|
|
2544
|
+
return this._exchangeCodeForTokens(resolvedAuthorizationCode, resolvedState, resolvedTokenRequestConfig);
|
|
2545
|
+
}
|
|
2546
|
+
if ((config?.session)?.silentSignIn?.beforeRedirect && window.self === window.top && !signInConfig?.["prompt"]) try {
|
|
2547
|
+
const silentUser = await this._signInSilentlyInternal(signInConfig, tokenRequestConfig);
|
|
2548
|
+
if (silentUser && typeof silentUser === "object") return silentUser;
|
|
2549
|
+
} catch (error) {
|
|
2550
|
+
logger$2.debug("Checking for an existing session failed; continuing with the sign-in redirect.", error);
|
|
2731
2551
|
}
|
|
2732
2552
|
return this.getSignInUrl(signInConfig).then(async (url) => {
|
|
2733
2553
|
if (this._storage === BrowserStorage_default.BrowserMemory && config.enablePKCE) {
|
|
@@ -2741,37 +2561,39 @@ var ThunderIDBrowserClient = class ThunderIDBrowserClient extends __thunderid_ja
|
|
|
2741
2561
|
allowedScopes: "",
|
|
2742
2562
|
displayName: "",
|
|
2743
2563
|
email: "",
|
|
2744
|
-
sessionState: "",
|
|
2745
2564
|
sub: "",
|
|
2746
2565
|
tenantDomain: "",
|
|
2747
2566
|
username: ""
|
|
2748
2567
|
};
|
|
2749
2568
|
});
|
|
2750
2569
|
}
|
|
2751
|
-
async _exchangeCodeForTokens(authorizationCode,
|
|
2570
|
+
async _exchangeCodeForTokens(authorizationCode, state, tokenRequestConfig) {
|
|
2752
2571
|
const config = await this.getStorageManager().getConfigData();
|
|
2753
|
-
if (this._storage === BrowserStorage_default.BrowserMemory && config.enablePKCE &&
|
|
2754
|
-
const pkceKey = (0, __thunderid_javascript.extractPkceStorageKeyFromState)(
|
|
2572
|
+
if (this._storage === BrowserStorage_default.BrowserMemory && config.enablePKCE && state) {
|
|
2573
|
+
const pkceKey = (0, __thunderid_javascript.extractPkceStorageKeyFromState)(state);
|
|
2755
2574
|
const pkce = SPAUtils_default.getPKCE(pkceKey);
|
|
2756
2575
|
await this.setPKCECode(pkce, pkceKey);
|
|
2757
2576
|
}
|
|
2758
|
-
await this.requestAccessToken(authorizationCode,
|
|
2577
|
+
await this.requestAccessToken(authorizationCode, state ?? "", void 0, tokenRequestConfig);
|
|
2759
2578
|
try {
|
|
2760
2579
|
const signOutUrl = await this.getSignOutUrl();
|
|
2761
2580
|
SPAUtils_default.setSignOutURL(signOutUrl, config.clientId, this._browserInstanceId);
|
|
2762
2581
|
} catch {}
|
|
2763
2582
|
await this._spaHelper.clearRefreshTokenTimeout();
|
|
2764
2583
|
await this._spaHelper.refreshAccessTokenAutomatically(() => this.refreshAccessToken());
|
|
2765
|
-
if (config.syncSession) this._checkSession();
|
|
2766
2584
|
return this.getUser();
|
|
2767
2585
|
}
|
|
2768
2586
|
async signInSilently(additionalParams, tokenRequestConfig) {
|
|
2769
2587
|
await this.isInitialized();
|
|
2770
2588
|
if (SPAUtils_default.wasSignInCalled()) return;
|
|
2771
|
-
const response = await this.
|
|
2589
|
+
const response = await this._signInSilentlyInternal(additionalParams, tokenRequestConfig);
|
|
2772
2590
|
if (this._onSignInCallback && response) this._onSignInCallback(response);
|
|
2773
2591
|
return response;
|
|
2774
2592
|
}
|
|
2593
|
+
async _signInSilentlyInternal(additionalParams, tokenRequestConfig) {
|
|
2594
|
+
const { session } = await this.getStorageManager().getConfigData();
|
|
2595
|
+
return this._authHelper.signInSilently((params) => this._constructSilentSignInUrl(params), (code$1, s, trc) => this._exchangeCodeForTokens(code$1, s, trc), additionalParams, tokenRequestConfig, session?.silentSignIn?.timeout);
|
|
2596
|
+
}
|
|
2775
2597
|
async signOut(_options, sessionIdOrAfterSignOut, afterSignOutParam) {
|
|
2776
2598
|
let afterSignOut;
|
|
2777
2599
|
let sessionId;
|
|
@@ -2867,7 +2689,6 @@ var ThunderIDBrowserClient = class ThunderIDBrowserClient extends __thunderid_ja
|
|
|
2867
2689
|
await this._validateMethod();
|
|
2868
2690
|
const timer = await this._spaHelper.getRefreshTimeoutTimer();
|
|
2869
2691
|
await super.revokeAccessToken(userId);
|
|
2870
|
-
this._sessionManagementHelper?.reset();
|
|
2871
2692
|
await this._spaHelper.clearRefreshTokenTimeout(timer);
|
|
2872
2693
|
this._onEndUserSession && await this._onEndUserSession(true);
|
|
2873
2694
|
return true;
|
|
@@ -2881,17 +2702,7 @@ var ThunderIDBrowserClient = class ThunderIDBrowserClient extends __thunderid_ja
|
|
|
2881
2702
|
}
|
|
2882
2703
|
async reInitialize(config) {
|
|
2883
2704
|
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;
|
|
2705
|
+
return super.reInitialize(config);
|
|
2895
2706
|
}
|
|
2896
2707
|
async startAutoRefreshToken() {
|
|
2897
2708
|
await this.isInitialized();
|
|
@@ -2954,18 +2765,6 @@ var ThunderIDBrowserClient = class ThunderIDBrowserClient extends __thunderid_ja
|
|
|
2954
2765
|
default: throw new __thunderid_javascript.ThunderIDAuthException("SPA-AUTH_CLIENT-ON-IV01", "Invalid hook.", `Unknown hook: "${hook}"`);
|
|
2955
2766
|
}
|
|
2956
2767
|
}
|
|
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
2768
|
_enableRetrievingSignOutURLFromSession(config) {
|
|
2970
2769
|
if (config.preventSignOutURLUpdate) this._getSignOutURLFromSessionStorage = true;
|
|
2971
2770
|
}
|
|
@@ -3014,10 +2813,10 @@ var Hooks_default = Hooks;
|
|
|
3014
2813
|
//#endregion
|
|
3015
2814
|
//#region src/utils/hasAuthParamsInUrl.ts
|
|
3016
2815
|
/**
|
|
3017
|
-
* Utility to check if `code`
|
|
2816
|
+
* Utility to check if `code` is available in the URL as a search param.
|
|
3018
2817
|
*
|
|
3019
2818
|
* @param params - The URL search params to check. Defaults to `window.location.search`.
|
|
3020
|
-
* @return `true` if the URL contains `code`
|
|
2819
|
+
* @return `true` if the URL contains a `code` search param, otherwise `false`.
|
|
3021
2820
|
*/
|
|
3022
2821
|
const hasAuthParamsInUrl = (params = window.location.search) => {
|
|
3023
2822
|
return /[?&]code=[^&]+/.test(params);
|
|
@@ -3953,27 +3752,21 @@ exports.AVATAR_URI_SCHEME = AVATAR_URI_SCHEME;
|
|
|
3953
3752
|
exports.AuthenticationHelper = AuthenticationHelper_default;
|
|
3954
3753
|
exports.BrowserHooks = Hooks;
|
|
3955
3754
|
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
3755
|
exports.CUSTOM_GRANT_CONFIG = CUSTOM_GRANT_CONFIG;
|
|
3959
3756
|
exports.ERROR = ERROR;
|
|
3960
3757
|
exports.ERROR_DESCRIPTION = ERROR_DESCRIPTION;
|
|
3961
3758
|
exports.FetchHttpClient = FetchHttpClient_default;
|
|
3962
3759
|
exports.Hooks = Hooks_default;
|
|
3963
|
-
exports.INITIALIZED_SILENT_SIGN_IN = INITIALIZED_SILENT_SIGN_IN;
|
|
3964
3760
|
exports.LocalStore = LocalStore_default;
|
|
3965
3761
|
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
3762
|
exports.REFRESH_ACCESS_TOKEN_ERR0R = REFRESH_ACCESS_TOKEN_ERR0R;
|
|
3970
|
-
exports.
|
|
3971
|
-
exports.
|
|
3763
|
+
exports.SILENT_SIGN_IN_SIGNED_IN = SILENT_SIGN_IN_SIGNED_IN;
|
|
3764
|
+
exports.SILENT_SIGN_IN_SIGNED_OUT = SILENT_SIGN_IN_SIGNED_OUT;
|
|
3972
3765
|
exports.SILENT_SIGN_IN_STATE = SILENT_SIGN_IN_STATE;
|
|
3766
|
+
exports.SILENT_SIGN_IN_TIMEOUT = SILENT_SIGN_IN_TIMEOUT;
|
|
3973
3767
|
exports.SPACryptoUtils = SPACryptoUtils_default;
|
|
3974
3768
|
exports.SPAHelper = SPAHelper_default;
|
|
3975
3769
|
exports.SPAUtils = SPAUtils_default;
|
|
3976
|
-
exports.STATE = STATE;
|
|
3977
3770
|
exports.STATE_QUERY = STATE_QUERY;
|
|
3978
3771
|
exports.SessionStore = SessionStore_default;
|
|
3979
3772
|
exports.TOKEN_REQUEST_CONFIG_KEY = TOKEN_REQUEST_CONFIG_KEY;
|
|
@@ -3982,7 +3775,6 @@ exports.buildAvatarSpec = buildAvatarSpec_default;
|
|
|
3982
3775
|
exports.createClassObserver = createClassObserver;
|
|
3983
3776
|
exports.createHttpClientFetcher = createHttpClientFetcher_default;
|
|
3984
3777
|
exports.createMediaQueryListener = createMediaQueryListener;
|
|
3985
|
-
exports.createSessionManagementHelper = SessionManagementHelper_default;
|
|
3986
3778
|
exports.deriveAvatarContent = deriveAvatarContent;
|
|
3987
3779
|
exports.detectThemeMode = detectThemeMode;
|
|
3988
3780
|
exports.extractAvatarParamsFromUri = extractAvatarParamsFromUri_default;
|