oidc-spa 7.1.2 → 7.1.4

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.
@@ -125,7 +125,7 @@ var trustedFetch_1 = require("./trustedFetch");
125
125
  var getIsOnline_1 = require("../tools/getIsOnline");
126
126
  (0, handleOidcCallback_1.handleOidcCallback)();
127
127
  // NOTE: Replaced at build time
128
- var VERSION = "7.1.2";
128
+ var VERSION = "7.1.4";
129
129
  var globalContext = {
130
130
  prOidcByConfigId: new Map(),
131
131
  hasLogoutBeenCalled: (0, tsafe_1.id)(false),
package/mock/react.d.ts CHANGED
@@ -51,5 +51,8 @@ export declare function createMockReactOidc<DecodedIdToken extends Record<string
51
51
  url?: string;
52
52
  };
53
53
  cause?: "preload" | string;
54
+ location?: {
55
+ href?: string;
56
+ };
54
57
  }) => Promise<void | never>;
55
58
  } : never : never);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oidc-spa",
3
- "version": "7.1.2",
3
+ "version": "7.1.4",
4
4
  "description": "Openidconnect client for Single Page Applications",
5
5
  "repository": {
6
6
  "type": "git",
@@ -12,6 +12,7 @@
12
12
  ".": "./index.js",
13
13
  "./mock": "./mock/index.js",
14
14
  "./react": "./react/index.js",
15
+ "./react/tools/NoSsr": "./react/tools/NoSsr.js",
15
16
  "./mock/react": "./mock/react.js",
16
17
  "./entrypoint": "./entrypoint.js",
17
18
  "./backend": "./backend.js",
@@ -59,6 +60,7 @@
59
60
  "./src/mock/react.tsx",
60
61
  "./src/react/index.ts",
61
62
  "./src/react/react.tsx",
63
+ "./src/react/tools/NoSsr.tsx",
62
64
  "./src/tools/Deferred.ts",
63
65
  "./src/tools/EphemeralSessionStorage.ts",
64
66
  "./src/tools/Evt.ts",
@@ -176,6 +178,9 @@
176
178
  "./react/react.d.ts",
177
179
  "./react/react.js",
178
180
  "./react/react.js.map",
181
+ "./react/tools/NoSsr.d.ts",
182
+ "./react/tools/NoSsr.js",
183
+ "./react/tools/NoSsr.js.map",
179
184
  "./tools/Deferred.d.ts",
180
185
  "./tools/Deferred.js",
181
186
  "./tools/Deferred.js.map",
@@ -289,7 +294,7 @@
289
294
  "@types/node": "^20.2.1",
290
295
  "@types/node-fetch": "2.6.11",
291
296
  "@types/node-jose": "1.1.13",
292
- "@types/react": "19.0.12",
297
+ "@types/react": "19.1.10",
293
298
  "babel-loader": "9.1.3",
294
299
  "evt": "^2.5.7",
295
300
  "husky": "^4.3.8",
@@ -302,7 +307,7 @@
302
307
  "patch-package": "^8.0.0",
303
308
  "prettier": "^2.8.8",
304
309
  "punycode": "^2.3.1",
305
- "react": "19.0.0",
310
+ "react": "19.1.1",
306
311
  "ts-node": "^10.9.1",
307
312
  "tsafe": "^1.8.5",
308
313
  "tsx": "^4.15.5",
package/react/react.d.ts CHANGED
@@ -81,6 +81,9 @@ type OidcReactApi<DecodedIdToken extends Record<string, unknown>, AutoLogin exte
81
81
  url?: string;
82
82
  };
83
83
  cause?: "preload" | string;
84
+ location?: {
85
+ href?: string;
86
+ };
84
87
  }) => Promise<void | never>;
85
88
  });
