oidc-spa 7.2.1 → 7.2.2

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.
Files changed (197) hide show
  1. package/backend.js.map +1 -1
  2. package/core/AuthResponse.js.map +1 -1
  3. package/core/Oidc.js.map +1 -1
  4. package/core/OidcInitializationError.js.map +1 -1
  5. package/core/OidcMetadata.js.map +1 -1
  6. package/core/StateData.js.map +1 -1
  7. package/core/configId.js.map +1 -1
  8. package/core/createOidc.js +1 -1
  9. package/core/createOidc.js.map +1 -1
  10. package/core/diagnostic.js.map +1 -1
  11. package/core/evtIsUserActive.js.map +1 -1
  12. package/core/handleOidcCallback.js.map +1 -1
  13. package/core/iframeMessageProtection.js.map +1 -1
  14. package/core/index.js.map +1 -1
  15. package/core/initialLocationHref.js.map +1 -1
  16. package/core/isNewBrowserSession.js.map +1 -1
  17. package/core/loginOrGoToAuthServer.js.map +1 -1
  18. package/core/loginPropagationToOtherTabs.js.map +1 -1
  19. package/core/loginSilent.js.map +1 -1
  20. package/core/logoutPropagationToOtherTabs.js.map +1 -1
  21. package/core/oidcClientTsUserToTokens.js.map +1 -1
  22. package/core/ongoingLoginOrRefreshProcesses.js.map +1 -1
  23. package/core/persistedAuthState.js.map +1 -1
  24. package/entrypoint.js.map +1 -1
  25. package/esm/core/AuthResponse.js.map +1 -1
  26. package/esm/core/Oidc.js.map +1 -1
  27. package/esm/core/OidcInitializationError.js.map +1 -1
  28. package/esm/core/OidcMetadata.js.map +1 -1
  29. package/esm/core/StateData.js.map +1 -1
  30. package/esm/core/configId.js.map +1 -1
  31. package/esm/core/createOidc.js +1 -1
  32. package/esm/core/createOidc.js.map +1 -1
  33. package/esm/core/diagnostic.js.map +1 -1
  34. package/esm/core/evtIsUserActive.js.map +1 -1
  35. package/esm/core/handleOidcCallback.js.map +1 -1
  36. package/esm/core/iframeMessageProtection.js.map +1 -1
  37. package/esm/core/index.js.map +1 -1
  38. package/esm/core/initialLocationHref.js.map +1 -1
  39. package/esm/core/isNewBrowserSession.js.map +1 -1
  40. package/esm/core/loginOrGoToAuthServer.js.map +1 -1
  41. package/esm/core/loginPropagationToOtherTabs.js.map +1 -1
  42. package/esm/core/loginSilent.js.map +1 -1
  43. package/esm/core/logoutPropagationToOtherTabs.js.map +1 -1
  44. package/esm/core/oidcClientTsUserToTokens.js.map +1 -1
  45. package/esm/core/ongoingLoginOrRefreshProcesses.js.map +1 -1
  46. package/esm/core/persistedAuthState.js.map +1 -1
  47. package/esm/entrypoint.js.map +1 -1
  48. package/esm/index.js.map +1 -1
  49. package/esm/keycloak/index.js.map +1 -1
  50. package/esm/keycloak/isKeycloak.js.map +1 -1
  51. package/esm/keycloak/keycloak-js/Keycloak.js.map +1 -1
  52. package/esm/keycloak/keycloak-js/index.js.map +1 -1
  53. package/esm/keycloak/keycloak-js/types.js.map +1 -1
  54. package/esm/keycloak/keycloakIssuerUriParsed.js.map +1 -1
  55. package/esm/keycloak/keycloakUtils.js.map +1 -1
  56. package/esm/keycloak-js.js.map +1 -1
  57. package/esm/mock/index.js.map +1 -1
  58. package/esm/mock/oidc.js.map +1 -1
  59. package/esm/mock/react.js.map +1 -1
  60. package/esm/react/index.js.map +1 -1
  61. package/esm/react/react.js.map +1 -1
  62. package/esm/tools/Deferred.js.map +1 -1
  63. package/esm/tools/EphemeralSessionStorage.js.map +1 -1
  64. package/esm/tools/Evt.js.map +1 -1
  65. package/esm/tools/StatefulEvt.js.map +1 -1
  66. package/esm/tools/ValueOrAsyncGetter.js.map +1 -1
  67. package/esm/tools/asymmetricEncryption.js.map +1 -1
  68. package/esm/tools/base64.js.map +1 -1
  69. package/esm/tools/createObjectThatThrowsIfAccessed.js.map +1 -1
  70. package/esm/tools/decodeJwt.js.map +1 -1
  71. package/esm/tools/generateUrlSafeRandom.js.map +1 -1
  72. package/esm/tools/getDownlinkAndRtt.js.map +1 -1
  73. package/esm/tools/getIsOnline.js.map +1 -1
  74. package/esm/tools/getIsValidRemoteJson.js.map +1 -1
  75. package/esm/tools/getPrUserInteraction.js.map +1 -1
  76. package/esm/tools/getUserEnvironmentInfo.js.map +1 -1
  77. package/esm/tools/haveSharedParentDomain.js.map +1 -1
  78. package/esm/tools/isDev.js.map +1 -1
  79. package/esm/tools/parseKeycloakIssuerUri.js.map +1 -1
  80. package/esm/tools/readExpirationTimeInJwt.js.map +1 -1
  81. package/esm/tools/startCountdown.js.map +1 -1
  82. package/esm/tools/subscribeToUserInteraction.js.map +1 -1
  83. package/esm/tools/toFullyQualifiedUrl.js.map +1 -1
  84. package/esm/tools/toHumanReadableDuration.js.map +1 -1
  85. package/esm/tools/urlSearchParams.js.map +1 -1
  86. package/esm/tools/workerTimers.js.map +1 -1
  87. package/index.js.map +1 -1
  88. package/keycloak/index.js.map +1 -1
  89. package/keycloak/isKeycloak.js.map +1 -1
  90. package/keycloak/keycloak-js/Keycloak.js.map +1 -1
  91. package/keycloak/keycloak-js/index.js.map +1 -1
  92. package/keycloak/keycloak-js/types.js.map +1 -1
  93. package/keycloak/keycloakIssuerUriParsed.js.map +1 -1
  94. package/keycloak/keycloakUtils.js.map +1 -1
  95. package/keycloak-js.js.map +1 -1
  96. package/mock/index.js.map +1 -1
  97. package/mock/oidc.js.map +1 -1
  98. package/mock/react.js.map +1 -1
  99. package/package.json +1 -1
  100. package/react/index.js.map +1 -1
  101. package/react/react.js.map +1 -1
  102. package/src/backend.ts +391 -0
  103. package/src/core/AuthResponse.ts +26 -0
  104. package/src/core/Oidc.ts +140 -0
  105. package/src/core/OidcInitializationError.ts +19 -0
  106. package/src/core/OidcMetadata.ts +271 -0
  107. package/src/core/StateData.ts +118 -0
  108. package/src/core/configId.ts +3 -0
  109. package/src/core/createOidc.ts +1576 -0
  110. package/src/core/diagnostic.ts +267 -0
  111. package/src/core/evtIsUserActive.ts +108 -0
  112. package/src/core/handleOidcCallback.ts +321 -0
  113. package/src/core/iframeMessageProtection.ts +100 -0
  114. package/src/core/index.ts +4 -0
  115. package/src/core/initialLocationHref.ts +5 -0
  116. package/src/core/isNewBrowserSession.ts +37 -0
  117. package/src/core/loginOrGoToAuthServer.ts +324 -0
  118. package/src/core/loginPropagationToOtherTabs.ts +51 -0
  119. package/src/core/loginSilent.ts +242 -0
  120. package/src/core/logoutPropagationToOtherTabs.ts +53 -0
  121. package/src/core/oidcClientTsUserToTokens.ts +229 -0
  122. package/src/core/ongoingLoginOrRefreshProcesses.ts +47 -0
  123. package/src/core/persistedAuthState.ts +122 -0
  124. package/src/entrypoint.ts +69 -0
  125. package/src/index.ts +1 -0
  126. package/src/keycloak/index.ts +8 -0
  127. package/src/keycloak/isKeycloak.ts +23 -0
  128. package/src/keycloak/keycloak-js/Keycloak.ts +1097 -0
  129. package/src/keycloak/keycloak-js/index.ts +2 -0
  130. package/src/keycloak/keycloak-js/types.ts +442 -0
  131. package/src/keycloak/keycloakIssuerUriParsed.ts +29 -0
  132. package/src/keycloak/keycloakUtils.ts +90 -0
  133. package/src/keycloak-js.ts +1 -0
  134. package/src/mock/index.ts +1 -0
  135. package/src/mock/oidc.ts +211 -0
  136. package/src/mock/react.tsx +11 -0
  137. package/src/react/index.ts +1 -0
  138. package/src/react/react.tsx +476 -0
  139. package/src/tools/Deferred.ts +33 -0
  140. package/src/tools/EphemeralSessionStorage.ts +223 -0
  141. package/src/tools/Evt.ts +56 -0
  142. package/src/tools/StatefulEvt.ts +38 -0
  143. package/src/tools/ValueOrAsyncGetter.ts +1 -0
  144. package/src/tools/asymmetricEncryption.ts +184 -0
  145. package/src/tools/base64.ts +7 -0
  146. package/src/tools/createObjectThatThrowsIfAccessed.ts +40 -0
  147. package/src/tools/decodeJwt.ts +95 -0
  148. package/src/tools/generateUrlSafeRandom.ts +26 -0
  149. package/src/tools/getDownlinkAndRtt.ts +22 -0
  150. package/src/tools/getIsOnline.ts +20 -0
  151. package/src/tools/getIsValidRemoteJson.ts +18 -0
  152. package/src/tools/getPrUserInteraction.ts +27 -0
  153. package/src/tools/getUserEnvironmentInfo.ts +42 -0
  154. package/src/tools/haveSharedParentDomain.ts +13 -0
  155. package/src/tools/isDev.ts +30 -0
  156. package/src/tools/parseKeycloakIssuerUri.ts +49 -0
  157. package/src/tools/readExpirationTimeInJwt.ts +16 -0
  158. package/src/tools/startCountdown.ts +36 -0
  159. package/src/tools/subscribeToUserInteraction.ts +33 -0
  160. package/src/tools/toFullyQualifiedUrl.ts +58 -0
  161. package/src/tools/toHumanReadableDuration.ts +21 -0
  162. package/src/tools/urlSearchParams.ts +130 -0
  163. package/src/tools/workerTimers.ts +57 -0
  164. package/src/vendor/backend/evt.ts +2 -0
  165. package/src/vendor/backend/jsonwebtoken.ts +1 -0
  166. package/src/vendor/backend/node-fetch.ts +2 -0
  167. package/src/vendor/backend/node-jose.ts +1 -0
  168. package/src/vendor/backend/tsafe.ts +5 -0
  169. package/src/vendor/backend/zod.ts +1 -0
  170. package/src/vendor/frontend/oidc-client-ts.ts +1 -0
  171. package/src/vendor/frontend/tsafe.ts +6 -0
  172. package/src/vendor/frontend/worker-timers.ts +2 -0
  173. package/tools/Deferred.js.map +1 -1
  174. package/tools/EphemeralSessionStorage.js.map +1 -1
  175. package/tools/Evt.js.map +1 -1
  176. package/tools/StatefulEvt.js.map +1 -1
  177. package/tools/ValueOrAsyncGetter.js.map +1 -1
  178. package/tools/asymmetricEncryption.js.map +1 -1
  179. package/tools/base64.js.map +1 -1
  180. package/tools/createObjectThatThrowsIfAccessed.js.map +1 -1
  181. package/tools/decodeJwt.js.map +1 -1
  182. package/tools/generateUrlSafeRandom.js.map +1 -1
  183. package/tools/getDownlinkAndRtt.js.map +1 -1
  184. package/tools/getIsOnline.js.map +1 -1
  185. package/tools/getIsValidRemoteJson.js.map +1 -1
  186. package/tools/getPrUserInteraction.js.map +1 -1
  187. package/tools/getUserEnvironmentInfo.js.map +1 -1
  188. package/tools/haveSharedParentDomain.js.map +1 -1
  189. package/tools/isDev.js.map +1 -1
  190. package/tools/parseKeycloakIssuerUri.js.map +1 -1
  191. package/tools/readExpirationTimeInJwt.js.map +1 -1
  192. package/tools/startCountdown.js.map +1 -1
  193. package/tools/subscribeToUserInteraction.js.map +1 -1
  194. package/tools/toFullyQualifiedUrl.js.map +1 -1
  195. package/tools/toHumanReadableDuration.js.map +1 -1
  196. package/tools/urlSearchParams.js.map +1 -1
  197. 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,2 @@
