@c9up/transit 0.1.1 → 0.1.3

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 (72) hide show
  1. package/dist/TransitProvider.d.ts +3 -0
  2. package/dist/TransitProvider.d.ts.map +1 -1
  3. package/dist/TransitProvider.js +17 -2
  4. package/dist/TransitProvider.js.map +1 -1
  5. package/dist/augmentations.d.ts +24 -0
  6. package/dist/augmentations.d.ts.map +1 -0
  7. package/dist/augmentations.js +18 -0
  8. package/dist/augmentations.js.map +1 -0
  9. package/dist/ber.d.ts +9 -0
  10. package/dist/ber.d.ts.map +1 -1
  11. package/dist/ber.js +16 -1
  12. package/dist/ber.js.map +1 -1
  13. package/dist/drivers/OidcDriver.js +1 -1
  14. package/dist/drivers/OidcDriver.js.map +1 -1
  15. package/dist/drivers/SamlDriver.d.ts.map +1 -1
  16. package/dist/drivers/SamlDriver.js +6 -1
  17. package/dist/drivers/SamlDriver.js.map +1 -1
  18. package/dist/dsig.d.ts.map +1 -1
  19. package/dist/dsig.js +17 -11
  20. package/dist/dsig.js.map +1 -1
  21. package/dist/index.d.ts +1 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +1 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/jwt.d.ts.map +1 -1
  26. package/dist/jwt.js +18 -2
  27. package/dist/jwt.js.map +1 -1
  28. package/dist/ldap.d.ts.map +1 -1
  29. package/dist/ldap.js +13 -1
  30. package/dist/ldap.js.map +1 -1
  31. package/dist/quasar.d.ts +7 -8
  32. package/dist/quasar.d.ts.map +1 -1
  33. package/dist/quasar.js +15 -35
  34. package/dist/quasar.js.map +1 -1
  35. package/dist/services/main.d.ts +10 -1
  36. package/dist/services/main.d.ts.map +1 -1
  37. package/dist/services/main.js +12 -1
  38. package/dist/services/main.js.map +1 -1
  39. package/dist/types.d.ts.map +1 -1
  40. package/dist/types.js +19 -1
  41. package/dist/types.js.map +1 -1
  42. package/dist/vendor/nodeEnv.d.ts +5 -0
  43. package/dist/vendor/nodeEnv.d.ts.map +1 -0
  44. package/dist/{nodeEnv.js → vendor/nodeEnv.js} +13 -8
  45. package/dist/vendor/nodeEnv.js.map +1 -0
  46. package/dist/vendor/quasarConnection.d.ts +35 -0
  47. package/dist/vendor/quasarConnection.d.ts.map +1 -0
  48. package/dist/vendor/quasarConnection.js +62 -0
  49. package/dist/vendor/quasarConnection.js.map +1 -0
  50. package/dist/xml.d.ts +20 -1
  51. package/dist/xml.d.ts.map +1 -1
  52. package/dist/xml.js +43 -5
  53. package/dist/xml.js.map +1 -1
  54. package/package.json +9 -4
  55. package/src/TransitProvider.ts +20 -4
  56. package/src/augmentations.ts +28 -0
  57. package/src/ber.ts +19 -1
  58. package/src/drivers/OidcDriver.ts +2 -2
  59. package/src/drivers/SamlDriver.ts +6 -1
  60. package/src/dsig.ts +26 -15
  61. package/src/index.ts +2 -0
  62. package/src/jwt.ts +21 -3
  63. package/src/ldap.ts +17 -0
  64. package/src/quasar.ts +15 -52
  65. package/src/services/main.ts +13 -1
  66. package/src/types.ts +20 -1
  67. package/src/{nodeEnv.ts → vendor/nodeEnv.ts} +14 -8
  68. package/src/vendor/quasarConnection.ts +129 -0
  69. package/src/xml.ts +74 -5
  70. package/dist/nodeEnv.d.ts +0 -17
  71. package/dist/nodeEnv.d.ts.map +0 -1
  72. package/dist/nodeEnv.js.map +0 -1
