oidc-spa 7.2.1 → 7.2.3
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/backend.js.map +1 -1
- package/core/AuthResponse.js.map +1 -1
- package/core/Oidc.js.map +1 -1
- package/core/OidcInitializationError.js.map +1 -1
- package/core/OidcMetadata.js.map +1 -1
- package/core/StateData.js.map +1 -1
- package/core/configId.js.map +1 -1
- package/core/createOidc.js +1 -1
- package/core/createOidc.js.map +1 -1
- package/core/diagnostic.js.map +1 -1
- package/core/evtIsUserActive.js.map +1 -1
- package/core/handleOidcCallback.js.map +1 -1
- package/core/iframeMessageProtection.js.map +1 -1
- package/core/index.js.map +1 -1
- package/core/initialLocationHref.js.map +1 -1
- package/core/isNewBrowserSession.js.map +1 -1
- package/core/loginOrGoToAuthServer.js.map +1 -1
- package/core/loginPropagationToOtherTabs.js.map +1 -1
- package/core/loginSilent.js.map +1 -1
- package/core/logoutPropagationToOtherTabs.js.map +1 -1
- package/core/oidcClientTsUserToTokens.js.map +1 -1
- package/core/ongoingLoginOrRefreshProcesses.js.map +1 -1
- package/core/persistedAuthState.js.map +1 -1
- package/entrypoint.js.map +1 -1
- package/esm/core/AuthResponse.js +2 -2
- package/esm/core/AuthResponse.js.map +1 -1
- package/esm/core/Oidc.d.ts +1 -1
- package/esm/core/Oidc.js.map +1 -1
- package/esm/core/OidcInitializationError.js.map +1 -1
- package/esm/core/OidcMetadata.js +2 -2
- package/esm/core/OidcMetadata.js.map +1 -1
- package/esm/core/StateData.js +3 -3
- package/esm/core/StateData.js.map +1 -1
- package/esm/core/configId.js.map +1 -1
- package/esm/core/createOidc.d.ts +2 -2
- package/esm/core/createOidc.js +33 -33
- package/esm/core/createOidc.js.map +1 -1
- package/esm/core/diagnostic.d.ts +1 -1
- package/esm/core/diagnostic.js +4 -4
- package/esm/core/diagnostic.js.map +1 -1
- package/esm/core/evtIsUserActive.d.ts +1 -1
- package/esm/core/evtIsUserActive.js +5 -5
- package/esm/core/evtIsUserActive.js.map +1 -1
- package/esm/core/handleOidcCallback.d.ts +2 -2
- package/esm/core/handleOidcCallback.js +5 -5
- package/esm/core/handleOidcCallback.js.map +1 -1
- package/esm/core/iframeMessageProtection.d.ts +1 -1
- package/esm/core/iframeMessageProtection.js +3 -3
- package/esm/core/iframeMessageProtection.js.map +1 -1
- package/esm/core/index.d.ts +4 -4
- package/esm/core/index.js +4 -4
- package/esm/core/index.js.map +1 -1
- package/esm/core/initialLocationHref.js.map +1 -1
- package/esm/core/isNewBrowserSession.d.ts +1 -1
- package/esm/core/isNewBrowserSession.js.map +1 -1
- package/esm/core/loginOrGoToAuthServer.d.ts +2 -2
- package/esm/core/loginOrGoToAuthServer.js +6 -6
- package/esm/core/loginOrGoToAuthServer.js.map +1 -1
- package/esm/core/loginPropagationToOtherTabs.js +3 -3
- package/esm/core/loginPropagationToOtherTabs.js.map +1 -1
- package/esm/core/loginSilent.d.ts +2 -2
- package/esm/core/loginSilent.js +8 -8
- package/esm/core/loginSilent.js.map +1 -1
- package/esm/core/logoutPropagationToOtherTabs.js +3 -3
- package/esm/core/logoutPropagationToOtherTabs.js.map +1 -1
- package/esm/core/oidcClientTsUserToTokens.d.ts +2 -2
- package/esm/core/oidcClientTsUserToTokens.js +4 -4
- package/esm/core/oidcClientTsUserToTokens.js.map +1 -1
- package/esm/core/ongoingLoginOrRefreshProcesses.js +3 -3
- package/esm/core/ongoingLoginOrRefreshProcesses.js.map +1 -1
- package/esm/core/persistedAuthState.js +2 -2
- package/esm/core/persistedAuthState.js.map +1 -1
- package/esm/entrypoint.js +3 -3
- package/esm/entrypoint.js.map +1 -1
- package/esm/index.d.ts +1 -1
- package/esm/index.js +2 -2
- package/esm/index.js.map +1 -1
- package/esm/keycloak/index.d.ts +3 -3
- package/esm/keycloak/index.js +3 -3
- package/esm/keycloak/index.js.map +1 -1
- package/esm/keycloak/isKeycloak.js.map +1 -1
- package/esm/keycloak/keycloak-js/Keycloak.d.ts +1 -1
- package/esm/keycloak/keycloak-js/Keycloak.js +9 -9
- package/esm/keycloak/keycloak-js/Keycloak.js.map +1 -1
- package/esm/keycloak/keycloak-js/index.d.ts +2 -2
- package/esm/keycloak/keycloak-js/index.js +2 -2
- package/esm/keycloak/keycloak-js/index.js.map +1 -1
- package/esm/keycloak/keycloak-js/types.js.map +1 -1
- package/esm/keycloak/keycloakIssuerUriParsed.js +3 -3
- package/esm/keycloak/keycloakIssuerUriParsed.js.map +1 -1
- package/esm/keycloak/keycloakUtils.d.ts +1 -1
- package/esm/keycloak/keycloakUtils.js +3 -3
- package/esm/keycloak/keycloakUtils.js.map +1 -1
- package/esm/keycloak-js.d.ts +1 -1
- package/esm/keycloak-js.js +2 -2
- package/esm/keycloak-js.js.map +1 -1
- package/esm/mock/index.d.ts +1 -1
- package/esm/mock/index.js +2 -2
- package/esm/mock/index.js.map +1 -1
- package/esm/mock/oidc.d.ts +1 -1
- package/esm/mock/oidc.js +6 -6
- package/esm/mock/oidc.js.map +1 -1
- package/esm/mock/react.d.ts +8 -8
- package/esm/mock/react.js +3 -3
- package/esm/mock/react.js.map +1 -1
- package/esm/react/index.d.ts +1 -1
- package/esm/react/index.js +2 -2
- package/esm/react/index.js.map +1 -1
- package/esm/react/react.d.ts +2 -2
- package/esm/react/react.js +6 -6
- package/esm/react/react.js.map +1 -1
- package/esm/tools/Deferred.js.map +1 -1
- package/esm/tools/EphemeralSessionStorage.js +2 -2
- package/esm/tools/EphemeralSessionStorage.js.map +1 -1
- package/esm/tools/Evt.js +3 -3
- package/esm/tools/Evt.js.map +1 -1
- package/esm/tools/StatefulEvt.js.map +1 -1
- package/esm/tools/ValueOrAsyncGetter.js.map +1 -1
- package/esm/tools/asymmetricEncryption.js.map +1 -1
- package/esm/tools/base64.js.map +1 -1
- package/esm/tools/createObjectThatThrowsIfAccessed.js.map +1 -1
- package/esm/tools/decodeJwt.js.map +1 -1
- package/esm/tools/generateUrlSafeRandom.js.map +1 -1
- package/esm/tools/getDownlinkAndRtt.js +2 -2
- package/esm/tools/getDownlinkAndRtt.js.map +1 -1
- package/esm/tools/getIsOnline.js +2 -2
- package/esm/tools/getIsOnline.js.map +1 -1
- package/esm/tools/getIsValidRemoteJson.js.map +1 -1
- package/esm/tools/getPrUserInteraction.js +2 -2
- package/esm/tools/getPrUserInteraction.js.map +1 -1
- package/esm/tools/getUserEnvironmentInfo.js.map +1 -1
- package/esm/tools/haveSharedParentDomain.js.map +1 -1
- package/esm/tools/isDev.js.map +1 -1
- package/esm/tools/parseKeycloakIssuerUri.js +2 -2
- package/esm/tools/parseKeycloakIssuerUri.js.map +1 -1
- package/esm/tools/readExpirationTimeInJwt.js +3 -3
- package/esm/tools/readExpirationTimeInJwt.js.map +1 -1
- package/esm/tools/startCountdown.js +2 -2
- package/esm/tools/startCountdown.js.map +1 -1
- package/esm/tools/subscribeToUserInteraction.js +2 -2
- package/esm/tools/subscribeToUserInteraction.js.map +1 -1
- package/esm/tools/toFullyQualifiedUrl.js.map +1 -1
- package/esm/tools/toHumanReadableDuration.js.map +1 -1
- package/esm/tools/urlSearchParams.js.map +1 -1
- package/esm/tools/workerTimers.js +2 -2
- package/esm/tools/workerTimers.js.map +1 -1
- package/index.js.map +1 -1
- package/keycloak/index.js.map +1 -1
- package/keycloak/isKeycloak.js.map +1 -1
- package/keycloak/keycloak-js/Keycloak.js.map +1 -1
- package/keycloak/keycloak-js/index.js.map +1 -1
- package/keycloak/keycloak-js/types.js.map +1 -1
- package/keycloak/keycloakIssuerUriParsed.js.map +1 -1
- package/keycloak/keycloakUtils.js.map +1 -1
- package/keycloak-js.js.map +1 -1
- package/mock/index.js.map +1 -1
- package/mock/oidc.js.map +1 -1
- package/mock/react.js.map +1 -1
- package/package.json +11 -33
- package/react/index.js.map +1 -1
- package/react/react.js.map +1 -1
- package/src/backend.ts +391 -0
- package/src/core/AuthResponse.ts +26 -0
- package/src/core/Oidc.ts +140 -0
- package/src/core/OidcInitializationError.ts +19 -0
- package/src/core/OidcMetadata.ts +271 -0
- package/src/core/StateData.ts +118 -0
- package/src/core/configId.ts +3 -0
- package/src/core/createOidc.ts +1576 -0
- package/src/core/diagnostic.ts +267 -0
- package/src/core/evtIsUserActive.ts +108 -0
- package/src/core/handleOidcCallback.ts +321 -0
- package/src/core/iframeMessageProtection.ts +100 -0
- package/src/core/index.ts +4 -0
- package/src/core/initialLocationHref.ts +5 -0
- package/src/core/isNewBrowserSession.ts +37 -0
- package/src/core/loginOrGoToAuthServer.ts +324 -0
- package/src/core/loginPropagationToOtherTabs.ts +51 -0
- package/src/core/loginSilent.ts +242 -0
- package/src/core/logoutPropagationToOtherTabs.ts +53 -0
- package/src/core/oidcClientTsUserToTokens.ts +229 -0
- package/src/core/ongoingLoginOrRefreshProcesses.ts +47 -0
- package/src/core/persistedAuthState.ts +122 -0
- package/src/entrypoint.ts +69 -0
- package/src/index.ts +1 -0
- package/src/keycloak/index.ts +8 -0
- package/src/keycloak/isKeycloak.ts +23 -0
- package/src/keycloak/keycloak-js/Keycloak.ts +1097 -0
- package/src/keycloak/keycloak-js/index.ts +2 -0
- package/src/keycloak/keycloak-js/types.ts +442 -0
- package/src/keycloak/keycloakIssuerUriParsed.ts +29 -0
- package/src/keycloak/keycloakUtils.ts +90 -0
- package/src/keycloak-js.ts +1 -0
- package/src/mock/index.ts +1 -0
- package/src/mock/oidc.ts +211 -0
- package/src/mock/react.tsx +11 -0
- package/src/react/index.ts +1 -0
- package/src/react/react.tsx +476 -0
- package/src/tools/Deferred.ts +33 -0
- package/src/tools/EphemeralSessionStorage.ts +223 -0
- package/src/tools/Evt.ts +56 -0
- package/src/tools/StatefulEvt.ts +38 -0
- package/src/tools/ValueOrAsyncGetter.ts +1 -0
- package/src/tools/asymmetricEncryption.ts +184 -0
- package/src/tools/base64.ts +7 -0
- package/src/tools/createObjectThatThrowsIfAccessed.ts +40 -0
- package/src/tools/decodeJwt.ts +95 -0
- package/src/tools/generateUrlSafeRandom.ts +26 -0
- package/src/tools/getDownlinkAndRtt.ts +22 -0
- package/src/tools/getIsOnline.ts +20 -0
- package/src/tools/getIsValidRemoteJson.ts +18 -0
- package/src/tools/getPrUserInteraction.ts +27 -0
- package/src/tools/getUserEnvironmentInfo.ts +42 -0
- package/src/tools/haveSharedParentDomain.ts +13 -0
- package/src/tools/isDev.ts +30 -0
- package/src/tools/parseKeycloakIssuerUri.ts +49 -0
- package/src/tools/readExpirationTimeInJwt.ts +16 -0
- package/src/tools/startCountdown.ts +36 -0
- package/src/tools/subscribeToUserInteraction.ts +33 -0
- package/src/tools/toFullyQualifiedUrl.ts +58 -0
- package/src/tools/toHumanReadableDuration.ts +21 -0
- package/src/tools/urlSearchParams.ts +130 -0
- package/src/tools/workerTimers.ts +57 -0
- package/src/vendor/backend/evt.ts +2 -0
- package/src/vendor/backend/jsonwebtoken.ts +1 -0
- package/src/vendor/backend/node-fetch.ts +2 -0
- package/src/vendor/backend/node-jose.ts +1 -0
- package/src/vendor/backend/tsafe.ts +5 -0
- package/src/vendor/backend/zod.ts +1 -0
- package/src/vendor/frontend/oidc-client-ts.ts +1 -0
- package/src/vendor/frontend/tsafe.ts +6 -0
- package/src/vendor/frontend/worker-timers.ts +2 -0
- package/tools/Deferred.js.map +1 -1
- package/tools/EphemeralSessionStorage.js.map +1 -1
- package/tools/Evt.js.map +1 -1
- package/tools/StatefulEvt.js.map +1 -1
- package/tools/ValueOrAsyncGetter.js.map +1 -1
- package/tools/asymmetricEncryption.js.map +1 -1
- package/tools/base64.js.map +1 -1
- package/tools/createObjectThatThrowsIfAccessed.js.map +1 -1
- package/tools/decodeJwt.js.map +1 -1
- package/tools/generateUrlSafeRandom.js.map +1 -1
- package/tools/getDownlinkAndRtt.js.map +1 -1
- package/tools/getIsOnline.js.map +1 -1
- package/tools/getIsValidRemoteJson.js.map +1 -1
- package/tools/getPrUserInteraction.js.map +1 -1
- package/tools/getUserEnvironmentInfo.js.map +1 -1
- package/tools/haveSharedParentDomain.js.map +1 -1
- package/tools/isDev.js.map +1 -1
- package/tools/parseKeycloakIssuerUri.js.map +1 -1
- package/tools/readExpirationTimeInJwt.js.map +1 -1
- package/tools/startCountdown.js.map +1 -1
- package/tools/subscribeToUserInteraction.js.map +1 -1
- package/tools/toFullyQualifiedUrl.js.map +1 -1
- package/tools/toHumanReadableDuration.js.map +1 -1
- package/tools/urlSearchParams.js.map +1 -1
- package/tools/workerTimers.js.map +1 -1
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { assert } from "../vendor/frontend/tsafe";
|
|
2
|
+
|
|
3
|
+
export function getDownlinkAndRtt(): { downlink: number; rtt: number } | undefined {
|
|
4
|
+
if (!(window.navigator instanceof Object)) {
|
|
5
|
+
return undefined;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
const navigator: any = window.navigator;
|
|
9
|
+
|
|
10
|
+
for (const key of ["connection", "mozConnection", "webkitConnection"] as const) {
|
|
11
|
+
try {
|
|
12
|
+
const { downlink, rtt } = navigator[key];
|
|
13
|
+
|
|
14
|
+
assert(typeof downlink === "number", "768860");
|
|
15
|
+
assert(typeof rtt === "number", "945829");
|
|
16
|
+
|
|
17
|
+
return { downlink, rtt };
|
|
18
|
+
} catch {}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Deferred } from "../tools/Deferred";
|
|
2
|
+
|
|
3
|
+
export function getIsOnline():
|
|
4
|
+
| { isOnline: true; prOnline?: never }
|
|
5
|
+
| { isOnline: false; prOnline: Promise<void> } {
|
|
6
|
+
if (navigator.onLine) {
|
|
7
|
+
return { isOnline: true };
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const dOnline = new Deferred<void>();
|
|
11
|
+
|
|
12
|
+
const onOnline = () => {
|
|
13
|
+
window.removeEventListener("online", onOnline);
|
|
14
|
+
dOnline.resolve();
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
window.addEventListener("online", onOnline);
|
|
18
|
+
|
|
19
|
+
return { isOnline: false, prOnline: dOnline.pr };
|
|
20
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export function getIsValidRemoteJson(url: string): Promise<boolean> {
|
|
2
|
+
return fetch(url).then(
|
|
3
|
+
async response => {
|
|
4
|
+
if (!response.ok) {
|
|
5
|
+
return false;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
try {
|
|
9
|
+
await response.json();
|
|
10
|
+
} catch {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
return true;
|
|
15
|
+
},
|
|
16
|
+
() => false
|
|
17
|
+
);
|
|
18
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Deferred } from "./Deferred";
|
|
2
|
+
|
|
3
|
+
export function getPrUserInteraction() {
|
|
4
|
+
const d = new Deferred<void>();
|
|
5
|
+
|
|
6
|
+
const callback = () => {
|
|
7
|
+
d.resolve();
|
|
8
|
+
cleanup();
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
const cleanup = () => {
|
|
12
|
+
window.document.removeEventListener("mousemove", callback, false);
|
|
13
|
+
window.document.removeEventListener("keydown", callback, false);
|
|
14
|
+
window.document.removeEventListener("touchstart", callback, false);
|
|
15
|
+
window.document.removeEventListener("touchend", callback, false);
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
window.document.addEventListener("mousemove", callback, false);
|
|
19
|
+
window.document.addEventListener("keydown", callback, false);
|
|
20
|
+
window.document.addEventListener("touchstart", callback, false);
|
|
21
|
+
window.document.addEventListener("touchend", callback, false);
|
|
22
|
+
|
|
23
|
+
return {
|
|
24
|
+
prUserInteraction: d.pr,
|
|
25
|
+
cancelPrUserInteraction: cleanup
|
|
26
|
+
};
|
|
27
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export function getUserEnvironmentInfo(): string {
|
|
2
|
+
function safeGet<T>(getter: () => T, fallback: string = "Unknown"): string {
|
|
3
|
+
try {
|
|
4
|
+
const value = getter();
|
|
5
|
+
return value != null ? String(value) : fallback;
|
|
6
|
+
} catch {
|
|
7
|
+
return fallback;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const ua = safeGet(() => navigator.userAgent);
|
|
12
|
+
const platform = safeGet(() => navigator.platform);
|
|
13
|
+
const language = safeGet(() => navigator.language || (navigator as any).userLanguage);
|
|
14
|
+
const screenSize = safeGet(() => `${screen.width}x${screen.height}`);
|
|
15
|
+
const timezone = safeGet(() => Intl.DateTimeFormat().resolvedOptions().timeZone);
|
|
16
|
+
|
|
17
|
+
const browser: string = (() => {
|
|
18
|
+
if (ua.includes("Firefox/")) return "Firefox";
|
|
19
|
+
if (ua.includes("Edg/")) return "Edge";
|
|
20
|
+
if (ua.includes("Chrome/") && !ua.includes("Edg/")) return "Chrome";
|
|
21
|
+
if (ua.includes("Safari/") && !ua.includes("Chrome/")) return "Safari";
|
|
22
|
+
if (ua.includes("OPR/") || ua.includes("Opera/")) return "Opera";
|
|
23
|
+
return "Unknown";
|
|
24
|
+
})();
|
|
25
|
+
|
|
26
|
+
const os: string = (() => {
|
|
27
|
+
if (platform.startsWith("Win")) return "Windows";
|
|
28
|
+
if (platform.startsWith("Mac")) return "macOS";
|
|
29
|
+
if (platform.startsWith("Linux")) return "Linux";
|
|
30
|
+
if (/Android/.test(ua)) return "Android";
|
|
31
|
+
if (/iPhone|iPad|iPod/.test(ua)) return "iOS";
|
|
32
|
+
return "Unknown";
|
|
33
|
+
})();
|
|
34
|
+
|
|
35
|
+
return `Browser: ${browser}
|
|
36
|
+
OS: ${os}
|
|
37
|
+
Platform: ${platform}
|
|
38
|
+
Language: ${language}
|
|
39
|
+
Screen: ${screenSize}
|
|
40
|
+
Timezone: ${timezone}
|
|
41
|
+
User Agent: ${ua}`;
|
|
42
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function getHaveSharedParentDomain(params: { url1: string; url2: string }): boolean {
|
|
2
|
+
const { url1, url2 } = params;
|
|
3
|
+
|
|
4
|
+
const url1Domain = new URL(url1).hostname;
|
|
5
|
+
const url2Domain = new URL(url2).hostname;
|
|
6
|
+
|
|
7
|
+
const getLevel2Domain = (url: string): string => {
|
|
8
|
+
const parts = url.split(".");
|
|
9
|
+
return parts.slice(parts.length - 2).join(".");
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
return getLevel2Domain(url1Domain) === getLevel2Domain(url2Domain);
|
|
13
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
let cache: boolean | undefined = undefined;
|
|
2
|
+
|
|
3
|
+
export function getIsDev(): boolean {
|
|
4
|
+
if (cache !== undefined) {
|
|
5
|
+
return cache;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
const isDev = (() => {
|
|
9
|
+
if (/https?:\/\/localhost/.test(window.location.href)) {
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
if (
|
|
14
|
+
typeof process === "object" &&
|
|
15
|
+
process !== null &&
|
|
16
|
+
process.env instanceof Object &&
|
|
17
|
+
process.env.NODE_ENV !== "production"
|
|
18
|
+
) {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
if (document.querySelector('script[type="module"][src="/@vite/client"]') !== null) {
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return false;
|
|
27
|
+
})();
|
|
28
|
+
|
|
29
|
+
return (cache = isDev);
|
|
30
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { isKeycloak, createKeycloakUtils } from "../keycloak";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @deprecated: Use `import { ... } from "oidc-spa/keycloak"` instead.
|
|
5
|
+
*
|
|
6
|
+
* Return undefined if the issuerUri doesn't match the expected shape of a Keycloak issuerUri
|
|
7
|
+
*
|
|
8
|
+
* Example:
|
|
9
|
+
*
|
|
10
|
+
* `parseKeycloakIssuerUri("https://auth.my-company.com/auth/realms/myrealm")` returns:
|
|
11
|
+
* {
|
|
12
|
+
* origin: "https://auth.my-company.com",
|
|
13
|
+
* realm: "myrealm",
|
|
14
|
+
* kcHttpRelativePath: "/auth",
|
|
15
|
+
* adminConsoleUrl: "https://auth.my-company.com/auth/admin/myrealm/console",
|
|
16
|
+
* getAccountUrl: ({ thisAppDisplayName, backToAppFromAccountUrl }) =>
|
|
17
|
+
* `https://auth.my-company.com/auth/realms/myrealm/account?referrer=${thisAppDisplayName}&referrer_uri=${backToAppFromAccountUrl}`
|
|
18
|
+
* }
|
|
19
|
+
* */
|
|
20
|
+
export function parseKeycloakIssuerUri(issuerUri: string):
|
|
21
|
+
| undefined
|
|
22
|
+
| {
|
|
23
|
+
origin: string;
|
|
24
|
+
realm: string;
|
|
25
|
+
/** If defined starts with / and end with no `/` */
|
|
26
|
+
kcHttpRelativePath: string | undefined;
|
|
27
|
+
adminConsoleUrl: string;
|
|
28
|
+
adminConsoleUrl_master: string;
|
|
29
|
+
getAccountUrl: (params: {
|
|
30
|
+
clientId: string;
|
|
31
|
+
backToAppFromAccountUrl: string;
|
|
32
|
+
locale?: string;
|
|
33
|
+
}) => string;
|
|
34
|
+
} {
|
|
35
|
+
if (!isKeycloak({ issuerUri })) {
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const keycloakUtils = createKeycloakUtils({ issuerUri });
|
|
40
|
+
|
|
41
|
+
return {
|
|
42
|
+
origin: keycloakUtils.issuerUriParsed.origin,
|
|
43
|
+
realm: keycloakUtils.issuerUriParsed.realm,
|
|
44
|
+
kcHttpRelativePath: keycloakUtils.issuerUriParsed.kcHttpRelativePath,
|
|
45
|
+
adminConsoleUrl: keycloakUtils.adminConsoleUrl,
|
|
46
|
+
adminConsoleUrl_master: keycloakUtils.adminConsoleUrl_master,
|
|
47
|
+
getAccountUrl: keycloakUtils.getAccountUrl
|
|
48
|
+
};
|
|
49
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { decodeJwt } from "./decodeJwt";
|
|
2
|
+
import { assert } from "../vendor/frontend/tsafe";
|
|
3
|
+
|
|
4
|
+
// Return undefined if token provided wasn't a JWT or if it hasn't an exp claim number
|
|
5
|
+
export function readExpirationTimeInJwt(token: string): number | undefined {
|
|
6
|
+
let exp: number;
|
|
7
|
+
|
|
8
|
+
try {
|
|
9
|
+
exp = decodeJwt<{ exp: number }>(token).exp;
|
|
10
|
+
assert(typeof exp === "number");
|
|
11
|
+
} catch {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
return exp * 1000;
|
|
16
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { setTimeout, clearTimeout } from "../tools/workerTimers";
|
|
2
|
+
|
|
3
|
+
export function createStartCountdown(params: {
|
|
4
|
+
tickCallback: (params: { secondsLeft: number | undefined }) => void;
|
|
5
|
+
}) {
|
|
6
|
+
const { tickCallback } = params;
|
|
7
|
+
|
|
8
|
+
function startCountdown(params: { countDownFromSeconds: number }) {
|
|
9
|
+
const { countDownFromSeconds } = params;
|
|
10
|
+
|
|
11
|
+
let timer: ReturnType<typeof setTimeout>;
|
|
12
|
+
|
|
13
|
+
(async () => {
|
|
14
|
+
let secondsLeft = Math.floor(countDownFromSeconds);
|
|
15
|
+
|
|
16
|
+
while (secondsLeft >= 0) {
|
|
17
|
+
tickCallback({ secondsLeft });
|
|
18
|
+
|
|
19
|
+
await new Promise<void>(resolve => {
|
|
20
|
+
timer = setTimeout(resolve, 1_000);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
secondsLeft--;
|
|
24
|
+
}
|
|
25
|
+
})();
|
|
26
|
+
|
|
27
|
+
const stopCountdown = () => {
|
|
28
|
+
clearTimeout(timer);
|
|
29
|
+
tickCallback({ secondsLeft: undefined });
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
return { stopCountdown };
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return { startCountdown };
|
|
36
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { getPrUserInteraction } from "./getPrUserInteraction";
|
|
2
|
+
|
|
3
|
+
export function subscribeToUserInteraction(params: { throttleMs: number; callback: () => void }) {
|
|
4
|
+
const { throttleMs } = params;
|
|
5
|
+
|
|
6
|
+
const cleanups = new Set<() => void>();
|
|
7
|
+
|
|
8
|
+
(async function callee() {
|
|
9
|
+
const { cancelPrUserInteraction, prUserInteraction } = getPrUserInteraction();
|
|
10
|
+
|
|
11
|
+
cleanups.add(cancelPrUserInteraction);
|
|
12
|
+
|
|
13
|
+
await prUserInteraction;
|
|
14
|
+
|
|
15
|
+
params.callback();
|
|
16
|
+
|
|
17
|
+
await new Promise<void>(resolve => {
|
|
18
|
+
const timer = setTimeout(resolve, throttleMs);
|
|
19
|
+
cleanups.add(() => {
|
|
20
|
+
clearTimeout(timer);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
cleanups.clear();
|
|
25
|
+
callee();
|
|
26
|
+
})();
|
|
27
|
+
|
|
28
|
+
const unsubscribeFromUserInteraction = () => {
|
|
29
|
+
Array.from(cleanups).forEach(cleanup => cleanup());
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
return { unsubscribeFromUserInteraction };
|
|
33
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
type Params = {
|
|
2
|
+
urlish: string;
|
|
3
|
+
} & (
|
|
4
|
+
| {
|
|
5
|
+
doAssertNoQueryParams: true;
|
|
6
|
+
doOutputWithTrailingSlash: boolean;
|
|
7
|
+
}
|
|
8
|
+
| {
|
|
9
|
+
doAssertNoQueryParams: false;
|
|
10
|
+
}
|
|
11
|
+
);
|
|
12
|
+
|
|
13
|
+
export function toFullyQualifiedUrl(params: Params): string {
|
|
14
|
+
let url: string;
|
|
15
|
+
|
|
16
|
+
if (params.urlish.includes("://")) {
|
|
17
|
+
url = params.urlish;
|
|
18
|
+
} else {
|
|
19
|
+
let path = params.urlish;
|
|
20
|
+
|
|
21
|
+
if (!path.startsWith("/")) {
|
|
22
|
+
path = `/${path}`;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
url = `${window.location.origin}${path}`;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
{
|
|
29
|
+
const urlObj = new URL(url);
|
|
30
|
+
|
|
31
|
+
urlObj.pathname = urlObj.pathname
|
|
32
|
+
// Make sure there is no double slash like in `https://example.com//foo//bar`
|
|
33
|
+
.replace(/\/\//g, "/");
|
|
34
|
+
|
|
35
|
+
url = urlObj.href;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (params.doAssertNoQueryParams) {
|
|
39
|
+
// Check if the URL has query parameters.
|
|
40
|
+
// Note: `searchParams.size` can be `undefined` in some runtime environments.
|
|
41
|
+
// See https://github.com/keycloakify/oidc-spa/issues/63#issue-3080503083
|
|
42
|
+
if (new URL(url).searchParams.size) {
|
|
43
|
+
throw new Error(`The ${params.urlish} URL should not have query parameters`);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (params.doOutputWithTrailingSlash) {
|
|
47
|
+
if (!url.endsWith("/")) {
|
|
48
|
+
url = `${url}/`;
|
|
49
|
+
}
|
|
50
|
+
} else {
|
|
51
|
+
if (url.endsWith("/")) {
|
|
52
|
+
url = url.slice(0, -1);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return url;
|
|
58
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export function toHumanReadableDuration(milliseconds: number): string {
|
|
2
|
+
const seconds = Math.floor(milliseconds / 1000);
|
|
3
|
+
|
|
4
|
+
if (seconds < 60) {
|
|
5
|
+
return `${Math.round(milliseconds / 1000)} seconds`;
|
|
6
|
+
} else if (seconds < 3600) {
|
|
7
|
+
const minutes = Math.floor(seconds / 60);
|
|
8
|
+
const remainingSeconds = seconds % 60;
|
|
9
|
+
return `${minutes} minutes ${remainingSeconds} seconds`;
|
|
10
|
+
} else if (seconds < 86400) {
|
|
11
|
+
const hours = Math.floor(seconds / 3600);
|
|
12
|
+
const remainingMinutes = Math.floor((seconds % 3600) / 60);
|
|
13
|
+
const remainingSeconds = seconds % 60;
|
|
14
|
+
return `${hours} hours ${remainingMinutes} minutes ${remainingSeconds} seconds`;
|
|
15
|
+
} else {
|
|
16
|
+
const days = Math.floor(seconds / 86400);
|
|
17
|
+
const remainingHours = Math.floor((seconds % 86400) / 3600);
|
|
18
|
+
const remainingMinutes = Math.floor((seconds % 3600) / 60);
|
|
19
|
+
return `${days} days ${remainingHours} hours ${remainingMinutes} minutes`;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
function getAllSearchParams_encoded(url: string): Record<string, string> {
|
|
2
|
+
let search: string | undefined;
|
|
3
|
+
|
|
4
|
+
{
|
|
5
|
+
const [url_withoutHash] = url.split("#");
|
|
6
|
+
|
|
7
|
+
search = url_withoutHash.split("?")[1];
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
if (search === undefined) {
|
|
11
|
+
return {};
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
return Object.fromEntries(
|
|
15
|
+
search.split("&").map(part => {
|
|
16
|
+
const [name, value_encoded] = part.split("=");
|
|
17
|
+
|
|
18
|
+
return [name, value_encoded];
|
|
19
|
+
})
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function addOrUpdateOrRemoveSearchParam_encoded(params: {
|
|
24
|
+
url: string;
|
|
25
|
+
name: string;
|
|
26
|
+
value_encoded: string | undefined;
|
|
27
|
+
}): string {
|
|
28
|
+
const { url, name, value_encoded } = params;
|
|
29
|
+
|
|
30
|
+
const value_encodedByName = getAllSearchParams_encoded(url);
|
|
31
|
+
|
|
32
|
+
if (value_encoded === undefined) {
|
|
33
|
+
delete value_encodedByName[name];
|
|
34
|
+
} else {
|
|
35
|
+
value_encodedByName[name] = value_encoded;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
let search: string;
|
|
39
|
+
|
|
40
|
+
update_search: {
|
|
41
|
+
if (Object.keys(value_encodedByName).length === 0) {
|
|
42
|
+
search = "";
|
|
43
|
+
break update_search;
|
|
44
|
+
} else {
|
|
45
|
+
search =
|
|
46
|
+
"?" +
|
|
47
|
+
Object.entries(value_encodedByName)
|
|
48
|
+
.map(([name, value_encoded]) => `${name}=${value_encoded}`)
|
|
49
|
+
.join("&");
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const [url_withoutHash, hash] = url.split("#");
|
|
54
|
+
|
|
55
|
+
const [url_withoutHash_withoutSearch] = url_withoutHash.split("?");
|
|
56
|
+
|
|
57
|
+
return `${url_withoutHash_withoutSearch}${search}${hash ? "#" + hash : ""}`;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function addOrUpdateSearchParam(params: {
|
|
61
|
+
url: string;
|
|
62
|
+
name: string;
|
|
63
|
+
value: string;
|
|
64
|
+
encodeMethod: "encodeURIComponent" | "www-form";
|
|
65
|
+
}): string {
|
|
66
|
+
const { url, name, value, encodeMethod } = params;
|
|
67
|
+
|
|
68
|
+
let value_encoded = encodeURIComponent(value);
|
|
69
|
+
|
|
70
|
+
if (encodeMethod === "www-form") {
|
|
71
|
+
value_encoded = value_encoded.replace(/%20/g, "+");
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return addOrUpdateOrRemoveSearchParam_encoded({
|
|
75
|
+
url,
|
|
76
|
+
name,
|
|
77
|
+
value_encoded
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function decodeSearchParamValue(value_encoded: string): string {
|
|
82
|
+
return decodeURIComponent(value_encoded.replace(/\+/g, "%20"));
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export function getSearchParam(params: { url: string; name: string }):
|
|
86
|
+
| {
|
|
87
|
+
wasPresent: true;
|
|
88
|
+
value: string;
|
|
89
|
+
url_withoutTheParam: string;
|
|
90
|
+
}
|
|
91
|
+
| {
|
|
92
|
+
wasPresent: false;
|
|
93
|
+
value?: never;
|
|
94
|
+
url_withoutTheParam?: never;
|
|
95
|
+
} {
|
|
96
|
+
const { url, name } = params;
|
|
97
|
+
|
|
98
|
+
const encodedValueByName = getAllSearchParams_encoded(url);
|
|
99
|
+
|
|
100
|
+
const value_encoded = encodedValueByName[name];
|
|
101
|
+
|
|
102
|
+
if (value_encoded === undefined) {
|
|
103
|
+
return {
|
|
104
|
+
wasPresent: false
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const url_withoutTheParam = addOrUpdateOrRemoveSearchParam_encoded({
|
|
109
|
+
url,
|
|
110
|
+
name,
|
|
111
|
+
value_encoded: undefined
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
return {
|
|
115
|
+
wasPresent: true,
|
|
116
|
+
value: decodeSearchParamValue(value_encoded),
|
|
117
|
+
url_withoutTheParam
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export function getAllSearchParams(url: string): Record<string, string> {
|
|
122
|
+
const encodedValueByName = getAllSearchParams_encoded(url);
|
|
123
|
+
|
|
124
|
+
return Object.fromEntries(
|
|
125
|
+
Object.entries(encodedValueByName).map(([name, value_encoded]) => [
|
|
126
|
+
name,
|
|
127
|
+
decodeSearchParamValue(value_encoded)
|
|
128
|
+
])
|
|
129
|
+
);
|
|
130
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { workerTimers } from "../vendor/frontend/worker-timers";
|
|
2
|
+
|
|
3
|
+
export type TimerHandle = {
|
|
4
|
+
__timerBrand: never;
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
const clearByTimerHandle = new WeakMap<TimerHandle, () => void>();
|
|
8
|
+
|
|
9
|
+
export function setTimeout(callback: () => void, delay: number): TimerHandle {
|
|
10
|
+
const callback_actual = () => {
|
|
11
|
+
window.removeEventListener("pageshow", onPageshow);
|
|
12
|
+
|
|
13
|
+
clearByTimerHandle.delete(timerHandle);
|
|
14
|
+
|
|
15
|
+
callback();
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
let timerHandle_n = workerTimers.setTimeout(callback_actual, delay);
|
|
19
|
+
|
|
20
|
+
const timerHandle: TimerHandle = {} as any;
|
|
21
|
+
|
|
22
|
+
clearByTimerHandle.set(timerHandle, () => {
|
|
23
|
+
clearByTimerHandle.delete(timerHandle);
|
|
24
|
+
|
|
25
|
+
workerTimers.clearTimeout(timerHandle_n);
|
|
26
|
+
|
|
27
|
+
window.removeEventListener("pageshow", onPageshow);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
const start = Date.now();
|
|
31
|
+
|
|
32
|
+
const onPageshow = () => {
|
|
33
|
+
workerTimers.clearTimeout(timerHandle_n);
|
|
34
|
+
|
|
35
|
+
const elapsed = Date.now() - start;
|
|
36
|
+
|
|
37
|
+
if (elapsed < delay) {
|
|
38
|
+
timerHandle_n = workerTimers.setTimeout(callback_actual, delay - elapsed);
|
|
39
|
+
} else {
|
|
40
|
+
callback_actual();
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
window.addEventListener("pageshow", onPageshow);
|
|
45
|
+
|
|
46
|
+
return timerHandle;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function clearTimeout(handle: TimerHandle): void {
|
|
50
|
+
const clear = clearByTimerHandle.get(handle);
|
|
51
|
+
|
|
52
|
+
if (clear === undefined) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
clear();
|
|
57
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "jsonwebtoken";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "node-jose";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "zod";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "oidc-client-ts";
|
package/tools/Deferred.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Deferred.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"Deferred.js","sourceRoot":"","sources":["../src/tools/Deferred.ts"],"names":[],"mappings":";;;AAAA,MAAa,QAAQ;IAOjB;QACI,IAAI,OAA4B,CAAC;QACjC,IAAI,MAA6B,CAAC;QAElC,IAAI,CAAC,EAAE,GAAG,IAAI,OAAO,CAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;YAC3C,OAAO,GAAG,KAAK,CAAC,EAAE;gBACd,QAAQ,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC,CAAC;YAEF,MAAM,GAAG,KAAK,CAAC,EAAE;gBACb,OAAO,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;CACJ;AAxBD,4BAwBC;AAMD,MAAa,YAAa,SAAQ,QAAmB;CAEpD;AAFD,oCAEC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EphemeralSessionStorage.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"EphemeralSessionStorage.js","sourceRoot":"","sources":["../src/tools/EphemeralSessionStorage.ts"],"names":[],"mappings":"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"}
|
package/tools/Evt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Evt.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"Evt.js","sourceRoot":"","sources":["../src/tools/Evt.ts"],"names":[],"mappings":";;AAaA,8BA0CC;AAvDD,yCAAsC;AACtC,oDAAsD;AAYtD,SAAgB,SAAS;IACrB,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IACtC,MAAM,GAAG,GAAG,OAAO,CAAC;IAEpB,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,MAAM,GAAG,GAAW;QAChB,SAAS,EAAE,IAAI,CAAC,EAAE;YACd,MAAM,QAAQ,GAAG,CAAC,CAAQ,EAAE,EAAE;gBAC1B,IAAA,cAAM,EAAC,IAAA,UAAE,EAAiB,CAAC,CAAC,CAAC,CAAC;gBAE9B,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACnB,CAAC,CAAC;YAEF,WAAW,CAAC,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAE5C,OAAO;gBACH,WAAW,EAAE,GAAG,EAAE;oBACd,WAAW,CAAC,mBAAmB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBACnD,CAAC;aACJ,CAAC;QACN,CAAC;QACD,OAAO,EAAE,GAAG,EAAE;YACV,MAAM,CAAC,GAAG,IAAI,mBAAQ,EAAK,CAAC;YAE5B,MAAM,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;gBACzC,WAAW,EAAE,CAAC;gBACd,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,CAAC,EAAE,CAAC;QAChB,CAAC;QACD,IAAI,EAAE,CAAC,IAAO,EAAE,EAAE;YACd,SAAS,EAAE,CAAC;YACZ,WAAW,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,SAAS;YACT,OAAO,SAAS,CAAC;QACrB,CAAC;KACJ,CAAC;IAEF,OAAO,GAAG,CAAC;AACf,CAAC"}
|