86
89
  export declare function createOidcReactApi_dependencyInjection<DecodedIdToken extends Record<string, unknown>, ParamsOfCreateOidc extends {
package/react/react.js CHANGED
@@ -82,6 +82,7 @@ var core_1 = require("../core");
82
82
  var tsafe_1 = require("../vendor/frontend/tsafe");
83
83
  var tsafe_2 = require("../vendor/frontend/tsafe");
84
84
  var Deferred_1 = require("../tools/Deferred");
85
+ var toFullyQualifiedUrl_1 = require("../tools/toFullyQualifiedUrl");
85
86
  {
86
87
  (0, tsafe_1.assert)();
87
88
  }
@@ -257,42 +258,66 @@ function createOidcReactApi_dependencyInjection(paramsOrGetParams, createOidc) {
257
258
  }
258
259
  function enforceLogin(loaderParams) {
259
260
  return __awaiter(this, void 0, void 0, function () {
260
- var cause, redirectUrl, oidc;
261
- var _a, _b;
262
- return __generator(this, function (_c) {
263
- switch (_c.label) {
261
+ var cause, redirectUrl, oidc, doesCurrentHrefRequiresAuth;
262
+ return __generator(this, function (_a) {
263
+ switch (_a.label) {
264
264
  case 0:
265
265
  cause = loaderParams.cause;
266
- redirectUrl = (_b = (_a = loaderParams.request) === null || _a === void 0 ? void 0 : _a.url) !== null && _b !== void 0 ? _b : location.href;
266
+ redirectUrl = (function () {
267
+ var _a, _b;
268
+ if (((_a = loaderParams.request) === null || _a === void 0 ? void 0 : _a.url) !== undefined) {
269
+ return (0, toFullyQualifiedUrl_1.toFullyQualifiedUrl)({
270
+ urlish: loaderParams.request.url,
271
+ doAssertNoQueryParams: false
272
+ });
273
+ }
274
+ if (((_b = loaderParams.location) === null || _b === void 0 ? void 0 : _b.href) !== undefined) {
275
+ return (0, toFullyQualifiedUrl_1.toFullyQualifiedUrl)({
276
+ urlish: loaderParams.location.href,
277
+ doAssertNoQueryParams: false
278
+ });
279
+ }
280
+ return location.href;
281
+ })();
267
282
  return [4 /*yield*/, getOidc()];
268
283
  case 1:
269
- oidc = _c.sent();
284
+ oidc = _a.sent();
270
285
  if (!!oidc.isUserLoggedIn) return [3 /*break*/, 3];
271
286
  if (cause === "preload") {
272
287
  throw new Error("oidc-spa: User is not yet logged in. This is an expected error, nothing to be addressed.");
273
288
  }
289
+ doesCurrentHrefRequiresAuth = location.href.replace(/\/$/, "") === redirectUrl.replace(/\/$/, "");
274
290
  return [4 /*yield*/, oidc.login({
275
291
  redirectUrl: redirectUrl,
276
- doesCurrentHrefRequiresAuth: location.href === redirectUrl
292
+ doesCurrentHrefRequiresAuth: doesCurrentHrefRequiresAuth
277
293
  })];
278
294
  case 2:
279
- _c.sent();
280
- _c.label = 3;
295
+ _a.sent();
296
+ _a.label = 3;
281
297
  case 3: return [2 /*return*/];
282
298
  }
283
299
  });
284
300
  });
285
301
  }
286
- var prOidc = prOidcOrInitializationError.then(function (oidcOrInitializationError) {
287
- if (oidcOrInitializationError instanceof core_1.OidcInitializationError) {
288
- return new Promise(function () { });
289
- }
290
- var oidc = oidcOrInitializationError;
291
- return oidc;
292
- });
293
302
  function getOidc() {
294
- dReadyToCreate.resolve();
295
- return prOidc;
303
+ return __awaiter(this, void 0, void 0, function () {
304
+ var oidcOrInitializationError, error, oidc;
305
+ return __generator(this, function (_a) {
306
+ switch (_a.label) {
307
+ case 0:
308
+ dReadyToCreate.resolve();
309
+ return [4 /*yield*/, prOidcOrInitializationError];
310
+ case 1:
311
+ oidcOrInitializationError = _a.sent();
312
+ if (oidcOrInitializationError instanceof core_1.OidcInitializationError) {
313
+ error = oidcOrInitializationError;
314
+ throw error;
315
+ }
316
+ oidc = oidcOrInitializationError;
317
+ return [2 /*return*/, oidc];
318
+ }
319
+ });
320
+ });
296
321
  }
297
322
  var oidcReact = {
298
323
  OidcProvider: OidcProvider,
@@ -1 +1 @@
1
- {"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react/react.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react/react.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * There is nothing specific to OIDC with this component.
3
+ * This is provided purely for convenance, feel free to use your own
4
+ * tooling.
5
+ *
6
+ * This is a trivial implementation of a No Server Side Rendering
7
+ * boundary.
8
+ * The children will only be rendered in the client side.
9
+ * You can optionally provide a fallback that will be rendered by the server.
10
+ */
11
+ export declare function NoSsr(props: {
12
+ children: React.ReactNode;
13
+ fallback?: React.ReactNode;
14
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __read = (this && this.__read) || function (o, n) {
3
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
4
+ if (!m) return o;
5
+ var i = m.call(o), r, ar = [], e;
6
+ try {
7
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
8
+ }
9
+ catch (error) { e = { error: error }; }
10
+ finally {
11
+ try {
12
+ if (r && !r.done && (m = i["return"])) m.call(i);
13
+ }
14
+ finally { if (e) throw e.error; }
15
+ }
16
+ return ar;
17
+ };
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.NoSsr = NoSsr;
20
+ var jsx_runtime_1 = require("react/jsx-runtime");
21
+ var react_1 = require("react");
22
+ /**
23
+ * There is nothing specific to OIDC with this component.
24
+ * This is provided purely for convenance, feel free to use your own
25
+ * tooling.
26
+ *
27
+ * This is a trivial implementation of a No Server Side Rendering
28
+ * boundary.
29
+ * The children will only be rendered in the client side.
30
+ * You can optionally provide a fallback that will be rendered by the server.
31
+ */
32
+ function NoSsr(props) {
33
+ var children = props.children, fallback = props.fallback;
34
+ var _a = __read((0, react_1.useState)(false), 2), isHydrated = _a[0], setIsHydrated = _a[1];
35
+ (0, react_1.useEffect)(function () {
36
+ setIsHydrated(true);
37
+ }, []);
38
+ if (!isHydrated) {
39
+ return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: fallback !== null && fallback !== void 0 ? fallback : null });
40
+ }
41
+ return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children });
42
+ }
43
+ //# sourceMappingURL=NoSsr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NoSsr.js","sourceRoot":"","sources":["../../src/react/tools/NoSsr.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAYA,sBAaC;;AAzBD,+BAA4C;AAE5C;;;;;;;;;GASG;AACH,SAAgB,KAAK,CAAC,KAAgE;IAC1E,IAAA,QAAQ,GAAe,KAAK,SAApB,EAAE,QAAQ,GAAK,KAAK,SAAV,CAAW;IAE/B,IAAA,KAAA,OAA8B,IAAA,gBAAQ,EAAC,KAAK,CAAC,IAAA,EAA5C,UAAU,QAAA,EAAE,aAAa,QAAmB,CAAC;IACpD,IAAA,iBAAS,EAAC;QACN,aAAa,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,OAAO,2DAAG,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,IAAI,GAAI,CAAC;IACnC,CAAC;IAED,OAAO,2DAAG,QAAQ,GAAI,CAAC;AAC3B,CAAC"}
@@ -13,6 +13,7 @@ import { assert, type Equals, type Param0 } from "../vendor/frontend/tsafe";
13
13
  import { id } from "../vendor/frontend/tsafe";
14
14
  import type { ValueOrAsyncGetter } from "../tools/ValueOrAsyncGetter";
15
15
  import { Deferred } from "../tools/Deferred";
16
+ import { toFullyQualifiedUrl } from "../tools/toFullyQualifiedUrl";
16
17
 
17
18
  export type OidcReact<DecodedIdToken extends Record<string, unknown>> =
18
19
  | OidcReact.NotLoggedIn
@@ -107,6 +108,9 @@ type OidcReactApi<DecodedIdToken extends Record<string, unknown>, AutoLogin exte
107
108
  enforceLogin: (loaderParams: {
108
109
  request?: { url?: string };
109
110
  cause?: "preload" | string;
111
+ location?: {
112
+ href?: string;
113
+ };
110
114
  }) => Promise<void | never>;
111
115
  });
112
116
 
@@ -380,9 +384,27 @@ export function createOidcReactApi_dependencyInjection<
380
384
  async function enforceLogin(loaderParams: {
381
385
  request?: { url?: string };
382
386
  cause?: "preload" | string;
387
+ location?: { href?: string };
383
388
  }): Promise<void | never> {
384
389
  const { cause } = loaderParams;
385
- const redirectUrl = loaderParams.request?.url ?? location.href;
390
+
391
+ const redirectUrl = (() => {
392
+ if (loaderParams.request?.url !== undefined) {
393
+ return toFullyQualifiedUrl({
394
+ urlish: loaderParams.request.url,
395
+ doAssertNoQueryParams: false
396
+ });
397
+ }
398
+
399
+ if (loaderParams.location?.href !== undefined) {
400
+ return toFullyQualifiedUrl({
401
+ urlish: loaderParams.location.href,
402
+ doAssertNoQueryParams: false
403
+ });
404
+ }
405
+
406
+ return location.href;
407
+ })();
386
408
 
387
409
  const oidc = await getOidc();
388
410
 
@@ -392,28 +414,29 @@ export function createOidcReactApi_dependencyInjection<
392
414
  "oidc-spa: User is not yet logged in. This is an expected error, nothing to be addressed."
393
415
  );
394
416
  }
417
+ const doesCurrentHrefRequiresAuth =
418
+ location.href.replace(/\/$/, "") === redirectUrl.replace(/\/$/, "");
395
419
 
396
420
  await oidc.login({
397
421
  redirectUrl,
398
- doesCurrentHrefRequiresAuth: location.href === redirectUrl
422
+ doesCurrentHrefRequiresAuth
399
423
  });
400
424
  }
