oidc-spa 8.6.18 → 8.7.0

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 (153) hide show
  1. package/README.md +2 -2
  2. package/backend.d.ts +3 -20
  3. package/backend.js +50 -242
  4. package/backend.js.map +1 -1
  5. package/core/OidcMetadata.d.ts +2 -2
  6. package/core/OidcMetadata.js.map +1 -1
  7. package/core/createOidc.d.ts +2 -4
  8. package/core/createOidc.js +46 -6
  9. package/core/createOidc.js.map +1 -1
  10. package/core/dpop.d.ts +20 -0
  11. package/core/dpop.js +389 -0
  12. package/core/dpop.js.map +1 -0
  13. package/core/earlyInit.js +2 -0
  14. package/core/earlyInit.js.map +1 -1
  15. package/core/evtIsUserActive.d.ts +8 -1
  16. package/core/evtIsUserActive.js +4 -2
  17. package/core/evtIsUserActive.js.map +1 -1
  18. package/core/oidcClientTsUserToTokens.d.ts +1 -0
  19. package/core/oidcClientTsUserToTokens.js +15 -5
  20. package/core/oidcClientTsUserToTokens.js.map +1 -1
  21. package/core/tokenExfiltrationDefense.js +49 -6
  22. package/core/tokenExfiltrationDefense.js.map +1 -1
  23. package/esm/angular.d.ts +2 -0
  24. package/esm/angular.mjs.map +1 -1
  25. package/esm/backend.d.ts +3 -20
  26. package/esm/backend.mjs +50 -242
  27. package/esm/backend.mjs.map +1 -1
  28. package/esm/core/OidcMetadata.d.ts +2 -2
  29. package/esm/core/OidcMetadata.mjs.map +1 -1
  30. package/esm/core/createOidc.d.ts +2 -4
  31. package/esm/core/createOidc.mjs +46 -6
  32. package/esm/core/createOidc.mjs.map +1 -1
  33. package/esm/core/dpop.d.ts +20 -0
  34. package/esm/core/dpop.mjs +384 -0
  35. package/esm/core/dpop.mjs.map +1 -0
  36. package/esm/core/earlyInit.mjs +2 -0
  37. package/esm/core/earlyInit.mjs.map +1 -1
  38. package/esm/core/evtIsUserActive.d.ts +8 -1
  39. package/esm/core/evtIsUserActive.mjs +4 -2
  40. package/esm/core/evtIsUserActive.mjs.map +1 -1
  41. package/esm/core/oidcClientTsUserToTokens.d.ts +1 -0
  42. package/esm/core/oidcClientTsUserToTokens.mjs +15 -5
  43. package/esm/core/oidcClientTsUserToTokens.mjs.map +1 -1
  44. package/esm/core/tokenExfiltrationDefense.mjs +49 -6
  45. package/esm/core/tokenExfiltrationDefense.mjs.map +1 -1
  46. package/esm/react-spa/createOidcSpaApi.mjs +2 -1
  47. package/esm/react-spa/createOidcSpaApi.mjs.map +1 -1
  48. package/esm/react-spa/types.d.ts +2 -0
  49. package/esm/server/createOidcSpaUtils.d.ts +5 -0
  50. package/esm/server/createOidcSpaUtils.mjs +639 -0
  51. package/esm/server/createOidcSpaUtils.mjs.map +1 -0
  52. package/esm/server/index.d.ts +2 -0
  53. package/esm/server/index.mjs +3 -0
  54. package/esm/server/index.mjs.map +1 -0
  55. package/esm/server/types.d.ts +79 -0
  56. package/esm/server/types.mjs +2 -0
  57. package/esm/server/types.mjs.map +1 -0
  58. package/esm/server/utilsBuilder.d.ts +10 -0
  59. package/esm/server/utilsBuilder.mjs +13 -0
  60. package/esm/server/utilsBuilder.mjs.map +1 -0
  61. package/esm/tanstack-start/react/accessTokenValidation_rfc9068.d.ts +1 -1
  62. package/esm/tanstack-start/react/accessTokenValidation_rfc9068.mjs +102 -94
  63. package/esm/tanstack-start/react/accessTokenValidation_rfc9068.mjs.map +1 -1
  64. package/esm/tanstack-start/react/createOidcSpaApi.d.ts +2 -2
  65. package/esm/tanstack-start/react/createOidcSpaApi.mjs +60 -51
  66. package/esm/tanstack-start/react/createOidcSpaApi.mjs.map +1 -1
  67. package/esm/tanstack-start/react/index.d.ts +1 -1
  68. package/esm/tanstack-start/react/index.mjs +2 -2
  69. package/esm/tanstack-start/react/index.mjs.map +1 -1
  70. package/esm/tanstack-start/react/types.d.ts +36 -11
  71. package/esm/tanstack-start/react/{apiBuilder.d.ts → utilsBuilder.d.ts} +9 -9
  72. package/esm/tanstack-start/react/{apiBuilder.mjs → utilsBuilder.mjs} +6 -6
  73. package/esm/tanstack-start/react/utilsBuilder.mjs.map +1 -0
  74. package/esm/tools/generateES256DPoPProof.d.ts +8 -0
  75. package/esm/tools/generateES256DPoPProof.mjs +48 -0
  76. package/esm/tools/generateES256DPoPProof.mjs.map +1 -0
  77. package/esm/tools/getServerDateNow.d.ts +5 -0
  78. package/esm/tools/getServerDateNow.mjs +7 -0
  79. package/esm/tools/getServerDateNow.mjs.map +1 -0
  80. package/esm/tools/startCountdown.mjs +9 -3
  81. package/esm/tools/startCountdown.mjs.map +1 -1
  82. package/esm/vendor/{backend → server}/evt.mjs +84 -140
  83. package/esm/vendor/{backend → server}/jose.mjs +5 -27
  84. package/esm/vendor/{backend → server}/tsafe.d.ts +1 -0
  85. package/esm/vendor/{backend → server}/tsafe.mjs +6 -0
  86. package/esm/vendor/{backend → server}/zod.mjs +196 -50
  87. package/package.json +6 -1
  88. package/react-spa/createOidcSpaApi.js +2 -1
  89. package/react-spa/createOidcSpaApi.js.map +1 -1
  90. package/react-spa/types.d.ts +2 -0
  91. package/server/createOidcSpaUtils.d.ts +5 -0
  92. package/server/createOidcSpaUtils.js +642 -0
  93. package/server/createOidcSpaUtils.js.map +1 -0
  94. package/server/index.d.ts +2 -0
  95. package/server/index.js +6 -0
  96. package/server/index.js.map +1 -0
  97. package/server/types.d.ts +79 -0
  98. package/server/types.js +3 -0
  99. package/server/types.js.map +1 -0
  100. package/server/utilsBuilder.d.ts +10 -0
  101. package/server/utilsBuilder.js +16 -0
  102. package/server/utilsBuilder.js.map +1 -0
  103. package/src/angular.ts +3 -0
  104. package/src/backend.ts +63 -364
  105. package/src/core/OidcMetadata.ts +4 -2
  106. package/src/core/createOidc.ts +61 -9
  107. package/src/core/dpop.ts +583 -0
  108. package/src/core/earlyInit.ts +3 -0
  109. package/src/core/evtIsUserActive.ts +11 -5
  110. package/src/core/oidcClientTsUserToTokens.ts +18 -4
  111. package/src/core/tokenExfiltrationDefense.ts +60 -5
  112. package/src/react-spa/createOidcSpaApi.ts +2 -1
  113. package/src/react-spa/types.tsx +3 -0
  114. package/src/server/createOidcSpaUtils.ts +848 -0
  115. package/src/server/index.ts +4 -0
  116. package/src/server/types.tsx +99 -0
  117. package/src/server/utilsBuilder.ts +41 -0
  118. package/src/tanstack-start/react/accessTokenValidation_rfc9068.ts +134 -124
  119. package/src/tanstack-start/react/createOidcSpaApi.ts +73 -69
  120. package/src/tanstack-start/react/index.ts +2 -2
  121. package/src/tanstack-start/react/types.tsx +44 -12
  122. package/src/tanstack-start/react/{apiBuilder.ts → utilsBuilder.ts} +14 -14
  123. package/src/tools/generateES256DPoPProof.ts +74 -0
  124. package/src/tools/getServerDateNow.ts +11 -0
  125. package/src/tools/startCountdown.ts +10 -3
  126. package/src/vendor/{backend → server}/tsafe.ts +1 -0
  127. package/tools/generateES256DPoPProof.d.ts +8 -0
  128. package/tools/generateES256DPoPProof.js +51 -0
  129. package/tools/generateES256DPoPProof.js.map +1 -0
  130. package/tools/getServerDateNow.d.ts +5 -0
  131. package/tools/getServerDateNow.js +10 -0
  132. package/tools/getServerDateNow.js.map +1 -0
  133. package/tools/startCountdown.js +9 -3
  134. package/tools/startCountdown.js.map +1 -1
  135. package/vendor/server/evt.js +3 -0
  136. package/vendor/server/jose.js +3 -0
  137. package/vendor/{backend → server}/tsafe.d.ts +1 -0
  138. package/vendor/server/tsafe.js +2 -0
  139. package/vendor/server/zod.js +3 -0
  140. package/esm/tanstack-start/react/apiBuilder.mjs.map +0 -1
  141. package/vendor/backend/evt.js +0 -3
  142. package/vendor/backend/jose.js +0 -3
  143. package/vendor/backend/tsafe.js +0 -2
  144. package/vendor/backend/zod.js +0 -3
  145. /package/esm/vendor/{backend → server}/evt.d.ts +0 -0
  146. /package/esm/vendor/{backend → server}/jose.d.ts +0 -0
  147. /package/esm/vendor/{backend → server}/zod.d.ts +0 -0
  148. /package/src/vendor/{backend → server}/evt.ts +0 -0
  149. /package/src/vendor/{backend → server}/jose.ts +0 -0
  150. /package/src/vendor/{backend → server}/zod.ts +0 -0
  151. /package/vendor/{backend → server}/evt.d.ts +0 -0
  152. /package/vendor/{backend → server}/jose.d.ts +0 -0
  153. /package/vendor/{backend → server}/zod.d.ts +0 -0
