oidc-spa 8.2.0 → 8.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 (84) hide show
  1. package/core/AuthResponse.d.ts +0 -5
  2. package/core/AuthResponse.js +0 -25
  3. package/core/AuthResponse.js.map +1 -1
  4. package/core/OidcMetadata.d.ts +5 -0
  5. package/core/OidcMetadata.js +56 -0
  6. package/core/OidcMetadata.js.map +1 -1
  7. package/core/createOidc.d.ts +4 -3
  8. package/core/createOidc.js +229 -197
  9. package/core/createOidc.js.map +1 -1
  10. package/core/diagnostic.d.ts +0 -1
  11. package/core/diagnostic.js +18 -5
  12. package/core/diagnostic.js.map +1 -1
  13. package/core/instancesThatCantUseIframes.d.ts +2 -0
  14. package/core/instancesThatCantUseIframes.js +20 -0
  15. package/core/instancesThatCantUseIframes.js.map +1 -0
  16. package/core/loginOrGoToAuthServer.d.ts +1 -1
  17. package/core/loginOrGoToAuthServer.js +4 -16
  18. package/core/loginOrGoToAuthServer.js.map +1 -1
  19. package/core/loginSilent.d.ts +1 -2
  20. package/core/loginSilent.js +3 -21
  21. package/core/loginSilent.js.map +1 -1
  22. package/core/persistedAuthState.d.ts +1 -0
  23. package/core/persistedAuthState.js +14 -4
  24. package/core/persistedAuthState.js.map +1 -1
  25. package/esm/core/AuthResponse.d.ts +0 -5
  26. package/esm/core/AuthResponse.js +0 -23
  27. package/esm/core/AuthResponse.js.map +1 -1
  28. package/esm/core/OidcMetadata.d.ts +5 -0
  29. package/esm/core/OidcMetadata.js +54 -0
  30. package/esm/core/OidcMetadata.js.map +1 -1
  31. package/esm/core/createOidc.d.ts +4 -3
  32. package/esm/core/createOidc.js +230 -198
  33. package/esm/core/createOidc.js.map +1 -1
  34. package/esm/core/diagnostic.d.ts +0 -1
  35. package/esm/core/diagnostic.js +15 -1
  36. package/esm/core/diagnostic.js.map +1 -1
  37. package/esm/core/instancesThatCantUseIframes.d.ts +2 -0
  38. package/esm/core/instancesThatCantUseIframes.js +16 -0
  39. package/esm/core/instancesThatCantUseIframes.js.map +1 -0
  40. package/esm/core/loginOrGoToAuthServer.d.ts +1 -1
  41. package/esm/core/loginOrGoToAuthServer.js +4 -16
  42. package/esm/core/loginOrGoToAuthServer.js.map +1 -1
  43. package/esm/core/loginSilent.d.ts +1 -2
  44. package/esm/core/loginSilent.js +3 -21
  45. package/esm/core/loginSilent.js.map +1 -1
  46. package/esm/core/persistedAuthState.d.ts +1 -0
  47. package/esm/core/persistedAuthState.js +14 -4
  48. package/esm/core/persistedAuthState.js.map +1 -1
  49. package/esm/keycloak/keycloakIssuerUriParsed.js +8 -1
  50. package/esm/keycloak/keycloakIssuerUriParsed.js.map +1 -1
  51. package/esm/tools/isLikelyDevServer.d.ts +1 -0
  52. package/esm/tools/isLikelyDevServer.js +14 -0
  53. package/esm/tools/isLikelyDevServer.js.map +1 -0
  54. package/esm/tools/{EphemeralSessionStorage.d.ts → lazySessionStorage.d.ts} +2 -4
  55. package/esm/tools/lazySessionStorage.js +81 -0
  56. package/esm/tools/lazySessionStorage.js.map +1 -0
  57. package/keycloak/keycloakIssuerUriParsed.js +8 -1
  58. package/keycloak/keycloakIssuerUriParsed.js.map +1 -1
  59. package/package.json +1 -1
  60. package/src/core/AuthResponse.ts +0 -36
  61. package/src/core/OidcMetadata.ts +75 -0
  62. package/src/core/createOidc.ts +277 -264
  63. package/src/core/diagnostic.ts +21 -2
  64. package/src/core/instancesThatCantUseIframes.ts +24 -0
  65. package/src/core/loginOrGoToAuthServer.ts +5 -22
  66. package/src/core/loginSilent.ts +4 -27
  67. package/src/core/persistedAuthState.ts +27 -5
  68. package/src/keycloak/keycloakIssuerUriParsed.ts +10 -1
  69. package/src/tools/isLikelyDevServer.ts +17 -0
  70. package/src/tools/lazySessionStorage.ts +119 -0
  71. package/src/vite-plugin/manageOptimizedDeps.ts +2 -0
  72. package/tools/isLikelyDevServer.d.ts +1 -0
  73. package/tools/isLikelyDevServer.js +17 -0
  74. package/tools/isLikelyDevServer.js.map +1 -0
  75. package/tools/{EphemeralSessionStorage.d.ts → lazySessionStorage.d.ts} +2 -4
  76. package/tools/lazySessionStorage.js +84 -0
  77. package/tools/lazySessionStorage.js.map +1 -0
  78. package/vite-plugin/manageOptimizedDeps.js +1 -0
  79. package/vite-plugin/manageOptimizedDeps.js.map +1 -1
  80. package/esm/tools/EphemeralSessionStorage.js +0 -143
  81. package/esm/tools/EphemeralSessionStorage.js.map +0 -1
  82. package/src/tools/EphemeralSessionStorage.ts +0 -225
  83. package/tools/EphemeralSessionStorage.js +0 -146
  84. package/tools/EphemeralSessionStorage.js.map +0 -1