401
425
  }
402
426
 
403
- const prOidc = prOidcOrInitializationError.then(oidcOrInitializationError => {
427
+ async function getOidc(): Promise<Oidc<DecodedIdToken>> {
428
+ dReadyToCreate.resolve();
429
+
430
+ const oidcOrInitializationError = await prOidcOrInitializationError;
431
+
404
432
  if (oidcOrInitializationError instanceof OidcInitializationError) {
405
- return new Promise<never>(() => {});
433
+ const error = oidcOrInitializationError;
434
+ throw error;
406
435
  }
407
436
 
408
437
  const oidc = oidcOrInitializationError;
409
438
 
410
439
  return oidc;
411
- });
412
-
413
- function getOidc(): Promise<Oidc<DecodedIdToken>> {
414
- dReadyToCreate.resolve();
415
-
416
- return prOidc;
417
440
  }
418
441
 
419
442
  const oidcReact: OidcReactApi<DecodedIdToken, false> = {
@@ -0,0 +1,26 @@
1
+ import { useState, useEffect } from "react";
2
+
3
+ /**
4
+ * There is nothing specific to OIDC with this component.
5
+ * This is provided purely for convenance, feel free to use your own
6
+ * tooling.
7
+ *
8
+ * This is a trivial implementation of a No Server Side Rendering
9
+ * boundary.
10
+ * The children will only be rendered in the client side.
11
+ * You can optionally provide a fallback that will be rendered by the server.
12
+ */
13
+ export function NoSsr(props: { children: React.ReactNode; fallback?: React.ReactNode }) {
14
+ const { children, fallback } = props;
15
+
16
+ const [isHydrated, setIsHydrated] = useState(false);
17
+ useEffect(() => {
18
+ setIsHydrated(true);
19
+ }, []);
20
+
21
+ if (!isHydrated) {
22
+ return <>{fallback ?? null}</>;
23
+ }
24
+
25
+ return <>{children}</>;
26
+ }