package/README.md CHANGED
@@ -29,8 +29,8 @@
29
29
  The Framework Agnostic Adapter:
30
30
 
31
31
  ```ts
32
- import { createOidc } from "oidc-spa/core"; // 32 KB min+gzip (bundlephobia.com, Import Cost and NPM overestimate by counting polyfills that are only loaded when needed.)
33
- import { z } from "zod"; // 59kb min+zip, but it's optional.
32
+ import { createOidc } from "oidc-spa/core"; // 32 KB min+gzip (Import Cost overestimate by counting polyfills that are only loaded when needed.)
33
+ import { z } from "zod"; // 59 KB min+zip, but it's optional.
34
34
 
35
35
  const oidc = await createOidc({
36
36
  issuerUri: "https://auth.my-domain.net/realms/myrealm",
package/backend.d.ts CHANGED
@@ -1,24 +1,6 @@
1
1
  import type { ZodSchemaLike } from "./tools/ZodSchemaLike";
2
- /**
3
- * Claims defined by RFC 9068: "JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens"
4
- * https://datatracker.ietf.org/doc/html/rfc9068
5
- *
6
- * These tokens are intended for consumption by resource servers.
7
- */
8
- export type DecodedAccessToken_RFC9068 = {
9
- iss: string;
10
- sub: string;
11
- aud: string | string[];
12
- exp: number;
13
- iat: number;
14
- client_id?: string;
15
- scope?: string;
16
- jti?: string;
17
- nbf?: number;
18
- auth_time?: number;
19
- cnf?: Record<string, unknown>;
20
- [key: string]: unknown;
21
- };
2
+ import { DecodedAccessToken_RFC9068 } from "./server/types";
3
+ export type { DecodedAccessToken_RFC9068 };
22
4
  export type ParamsOfCreateOidcBackend<DecodedAccessToken> = {
23
5
  issuerUri: string;
24
6
  decodedAccessTokenSchema?: ZodSchemaLike<DecodedAccessToken_RFC9068, DecodedAccessToken>;
@@ -45,4 +27,5 @@ export declare namespace ResultOfAccessTokenVerify {
45
27
  decodedAccessToken_original?: never;
46
28
  };
47
29
  }
30
+ /** @deprecated: Use "oidc-spa/server" instead */
48
31
  export declare function createOidcBackend<DecodedAccessToken extends Record<string, unknown> = DecodedAccessToken_RFC9068>(params: ParamsOfCreateOidcBackend<DecodedAccessToken>): Promise<OidcBackend<DecodedAccessToken>>;
package/backend.js CHANGED
@@ -1,262 +1,70 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createOidcBackend = createOidcBackend;
4
- const tsafe_1 = require("./vendor/backend/tsafe");
5
- const jose_1 = require("./vendor/backend/jose");
6
- const zod_1 = require("./vendor/backend/zod");
7
- const evt_1 = require("./vendor/backend/evt");
8
- const zDecodedAccessToken_RFC9068 = (() => {
9
- const zTargetType = zod_1.z
10
- .object({
11
- iss: zod_1.z.string(),
12
- sub: zod_1.z.string(),
13
- aud: zod_1.z.union([zod_1.z.string(), zod_1.z.array(zod_1.z.string())]),
14
- exp: zod_1.z.number(),
15
- iat: zod_1.z.number(),
16
- client_id: zod_1.z.string().optional(),
17
- scope: zod_1.z.string().optional(),
18
- jti: zod_1.z.string().optional(),
19
- nbf: zod_1.z.number().optional(),
20
- auth_time: zod_1.z.number().optional(),
21
- cnf: zod_1.z.record(zod_1.z.unknown()).optional()
22
- })
23
- .catchall(zod_1.z.unknown());
24
- tsafe_1.assert;
25
- return (0, tsafe_1.id)(zTargetType);
26
- })();
4
+ const tsafe_1 = require("./vendor/server/tsafe");
5
+ const server_1 = require("./server");
6
+ /** @deprecated: Use "oidc-spa/server" instead */
27
7
  async function createOidcBackend(params) {
28
8
  const { issuerUri, decodedAccessTokenSchema } = params;
29
- let publicSigningKeys = await fetchPublicSigningKeys({ issuerUri });
30
- const evtInvalidSignature = evt_1.Evt.create();
31
- evtInvalidSignature.pipe((0, evt_1.throttleTime)(3600000)).attach(async () => {
32
- const publicSigningKeys_new = await (async function callee(count) {
33
- let wrap;
34
- try {
35
- wrap = await fetchPublicSigningKeys({ issuerUri });
36
- }
37
- catch (error) {
38
- if (count === 9) {
39
- console.warn(`Failed to refresh public key and signing algorithm after ${count + 1} attempts`);
40
- return undefined;
41
- }
42
- const delayMs = 1000 * Math.pow(2, count);
43
- console.warn(`Failed to refresh public key and signing algorithm: ${String(error)}, retrying in ${delayMs}ms`);
44
- await new Promise(resolve => setTimeout(resolve, delayMs));
45
- return callee(count + 1);
46
- }
47
- return wrap;
48
- })(0);
49
- if (publicSigningKeys_new === undefined) {
50
- return;
51
- }
52
- publicSigningKeys = publicSigningKeys_new;
9
+ const { bootstrapAuth, validateAndDecodeAccessToken } = decodedAccessTokenSchema === undefined
10
+ ? server_1.oidcSpa.createUtils()
11
+ : server_1.oidcSpa.withExpectedDecodedAccessTokenShape({ decodedAccessTokenSchema }).createUtils();
12
+ await bootstrapAuth({
13
+ implementation: "real",
14
+ issuerUri,
15
+ expectedAudience: undefined
53
16
  });
54
17
  return {
55
18
  verifyAndDecodeAccessToken: async ({ accessToken }) => {
56
- let kid;
57
- let alg;
58
- {
59
- let header;
60
- try {
61
- header = (0, jose_1.decodeProtectedHeader)(accessToken);
62
- }
63
- catch {
64
- return {
65
- isValid: false,
66
- errorCase: "invalid signature",
67
- errorMessage: "Failed to decode the JWT header"
68
- };
69
- }
70
- const { kid: kidFromHeader, alg: algFromHeader } = header;
71
- if (typeof kidFromHeader !== "string" || kidFromHeader.length === 0) {
72
- return {
73
- isValid: false,
74
- errorCase: "invalid signature",
75
- errorMessage: "The decoded JWT header does not have a kid property"
76
- };
77
- }
78
- if (typeof algFromHeader !== "string") {
79
- return {
80
- isValid: false,
81
- errorCase: "invalid signature",
82
- errorMessage: "The decoded JWT header does not specify an algorithm"
83
- };
84
- }
85
- const supportedAlgs = [
86
- "RS256",
87
- "RS384",
88
- "RS512",
89
- "ES256",
90
- "ES384",
91
- "ES512",
92
- "PS256",
93
- "PS384",
94
- "PS512"
95
- ];
96
- if (!(0, tsafe_1.isAmong)(supportedAlgs, algFromHeader)) {
97
- return {
98
- isValid: false,
99
- errorCase: "invalid signature",
100
- errorMessage: `Unsupported or too weak algorithm ${algFromHeader}`
101
- };
102
- }
103
- kid = kidFromHeader;
104
- alg = algFromHeader;
105
- }
106
- if (!publicSigningKeys.kidSet.has(kid)) {
107
- return {
108
- isValid: false,
109
- errorCase: "invalid signature",
110
- errorMessage: `No public signing key found with kid ${kid}`
111
- };
112
- }
113
- let payload;
114
- try {
115
- const verification = await (0, jose_1.jwtVerify)(accessToken, publicSigningKeys.keyResolver, {
116
- algorithms: [alg]
117
- });
118
- payload = verification.payload;
119
- }
120
- catch (error) {
121
- if (error instanceof jose_1.errors.JWTExpired) {
122
- return (0, tsafe_1.id)({
123
- isValid: false,
124
- errorCase: "expired",
125
- errorMessage: error.message
126
- });
127
- }
128
- evtInvalidSignature.post();
129
- return (0, tsafe_1.id)({
130
- isValid: false,
131
- errorCase: "invalid signature",
132
- errorMessage: error instanceof Error ? error.message : String(error)
133
- });
134
- }
135
- const decodedAccessToken_unknown = payload;
136
- try {
137
- zDecodedAccessToken_RFC9068.parse(decodedAccessToken_unknown);
138
- }
139
- catch (error) {
140
- return (0, tsafe_1.id)({
141
- isValid: false,
142
- errorCase: "does not respect schema",
143
- errorMessage: [
144
- `The decoded access token does not satisfies`,
145
- `the shape mandated by RFC9068: ${String(error)}`
146
- ].join(" ")
147
- });
148
- }
149
- (0, tsafe_1.assert)((0, tsafe_1.is)(decodedAccessToken_unknown));
150
- const decodedAccessToken_original = decodedAccessToken_unknown;
151
- let decodedAccessToken;
152
- if (decodedAccessTokenSchema === undefined) {
153
- decodedAccessToken = decodedAccessToken_original;
154
- }
155
- else {
156
- try {
157
- decodedAccessToken = decodedAccessTokenSchema.parse(decodedAccessToken_original);
19
+ const { isSuccess, errorCause, debugErrorMessage, decodedAccessToken, decodedAccessToken_original } = await validateAndDecodeAccessToken({
20
+ request: {
21
+ method: "GET",
22
+ url: "https://dummy.com",
23
+ headers: {
24
+ Authorization: `Bearer ${accessToken}`,
25
+ DPoP: undefined
26
+ }
158
27
  }
159
- catch (error) {
160
- return (0, tsafe_1.id)({
161
- isValid: false,
162
- errorCase: "does not respect schema",
163
- errorMessage: String(error)
164
- });
28
+ });
29
+ if (!isSuccess) {
30
+ switch (errorCause) {
31
+ case "missing Authorization header":
32
+ (0, tsafe_1.assert)(false, "29330204");
33
+ case "validation error":
34
+ if (debugErrorMessage.includes("shape") ||
35
+ debugErrorMessage.includes("schema")) {
36
+ return {
37
+ isValid: false,
38
+ errorCase: "does not respect schema",
39
+ errorMessage: debugErrorMessage
40
+ };
41
+ }
42
+ return {
43
+ isValid: false,
44
+ errorCase: "invalid signature",
45
+ errorMessage: debugErrorMessage
46
+ };
47
+ case "validation error - access token expired":
48
+ return {
49
+ isValid: false,
50
+ errorCase: "expired",
51
+ errorMessage: debugErrorMessage
52
+ };
53
+ case "validation error - invalid signature":
54
+ return {
55
+ isValid: false,
56
+ errorCase: "invalid signature",
57
+ errorMessage: debugErrorMessage
58
+ };
165
59
  }
166
60
  }
167
61
  return (0, tsafe_1.id)({
168
62
  isValid: true,
63
+ // @ts-expect-error
169
64
  decodedAccessToken,
170
65
  decodedAccessToken_original
171
66
  });
172
67
  }
173
68
  };
174
69
  }
175
- async function fetchPublicSigningKeys(params) {
176
- const { issuerUri } = params;
177
- const { jwks_uri } = await (async () => {
178
- const url = `${issuerUri.replace(/\/$/, "")}/.well-known/openid-configuration`;
179
- const response = await fetch(url);
180
- if (!response.ok) {
181
- throw new Error(`Failed to fetch openid configuration of the issuerUri: ${issuerUri} (${url}): ${response.statusText}`);
182
- }
183
- let data;
184
- try {
185
- data = await response.json();
186
- }
187
- catch (error) {
188
- throw new Error(`Failed to parse json from ${url}: ${String(error)}`);
189
- }
190
- {
191
- const zWellKnownConfiguration = zod_1.z.object({
192
- jwks_uri: zod_1.z.string()
193
- });
194
- (0, tsafe_1.assert)();
195
- try {
196
- zWellKnownConfiguration.parse(data);
197
- }
198
- catch {
199
- throw new Error(`${url} does not have a jwks_uri property`);
200
- }
201
- (0, tsafe_1.assert)((0, tsafe_1.is)(data));
202
- }
203
- const { jwks_uri } = data;
204
- return { jwks_uri };
205
- })();
206
- const { jwks } = await (async () => {
207
- const response = await fetch(jwks_uri);
208
- if (!response.ok) {
209
- throw new Error(`Failed to fetch public key and algorithm from ${jwks_uri}: ${response.statusText}`);
210
- }
211
- let jwks;
212
- try {
213
- jwks = await response.json();
214
- }
215
- catch (error) {
216
- throw new Error(`Failed to parse json from ${jwks_uri}: ${String(error)}`);
217
- }
218
- {
219
- const zJwks = zod_1.z.object({
220
- keys: zod_1.z.array(zod_1.z.object({
221
- kid: zod_1.z.string(),
222
- kty: zod_1.z.string(),
223
- use: zod_1.z.string().optional(),
224
- alg: zod_1.z.string().optional()
225
- }))
226
- });
227
- (0, tsafe_1.assert)();
228
- try {
229
- zJwks.parse(jwks);
230
- }
231
- catch {
232
- throw new Error(`${jwks_uri} does not have the expected shape`);
233
- }
234
- (0, tsafe_1.assert)((0, tsafe_1.is)(jwks));
235
- }
236
- return { jwks };
237
- })();
238
- //const signatureKeys = jwks.keys.filter((key): key is JWKS["keys"][number] & { kid: string } => {
239
- const signatureKeys = jwks.keys.filter(key => {
240
- if (typeof key.kid !== "string" || key.kid.length === 0) {
241
- return false;
242
- }
243
- if (key.use !== undefined && key.use !== "sig") {
244
- return false;
245
- }
246
- const supportedKty = ["RSA", "EC"];
247
- if (!supportedKty.includes(key.kty)) {
248
- return false;
249
- }
250
- return true;
251
- });
252
- (0, tsafe_1.assert)(signatureKeys.length !== 0, `No public signing key found at ${jwks_uri}, ${JSON.stringify(jwks, null, 2)}`);
253
- const kidSet = new Set(signatureKeys.map(({ kid }) => kid));
254
- const keyResolver = (0, jose_1.createLocalJWKSet)({
255
- keys: signatureKeys
256
- });
257
- return {
258
- keyResolver,
259
- kidSet
260
- };
261
- }
262
70
  //# sourceMappingURL=backend.js.map
package/backend.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"backend.js","sourceRoot":"","sources":["./src/backend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"backend.js","sourceRoot":"","sources":["./src/backend.ts"],"names":[],"mappings":";;AA4CA,8CAgFC;AA5HD,iDAAmD;AAGnD,qCAAmC;AAwCnC,iDAAiD;AAC1C,KAAK,UAAU,iBAAiB,CAErC,MAAqD;IACnD,MAAM,EAAE,SAAS,EAAE,wBAAwB,EAAE,GAAG,MAAM,CAAC;IAEvD,MAAM,EAAE,aAAa,EAAE,4BAA4B,EAAE,GACjD,wBAAwB,KAAK,SAAS;QAClC,CAAC,CAAC,gBAAO,CAAC,WAAW,EAAE;QACvB,CAAC,CAAC,gBAAO,CAAC,mCAAmC,CAAC,EAAE,wBAAwB,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAElG,MAAM,aAAa,CAAC;QAChB,cAAc,EAAE,MAAM;QACtB,SAAS;QACT,gBAAgB,EAAE,SAAS;KAC9B,CAAC,CAAC;IAEH,OAAO;QACH,0BAA0B,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;YAClD,MAAM,EACF,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,2BAA2B,EAC9B,GAAG,MAAM,4BAA4B,CAAC;gBACnC,OAAO,EAAE;oBACL,MAAM,EAAE,KAAK;oBACb,GAAG,EAAE,mBAAmB;oBACxB,OAAO,EAAE;wBACL,aAAa,EAAE,UAAU,WAAW,EAAE;wBACtC,IAAI,EAAE,SAAS;qBAClB;iBACJ;aACJ,CAAC,CAAC;YAEH,IAAI,CAAC,SAAS,EAAE,CAAC;gBACb,QAAQ,UAAU,EAAE,CAAC;oBACjB,KAAK,8BAA8B;wBAC/B,IAAA,cAAM,EAAC,KAAK,EAAE,UAAU,CAAC,CAAC;oBAC9B,KAAK,kBAAkB;wBACnB,IACI,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC;4BACnC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACtC,CAAC;4BACC,OAAO;gCACH,OAAO,EAAE,KAAK;gCACd,SAAS,EAAE,yBAAyB;gCACpC,YAAY,EAAE,iBAAiB;6BAClC,CAAC;wBACN,CAAC;wBAED,OAAO;4BACH,OAAO,EAAE,KAAK;4BACd,SAAS,EAAE,mBAAmB;4BAC9B,YAAY,EAAE,iBAAiB;yBAClC,CAAC;oBAEN,KAAK,yCAAyC;wBAC1C,OAAO;4BACH,OAAO,EAAE,KAAK;4BACd,SAAS,EAAE,SAAS;4BACpB,YAAY,EAAE,iBAAiB;yBAClC,CAAC;oBACN,KAAK,sCAAsC;wBACvC,OAAO;4BACH,OAAO,EAAE,KAAK;4BACd,SAAS,EAAE,mBAAmB;4BAC9B,YAAY,EAAE,iBAAiB;yBAClC,CAAC;gBACV,CAAC;YACL,CAAC;YAED,OAAO,IAAA,UAAE,EAAsD;gBAC3D,OAAO,EAAE,IAAI;gBACb,mBAAmB;gBACnB,kBAAkB;gBAClB,2BAA2B;aAC9B,CAAC,CAAC;QACP,CAAC;KACJ,CAAC;AACN,CAAC"}
@@ -1,4 +1,3 @@
1
- import { type OidcMetadata as OidcClientTsOidcMetadata } from "../vendor/frontend/oidc-client-ts";
2
1
  /**
3
2
  * OpenID Providers have metadata describing their configuration.
4
3
  *
@@ -264,8 +263,9 @@ export type OidcMetadata = {
264
263
  * @see https://datatracker.ietf.org/doc/html/rfc8414
265
264
  */
266
265
  code_challenge_methods_supported: string[];
266
+ dpop_signing_alg_values_supported: string[];
267
267
  };
268
268
  export declare const WELL_KNOWN_PATH = "/.well-known/openid-configuration";
269
269
  export declare function fetchOidcMetadata(params: {
270
270
  issuerUri: string;
271
- }): Promise<Partial<OidcClientTsOidcMetadata> | undefined>;
271
+ }): Promise<Partial<OidcMetadata> | undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"OidcMetadata.js","sourceRoot":"","sources":["../src/core/OidcMetadata.ts"],"names":[],"mappings":";;;AA2SA,8CA8CC;AAxVD,kDAA4D;AAC5D,kEAAkE;AA6QlE,eAAsD,CAAC;AAE1C,QAAA,eAAe,GAAG,mCAAmC,CAAC;AAEnE,SAAS,oBAAoB,CAAC,MAA6B;IACvD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IAE7B,OAAO,iCAAiC,SAAS,EAAE,CAAC;AACxD,CAAC;AAED,SAAS,kBAAkB,CAAC,MAA6B;IACrD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IAE7B,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IAE1E,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAsC,CAAC;AAClE,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAkE;IACzF,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;IAE3C,cAAc,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;AAC9F,CAAC;AAEM,KAAK,UAAU,iBAAiB,CAAC,MAA6B;IACjE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IAE7B,UAAU,EAAE,CAAC;QACT,MAAM,YAAY,GAAG,kBAAkB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QAEvD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,UAAU,CAAC;QACrB,CAAC;QAED,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,IAAI,YAAmC,CAAC;IAExC,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,GAAG,uBAAe,EAAE,EAAE;YAC3D,OAAO,EAAE;gBACL,MAAM,EAAE,4CAA4C;aACvD;SACJ,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,EAAE,CAAC;QACtB,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAElC,CAAC;YACG,MAAM,EAAE,sBAAsB,EAAE,GAAG,GAAG,CAAC;YAEvC,IAAI,OAAO,sBAAsB,KAAK,QAAQ,EAAE,CAAC;gBAC7C,MAAM,IAAI,KAAK,EAAE,CAAC;YACtB,CAAC;QACL,CAAC;QAED,YAAY,GAAG,GAAG,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,IAAI,CAAC,IAAA,wCAAoB,GAAE,EAAE,CAAC;QAC1B,iBAAiB,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,YAAY,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"OidcMetadata.js","sourceRoot":"","sources":["../src/core/OidcMetadata.ts"],"names":[],"mappings":";;;AA6SA,8CA8CC;AA1VD,kDAA4D;AAC5D,kEAAkE;AA+QlE,eAAiG,CAAC;AAErF,QAAA,eAAe,GAAG,mCAAmC,CAAC;AAEnE,SAAS,oBAAoB,CAAC,MAA6B;IACvD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IAE7B,OAAO,iCAAiC,SAAS,EAAE,CAAC;AACxD,CAAC;AAED,SAAS,kBAAkB,CAAC,MAA6B;IACrD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IAE7B,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IAE1E,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAA0B,CAAC;AACtD,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAkE;IACzF,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;IAE3C,cAAc,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;AAC9F,CAAC;AAEM,KAAK,UAAU,iBAAiB,CAAC,MAA6B;IACjE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IAE7B,UAAU,EAAE,CAAC;QACT,MAAM,YAAY,GAAG,kBAAkB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QAEvD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,UAAU,CAAC;QACrB,CAAC;QAED,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,IAAI,YAAmC,CAAC;IAExC,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,GAAG,uBAAe,EAAE,EAAE;YAC3D,OAAO,EAAE;gBACL,MAAM,EAAE,4CAA4C;aACvD;SACJ,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,EAAE,CAAC;QACtB,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAElC,CAAC;YACG,MAAM,EAAE,sBAAsB,EAAE,GAAG,GAAG,CAAC;YAEvC,IAAI,OAAO,sBAAsB,KAAK,QAAQ,EAAE,CAAC;gBAC7C,MAAM,IAAI,KAAK,EAAE,CAAC;YACtB,CAAC;QACL,CAAC;QAED,YAAY,GAAG,GAAG,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,IAAI,CAAC,IAAA,wCAAoB,GAAE,EAAE,CAAC;QAC1B,iBAAiB,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,YAAY,CAAC;AACxB,CAAC"}
@@ -65,10 +65,6 @@ export type ParamsOfCreateOidc<DecodedIdToken extends Record<string, unknown> =
65
65
  * */
66
66
  idleSessionLifetimeInSeconds?: number;
67
67
  /**
68
- * Usage discouraged, this parameter exists because we don't want to assume
69
- * too much about your usecase but I can't think of a scenario where you would
70
- * want anything other than the current page.
71
- *
72
68
  * Default: { redirectTo: "current page" }
73
69
  */
74
70
  autoLogoutParams?: Parameters<Oidc.LoggedIn<any>["logout"]>[0];
@@ -170,6 +166,8 @@ export type ParamsOfCreateOidc<DecodedIdToken extends Record<string, unknown> =
170
166
  * API and no iframe capabilities.
171
167
  */
172
168
  postLoginRedirectUrl?: string;
169
+ /** Default: false */
170
+ dpop?: boolean;
173
171
  };
174
172
  /** @see: https://docs.oidc-spa.dev/v/v8/usage */
175
173
  export declare function createOidc<DecodedIdToken extends Record<string, unknown> = Oidc.Tokens.DecodedIdToken_OidcCoreSpec, AutoLogin extends boolean = false>(params: ParamsOfCreateOidc<DecodedIdToken, AutoLogin>): Promise<AutoLogin extends true ? Oidc.LoggedIn<DecodedIdToken> : Oidc<DecodedIdToken>>;
@@ -72,9 +72,10 @@ const homeAndRedirectUri_1 = require("./homeAndRedirectUri");
72
72
  const ensureNonBlankPaint_1 = require("../tools/ensureNonBlankPaint");
73
73
  const StateDataCookie_1 = require("./StateDataCookie");
74
74
  const tokenPlaceholderSubstitution_1 = require("./tokenPlaceholderSubstitution");
75
+ const dpop_1 = require("./dpop");
75
76
  const loadWebcryptoLinerShim_1 = require("../tools/loadWebcryptoLinerShim");
76
77
  // NOTE: Replaced at build time
77
- const VERSION = "8.6.18";
78
+ const VERSION = "8.7.0";
78
79
  const globalContext = {
79
80
  prOidcByConfigId: new Map(),
80
81
  hasLogoutBeenCalled: (0, id_1.id)(false)
@@ -151,7 +152,7 @@ async function createOidc_nonMemoized(params, preProcessedParams) {
151
152
  return new Promise(() => { });
152
153
  }
153
154
  }
154
- const { transformUrlBeforeRedirect, extraQueryParams: extraQueryParamsOrGetter, extraTokenParams: extraTokenParamsOrGetter, decodedIdTokenSchema, idleSessionLifetimeInSeconds, autoLogoutParams = { redirectTo: "current page" }, autoLogin = false, postLoginRedirectUrl: postLoginRedirectUrl_default, __unsafe_clientSecret, __unsafe_useIdTokenAsAccessToken = false, __metadata, sessionRestorationMethod = params.autoLogin === true ? "full page redirect" : "auto" } = params;
155
+ const { transformUrlBeforeRedirect, extraQueryParams: extraQueryParamsOrGetter, extraTokenParams: extraTokenParamsOrGetter, decodedIdTokenSchema, idleSessionLifetimeInSeconds, autoLogoutParams = { redirectTo: "current page" }, autoLogin = false, postLoginRedirectUrl: postLoginRedirectUrl_default, __unsafe_clientSecret, __unsafe_useIdTokenAsAccessToken = false, __metadata, sessionRestorationMethod = params.autoLogin === true ? "full page redirect" : "auto", dpop } = params;
155
156
  const scopes = Array.from(new Set(["openid", ...(params.scopes ?? ["profile"])]));
156
157
  const BASE_URL_params = params.BASE_URL ?? params.homeUrl;
157
158
  const { issuerUri, clientId, configId, log } = preProcessedParams;
@@ -200,6 +201,35 @@ async function createOidc_nonMemoized(params, preProcessedParams) {
200
201
  }
201
202
  const stateUrlParamValue_instance = (0, StateData_1.generateStateUrlParamValue)();
202
203
  const oidcMetadata = __metadata ?? (await (0, OidcMetadata_1.fetchOidcMetadata)({ issuerUri }));
204
+ const isDPoPEnabled = (() => {
205
+ if (dpop === undefined) {
206
+ log?.("DPoP disabled because it wasn't explicitly enabled when calling createOidc/bootstrapOidc");
207
+ }
208
+ if (!dpop) {
209
+ log?.("DPoP explicitly disabled in createOidc/bootstrapOidc params");
210
+ return false;
211
+ }
212
+ if (oidcMetadata === undefined) {
213
+ return false;
214
+ }
215
+ if (__unsafe_useIdTokenAsAccessToken) {
216
+ return false;
217
+ }
218
+ const isSupported = (() => {
219
+ const { dpop_signing_alg_values_supported } = oidcMetadata;
220
+ if (dpop_signing_alg_values_supported === undefined) {
221
+ return false;
222
+ }
223
+ return dpop_signing_alg_values_supported.includes("ES256");
224
+ })();
225
+ if (!isSupported) {
226
+ log?.("DPoP disabled because it's not supported by your IdP");
227
+ }
228
+ else {
229
+ log?.("DPoP enabled");
230
+ }
231
+ return isSupported;
232
+ })();
203
233
  const canUseIframe = (() => {
204
234
  switch (sessionRestorationMethod) {
205
235
  case "auto":
@@ -371,7 +401,13 @@ async function createOidc_nonMemoized(params, preProcessedParams) {
371
401
  prefix: StateData_1.STATE_STORE_KEY_PREFIX
372
402
  }),
373
403
  client_secret: __unsafe_clientSecret,
374
- metadata: oidcMetadata
404
+ metadata: oidcMetadata,
405
+ dpop: !isDPoPEnabled
406
+ ? undefined
407
+ : {
408
+ bind_authorization_code: false,
409
+ store: (0, dpop_1.createInMemoryDPoPStore)({ configId })
410
+ }
375
411
  });
376
412
  const evtInitializationOutcomeUserNotLoggedIn = (0, Evt_1.createEvt)();
377
413
  const { loginOrGoToAuthServer } = (0, loginOrGoToAuthServer_1.createLoginOrGoToAuthServer)({
@@ -791,6 +827,7 @@ async function createOidc_nonMemoized(params, preProcessedParams) {
791
827
  decodedIdTokenSchema,
792
828
  __unsafe_useIdTokenAsAccessToken,
793
829
  decodedIdToken_previous: undefined,
830
+ isDPoPEnabled,
794
831
  log
795
832
  });
796
833
  detect_useless_idleSessionLifetimeInSeconds: {
@@ -1044,6 +1081,7 @@ async function createOidc_nonMemoized(params, preProcessedParams) {
1044
1081
  decodedIdTokenSchema,
1045
1082
  __unsafe_useIdTokenAsAccessToken,
1046
1083
  decodedIdToken_previous: currentTokens.decodedIdToken,
1084
+ isDPoPEnabled,
1047
1085
  log
1048
1086
  });
1049
1087
  if ((0, persistedAuthState_1.getPersistedAuthState)({ configId }) !== undefined) {
@@ -1370,8 +1408,8 @@ async function createOidc_nonMemoized(params, preProcessedParams) {
1370
1408
  configId,
1371
1409
  sessionId
1372
1410
  });
1373
- const { unsubscribe: unsubscribeFromIsUserActive } = evtIsUserActive.subscribe(isUserActive => {
1374
- if (isUserActive) {
1411
+ const { unsubscribe: unsubscribeFromIsUserActive } = evtIsUserActive.subscribe(eventData => {
1412
+ if (eventData.isUserActive) {
1375
1413
  if (stopCountdown !== undefined) {
1376
1414
  stopCountdown();
1377
1415
  stopCountdown = undefined;
@@ -1382,7 +1420,9 @@ async function createOidc_nonMemoized(params, preProcessedParams) {
1382
1420
  const currentRefreshTokenTtlInSeconds = getCurrentRefreshTokenTtlInSeconds();
1383
1421
  (0, assert_1.assert)(currentRefreshTokenTtlInSeconds !== undefined, "902992326");
1384
1422
  stopCountdown = startCountdown({
1385
- countDownFromSeconds: currentRefreshTokenTtlInSeconds
1423
+ countDownFromSeconds: Math.floor((currentRefreshTokenTtlInSeconds * 1000 -
1424
+ eventData.hasBeenInactiveForHowLongMs) /
1425
+ 1000)
1386
1426
  }).stopCountdown;
1387
1427
  }
1388
1428
  });