@spine-event-engine/auth 2.0.0-snapshot.25 → 2.0.0-snapshot.28
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/README.md +128 -11
- package/REFERENCE.md +166 -12
- package/dist/gateway/dynamic-unary-forwarder.d.ts +62 -3
- package/dist/gateway/dynamic-unary-forwarder.d.ts.map +1 -1
- package/dist/gateway/dynamic-unary-forwarder.js +189 -10
- package/dist/gateway/dynamic-unary-forwarder.js.map +1 -1
- package/dist/gateway/index.d.ts +5 -0
- package/dist/gateway/index.d.ts.map +1 -1
- package/dist/gateway/index.js +65 -7
- package/dist/gateway/index.js.map +1 -1
- package/dist/index.d.ts +60 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/native/index.d.ts +43 -3
- package/dist/native/index.d.ts.map +1 -1
- package/dist/native/index.js +178 -32
- package/dist/native/index.js.map +1 -1
- package/dist/oidc/contracts.d.ts +18 -4
- package/dist/oidc/contracts.d.ts.map +1 -1
- package/dist/oidc/flow-store.d.ts +143 -0
- package/dist/oidc/flow-store.d.ts.map +1 -0
- package/dist/oidc/flow-store.js +184 -0
- package/dist/oidc/flow-store.js.map +1 -0
- package/dist/oidc/index.d.ts +29 -9
- package/dist/oidc/index.d.ts.map +1 -1
- package/dist/oidc/index.js +611 -152
- package/dist/oidc/index.js.map +1 -1
- package/dist/oidc/persistent-flow-store.d.ts +117 -0
- package/dist/oidc/persistent-flow-store.d.ts.map +1 -0
- package/dist/oidc/persistent-flow-store.js +413 -0
- package/dist/oidc/persistent-flow-store.js.map +1 -0
- package/dist/oidc/records.d.ts +15 -0
- package/dist/oidc/records.d.ts.map +1 -0
- package/dist/oidc/records.js +91 -0
- package/dist/oidc/records.js.map +1 -0
- package/dist/providers/index.d.ts +10 -5
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +103 -30
- package/dist/providers/index.js.map +1 -1
- package/dist/request/index.d.ts +3 -0
- package/dist/request/index.d.ts.map +1 -1
- package/dist/request/index.js +17 -1
- package/dist/request/index.js.map +1 -1
- package/dist/sessions/cookies.d.ts +46 -8
- package/dist/sessions/cookies.d.ts.map +1 -1
- package/dist/sessions/cookies.js +269 -47
- package/dist/sessions/cookies.js.map +1 -1
- package/dist/sessions/opaque-session-store.d.ts +143 -0
- package/dist/sessions/opaque-session-store.d.ts.map +1 -0
- package/dist/sessions/opaque-session-store.js +185 -0
- package/dist/sessions/opaque-session-store.js.map +1 -0
- package/dist/sessions/opaque.d.ts +93 -106
- package/dist/sessions/opaque.d.ts.map +1 -1
- package/dist/sessions/opaque.js +501 -232
- package/dist/sessions/opaque.js.map +1 -1
- package/dist/sessions/persistent-opaque-session-store.d.ts +105 -0
- package/dist/sessions/persistent-opaque-session-store.d.ts.map +1 -0
- package/dist/sessions/persistent-opaque-session-store.js +333 -0
- package/dist/sessions/persistent-opaque-session-store.js.map +1 -0
- package/dist/sessions/persistent-token-revocations.d.ts +90 -0
- package/dist/sessions/persistent-token-revocations.d.ts.map +1 -0
- package/dist/sessions/persistent-token-revocations.js +422 -0
- package/dist/sessions/persistent-token-revocations.js.map +1 -0
- package/dist/sessions/session-lifetime.d.ts +67 -0
- package/dist/sessions/session-lifetime.d.ts.map +1 -0
- package/dist/sessions/session-lifetime.js +165 -0
- package/dist/sessions/session-lifetime.js.map +1 -0
- package/dist/sessions/session-record.d.ts +15 -0
- package/dist/sessions/session-record.d.ts.map +1 -0
- package/dist/sessions/session-record.js +109 -0
- package/dist/sessions/session-record.js.map +1 -0
- package/dist/sessions/signed.d.ts +5 -4
- package/dist/sessions/signed.d.ts.map +1 -1
- package/dist/sessions/signed.js +212 -74
- package/dist/sessions/signed.js.map +1 -1
- package/dist/subscriptions/index.d.ts +35 -3
- package/dist/subscriptions/index.d.ts.map +1 -1
- package/dist/subscriptions/index.js +680 -134
- package/dist/subscriptions/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +20 -6
package/dist/sessions/cookies.js
CHANGED
|
@@ -12,10 +12,16 @@
|
|
|
12
12
|
* the License.
|
|
13
13
|
*/
|
|
14
14
|
import { createHmac, timingSafeEqual } from "node:crypto";
|
|
15
|
+
import { parseCookie, stringifySetCookie } from "cookie";
|
|
16
|
+
import { SessionRecords } from "./session-record.js";
|
|
15
17
|
/**
|
|
16
18
|
* Strict, framework-neutral helper whose `close()` zeroes the copied CSRF secret.
|
|
17
19
|
*/
|
|
18
20
|
export class OpaqueSessionCookies {
|
|
21
|
+
/**
|
|
22
|
+
* Immutable header and cookie names used by the browser host's raw admission.
|
|
23
|
+
*/
|
|
24
|
+
admission;
|
|
19
25
|
secret;
|
|
20
26
|
origins;
|
|
21
27
|
sessionName;
|
|
@@ -23,6 +29,8 @@ export class OpaqueSessionCookies {
|
|
|
23
29
|
maxHeaderValues;
|
|
24
30
|
maxHeaderCharacters;
|
|
25
31
|
maxCookiePairs;
|
|
32
|
+
sameSite;
|
|
33
|
+
persistent;
|
|
26
34
|
closed = false;
|
|
27
35
|
/**
|
|
28
36
|
* Creates strict cookie extraction with copied CSRF key material.
|
|
@@ -39,32 +47,55 @@ export class OpaqueSessionCookies {
|
|
|
39
47
|
this.csrfName = CookieValues.validCookieName(options.csrfCookieName ?? "__Host-spine-csrf", "csrfCookieName");
|
|
40
48
|
if (this.sessionName === this.csrfName)
|
|
41
49
|
throw new Error("sessionCookieName and csrfCookieName must be distinct");
|
|
50
|
+
this.admission = CookieValues.admission(this.sessionName, this.csrfName);
|
|
42
51
|
this.maxHeaderValues = CookieValues.positiveSafeInteger(options.maxHeaderValues ?? 32, "maxHeaderValues");
|
|
43
52
|
this.maxHeaderCharacters = CookieValues.positiveSafeInteger(options.maxHeaderCharacters ?? 16_384, "maxHeaderCharacters");
|
|
44
53
|
this.maxCookiePairs = CookieValues.positiveSafeInteger(options.maxCookiePairs ?? 64, "maxCookiePairs");
|
|
54
|
+
this.sameSite = options.sameSite ?? "lax";
|
|
55
|
+
if (!["lax", "strict", "none"].includes(this.sameSite))
|
|
56
|
+
throw new Error("sameSite must be lax, strict, or none");
|
|
57
|
+
this.persistent = options.persistent ?? false;
|
|
58
|
+
if (typeof this.persistent !== "boolean")
|
|
59
|
+
throw new Error("persistent must be a boolean");
|
|
45
60
|
}
|
|
46
61
|
/**
|
|
47
|
-
* Creates the
|
|
48
|
-
* @param
|
|
62
|
+
* Creates the CSRF value bound to the entire issued opaque credential.
|
|
63
|
+
* @param credential The complete sealed credential protected by the CSRF value.
|
|
49
64
|
* @returns The derived CSRF value.
|
|
50
65
|
*/
|
|
51
|
-
csrf(
|
|
66
|
+
csrf(credential) {
|
|
52
67
|
this.open();
|
|
53
|
-
if (!CookieValues.
|
|
54
|
-
throw new Error("
|
|
55
|
-
|
|
56
|
-
return createHmac("sha256", this.secret).update(sessionId, "utf8").digest("base64url");
|
|
68
|
+
if (!CookieValues.validCredential(credential))
|
|
69
|
+
throw new Error("credential must be a nonempty sealed value without control characters");
|
|
70
|
+
return createHmac("sha256", this.secret).update(credential, "utf8").digest("base64url");
|
|
57
71
|
}
|
|
58
72
|
/**
|
|
59
|
-
* Creates the immutable pair of host-only cookies for
|
|
60
|
-
* @param
|
|
73
|
+
* Creates the immutable pair of host-only cookies for an issued or rotated session.
|
|
74
|
+
* @param credential The complete issued opaque credential.
|
|
75
|
+
* @param expiresAt The actual authoritative session deadline.
|
|
61
76
|
* @returns The session and CSRF Set-Cookie values.
|
|
62
77
|
*/
|
|
63
|
-
issue(
|
|
64
|
-
const csrf = this.csrf(
|
|
78
|
+
issue(credential, expiresAt) {
|
|
79
|
+
const csrf = this.csrf(credential);
|
|
80
|
+
const expires = this.persistent ? CookieValues.expiryDate(expiresAt) : undefined;
|
|
65
81
|
return Object.freeze([
|
|
66
|
-
|
|
67
|
-
|
|
82
|
+
stringifySetCookie({
|
|
83
|
+
name: this.sessionName,
|
|
84
|
+
value: credential,
|
|
85
|
+
path: "/",
|
|
86
|
+
secure: true,
|
|
87
|
+
httpOnly: true,
|
|
88
|
+
sameSite: this.sameSite,
|
|
89
|
+
...(expires === undefined ? {} : { expires }),
|
|
90
|
+
}),
|
|
91
|
+
stringifySetCookie({
|
|
92
|
+
name: this.csrfName,
|
|
93
|
+
value: csrf,
|
|
94
|
+
path: "/",
|
|
95
|
+
secure: true,
|
|
96
|
+
sameSite: this.sameSite,
|
|
97
|
+
...(expires === undefined ? {} : { expires }),
|
|
98
|
+
}),
|
|
68
99
|
]);
|
|
69
100
|
}
|
|
70
101
|
/**
|
|
@@ -74,12 +105,27 @@ export class OpaqueSessionCookies {
|
|
|
74
105
|
clear() {
|
|
75
106
|
this.open();
|
|
76
107
|
return Object.freeze([
|
|
77
|
-
|
|
78
|
-
|
|
108
|
+
stringifySetCookie({
|
|
109
|
+
name: this.sessionName,
|
|
110
|
+
value: "",
|
|
111
|
+
path: "/",
|
|
112
|
+
secure: true,
|
|
113
|
+
httpOnly: true,
|
|
114
|
+
sameSite: this.sameSite,
|
|
115
|
+
maxAge: 0,
|
|
116
|
+
}),
|
|
117
|
+
stringifySetCookie({
|
|
118
|
+
name: this.csrfName,
|
|
119
|
+
value: "",
|
|
120
|
+
path: "/",
|
|
121
|
+
secure: true,
|
|
122
|
+
sameSite: this.sameSite,
|
|
123
|
+
maxAge: 0,
|
|
124
|
+
}),
|
|
79
125
|
]);
|
|
80
126
|
}
|
|
81
127
|
/**
|
|
82
|
-
*
|
|
128
|
+
* Rejects simultaneous primary credentials, then reads a bearer or checked cookie credential.
|
|
83
129
|
* @param headers The request headers to inspect.
|
|
84
130
|
* @returns The admitted credential or its rejection reason.
|
|
85
131
|
*/
|
|
@@ -92,10 +138,22 @@ export class OpaqueSessionCookies {
|
|
|
92
138
|
const authorization = values.get("authorization") ?? [];
|
|
93
139
|
if (authorization.length > 1)
|
|
94
140
|
return CookieValues.rejection("duplicate-authorization");
|
|
141
|
+
if (authorization.length === 1 &&
|
|
142
|
+
CookieValues.primaryPresent(values.get("cookie") ?? [], this.sessionName))
|
|
143
|
+
return CookieValues.rejection("simultaneous-credential");
|
|
95
144
|
if (authorization.length === 1)
|
|
96
145
|
return CookieValues.bearer(CookieValues.only(authorization));
|
|
97
146
|
return this.cookieCredential(values);
|
|
98
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
* Reads a browser credential while representing no primary credential as absence.
|
|
150
|
+
* @param request Immutable raw headers with method and request-local parsed URL.
|
|
151
|
+
* @returns A credential, terminal rejection, or undefined absence.
|
|
152
|
+
*/
|
|
153
|
+
read(request) {
|
|
154
|
+
const result = this.extract(request.headers);
|
|
155
|
+
return Promise.resolve(result.kind === "rejected" && result.reason === "missing-credential" ? undefined : result);
|
|
156
|
+
}
|
|
99
157
|
/**
|
|
100
158
|
* Closes the extractor, zeroes its HMAC secret, and rejects later operations.
|
|
101
159
|
* @returns Completes after the secret is cleared.
|
|
@@ -107,6 +165,11 @@ export class OpaqueSessionCookies {
|
|
|
107
165
|
this.secret.fill(0);
|
|
108
166
|
return Promise.resolve();
|
|
109
167
|
}
|
|
168
|
+
/**
|
|
169
|
+
* Validates origin and CSRF after the selected cookie pair has been parsed.
|
|
170
|
+
* @param values Duplicate-preserving normalized request headers.
|
|
171
|
+
* @returns Admitted cookie credential or a terminal rejection.
|
|
172
|
+
*/
|
|
110
173
|
cookieCredential(values) {
|
|
111
174
|
const cookies = values.get("cookie") ?? [];
|
|
112
175
|
const parsed = CookieValues.parseCookies(cookies, this.sessionName, this.csrfName, this.maxCookiePairs);
|
|
@@ -128,6 +191,9 @@ export class OpaqueSessionCookies {
|
|
|
128
191
|
}
|
|
129
192
|
return Object.freeze({ kind: "cookie", value: parsed.session });
|
|
130
193
|
}
|
|
194
|
+
/**
|
|
195
|
+
* Rejects methods that require the copied CSRF key after closure.
|
|
196
|
+
*/
|
|
131
197
|
open() {
|
|
132
198
|
if (this.closed)
|
|
133
199
|
throw new Error("OpaqueSessionCookies is closed");
|
|
@@ -137,6 +203,36 @@ export class OpaqueSessionCookies {
|
|
|
137
203
|
* Parses and validates cookie values used by {@link OpaqueSessionCookies}.
|
|
138
204
|
*/
|
|
139
205
|
const CookieValues = Object.freeze({
|
|
206
|
+
/**
|
|
207
|
+
* Captures the validated standard browser admission names as immutable data.
|
|
208
|
+
* @param sessionName Configured primary cookie name.
|
|
209
|
+
* @param csrfName Configured supporting CSRF cookie name.
|
|
210
|
+
* @returns Frozen data declaration for the host's raw admission.
|
|
211
|
+
*/
|
|
212
|
+
admission(sessionName, csrfName) {
|
|
213
|
+
return Object.freeze({
|
|
214
|
+
csrfHeaderNames: Object.freeze(["x-spine-csrf"]),
|
|
215
|
+
credentialCookieNames: Object.freeze([sessionName]),
|
|
216
|
+
stateCookieNames: Object.freeze([csrfName]),
|
|
217
|
+
});
|
|
218
|
+
},
|
|
219
|
+
/**
|
|
220
|
+
* Checks whether any Cookie field contains the selected primary credential.
|
|
221
|
+
* @param headers Raw Cookie fields that may be legally split.
|
|
222
|
+
* @param sessionName Configured authentication cookie name.
|
|
223
|
+
* @returns Whether a primary cookie is present, including an empty value.
|
|
224
|
+
*/
|
|
225
|
+
primaryPresent(headers, sessionName) {
|
|
226
|
+
return headers.some((header) => Object.hasOwn(parseCookie(header), sessionName));
|
|
227
|
+
},
|
|
228
|
+
/**
|
|
229
|
+
* Collects own request header fields without losing duplicate values.
|
|
230
|
+
*
|
|
231
|
+
* @param headers Original header object.
|
|
232
|
+
* @param maxValues Existing field and value count limit.
|
|
233
|
+
* @param maxCharacters Existing total character limit.
|
|
234
|
+
* @returns Normalized duplicate-preserving values, or undefined when a limit is exceeded.
|
|
235
|
+
*/
|
|
140
236
|
headerValues(headers, maxValues, maxCharacters) {
|
|
141
237
|
const result = new Map();
|
|
142
238
|
let count = 0;
|
|
@@ -175,50 +271,90 @@ const CookieValues = Object.freeze({
|
|
|
175
271
|
}
|
|
176
272
|
return result;
|
|
177
273
|
},
|
|
274
|
+
/**
|
|
275
|
+
* Reads one Bearer authorization field without accepting malformed syntax.
|
|
276
|
+
*
|
|
277
|
+
* @param value One Authorization field value.
|
|
278
|
+
* @returns Bearer credential or terminal malformed-authorization rejection.
|
|
279
|
+
*/
|
|
178
280
|
bearer(value) {
|
|
179
281
|
const match = /^bearer ([\x21-\x7e]+)$/i.exec(value);
|
|
180
282
|
return match === null
|
|
181
283
|
? CookieValues.rejection("malformed-authorization")
|
|
182
284
|
: Object.freeze({ kind: "bearer", value: CookieValues.only(match.slice(1)) });
|
|
183
285
|
},
|
|
286
|
+
/**
|
|
287
|
+
* Reads an unambiguous credential and CSRF pair across Cookie fields.
|
|
288
|
+
* @param headers Raw Cookie field values in arrival order.
|
|
289
|
+
* @param sessionName Selected authentication cookie name.
|
|
290
|
+
* @param csrfName Selected CSRF cookie name.
|
|
291
|
+
* @param maxPairs Existing total cookie-pair limit.
|
|
292
|
+
* @returns Decoded pair or a terminal parsing rejection.
|
|
293
|
+
*/
|
|
184
294
|
parseCookies(headers, sessionName, csrfName, maxPairs) {
|
|
185
295
|
const found = new Map();
|
|
186
296
|
let count = 0;
|
|
187
297
|
for (const header of headers) {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
if (count > maxPairs)
|
|
193
|
-
return { reason: "request-too-large" };
|
|
194
|
-
const index = pair.indexOf("=");
|
|
195
|
-
if (index <= 0)
|
|
196
|
-
return { reason: "malformed-cookie" };
|
|
197
|
-
const name = pair.slice(0, index).trim();
|
|
198
|
-
const value = pair.slice(index + 1).trim();
|
|
199
|
-
if (!CookieValues.validCookiePair(name, value))
|
|
200
|
-
return { reason: "malformed-cookie" };
|
|
201
|
-
if (name === sessionName || name === csrfName) {
|
|
202
|
-
if (found.has(name))
|
|
203
|
-
return { reason: "ambiguous-cookie" };
|
|
204
|
-
found.set(name, [value]);
|
|
205
|
-
}
|
|
206
|
-
}
|
|
298
|
+
const result = CookieValues.readCookieHeader(header, found, sessionName, csrfName, maxPairs - count);
|
|
299
|
+
if ("reason" in result)
|
|
300
|
+
return result;
|
|
301
|
+
count += result.count;
|
|
207
302
|
}
|
|
208
|
-
const session = found.get(sessionName)
|
|
209
|
-
const csrf = found.get(csrfName)
|
|
210
|
-
if (session
|
|
303
|
+
const session = found.get(sessionName);
|
|
304
|
+
const csrf = found.get(csrfName);
|
|
305
|
+
if (session === undefined && csrf === undefined)
|
|
211
306
|
return { reason: "missing-credential" };
|
|
212
|
-
if (session
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
csrf
|
|
216
|
-
!CookieValues.validSessionId(CookieValues.only(session)) ||
|
|
217
|
-
!CookieValues.validCsrf(CookieValues.only(csrf))) {
|
|
307
|
+
if (session === undefined ||
|
|
308
|
+
csrf === undefined ||
|
|
309
|
+
!CookieValues.validCredential(session) ||
|
|
310
|
+
!CookieValues.validCsrf(csrf)) {
|
|
218
311
|
return { reason: "malformed-cookie" };
|
|
219
312
|
}
|
|
220
|
-
return { session
|
|
313
|
+
return { session, csrf };
|
|
221
314
|
},
|
|
315
|
+
/**
|
|
316
|
+
* Validates one raw Cookie field before using cookie v2 decoded values.
|
|
317
|
+
* @param header One original Cookie field.
|
|
318
|
+
* @param found Selected names already seen in this request.
|
|
319
|
+
* @param sessionName Selected authentication cookie name.
|
|
320
|
+
* @param csrfName Selected CSRF cookie name.
|
|
321
|
+
* @param remaining Remaining count under the existing pair limit.
|
|
322
|
+
* @returns Count accepted from the field or a terminal rejection.
|
|
323
|
+
*/
|
|
324
|
+
readCookieHeader(header, found, sessionName, csrfName, remaining) {
|
|
325
|
+
if (CookieValues.hasForbiddenCookieCharacter(header))
|
|
326
|
+
return { reason: "malformed-cookie" };
|
|
327
|
+
const decoded = parseCookie(header);
|
|
328
|
+
let count = 0;
|
|
329
|
+
for (const pair of header.split(";")) {
|
|
330
|
+
count += 1;
|
|
331
|
+
if (count > remaining)
|
|
332
|
+
return { reason: "request-too-large" };
|
|
333
|
+
const index = pair.indexOf("=");
|
|
334
|
+
if (index <= 0)
|
|
335
|
+
return { reason: "malformed-cookie" };
|
|
336
|
+
const name = pair.slice(0, index).trim();
|
|
337
|
+
const value = pair.slice(index + 1).trim();
|
|
338
|
+
if (!CookieValues.validCookiePair(name, value))
|
|
339
|
+
return { reason: "malformed-cookie" };
|
|
340
|
+
if (name === sessionName || name === csrfName) {
|
|
341
|
+
if (found.has(name))
|
|
342
|
+
return { reason: "ambiguous-cookie" };
|
|
343
|
+
found.set(name, decoded[name] ?? "");
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
return { count };
|
|
347
|
+
},
|
|
348
|
+
/**
|
|
349
|
+
* Reads exactly one value for a required request header.
|
|
350
|
+
*
|
|
351
|
+
* @typeParam T Specific rejection reason.
|
|
352
|
+
* @param values Normalized duplicate-preserving fields.
|
|
353
|
+
* @param name Lowercase header name.
|
|
354
|
+
* @param missing Rejection when the header is absent.
|
|
355
|
+
* @param duplicate Rejection when the header repeats.
|
|
356
|
+
* @returns Selected value or the configured rejection.
|
|
357
|
+
*/
|
|
222
358
|
one(values, name, missing, duplicate) {
|
|
223
359
|
const entries = values.get(name) ?? [];
|
|
224
360
|
if (entries.length === 0)
|
|
@@ -227,12 +363,24 @@ const CookieValues = Object.freeze({
|
|
|
227
363
|
return { reason: duplicate };
|
|
228
364
|
return { value: CookieValues.only(entries) };
|
|
229
365
|
},
|
|
366
|
+
/**
|
|
367
|
+
* Gets the required first value from a validated singleton field.
|
|
368
|
+
*
|
|
369
|
+
* @param values Values already known to contain one entry.
|
|
370
|
+
* @returns The single field value.
|
|
371
|
+
*/
|
|
230
372
|
only(values) {
|
|
231
373
|
const value = values[0];
|
|
232
374
|
if (value === undefined)
|
|
233
375
|
throw new Error("expected one header value");
|
|
234
376
|
return value;
|
|
235
377
|
},
|
|
378
|
+
/**
|
|
379
|
+
* Checks raw Cookie fields for controls and commas.
|
|
380
|
+
*
|
|
381
|
+
* @param value Raw Cookie field.
|
|
382
|
+
* @returns Whether the field has forbidden characters.
|
|
383
|
+
*/
|
|
236
384
|
hasForbiddenCookieCharacter(value) {
|
|
237
385
|
for (const character of value) {
|
|
238
386
|
const code = character.charCodeAt(0);
|
|
@@ -241,6 +389,12 @@ const CookieValues = Object.freeze({
|
|
|
241
389
|
}
|
|
242
390
|
return false;
|
|
243
391
|
},
|
|
392
|
+
/**
|
|
393
|
+
* Validates an exact canonical request Origin.
|
|
394
|
+
*
|
|
395
|
+
* @param origin Candidate Origin.
|
|
396
|
+
* @returns The canonical Origin or an error for malformed input.
|
|
397
|
+
*/
|
|
244
398
|
validOrigin(origin) {
|
|
245
399
|
try {
|
|
246
400
|
const url = new URL(origin);
|
|
@@ -259,35 +413,103 @@ const CookieValues = Object.freeze({
|
|
|
259
413
|
throw new Error("origins must contain only canonical Origins");
|
|
260
414
|
}
|
|
261
415
|
},
|
|
416
|
+
/**
|
|
417
|
+
* Validates a secure host-prefixed cookie name.
|
|
418
|
+
*
|
|
419
|
+
* @param value Candidate name.
|
|
420
|
+
* @param name Option name for errors.
|
|
421
|
+
* @returns The validated host cookie name.
|
|
422
|
+
*/
|
|
262
423
|
validCookieName(value, name) {
|
|
263
424
|
if (!value.startsWith("__Host-") || !/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/.test(value)) {
|
|
264
425
|
throw new Error(`${name} must be a valid __Host- cookie name`);
|
|
265
426
|
}
|
|
266
427
|
return value;
|
|
267
428
|
},
|
|
429
|
+
/**
|
|
430
|
+
* Validates an existing finite request limit.
|
|
431
|
+
*
|
|
432
|
+
* @param value Candidate limit.
|
|
433
|
+
* @param name Option name for errors.
|
|
434
|
+
* @returns The positive safe integer.
|
|
435
|
+
*/
|
|
268
436
|
positiveSafeInteger(value, name) {
|
|
269
437
|
if (!Number.isSafeInteger(value) || value <= 0) {
|
|
270
438
|
throw new Error(`${name} must be a positive safe integer`);
|
|
271
439
|
}
|
|
272
440
|
return value;
|
|
273
441
|
},
|
|
442
|
+
/**
|
|
443
|
+
* Checks one raw Cookie name and value for safe field syntax.
|
|
444
|
+
*
|
|
445
|
+
* @param name Raw cookie name.
|
|
446
|
+
* @param value Raw cookie value.
|
|
447
|
+
* @returns Whether both components contain allowed field characters.
|
|
448
|
+
*/
|
|
274
449
|
validCookiePair(name, value) {
|
|
275
450
|
return /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/.test(name) && /^[\x21-\x7e]+$/.test(value);
|
|
276
451
|
},
|
|
452
|
+
/**
|
|
453
|
+
* Checks the unpadded base64url alphabet for CSRF tokens.
|
|
454
|
+
*
|
|
455
|
+
* @param value Candidate CSRF encoding.
|
|
456
|
+
* @returns Whether the characters and length can represent unpadded base64url.
|
|
457
|
+
*/
|
|
277
458
|
base64url(value) {
|
|
278
459
|
return /^[A-Za-z0-9_-]+$/.test(value) && value.length % 4 !== 1;
|
|
279
460
|
},
|
|
461
|
+
/**
|
|
462
|
+
* Checks the fixed SHA-256 CSRF encoding.
|
|
463
|
+
*
|
|
464
|
+
* @param value Candidate CSRF value.
|
|
465
|
+
* @returns Whether it is a 43-character unpadded base64url digest.
|
|
466
|
+
*/
|
|
280
467
|
validCsrf(value) {
|
|
281
468
|
return value.length === 43 && CookieValues.base64url(value);
|
|
282
469
|
},
|
|
283
|
-
|
|
284
|
-
|
|
470
|
+
/**
|
|
471
|
+
* Checks an opaque credential without assuming a fixed sealed length.
|
|
472
|
+
*
|
|
473
|
+
* @param value Candidate complete credential.
|
|
474
|
+
* @returns Whether it is nonempty and free of control characters.
|
|
475
|
+
*/
|
|
476
|
+
validCredential(value) {
|
|
477
|
+
if (value.length === 0)
|
|
478
|
+
return false;
|
|
479
|
+
for (const character of value) {
|
|
480
|
+
const code = character.charCodeAt(0);
|
|
481
|
+
if (code <= 31 || code === 127)
|
|
482
|
+
return false;
|
|
483
|
+
}
|
|
484
|
+
return true;
|
|
485
|
+
},
|
|
486
|
+
/**
|
|
487
|
+
* Converts the authoritative exact deadline to cookie date precision.
|
|
488
|
+
* @param expiresAt Issued session deadline.
|
|
489
|
+
* @returns Browser cookie expiry derived from that deadline.
|
|
490
|
+
*/
|
|
491
|
+
expiryDate(expiresAt) {
|
|
492
|
+
const deadline = SessionRecords.deadline(expiresAt);
|
|
493
|
+
return new Date(Number(deadline.seconds) * 1_000 + Math.floor(deadline.nanos / 1_000_000));
|
|
285
494
|
},
|
|
495
|
+
/**
|
|
496
|
+
* Compares equal-length CSRF values in constant time.
|
|
497
|
+
*
|
|
498
|
+
* @param expected Derived CSRF digest.
|
|
499
|
+
* @param supplied Browser-supplied CSRF digest.
|
|
500
|
+
* @returns Whether the values match.
|
|
501
|
+
*/
|
|
286
502
|
sameCsrf(expected, supplied) {
|
|
287
503
|
if (expected.length !== supplied.length)
|
|
288
504
|
return false;
|
|
289
505
|
return timingSafeEqual(Buffer.from(expected), Buffer.from(supplied));
|
|
290
506
|
},
|
|
507
|
+
/**
|
|
508
|
+
* Creates a frozen terminal credential rejection.
|
|
509
|
+
*
|
|
510
|
+
* @param reason Specific rejection reason.
|
|
511
|
+
* @returns The rejected extraction outcome.
|
|
512
|
+
*/
|
|
291
513
|
rejection(reason) {
|
|
292
514
|
return Object.freeze({ kind: "rejected", reason });
|
|
293
515
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cookies.js","sourceRoot":"","sources":["../../src/sessions/cookies.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cookies.js","sourceRoot":"","sources":["../../src/sessions/cookies.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { type Timestamp } from "@bufbuild/protobuf/wkt";
|
|
2
|
+
import { type OpaqueSessionRecord } from "@spine-event-engine/proto/auth";
|
|
3
|
+
/**
|
|
4
|
+
* Atomic domain transitions for stable opaque-session references.
|
|
5
|
+
*/
|
|
6
|
+
export interface OpaqueSessionStore {
|
|
7
|
+
/**
|
|
8
|
+
* Creates one session only when its stable reference is absent.
|
|
9
|
+
*
|
|
10
|
+
* `true` confirms this record was inserted, even if cancellation arrives after
|
|
11
|
+
* the physical commit. `false` confirms no mutation: an existing reference
|
|
12
|
+
* or a process-local capacity refusal can prevent insertion. A thrown result
|
|
13
|
+
* is unconfirmed; callers cannot safely infer insertion and
|
|
14
|
+
* must not delete another session after an ID collision. Custom stores must
|
|
15
|
+
* retain this distinction so a cancelled confirmed insert can be removed
|
|
16
|
+
* conditionally against this complete record.
|
|
17
|
+
*
|
|
18
|
+
* @param record Complete new session.
|
|
19
|
+
* @param signal Optional operation cancellation.
|
|
20
|
+
* @returns Whether insertion won.
|
|
21
|
+
*/
|
|
22
|
+
insert(record: OpaqueSessionRecord, signal?: AbortSignal): Promise<boolean>;
|
|
23
|
+
/**
|
|
24
|
+
* Reads one authoritative session by stable reference.
|
|
25
|
+
*
|
|
26
|
+
* @param id Stable reference.
|
|
27
|
+
* @param signal Optional operation cancellation.
|
|
28
|
+
* @returns Detached current record, if present.
|
|
29
|
+
*/
|
|
30
|
+
read(id: string, signal?: AbortSignal): Promise<OpaqueSessionRecord | undefined>;
|
|
31
|
+
/**
|
|
32
|
+
* Replaces exactly the expected generation and deadline.
|
|
33
|
+
*
|
|
34
|
+
* A committed replacement returns `true` even if cancellation arrives just
|
|
35
|
+
* after commit; the caller can conditionally remove that new generation.
|
|
36
|
+
* A `false` result confirms that no replacement occurred.
|
|
37
|
+
*
|
|
38
|
+
* @param expected Complete expected record.
|
|
39
|
+
* @param next Complete replacement with the same stable reference.
|
|
40
|
+
* @param signal Optional operation cancellation.
|
|
41
|
+
* @returns Whether the replacement won.
|
|
42
|
+
*/
|
|
43
|
+
replace(expected: OpaqueSessionRecord, next: OpaqueSessionRecord, signal?: AbortSignal): Promise<boolean>;
|
|
44
|
+
/**
|
|
45
|
+
* Removes the current generation behind a stable reference.
|
|
46
|
+
*
|
|
47
|
+
* @param id Stable reference.
|
|
48
|
+
* @param signal Optional operation cancellation.
|
|
49
|
+
* @returns Whether a record was removed.
|
|
50
|
+
*/
|
|
51
|
+
revoke(id: string, signal?: AbortSignal): Promise<boolean>;
|
|
52
|
+
/**
|
|
53
|
+
* Deletes only one complete expected record.
|
|
54
|
+
*
|
|
55
|
+
* @param expected Record that may be removed.
|
|
56
|
+
* @param signal Optional operation cancellation.
|
|
57
|
+
* @returns Whether the expected record was removed.
|
|
58
|
+
*/
|
|
59
|
+
remove(expected: OpaqueSessionRecord, signal?: AbortSignal): Promise<boolean>;
|
|
60
|
+
/**
|
|
61
|
+
* Removes eligible exact deadlines through the selected cutoff.
|
|
62
|
+
*
|
|
63
|
+
* @param cutoff Trusted current-or-earlier deadline.
|
|
64
|
+
* @param signal Optional maintenance cancellation.
|
|
65
|
+
* @returns Number of records conditionally removed.
|
|
66
|
+
*/
|
|
67
|
+
purgeExpired(cutoff: Timestamp, signal?: AbortSignal): Promise<number>;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Process-local implementation of the same atomic session transitions.
|
|
71
|
+
*/
|
|
72
|
+
export declare class MemoryOpaqueSessionStore implements OpaqueSessionStore {
|
|
73
|
+
#private;
|
|
74
|
+
/**
|
|
75
|
+
* Creates a process-local store with a trusted maintenance clock.
|
|
76
|
+
*
|
|
77
|
+
* @param clock Supplies the latest allowed purge cutoff.
|
|
78
|
+
* @param maxSessions Process-local retained record bound; defaults to 10,000.
|
|
79
|
+
*/
|
|
80
|
+
constructor(clock?: () => Timestamp, maxSessions?: number);
|
|
81
|
+
/**
|
|
82
|
+
* Returns whether the process-local retained record bound is reached.
|
|
83
|
+
*
|
|
84
|
+
* @returns Whether another insert requires explicit expiry maintenance.
|
|
85
|
+
*/
|
|
86
|
+
atCapacity(): boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Creates a complete session only when its stable reference is absent.
|
|
89
|
+
*
|
|
90
|
+
* @param record Complete session to insert.
|
|
91
|
+
* @param signal Optional cancellation.
|
|
92
|
+
* @returns Whether insertion won.
|
|
93
|
+
*/
|
|
94
|
+
insert(record: OpaqueSessionRecord, signal?: AbortSignal): Promise<boolean>;
|
|
95
|
+
/**
|
|
96
|
+
* Reads one authoritative session by stable reference.
|
|
97
|
+
*
|
|
98
|
+
* @param id Stable session reference.
|
|
99
|
+
* @param signal Optional cancellation.
|
|
100
|
+
* @returns Detached current record, if present.
|
|
101
|
+
*/
|
|
102
|
+
read(id: string, signal?: AbortSignal): Promise<OpaqueSessionRecord | undefined>;
|
|
103
|
+
/**
|
|
104
|
+
* Replaces exactly one expected session record.
|
|
105
|
+
*
|
|
106
|
+
* @param expected Complete record that must still be current.
|
|
107
|
+
* @param next Replacement with the same stable reference.
|
|
108
|
+
* @param signal Optional cancellation.
|
|
109
|
+
* @returns Whether replacement won.
|
|
110
|
+
*/
|
|
111
|
+
replace(expected: OpaqueSessionRecord, next: OpaqueSessionRecord, signal?: AbortSignal): Promise<boolean>;
|
|
112
|
+
/**
|
|
113
|
+
* Deletes the current generation behind a stable reference.
|
|
114
|
+
*
|
|
115
|
+
* @param id Stable session reference.
|
|
116
|
+
* @param signal Optional cancellation.
|
|
117
|
+
* @returns Whether a record was removed.
|
|
118
|
+
*/
|
|
119
|
+
revoke(id: string, signal?: AbortSignal): Promise<boolean>;
|
|
120
|
+
/**
|
|
121
|
+
* Deletes only one complete expected record.
|
|
122
|
+
*
|
|
123
|
+
* @param expected Complete record that may be removed.
|
|
124
|
+
* @param signal Optional cancellation.
|
|
125
|
+
* @returns Whether the expected record was removed.
|
|
126
|
+
*/
|
|
127
|
+
remove(expected: OpaqueSessionRecord, signal?: AbortSignal): Promise<boolean>;
|
|
128
|
+
/**
|
|
129
|
+
* Removes exact deadlines at or before the trusted cutoff.
|
|
130
|
+
*
|
|
131
|
+
* @param cutoff Current-or-earlier exact deadline.
|
|
132
|
+
* @param signal Optional maintenance cancellation.
|
|
133
|
+
* @returns Number of conditionally removed records.
|
|
134
|
+
*/
|
|
135
|
+
purgeExpired(cutoff: Timestamp, signal?: AbortSignal): Promise<number>;
|
|
136
|
+
/**
|
|
137
|
+
* Closes and drops the process-local record references.
|
|
138
|
+
*
|
|
139
|
+
* @returns Completion after local records are dropped.
|
|
140
|
+
*/
|
|
141
|
+
close(): Promise<void>;
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=opaque-session-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opaque-session-store.d.ts","sourceRoot":"","sources":["../../src/sessions/opaque-session-store.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,gCAAgC,CAAC;AAIxC;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,MAAM,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE5E;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAAC;IAEjF;;;;;;;;;;;OAWG;IACH,OAAO,CACL,QAAQ,EAAE,mBAAmB,EAC7B,IAAI,EAAE,mBAAmB,EACzB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3D;;;;;;OAMG;IACH,MAAM,CAAC,QAAQ,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9E;;;;;;OAMG;IACH,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACxE;AAED;;GAEG;AACH,qBAAa,wBAAyB,YAAW,kBAAkB;;IASjE;;;;;OAKG;gBACS,KAAK,GAAE,MAAM,SAA4B,EAAE,WAAW,SAAS;IAO3E;;;;OAIG;IACH,UAAU,IAAI,OAAO;IAIrB;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAW3E;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAQhF;;;;;;;OAOG;IACH,OAAO,CACL,QAAQ,EAAE,mBAAmB,EAC7B,IAAI,EAAE,mBAAmB,EACzB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,OAAO,CAAC;IAanB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAO1D;;;;;;OAMG;IACH,MAAM,CAAC,QAAQ,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAU7E;;;;;;OAMG;IACH,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBtE;;;;OAIG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CA0BvB"}
|