@@ -0,0 +1,81 @@
1
+ import { assert } from "../tools/tsafe/assert";
2
+ const SESSION_STORAGE_PREFIX = "lazy-session-storage:";
3
+ export function createLazySessionStorage() {
4
+ const entries = [];
5
+ for (let i = 0; i < sessionStorage.length; i++) {
6
+ const key = sessionStorage.key(i);
7
+ assert(key !== null, "470498");
8
+ if (!key.startsWith(SESSION_STORAGE_PREFIX)) {
9
+ continue;
10
+ }
11
+ const value = sessionStorage.getItem(key);
12
+ assert(value !== null, "846771");
13
+ sessionStorage.removeItem(key);
14
+ entries.push({
15
+ key: key.slice(SESSION_STORAGE_PREFIX.length),
16
+ value
17
+ });
18
+ }
19
+ let isPersistenceEnabled = false;
20
+ const storage = {
21
+ persistCurrentStateAndSubsequentChanges: () => {
22
+ isPersistenceEnabled = true;
23
+ for (let i = 0; i < storage.length; i++) {
24
+ const key = storage.key(i);
25
+ assert(key !== null, "803385");
26
+ const value = storage.getItem(key);
27
+ assert(value !== null, "777098");
28
+ storage.setItem(key, value);
29
+ }
30
+ },
31
+ get length() {
32
+ return entries.length;
33
+ },
34
+ key: index => {
35
+ const entry = entries[index];
36
+ if (entry === undefined) {
37
+ return null;
38
+ }
39
+ return entry.key;
40
+ },
41
+ removeItem: key => {
42
+ const entry = entries.find(entry => entry.key === key);
43
+ if (entry === undefined) {
44
+ return;
45
+ }
46
+ sessionStorage.removeItem(`${SESSION_STORAGE_PREFIX}${entry.key}`);
47
+ const index = entries.indexOf(entry);
48
+ entries.splice(index, 1);
49
+ },
50
+ clear: () => {
51
+ for (let i = 0; i < storage.length; i++) {
52
+ const key = storage.key(i);
53
+ assert(key !== null, "290875");
54
+ storage.removeItem(key);
55
+ }
56
+ },
57
+ getItem: key => {
58
+ const entry = entries.find(entry => entry.key === key);
59
+ if (entry === undefined) {
60
+ return null;
61
+ }
62
+ return entry.value;
63
+ },
64
+ setItem: (key, value) => {
65
+ if (isPersistenceEnabled) {
66
+ sessionStorage.setItem(`${SESSION_STORAGE_PREFIX}${key}`, value);
67
+ }
68
+ update: {
69
+ const entry = entries.find(entry => entry.key === key);
70
+ if (entry === undefined) {
71
+ break update;
72
+ }
73
+ entry.value = value;
74
+ return;
75
+ }
76
+ entries.push({ key, value });
77
+ }
78
+ };
79
+ return storage;
80
+ }
81
+ //# sourceMappingURL=lazySessionStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lazySessionStorage.js","sourceRoot":"","sources":["../../src/tools/lazySessionStorage.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,14 @@ const assert_1 = require("../tools/tsafe/assert");
5
5
  const isKeycloak_1 = require("./isKeycloak");
