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.
- package/core/AuthResponse.d.ts +0 -5
- package/core/AuthResponse.js +0 -25
- package/core/AuthResponse.js.map +1 -1
- package/core/OidcMetadata.d.ts +5 -0
- package/core/OidcMetadata.js +56 -0
- package/core/OidcMetadata.js.map +1 -1
- package/core/createOidc.d.ts +4 -3
- package/core/createOidc.js +229 -197
- package/core/createOidc.js.map +1 -1
- package/core/diagnostic.d.ts +0 -1
- package/core/diagnostic.js +18 -5
- package/core/diagnostic.js.map +1 -1
- package/core/instancesThatCantUseIframes.d.ts +2 -0
- package/core/instancesThatCantUseIframes.js +20 -0
- package/core/instancesThatCantUseIframes.js.map +1 -0
- package/core/loginOrGoToAuthServer.d.ts +1 -1
- package/core/loginOrGoToAuthServer.js +4 -16
- package/core/loginOrGoToAuthServer.js.map +1 -1
- package/core/loginSilent.d.ts +1 -2
- package/core/loginSilent.js +3 -21
- package/core/loginSilent.js.map +1 -1
- package/core/persistedAuthState.d.ts +1 -0
- package/core/persistedAuthState.js +14 -4
- package/core/persistedAuthState.js.map +1 -1
- package/esm/core/AuthResponse.d.ts +0 -5
- package/esm/core/AuthResponse.js +0 -23
- package/esm/core/AuthResponse.js.map +1 -1
- package/esm/core/OidcMetadata.d.ts +5 -0
- package/esm/core/OidcMetadata.js +54 -0
- package/esm/core/OidcMetadata.js.map +1 -1
- package/esm/core/createOidc.d.ts +4 -3
- package/esm/core/createOidc.js +230 -198
- package/esm/core/createOidc.js.map +1 -1
- package/esm/core/diagnostic.d.ts +0 -1
- package/esm/core/diagnostic.js +15 -1
- package/esm/core/diagnostic.js.map +1 -1
- package/esm/core/instancesThatCantUseIframes.d.ts +2 -0
- package/esm/core/instancesThatCantUseIframes.js +16 -0
- package/esm/core/instancesThatCantUseIframes.js.map +1 -0
- package/esm/core/loginOrGoToAuthServer.d.ts +1 -1
- package/esm/core/loginOrGoToAuthServer.js +4 -16
- package/esm/core/loginOrGoToAuthServer.js.map +1 -1
- package/esm/core/loginSilent.d.ts +1 -2
- package/esm/core/loginSilent.js +3 -21
- package/esm/core/loginSilent.js.map +1 -1
- package/esm/core/persistedAuthState.d.ts +1 -0
- package/esm/core/persistedAuthState.js +14 -4
- package/esm/core/persistedAuthState.js.map +1 -1
- package/esm/keycloak/keycloakIssuerUriParsed.js +8 -1
- package/esm/keycloak/keycloakIssuerUriParsed.js.map +1 -1
- package/esm/tools/isLikelyDevServer.d.ts +1 -0
- package/esm/tools/isLikelyDevServer.js +14 -0
- package/esm/tools/isLikelyDevServer.js.map +1 -0
- package/esm/tools/{EphemeralSessionStorage.d.ts → lazySessionStorage.d.ts} +2 -4
- package/esm/tools/lazySessionStorage.js +81 -0
- package/esm/tools/lazySessionStorage.js.map +1 -0
- package/keycloak/keycloakIssuerUriParsed.js +8 -1
- package/keycloak/keycloakIssuerUriParsed.js.map +1 -1
- package/package.json +1 -1
- package/src/core/AuthResponse.ts +0 -36
- package/src/core/OidcMetadata.ts +75 -0
- package/src/core/createOidc.ts +277 -264
- package/src/core/diagnostic.ts +21 -2
- package/src/core/instancesThatCantUseIframes.ts +24 -0
- package/src/core/loginOrGoToAuthServer.ts +5 -22
- package/src/core/loginSilent.ts +4 -27
- package/src/core/persistedAuthState.ts +27 -5
- package/src/keycloak/keycloakIssuerUriParsed.ts +10 -1
- package/src/tools/isLikelyDevServer.ts +17 -0
- package/src/tools/lazySessionStorage.ts +119 -0
- package/src/vite-plugin/manageOptimizedDeps.ts +2 -0
- package/tools/isLikelyDevServer.d.ts +1 -0
- package/tools/isLikelyDevServer.js +17 -0
- package/tools/isLikelyDevServer.js.map +1 -0
- package/tools/{EphemeralSessionStorage.d.ts → lazySessionStorage.d.ts} +2 -4
- package/tools/lazySessionStorage.js +84 -0
- package/tools/lazySessionStorage.js.map +1 -0
- package/vite-plugin/manageOptimizedDeps.js +1 -0
- package/vite-plugin/manageOptimizedDeps.js.map +1 -1
- package/esm/tools/EphemeralSessionStorage.js +0 -143
- package/esm/tools/EphemeralSessionStorage.js.map +0 -1
- package/src/tools/EphemeralSessionStorage.ts +0 -225
- package/tools/EphemeralSessionStorage.js +0 -146
- 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
|
-
|
|
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,
|
|
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
package/src/core/AuthResponse.ts
CHANGED
|
@@ -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
|
-
})();
|
package/src/core/OidcMetadata.ts
CHANGED
|
@@ -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
|
+
}
|