package/dist/xml.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"xml.js","sourceRoot":"","sources":["../src/xml.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"xml.js","sourceRoot":"","sources":["../src/xml.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@c9up/transit",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Transit — federated sign-in for the Ream framework: SAML 2.0, LDAP, OpenID Connect, OAuth1, OAuth2",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -37,14 +37,19 @@
37
37
  "@types/node": "^22.19.15",
38
38
  "@vitest/coverage-v8": "^4.1.5",
39
39
  "typescript": "^6.0.2",
40
- "vitest": "^4.1.2"
40
+ "vitest": "^4.1.2",
41
+ "@c9up/ream": "^0.2.0"
41
42
  },
42
43
  "peerDependencies": {
43
- "@c9up/quasar": "^0.1.0"
44
+ "@c9up/quasar": "^0.1.0",
45
+ "@c9up/ream": "^0.2.0"
44
46
  },
45
47
  "peerDependenciesMeta": {
46
48
  "@c9up/quasar": {
47
49
  "optional": true
50
+ },
51
+ "@c9up/ream": {
52
+ "optional": true
48
53
  }
49
54
  },
50
55
  "engines": {
@@ -66,7 +71,7 @@
66
71
  "scripts": {
67
72
  "build": "tsc -p tsconfig.build.json",
68
73
  "test": "vitest run",
69
- "lint": "biome check src/",
74
+ "lint": "biome check src/ tests/",
70
75
  "test:coverage": "vitest run --coverage",
71
76
  "typecheck": "tsc --noEmit"
72
77
  }
@@ -6,8 +6,9 @@
6
6
  * usable from a host that is not Ream.
7
7
  */
8
8
 
9
+ import "./augmentations.js";
9
10
  import type { TransitConfig } from "./config.js";
10
- import { setTransit } from "./services/main.js";
11
+ import { clearTransit, getTransit, setTransit } from "./services/main.js";
11
12
  import { TransitManager } from "./TransitManager.js";
12
13
 
13
14
  interface TransitContainer {
@@ -25,6 +26,9 @@ export interface TransitAppContext {
25
26
  }
26
27
 
27
28
  export default class TransitProvider {
29
+ /** The manager this provider seated, so shutdown only clears its own. */
30
+ #manager: TransitManager | undefined;
31
+
28
32
  constructor(protected app: TransitAppContext) {}
29
33
 
30
34
  register(): void {
@@ -44,8 +48,20 @@ export default class TransitProvider {
44
48
  }
45
49
 
46
50
  async boot(): Promise<void> {
47
- setTransit(
48
- await this.app.container.resolve<TransitManager>(TransitManager),
49
- );
51
+ const manager =
52
+ await this.app.container.resolve<TransitManager>(TransitManager);
53
+ this.#manager = manager;
54
+ setTransit(manager);
55
+ }
56
+
57
+ async shutdown(): Promise<void> {
58
+ // Release the module-level singleton, while it is still ours. A stopped
59
+ // application left a dead TransitManager reachable through
60
+ // `services/main` — and this one holds the SSO providers, so a stale one
61
+ // answers sign-ins for an application that no longer exists.
62
+ if (this.#manager !== undefined && getTransit() === this.#manager) {
63
+ clearTransit();
64
+ }
65
+ this.#manager = undefined;
50
66
  }
51
67
  }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Teach ream's `ContainerBindings` what `container.make(...)` returns for the
3
+ * tokens transit binds.
4
+ *
5
+ * ream declares that interface open on purpose: it registers its own entries
6
+ * and expects each package to contribute the ones it owns. Nothing filled
7
+ * these in, so resolving by the string token answered `unknown` and every call
8
+ * site had to assert a type it could not prove.
9
+ *
10
+ * Loaded from the package barrel, so importing Transit anywhere in the
11
+ * application is enough — nobody writes a `declare module` of their own.
12
+ *
13
+ * Type-only, and ream stays an OPTIONAL peer: nothing here reaches a runtime
14
+ * import, and a `declare module` for a specifier that does not resolve is
15
+ * simply inert.
16
+ */
17
+
18
+ // Referenced so the augmentation below resolves the module it augments.
19
+ import type {} from "@c9up/ream/types";
20
+
21
+ import type { TransitManager } from "./TransitManager.js";
22
+
23
+ declare module "@c9up/ream/types" {
24
+ interface ContainerBindings {
25
+ /** The SSO manager, bound by `TransitProvider`. */
26
+ transit: TransitManager;
27
+ }
28
+ }
package/src/ber.ts CHANGED
@@ -116,6 +116,16 @@ export function decodeString(value: Buffer): string {
116
116
  return value.toString("utf8");
117
117
  }
118
118
 
119
+ /**
120
+ * The largest message this will agree to assemble.
121
+ *
122
+ * A four-byte length header can declare 4 GiB, and the declaration arrives
123
+ * before any of the bytes do — so a five-byte reply could make the client sit
124
+ * on a growing buffer until the process died. A directory response is
125
+ * kilobytes; 8 MiB is generous for a paged search and still bounded.
126
+ */
127
+ export const MAX_MESSAGE_BYTES = 8 * 1024 * 1024;
128
+
119
129
  /**
120
130
  * How many bytes a whole message occupies, or `undefined` while it is still
121
131
  * arriving. LDAP runs over a stream, so a read can stop anywhere.
@@ -133,7 +143,15 @@ export function messageLength(buffer: Buffer): number | undefined {
133
143
  for (let i = 0; i < count; i += 1) {
134
144
  length = length * 256 + (buffer[2 + i] as number);
135
145
  }
136
- return 2 + count + length;
146
+ const total = 2 + count + length;
147
+ // Refused on the DECLARATION, not once the bytes have arrived: the point is
148
+ // never to buffer them.
149
+ if (total > MAX_MESSAGE_BYTES) {
150
+ throw new BerError(
151
+ `a message declares ${total} bytes, over the ${MAX_MESSAGE_BYTES} allowed`,
152
+ );
153
+ }
154
+ return total;
137
155
  }
138
156
 
139
157
  function encodeLength(length: number): Buffer {
@@ -306,7 +306,7 @@ export class OidcDriver implements TransitDriver {
306
306
  !metadata.userinfo_endpoint ||
307
307
  accessToken === ""
308
308
  ) {
309
- return claims as unknown as Record<string, unknown>;
309
+ return { ...claims };
310
310
  }
311
311
  const info = await this.#userinfo(metadata.userinfo_endpoint, accessToken);
312
312
  if (info.sub !== claims.sub) {
@@ -314,7 +314,7 @@ export class OidcDriver implements TransitDriver {
314
314
  "[transit] the userinfo response describes a different subject than the id_token",
315
315
  );
316
316
  }
317
- return { ...(claims as unknown as Record<string, unknown>), ...info };
317
+ return { ...claims, ...info };
318
318
  }
319
319
 
320
320
  async #userinfo(
@@ -14,7 +14,6 @@
14
14
  import { randomUUID } from "node:crypto";
15
15
  import { deflateRawSync } from "node:zlib";
16
16
  import { verifyXmlSignature } from "../dsig.js";
17
- import { inProduction } from "../nodeEnv.js";
18
17
  import {
19
18
  type AssertionReplayStore,
20
19
  MemoryAssertionReplayStore,
@@ -33,6 +32,7 @@ import type {
33
32
  TransitUser,
34
33
  } from "../types.js";
35
34
  import { assertOAuthState } from "../types.js";
35
+ import { inProduction } from "../vendor/nodeEnv.js";
36
36
  import { parseXml } from "../xml.js";
37
37
 
38
38
  const PROTOCOL_NS = "urn:oasis:names:tc:SAML:2.0:protocol";
@@ -188,6 +188,11 @@ export class SamlDriver implements TransitDriver {
188
188
  );
189
189
  }
190
190
 
191
+ // Parsed before anything is verified, because the signature is INSIDE the
192
+ // document — so these are bytes an unauthenticated caller chose, and the
193
+ // parser's limits (length, depth, node and attribute counts) are what
194
+ // stands between a POST and the heap or the stack. The defaults are sized
195
+ // for SAML: a large response is tens of kilobytes.
191
196
  const document = parseXml(decode(code));
192
197
  if (
193
198
  document.namespaceUri !== PROTOCOL_NS ||
package/src/dsig.ts CHANGED
@@ -164,12 +164,15 @@ export function verifyXmlSignature(
164
164
  "base64",
165
165
  );
166
166
 
167
- const key = resolveKey(signature, options.certificates);
168
- const holds = verifySignature(
169
- spec.hash,
170
- signedBytes,
171
- spec.kind === "ec" ? { key, dsaEncoding: "ieee-p1363" } : key,
172
- signatureValue,
167
+ // `some` stops at the first key that holds. Any of the provider's listed
168
+ // certificates is an acceptable signer; none of them is attacker-supplied.
169
+ const holds = resolveKeys(signature, options.certificates).some((key) =>
170
+ verifySignature(
171
+ spec.hash,
172
+ signedBytes,
173
+ spec.kind === "ec" ? { key, dsaEncoding: "ieee-p1363" } : key,
174
+ signatureValue,
175
+ ),
173
176
  );
174
177
  if (!holds) {
175
178
  throw new SignatureError("the signature does not verify");
@@ -318,13 +321,23 @@ function readTransforms(
318
321
  }
319
322
 
320
323
  /**
321
- * The key to verify with — the caller's, from the provider's metadata.
324
+ * The keys to verify with — the caller's, from the provider's metadata.
325
+ *
326
+ * When the document carries a certificate it must be one of them, and that one
327
+ * alone is returned. The check gives a clear error instead of an opaque "does
328
+ * not verify" when a provider has rotated and the metadata has not been
329
+ * updated.
322
330
  *
323
- * When the document carries a certificate it must be one of them. That check
324
- * gives a clear error instead of an opaque "does not verify" when a provider
325
- * has rotated and the metadata has not been updated.
331
+ * Without one, every certificate the metadata lists is a candidate. A provider
332
+ * mid-rotation publishes the outgoing and the incoming certificate together and
333
+ * signs with either; trying only the first would reject every assertion signed
334
+ * with the other, for the whole rotation window, under a message blaming the
335
+ * signature. `certificates` is plural for this reason.
326
336
  */
327
- function resolveKey(signature: XmlElement, certificates: string[]): KeyObject {
337
+ function resolveKeys(
338
+ signature: XmlElement,
339
+ certificates: string[],
340
+ ): KeyObject[] {
328
341
  if (certificates.length === 0) {
329
342
  throw new SignatureError(
330
343
  "no certificate was supplied — the key has to come from the provider's metadata, never from the document itself",
@@ -339,11 +352,9 @@ function resolveKey(signature: XmlElement, certificates: string[]): KeyObject {
339
352
  "the document is signed with a certificate the provider's metadata does not list",
340
353
  );
341
354
  }
342
- return match.publicKey;
355
+ return [match.publicKey];
343
356
  }
344
- // No certificate in the document: the metadata is all there is, which is
345
- // the safer of the two cases.
346
- return (known[0] as X509Certificate).publicKey;
357
+ return known.map((cert) => cert.publicKey);
347
358
  }
348
359
 
349
360
  function embeddedCertificate(
package/src/index.ts CHANGED
@@ -6,6 +6,8 @@
6
6
  * that speak them.
7
7
  */
8
8
 
9
+ import "./augmentations.js";
10
+
9
11
  export { type AppleKey, appleClientSecret, parseAppleUser } from "./apple.js";
10
12
  export { type CanonicalizeOptions, canonicalize } from "./c14n.js";
11
13
  export type {
package/src/jwt.ts CHANGED
@@ -113,7 +113,7 @@ export function verifyJwsSignature(
113
113
  ): boolean {
114
114
  const spec = SUPPORTED[alg];
115
115
  assertKeyMatchesAlg(jwk, alg);
116
- const key = createPublicKey({ key: jwk as never, format: "jwk" });
116
+ const key = createPublicKey({ key: jwk, format: "jwk" });
117
117
 
118
118
  const data = Buffer.from(parts.signingInput, "ascii");
119
119
  if (spec.kind === "ec") {
@@ -173,7 +173,7 @@ export function assertIdTokenClaims(
173
173
  const now = expected.now ?? Math.floor(Date.now() / 1000);
174
174
 
175
175
  const iss = payload.iss;
176
- if (iss !== expected.issuer) {
176
+ if (typeof iss !== "string" || iss !== expected.issuer) {
177
177
  throw new Error(
178
178
  `[transit] id_token issuer mismatch: expected '${expected.issuer}'`,
179
179
  );
@@ -185,6 +185,14 @@ export function assertIdTokenClaims(
185
185
  }
186
186
 
187
187
  const aud = payload.aud;
188
+ if (!isAudience(aud)) {
189
+ // Checked, not assumed: `includes` below would pass on a list holding the
190
+ // right string among arbitrary junk, and the claim would then be handed
191
+ // on described as a string it is not.
192
+ throw new Error(
193
+ "[transit] id_token audience is not a string or a list of strings",
194
+ );
195
+ }
188
196
  const audiences = Array.isArray(aud) ? aud : [aud];
189
197
  if (!audiences.includes(expected.audience)) {
190
198
  throw new Error(
@@ -221,7 +229,17 @@ export function assertIdTokenClaims(
221
229
  throw new Error("[transit] id_token nonce does not match this sign-in");
222
230
  }
223
231
 
224
- return payload as unknown as IdTokenClaims;
232
+ // Built from the locals each check narrowed, not asserted over the bag it
233
+ // came from. The cast that used to stand here promised `iss`, `sub`, `aud`
234
+ // and `exp` were strings and numbers on the strength of the checks above —
235
+ // and `iss` was never actually type-checked, only compared.
236
+ return { ...payload, iss, sub, aud, exp };
237
+ }
238
+
239
+ /** An `aud` claim, in the two shapes the spec allows. */
240
+ function isAudience(value: unknown): value is string | string[] {
241
+ if (typeof value === "string") return true;
242
+ return Array.isArray(value) && value.every((one) => typeof one === "string");
225
243
  }
226
244
 
227
245
  function decodeSegment(segment: string, what: string): Record<string, unknown> {
package/src/ldap.ts CHANGED
@@ -33,6 +33,7 @@ import {
33
33
  encodeInteger,
34
34
  encodeSequence,
35
35
  encodeString,
36
+ MAX_MESSAGE_BYTES,
36
37
  messageLength,
37
38
  OCTET_STRING,
38
39
  } from "./ber.js";
@@ -255,6 +256,22 @@ export class LdapConnection {
255
256
 
256
257
  #receive(chunk: Buffer): void {
257
258
  this.#buffer = Buffer.concat([this.#buffer, chunk]);
259
+ // A stream that never completes a message must not grow the buffer
260
+ // forever. `messageLength` refuses an oversized DECLARATION, but a peer
261
+ // can also just keep sending bytes that never form one — the length
262
+ // header itself is only read once two bytes are in hand.
263
+ if (this.#buffer.length > MAX_MESSAGE_BYTES) {
264
+ this.#buffer = Buffer.alloc(0);
265
+ // The socket goes too: a peer that behaves this way is not one to keep
266
+ // reading from, and closing it is what stops the flood.
267
+ this.#socket?.destroy();
268
+ this.#failAll(
269
+ new LdapError(
270
+ `the directory sent more than ${MAX_MESSAGE_BYTES} bytes without completing a message`,
271
+ ),
272
+ );
273
+ return;
274
+ }
258
275
  for (;;) {
259
276
  const length = messageLength(this.#buffer);
260
277
  if (length === undefined || this.#buffer.length < length) return;
package/src/quasar.ts CHANGED
@@ -1,64 +1,27 @@
1
1
  /**
2
2
  * Resolving a Redis connection by name, from `@c9up/quasar`.
3
3
  *
4
- * Transit does not depend on quasar: it is an optional peer, and this module
5
- * never imports it statically — the specifier is built at runtime so the
6
- * TypeScript build stays free of it too.
4
+ * The loading, the shape check and the messages are the same in every package
5
+ * that offers a Redis-backed option, so they are vendored rather than written
6
+ * again: `src/vendor/quasarConnection.ts`, generated from one source. What is
7
+ * specific stays at the call site — transit has several stores, each issuing
8
+ * its own commands, so unlike its siblings it passes them per call rather than
9
+ * fixing one list here.
7
10
  */
8
11
 
9
- interface ConnectionSource {
10
- connection(name?: string): unknown;
11
- }
12
-
13
- function isConnectionSource(value: unknown): value is ConnectionSource {
14
- return (
15
- typeof value === "object" &&
16
- value !== null &&
17
- typeof Reflect.get(value, "connection") === "function"
18
- );
19
- }
12
+ import { quasarConnection as loadQuasarConnection } from "./vendor/quasarConnection.js";
20
13
 
21
- /**
22
- * The named connection, checked for the commands the caller needs before it is
23
- * handed over — a connection missing one would fail on the first sign-in, far
24
- * from the cause.
25
- */
14
+ /** The named connection, checked for the commands the caller will issue. */
26
15
  export async function quasarConnection<T>(
27
16
  name: string | undefined,
28
17
  required: readonly string[],
29
18
  what: string,
30
19
  ): Promise<T> {
31
- const specifier = "@c9up/quasar/services/main";
32
- let loaded: unknown;
33
- try {
34
- loaded = await import(/* @vite-ignore */ specifier);
35
- } catch (cause) {
36
- throw new Error(
37
- `[transit] naming a Redis connection needs @c9up/quasar, which is not installed.\n pnpm add @c9up/quasar`,
38
- { cause },
39
- );
40
- }
41
-
42
- const manager = isConnectionSource(loaded)
43
- ? loaded
44
- : Reflect.get(Object(loaded), "default");
45
- if (!isConnectionSource(manager)) {
46
- throw new Error(
47
- "[transit] @c9up/quasar/services/main did not expose a connection() manager",
48
- );
49
- }
50
-
51
- const connection = manager.connection(name);
52
- const missing = required.filter(
53
- (command) =>
54
- typeof connection !== "object" ||
55
- connection === null ||
56
- typeof Reflect.get(connection, command) !== "function",
57
- );
58
- if (missing.length > 0) {
59
- throw new Error(
60
- `[transit] the quasar connection${name ? ` '${name}'` : ""} is missing ${missing.join(", ")}, which ${what} issues`,
61
- );
62
- }
63
- return connection as T;
20
+ return loadQuasarConnection<T>({
21
+ pkg: "transit",
22
+ name,
23
+ required,
24
+ what,
25
+ raise: (_reason, message, cause) => new Error(message, { cause }),
26
+ });
64
27
  }
@@ -15,7 +15,19 @@ export function setTransit(manager: TransitManager): void {
15
15
  instance = manager;
16
16
  }
17
17
 
18
- /** @internal Test helper — forget the manager between cases. */
18
+ /** @internal Read the seated manager, if there is one. */
19
+ export function getTransit(): TransitManager | undefined {
20
+ return instance;
21
+ }
22
+
23
+ /**
24
+ * @internal Forget the manager — called by the provider on shutdown, and by
25
+ * tests between cases.
26
+ *
27
+ * The caller checks ownership first (`getTransit() === mine`): two applications
28
+ * share this module in one process, and the one shutting down must not clear a
29
+ * manager the other has since seated.
30
+ */
19
31
  export function clearTransit(): void {
20
32
  instance = undefined;
21
33
  }
package/src/types.ts CHANGED
@@ -2,6 +2,7 @@
2
2
  * The shapes every provider answers with, whatever protocol it speaks.
3
3
  */
4
4
 
5
+ import { timingSafeEqual } from "node:crypto";
5
6
  export interface OAuthConfig {
6
7
  clientId: string;
7
8
  clientSecret: string;
@@ -144,7 +145,25 @@ export function assertOAuthState(
144
145
  "Store the state given to redirectUrl() in the session and pass it here.",
145
146
  );
146
147
  }
147
- if (state !== expectedState) {
148
+ if (state === undefined || !sameSecret(state, expectedState)) {
148
149
  throw new Error("OAuth state mismatch — possible CSRF attack");
149
150
  }
150
151
  }
152
+
153
+ /**
154
+ * Compare two states without leaking where they diverge.
155
+ *
156
+ * `!==` on strings stops at the first differing byte, and the state is the only
157
+ * thing standing between an attacker's authorization code and the victim's
158
+ * session. The leak is small against network noise, but every other secret
159
+ * comparison in the framework is already constant-time and this one is the
160
+ * outlier.
161
+ *
162
+ * The lengths are checked first because `timingSafeEqual` throws when they
163
+ * differ. A state's length is not the secret; its content is.
164
+ */
165
+ function sameSecret(given: string, expected: string): boolean {
166
+ const left = Buffer.from(given, "utf8");
167
+ const right = Buffer.from(expected, "utf8");
168
+ return left.length === right.length && timingSafeEqual(left, right);
169
+ }
@@ -1,14 +1,20 @@
1
+ // Generated from scripts/vendor/nodeEnv.ts — do not edit.
2
+ //
3
+ // This package is published and built from its own repository, so the file
4
+ // has to exist here rather than be imported. `pnpm vendor:sync` rewrites it,
5
+ // and `pnpm vendor:check` fails if this copy has drifted from the original.
6
+
1
7
  /**
2
- * Reading `NODE_ENV`, with the aliases people actually set.
8
+ * `NODE_ENV`, read the way every runtime actually spells it.
3
9
  *
4
- * `NODE_ENV=prod` is ordinary in a Dockerfile or a platform dashboard. Read
5
- * verbatim it answers "not production" — and here that means the in-process
6
- * SAML replay store is accepted on a production deployment, where it bounds
7
- * replay within one replica and not beyond it.
10
+ * `NODE_ENV=prod` is ordinary in a Dockerfile or a platform dashboard, and a
11
+ * bare `=== "production"` answers "not production" for it. What that costs
12
+ * differs per package, so the consequence is stated where the decision is
13
+ * taken, not here.
8
14
  *
9
- * Duplicated rather than imported: transit depends on no other package in this
10
- * workspace, and a security decision that only holds when an optional peer is
11
- * installed is not a decision.
15
+ * The tables mirror the framework's (`@c9up/ream`, src/env/nodeEnv.ts), which
16
+ * is the origin rather than a peer: it formats to different rules and exposes
17
+ * `currentNodeEnv()` instead of `inProduction()`.
12
18
  */
13
19
 
14
20
  const DEV_ENVS = ["dev", "develop", "development"];