6
6
  function parseKeycloakIssuerUri(params) {
7
7
  const { issuerUri } = params;
8
- (0, assert_1.assert)((0, isKeycloak_1.isKeycloak)({ issuerUri }));
8
+ if (!(0, isKeycloak_1.isKeycloak)({ issuerUri })) {
9
+ throw new Error([
10
+ `oidc-spa: The issuer uri provided ${issuerUri}`,
11
+ "if you are in an environnement that should support multiple",
12
+ "auth provider, you should first test `isKeycloakUrl({ issuerUri })`",
13
+ "before calling parseKeycloakIssuerUri({ issuerUri })"
14
+ ].join(" "));
15
+ }
9
16
  const url = new URL(issuerUri.replace(/\/$/, ""));
10
17
  const split = url.pathname.split("/realms/");
11
18
  (0, assert_1.assert)(split.length === 2);
@@ -1 +1 @@
1
- {"version":3,"file":"keycloakIssuerUriParsed.js","sourceRoot":"","sources":["../src/keycloak/keycloakIssuerUriParsed.ts"],"names":[],"mappings":";;AAUA,wDAkBC;AA5BD,kDAA+C;AAC/C,6CAA0C;AAS1C,SAAgB,sBAAsB,CAAC,MAA6B;IAChE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IAE7B,IAAA,eAAM,EAAC,IAAA,uBAAU,EAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IAElC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IAElD,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAE7C,IAAA,eAAM,EAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;IAE3B,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;IAE1C,OAAO;QACH,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,KAAK;QACL,kBAAkB,EAAE,kBAAkB,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB;KACjF,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"keycloakIssuerUriParsed.js","sourceRoot":"","sources":["../src/keycloak/keycloakIssuerUriParsed.ts"],"names":[],"mappings":";;AAUA,wDA2BC;AArCD,kDAA+C;AAC/C,6CAA0C;AAS1C,SAAgB,sBAAsB,CAAC,MAA6B;IAChE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IAE7B,IAAI,CAAC,IAAA,uBAAU,EAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACX;YACI,qCAAqC,SAAS,EAAE;YAChD,6DAA6D;YAC7D,qEAAqE;YACrE,sDAAsD;SACzD,CAAC,IAAI,CAAC,GAAG,CAAC,CACd,CAAC;IACN,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IAElD,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAE7C,IAAA,eAAM,EAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;IAE3B,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;IAE1C,OAAO;QACH,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,KAAK;QACL,kBAAkB,EAAE,kBAAkB,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB;KACjF,CAAC;AACN,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oidc-spa",
3
- "version": "8.2.0",
3
+ "version": "8.2.2",
4
4
  "description": "Openidconnect client for Single Page Applications",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,8 +1,4 @@
1
1
  import { addOrUpdateSearchParam } from "../tools/urlSearchParams";
2
- import {
3
- createEphemeralSessionStorage,
4
- type EphemeralSessionStorage
5
- } from "../tools/EphemeralSessionStorage";
6
2
 
7
3
  export type AuthResponse = {
8
4
  state: string;
@@ -28,35 +24,3 @@ export function authResponseToUrl(authResponse: AuthResponse): string {
28
24
 
29
25
  return authResponseUrl;
30
26
  }
31
-
32
- export const { setPersistedRedirectAuthResponses, getPersistedRedirectAuthResponses } = (() => {
33
- const { getEphemeralSessionStorage } = (() => {
34
- let cache: EphemeralSessionStorage | undefined = undefined;
35
- const getEphemeralSessionStorage = () =>
36
- (cache ??= createEphemeralSessionStorage({
37
- sessionStorageTtlMs: 30_000
38
- }));
39
- return { getEphemeralSessionStorage };
40
- })();
41
-
42
- const KEY = "oidc-spa:persisted-redirect-auth-response";
43
-
44
- function setPersistedRedirectAuthResponses(params: { authResponses: AuthResponse[] }) {
45
- const { authResponses } = params;
46
-
47
- const storage = getEphemeralSessionStorage();
48
- storage.persistCurrentStateAndSubsequentChanges();
49
-
50
- storage.setItem(KEY, JSON.stringify(authResponses));
51
- }
52
-
53
- function getPersistedRedirectAuthResponses(): { authResponses: AuthResponse[] } {
54
- const value = getEphemeralSessionStorage().getItem(KEY);
55
-
56
- const authResponses: AuthResponse[] = value === null ? [] : JSON.parse(value);
57
-
58
- return { authResponses };
59
- }
60
-
61
- return { setPersistedRedirectAuthResponses, getPersistedRedirectAuthResponses };
62
- })();
@@ -1,5 +1,6 @@
1
1
  import { type OidcMetadata as OidcClientTsOidcMetadata } from "../vendor/frontend/oidc-client-ts";
2
2
  import { assert, type Equals } from "../tools/tsafe/assert";
3
+ import { getIsLikelyDevServer } from "../tools/isLikelyDevServer";
3
4
 
4
5
  /**
5
6
  * OpenID Providers have metadata describing their configuration.
@@ -269,3 +270,77 @@ export type OidcMetadata = {
269
270
  };
270
271
 
271
272
  assert<Equals<OidcMetadata, OidcClientTsOidcMetadata>>;
273
+
274
+ export const WELL_KNOWN_PATH = "/.well-known/openid-configuration";
275
+
276
+ function getSessionStorageKey(params: { issuerUri: string }) {
277
+ const { issuerUri } = params;
278
+
279
+ return `oidc-spa:openid-configuration:${issuerUri}`;
280
+ }
281
+
282
+ function readSessionStorage(params: { issuerUri: string }) {
283
+ const { issuerUri } = params;
284
+
285
+ const value = sessionStorage.getItem(getSessionStorageKey({ issuerUri }));
286
+
287
+ if (value === null) {
288
+ return undefined;
289
+ }
290
+
291
+ return JSON.parse(value) as Partial<OidcClientTsOidcMetadata>;
292
+ }
293
+
294
+ function setSessionStorage(params: { issuerUri: string; oidcMetadata: Partial<OidcMetadata> }): void {
295
+ const { issuerUri, oidcMetadata } = params;
296
+
297
+ sessionStorage.setItem(getSessionStorageKey({ issuerUri }), JSON.stringify(oidcMetadata));
298
+ }
299
+
300
+ export async function fetchOidcMetadata(params: { issuerUri: string }) {
301
+ const { issuerUri } = params;
302
+
303
+ from_cache: {
304
+ const oidcMetadata = readSessionStorage({ issuerUri });
305
+
306
+ if (oidcMetadata === undefined) {
307
+ break from_cache;
308
+ }
309
+
310
+ return oidcMetadata;
311
+ }
312
+
313
+ let oidcMetadata: Partial<OidcMetadata>;
314
+
315
+ try {
316
+ const response = await fetch(`${issuerUri}${WELL_KNOWN_PATH}`, {
317
+ headers: {
318
+ Accept: "application/jwk-set+json, application/json"
319
+ }
320
+ });
321
+
322
+ if (!response.ok) {
323
+ throw new Error();
324
+ }
325
+
326
+ const obj = await response.json();
327
+
328
+ {
329
+ const { authorization_endpoint } = obj;
330
+
331
+ if (typeof authorization_endpoint !== "string") {
332
+ throw new Error();
333
+ }
334
+ }
335
+
336
+ oidcMetadata = obj;
337
+ } catch {
338
+ return undefined;
339
+ }
340
+
341
+ if (!getIsLikelyDevServer()) {
342
+ setSessionStorage({ issuerUri, oidcMetadata });
343
+ }
344
+
345
+ return oidcMetadata;
346
+ }