1
+ export { Evt } from "evt";
2
+ export { throttleTime } from "evt/operators/throttleTime";
@@ -0,0 +1 @@
1
+ export * from "jsonwebtoken";
@@ -0,0 +1,2 @@
1
+ import fetch from "node-fetch";
2
+ export { fetch };
@@ -0,0 +1 @@
1
+ export * from "node-jose";
@@ -0,0 +1,5 @@
1
+ export { assert, is } from "tsafe/assert";
2
+ export { id } from "tsafe/id";
3
+ export { isAmong } from "tsafe/isAmong";
4
+ export type { Equals } from "tsafe";
5
+ export { exclude } from "tsafe/exclude";
@@ -0,0 +1 @@
1
+ export * from "zod";
@@ -0,0 +1 @@
1
+ export * from "oidc-client-ts";
@@ -0,0 +1,6 @@
1
+ export { id } from "tsafe/id";
2
+ export { assert, is, type Equals } from "tsafe/assert";
3
+ export { typeGuard } from "tsafe/typeGuard";
4
+ export { noUndefined } from "tsafe/noUndefined";
5
+ export type { Param0 } from "tsafe";
6
+ export { isAmong } from "tsafe/isAmong";
@@ -0,0 +1,2 @@
1
+ import * as workerTimers from "worker-timers";
2
+ export { workerTimers };
@@ -1 +1 @@
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
+ {"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":["../../src/tools/EphemeralSessionStorage.ts"],"names":[],"mappings":"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"}
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":["../../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"}
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"}