@run402/functions 3.12.0 → 3.14.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.
package/dist/lib/jwt.d.ts CHANGED
@@ -1,14 +1,36 @@
1
1
  /**
2
2
  * Minimal HS256/HS512 JWT sign + verify built directly on `node:crypto`.
3
3
  *
4
- * Used internally by `@run402/functions` to verify project JWTs in
5
- * `getUser`. Replaces a runtime dependency on the `jsonwebtoken` package
6
- * (and its transitive tree `jws` / `jwa` / `ecdsa-sig-formatter` /
7
- * `lodash.*` / `ms` / `semver` / `safe-buffer`), so this published SDK
8
- * has zero crypto deps beyond `node:crypto`. The Run402 Cloud gateway keeps
9
- * a companion implementation for its own runtime, but this package cannot
10
- * depend on gateway-private source.
4
+ * Drop-in replacement for the subset of `jsonwebtoken` this codebase used
5
+ * (sign / verify / decode + TokenExpiredError + JwtPayload). Replaces the
6
+ * `jsonwebtoken` package and its transitive tree (`jws`, `jwa`,
7
+ * `ecdsa-sig-formatter`, `lodash.*`, `ms`, `semver`, `safe-buffer`) the
8
+ * cryptographic primitive (HMAC) comes from `node:crypto`; the rest is JWT
9
+ * envelope handling per RFC 7519.
10
+ *
11
+ * VENDORED, KEPT IN SYNC WITH THE GATEWAY'S `packages/gateway/src/lib/jwt.ts`.
12
+ * Same file lineage; this copy had drifted to a pre-keyring version (238 lines
13
+ * vs 344 — no `VerificationKey`, no `verifyWithKey`, no kid-aware selection),
14
+ * which is why no deployed function at any version could verify a keyset. That
15
+ * gap is what blocked project-JWT rotation entirely: pushing a new key broke
16
+ * old tokens, pushing the old one changed nothing, and pushing a JWKS broke
17
+ * every version including the newest.
18
+ *
19
+ * The symmetric HMAC algorithms plus **ES256** are implemented. ES256 exists
20
+ * here so the project keyring can hold a key whose VERIFICATION material is
21
+ * safe to hand out: with an HMAC key, verify and sign are the same capability,
22
+ * so any consumer able to check a signature can forge one. RS/PS remain
23
+ * unsupported; for OIDC JWKS verification the gateway uses `jose` directly
24
+ * (see services/oidc-jwks.ts).
25
+ *
26
+ * The verifier's algorithm allowlist defaults to ["HS256"] and any token
27
+ * claiming a different `alg` is rejected before any cryptographic work —
28
+ * defence against the classic "alg=none" / algorithm-confusion attacks. A key
29
+ * only ever verifies a token whose `alg` matches its own, so an ES256 public
30
+ * key can never be pressed into service as HMAC key material (the specific
31
+ * confusion attack that asymmetric-alongside-symmetric invites).
11
32
  */
33
+ import { type KeyObject } from "node:crypto";
12
34
  export interface JwtPayload {
13
35
  [key: string]: unknown;
14
36
  iat?: number;
@@ -19,16 +41,59 @@ export interface JwtPayload {
19
41
  sub?: string;
20
42
  jti?: string;
21
43
  }
22
- export type SupportedAlgorithm = "HS256" | "HS512";
44
+ export type SupportedAlgorithm = "HS256" | "HS512" | "ES256";
45
+ /** True for algorithms whose verification material is not signing material. */
46
+ export declare function isAsymmetricAlg(alg: string): alg is "ES256";
23
47
  export interface SignOptions {
24
48
  algorithm?: SupportedAlgorithm;
49
+ /** Seconds (number) or duration string (`"1h"`, `"15m"`, `"-1s"`). */
25
50
  expiresIn?: string | number;
51
+ /** Skip auto-populating `iat`. */
26
52
  noTimestamp?: boolean;
53
+ /**
54
+ * Emit a `kid` header. Omitted entirely when unset, so legacy issuance keeps
55
+ * producing byte-identical bare `{alg,typ}` headers.
56
+ */
57
+ kid?: string;
27
58
  }
59
+ /**
60
+ * One symmetric verification key. `key` is the RAW HMAC key material: a legacy
61
+ * passphrase contributes `Buffer.from(passphrase, "utf8")`, a JWKS `oct` entry
62
+ * contributes `Buffer.from(k, "base64url")` — which are byte-identical for the
63
+ * same secret, so lifting a passphrase into a one-key JWKS is a no-op.
64
+ *
65
+ * `legacy: true` marks the single key eligible to verify tokens that carry NO
66
+ * `kid` header (what `deriveProjectKeys` emits today).
67
+ */
68
+ export interface VerificationKey {
69
+ kid?: string;
70
+ /**
71
+ * HMAC key material for `HS*`.
72
+ *
73
+ * For `ES256` this is the SPKI DER of the PUBLIC key — never private
74
+ * material. It exists so the keyring's fingerprint and duplicate-material
75
+ * checks work identically across key types, and so nothing that digests or
76
+ * logs a key can reach a secret by doing so.
77
+ */
78
+ key: Buffer;
79
+ alg: SupportedAlgorithm;
80
+ legacy?: boolean;
81
+ /** `ES256` verification material. Absent for `HS*`. */
82
+ publicKey?: KeyObject;
83
+ /**
84
+ * `ES256` signing material. Present ONLY on an entry configured with a
85
+ * private component; its absence is what makes a key verify-only, which the
86
+ * keyring relies on to refuse designating it as the signing key.
87
+ */
88
+ privateKey?: KeyObject;
89
+ }
90
+ /** A bare passphrase (legacy) or an ordered verification keyset. */
91
+ export type SecretOrKeys = string | ReadonlyArray<VerificationKey>;
28
92
  export interface VerifyOptions {
29
93
  algorithms?: ReadonlyArray<SupportedAlgorithm>;
30
94
  issuer?: string;
31
95
  audience?: string | string[];
96
+ /** Seconds of slack applied to both `exp` and `nbf` checks. */
32
97
  clockTolerance?: number;
33
98
  }
34
99
  export declare class JsonWebTokenError extends Error {
@@ -42,12 +107,42 @@ export declare class NotBeforeError extends JsonWebTokenError {
42
107
  date: Date;
43
108
  constructor(message: string, date: Date);
44
109
  }
45
- export declare function sign(payload: object, secret: string, options?: SignOptions): string;
46
- export declare function verify<T = JwtPayload>(token: string, secret: string, options?: VerifyOptions): T;
110
+ /**
111
+ * Raised when a token names a `kid` no configured key provides. Declared here
112
+ * (after `JsonWebTokenError`) because `extends` is evaluated in source order.
113
+ */
114
+ export declare class UnknownKeyIdError extends JsonWebTokenError {
115
+ kid: string;
116
+ constructor(kid: string);
117
+ }
118
+ export declare function sign(payload: object, secret: string | Buffer | KeyObject, options?: SignOptions): string;
119
+ /**
120
+ * Verify and report WHICH key matched.
121
+ *
122
+ * Key selection (mirrors the shipped gateway policy, and is deliberately
123
+ * stricter than PostgREST v12.2.3, which ignores `kid` entirely):
124
+ * - `kid` present and known -> verify against THAT key alone; a signature
125
+ * mismatch is an error, never a fallback.
126
+ * - `kid` present but unknown -> reject immediately, no HMAC work.
127
+ * - `kid` absent -> try only keys marked `legacy`.
128
+ *
129
+ * A bare-string `secret` keeps the legacy single-key behavior exactly.
130
+ */
131
+ export declare function verifyWithKey<T = JwtPayload>(token: string, secretOrKeys: SecretOrKeys, options?: VerifyOptions): {
132
+ payload: T;
133
+ kid?: string;
134
+ };
135
+ /**
136
+ * Verify a token, returning only the payload. Accepts a legacy passphrase or a
137
+ * keyset; use `verifyWithKey` when the caller needs to know which key matched
138
+ * (legacy-usage telemetry during a rotation).
139
+ */
140
+ export declare function verify<T = JwtPayload>(token: string, secretOrKeys: SecretOrKeys, options?: VerifyOptions): T;
47
141
  export declare function decode<T = JwtPayload>(token: string): T | null;
48
142
  declare const jwt: {
49
143
  sign: typeof sign;
50
144
  verify: typeof verify;
145
+ verifyWithKey: typeof verifyWithKey;
51
146
  decode: typeof decode;
52
147
  };
53
148
  export default jwt;
@@ -1 +1 @@
1
- {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../src/lib/jwt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,OAAO,CAAC;AAEnD,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,iBAAkB,SAAQ,iBAAiB;IACtD,SAAS,EAAE,IAAI,CAAC;gBACJ,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI;CAK7C;AAED,qBAAa,cAAe,SAAQ,iBAAiB;IACnD,IAAI,EAAE,IAAI,CAAC;gBACC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI;CAKxC;AAqCD,wBAAgB,IAAI,CAClB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,WAAW,GACpB,MAAM,CAmCR;AAED,wBAAgB,MAAM,CAAC,CAAC,GAAG,UAAU,EACnC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,aAAa,GACtB,CAAC,CA4EH;AAED,wBAAgB,MAAM,CAAC,CAAC,GAAG,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAW9D;AAED,QAAA,MAAM,GAAG;;;;CAA2B,CAAC;AACrC,eAAe,GAAG,CAAC"}
1
+ {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../src/lib/jwt.ts"],"names":[],"mappings":"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"}
package/dist/lib/jwt.js CHANGED
@@ -1,15 +1,40 @@
1
1
  /**
2
2
  * Minimal HS256/HS512 JWT sign + verify built directly on `node:crypto`.
3
3
  *
4
- * Used internally by `@run402/functions` to verify project JWTs in
5
- * `getUser`. Replaces a runtime dependency on the `jsonwebtoken` package
6
- * (and its transitive tree `jws` / `jwa` / `ecdsa-sig-formatter` /
7
- * `lodash.*` / `ms` / `semver` / `safe-buffer`), so this published SDK
8
- * has zero crypto deps beyond `node:crypto`. The Run402 Cloud gateway keeps
9
- * a companion implementation for its own runtime, but this package cannot
10
- * depend on gateway-private source.
4
+ * Drop-in replacement for the subset of `jsonwebtoken` this codebase used
5
+ * (sign / verify / decode + TokenExpiredError + JwtPayload). Replaces the
6
+ * `jsonwebtoken` package and its transitive tree (`jws`, `jwa`,
7
+ * `ecdsa-sig-formatter`, `lodash.*`, `ms`, `semver`, `safe-buffer`) the
8
+ * cryptographic primitive (HMAC) comes from `node:crypto`; the rest is JWT
9
+ * envelope handling per RFC 7519.
10
+ *
11
+ * VENDORED, KEPT IN SYNC WITH THE GATEWAY'S `packages/gateway/src/lib/jwt.ts`.
12
+ * Same file lineage; this copy had drifted to a pre-keyring version (238 lines
13
+ * vs 344 — no `VerificationKey`, no `verifyWithKey`, no kid-aware selection),
14
+ * which is why no deployed function at any version could verify a keyset. That
15
+ * gap is what blocked project-JWT rotation entirely: pushing a new key broke
16
+ * old tokens, pushing the old one changed nothing, and pushing a JWKS broke
17
+ * every version including the newest.
18
+ *
19
+ * The symmetric HMAC algorithms plus **ES256** are implemented. ES256 exists
20
+ * here so the project keyring can hold a key whose VERIFICATION material is
21
+ * safe to hand out: with an HMAC key, verify and sign are the same capability,
22
+ * so any consumer able to check a signature can forge one. RS/PS remain
23
+ * unsupported; for OIDC JWKS verification the gateway uses `jose` directly
24
+ * (see services/oidc-jwks.ts).
25
+ *
26
+ * The verifier's algorithm allowlist defaults to ["HS256"] and any token
27
+ * claiming a different `alg` is rejected before any cryptographic work —
28
+ * defence against the classic "alg=none" / algorithm-confusion attacks. A key
29
+ * only ever verifies a token whose `alg` matches its own, so an ES256 public
30
+ * key can never be pressed into service as HMAC key material (the specific
31
+ * confusion attack that asymmetric-alongside-symmetric invites).
11
32
  */
12
- import { createHmac, timingSafeEqual } from "node:crypto";
33
+ import { createHmac, createSign, createVerify, timingSafeEqual } from "node:crypto";
34
+ /** True for algorithms whose verification material is not signing material. */
35
+ export function isAsymmetricAlg(alg) {
36
+ return alg === "ES256";
37
+ }
13
38
  export class JsonWebTokenError extends Error {
14
39
  constructor(message) {
15
40
  super(message);
@@ -32,6 +57,18 @@ export class NotBeforeError extends JsonWebTokenError {
32
57
  this.date = date;
33
58
  }
34
59
  }
60
+ /**
61
+ * Raised when a token names a `kid` no configured key provides. Declared here
62
+ * (after `JsonWebTokenError`) because `extends` is evaluated in source order.
63
+ */
64
+ export class UnknownKeyIdError extends JsonWebTokenError {
65
+ kid;
66
+ constructor(kid) {
67
+ super("unknown key id");
68
+ this.name = "UnknownKeyIdError";
69
+ this.kid = kid;
70
+ }
71
+ }
35
72
  function b64urlEncode(input) {
36
73
  const buf = typeof input === "string" ? Buffer.from(input, "utf8") : input;
37
74
  return buf.toString("base64").replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
@@ -68,14 +105,38 @@ function parseDurationSeconds(input) {
68
105
  return Math.floor(n);
69
106
  }
70
107
  function hmacForAlg(alg) {
71
- return alg === "HS256" ? "sha256" : "sha512";
108
+ // Explicit rather than `=== "HS256" ? sha256 : sha512`: with ES256 in the
109
+ // union that fallback would silently HMAC an asymmetric key under sha512.
110
+ // Both call sites guard already; this makes the guard non-load-bearing.
111
+ if (alg === "HS256")
112
+ return "sha256";
113
+ if (alg === "HS512")
114
+ return "sha512";
115
+ throw new JsonWebTokenError(`${alg} is not an HMAC algorithm`);
72
116
  }
73
- export function sign(payload, secret, options) {
117
+ export function sign(payload,
118
+ // Accepts RAW key bytes as well as a passphrase. Callers that resolve a key
119
+ // through the keyring pass a Buffer, so they sign with the DECODED key rather
120
+ // than whatever string `JWT_SECRET` happens to hold — under a JWKS that string
121
+ // is the JSON document, and signing with it produces tokens nothing verifies.
122
+ // For ES256 the caller passes the private `KeyObject`; a Buffer is rejected,
123
+ // since raw bytes cannot be an EC private key here.
124
+ secret, options) {
74
125
  const alg = options?.algorithm ?? "HS256";
75
- if (alg !== "HS256" && alg !== "HS512") {
126
+ if (alg !== "HS256" && alg !== "HS512" && alg !== "ES256") {
76
127
  throw new JsonWebTokenError(`Unsupported algorithm: ${alg}`);
77
128
  }
78
- if (typeof secret !== "string" || secret.length === 0) {
129
+ const isKeyObject = typeof secret === "object" && secret !== null && !Buffer.isBuffer(secret);
130
+ if (alg === "ES256") {
131
+ if (!isKeyObject) {
132
+ throw new JsonWebTokenError("ES256 requires a private KeyObject");
133
+ }
134
+ }
135
+ else if (isKeyObject) {
136
+ throw new JsonWebTokenError(`${alg} requires raw key material, not a KeyObject`);
137
+ }
138
+ const isBuffer = Buffer.isBuffer(secret);
139
+ if (!isKeyObject && ((!isBuffer && typeof secret !== "string") || secret.length === 0)) {
79
140
  throw new JsonWebTokenError("secretOrPrivateKey must be provided");
80
141
  }
81
142
  if (payload === null || typeof payload !== "object" || Array.isArray(payload)) {
@@ -94,21 +155,48 @@ export function sign(payload, secret, options) {
94
155
  const iatRef = typeof claims.iat === "number" ? claims.iat : Math.floor(Date.now() / 1000);
95
156
  claims.exp = iatRef + offset;
96
157
  }
97
- const header = { alg, typ: "JWT" };
158
+ // `kid` is omitted entirely when unset so legacy issuance keeps producing
159
+ // byte-identical bare `{alg,typ}` headers.
160
+ const header = options?.kid === undefined
161
+ ? { alg, typ: "JWT" }
162
+ : { alg, typ: "JWT", kid: options.kid };
98
163
  const headerB64 = b64urlEncode(JSON.stringify(header));
99
164
  const payloadB64 = b64urlEncode(JSON.stringify(claims));
100
- const sig = createHmac(hmacForAlg(alg), secret)
101
- .update(`${headerB64}.${payloadB64}`)
102
- .digest();
103
- return `${headerB64}.${payloadB64}.${b64urlEncode(sig)}`;
165
+ const signingInput = `${headerB64}.${payloadB64}`;
166
+ const sig = alg === "ES256"
167
+ // JWS requires the raw R||S pair, NOT the DER encoding node emits by
168
+ // default. Getting this wrong produces a signature every verifier rejects.
169
+ ? createSign("sha256")
170
+ .update(signingInput)
171
+ .sign({ key: secret, dsaEncoding: "ieee-p1363" })
172
+ : createHmac(hmacForAlg(alg), secret)
173
+ .update(signingInput)
174
+ .digest();
175
+ return `${signingInput}.${b64urlEncode(sig)}`;
104
176
  }
105
- export function verify(token, secret, options) {
177
+ /**
178
+ * Verify and report WHICH key matched.
179
+ *
180
+ * Key selection (mirrors the shipped gateway policy, and is deliberately
181
+ * stricter than PostgREST v12.2.3, which ignores `kid` entirely):
182
+ * - `kid` present and known -> verify against THAT key alone; a signature
183
+ * mismatch is an error, never a fallback.
184
+ * - `kid` present but unknown -> reject immediately, no HMAC work.
185
+ * - `kid` absent -> try only keys marked `legacy`.
186
+ *
187
+ * A bare-string `secret` keeps the legacy single-key behavior exactly.
188
+ */
189
+ export function verifyWithKey(token, secretOrKeys, options) {
106
190
  if (typeof token !== "string" || token.length === 0) {
107
191
  throw new JsonWebTokenError("jwt must be provided");
108
192
  }
109
- if (typeof secret !== "string" || secret.length === 0) {
193
+ const keys = typeof secretOrKeys === "string"
194
+ ? (secretOrKeys.length === 0
195
+ ? (() => { throw new JsonWebTokenError("secret must be provided"); })()
196
+ : [{ key: Buffer.from(secretOrKeys, "utf8"), alg: "HS256", legacy: true }])
197
+ : secretOrKeys;
198
+ if (keys.length === 0)
110
199
  throw new JsonWebTokenError("secret must be provided");
111
- }
112
200
  const parts = token.split(".");
113
201
  if (parts.length !== 3)
114
202
  throw new JsonWebTokenError("jwt malformed");
@@ -124,12 +212,25 @@ export function verify(token, secret, options) {
124
212
  if (typeof header.alg !== "string" || !allowed.includes(header.alg)) {
125
213
  throw new JsonWebTokenError("invalid algorithm");
126
214
  }
127
- if (header.alg !== "HS256" && header.alg !== "HS512") {
215
+ if (header.alg !== "HS256" && header.alg !== "HS512" && header.alg !== "ES256") {
128
216
  throw new JsonWebTokenError("invalid algorithm");
129
217
  }
130
- const expected = createHmac(hmacForAlg(header.alg), secret)
131
- .update(`${headerB64}.${payloadB64}`)
132
- .digest();
218
+ const alg = header.alg;
219
+ // Select the candidate set BEFORE doing any HMAC work.
220
+ let candidates;
221
+ if (typeof header.kid === "string") {
222
+ const named = keys.filter((k) => k.kid === header.kid);
223
+ if (named.length === 0)
224
+ throw new UnknownKeyIdError(header.kid);
225
+ candidates = named;
226
+ }
227
+ else {
228
+ // A bare string secret is inherently the legacy key; an explicit keyset
229
+ // must mark exactly which key may verify kid-less tokens.
230
+ candidates = keys.filter((k) => k.legacy === true);
231
+ if (candidates.length === 0)
232
+ throw new JsonWebTokenError("invalid key id");
233
+ }
133
234
  let got;
134
235
  try {
135
236
  got = b64urlDecodeToBuffer(sigB64);
@@ -137,9 +238,35 @@ export function verify(token, secret, options) {
137
238
  catch {
138
239
  throw new JsonWebTokenError("invalid signature");
139
240
  }
140
- if (got.length !== expected.length || !timingSafeEqual(got, expected)) {
141
- throw new JsonWebTokenError("invalid signature");
241
+ let matched;
242
+ for (const candidate of candidates) {
243
+ // A key only verifies its OWN algorithm. This is what stops an ES256
244
+ // public key from being used as HMAC material (algorithm confusion) now
245
+ // that both kinds can sit in one keyset.
246
+ if (candidate.alg !== alg)
247
+ continue;
248
+ if (alg === "ES256") {
249
+ if (!candidate.publicKey)
250
+ continue;
251
+ const ok = createVerify("sha256")
252
+ .update(`${headerB64}.${payloadB64}`)
253
+ .verify({ key: candidate.publicKey, dsaEncoding: "ieee-p1363" }, got);
254
+ if (ok) {
255
+ matched = candidate;
256
+ break;
257
+ }
258
+ continue;
259
+ }
260
+ const expected = createHmac(hmacForAlg(alg), candidate.key)
261
+ .update(`${headerB64}.${payloadB64}`)
262
+ .digest();
263
+ if (got.length === expected.length && timingSafeEqual(got, expected)) {
264
+ matched = candidate;
265
+ break;
266
+ }
142
267
  }
268
+ if (!matched)
269
+ throw new JsonWebTokenError("invalid signature");
143
270
  let payload;
144
271
  try {
145
272
  payload = JSON.parse(b64urlDecodeToBuffer(payloadB64).toString("utf8"));
@@ -172,7 +299,15 @@ export function verify(token, secret, options) {
172
299
  throw new JsonWebTokenError("jwt audience invalid");
173
300
  }
174
301
  }
175
- return payload;
302
+ return { payload: payload, kid: matched.kid };
303
+ }
304
+ /**
305
+ * Verify a token, returning only the payload. Accepts a legacy passphrase or a
306
+ * keyset; use `verifyWithKey` when the caller needs to know which key matched
307
+ * (legacy-usage telemetry during a rotation).
308
+ */
309
+ export function verify(token, secretOrKeys, options) {
310
+ return verifyWithKey(token, secretOrKeys, options).payload;
176
311
  }
177
312
  export function decode(token) {
178
313
  if (typeof token !== "string")
@@ -190,6 +325,6 @@ export function decode(token) {
190
325
  return null;
191
326
  }
192
327
  }
193
- const jwt = { sign, verify, decode };
328
+ const jwt = { sign, verify, verifyWithKey, decode };
194
329
  export default jwt;
195
330
  //# sourceMappingURL=jwt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../src/lib/jwt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../src/lib/jwt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * The project-JWT verification keyset, fetched from the gateway at cold start.
3
+ *
4
+ * WHY THIS EXISTS. Until now the runtime read `RUN402_JWT_SECRET` — the
5
+ * PLATFORM signing key — straight out of the Lambda environment. That key is
6
+ * symmetric, so verification material IS signing material: every one of the
7
+ * fleet's tenant Lambdas held the ability to forge `anon_key`/`service_key`
8
+ * for EVERY project on the platform, and those carry no expiry. It also made
9
+ * rotation impossible, because the key arrived at deploy time and could only
10
+ * change by redeploying someone else's code.
11
+ *
12
+ * Fetching a PUBLIC keyset instead fixes both at once: there is nothing here
13
+ * that can sign, and a rotated key reaches the fleet at the next cold start
14
+ * with no redeployment at all.
15
+ *
16
+ * Deliberately mirrors `lib/actor-context-verify.ts`, which established this
17
+ * pattern for the actor-context key — same lazy single-flight fetch, same
18
+ * service-key auth, same "failures are non-fatal, the next request retries".
19
+ *
20
+ * TRANSITION FALLBACK. While `RUN402_JWT_SECRET` is still injected, it is kept
21
+ * as a SECOND verification key, tried after the fetched keyset. This is
22
+ * temporary scaffolding with a defined removal point, and it is load-bearing
23
+ * for exactly one window: after the fleet carries this runtime but BEFORE the
24
+ * gateway's signing key becomes asymmetric, the gateway is still minting HS256
25
+ * tokens that the (asymmetric-only) fetched keyset cannot verify. Removing the
26
+ * fallback before then would break `getUser()` on every project at once.
27
+ * See `openspec/changes/functions-runtime-key-decoupling/design.md`.
28
+ */
29
+ import type { VerificationKey } from "./jwt.js";
30
+ /**
31
+ * The keys `getUser()` should verify against, most-trusted first.
32
+ *
33
+ * Returns the fetched public keyset followed by the env-injected legacy key
34
+ * when one is present. Order matters only for which key is TRIED first — a
35
+ * token verifies against exactly one key either way, since `verifyWithKey`
36
+ * selects on `kid` and refuses to fall back on a signature mismatch.
37
+ */
38
+ export declare function projectJwtVerificationKeys(): VerificationKey[];
39
+ /**
40
+ * Ensure the keyset is loaded before a synchronous verify.
41
+ *
42
+ * Single-flight: concurrent invocations in the same execution environment
43
+ * share one fetch. Cached for the life of the environment, so a warm Lambda
44
+ * pays nothing. Never throws — a failed fetch leaves whatever keys are
45
+ * available (possibly just the env fallback) and the next request retries.
46
+ */
47
+ export declare function ensureProjectJwtKeysLoaded(): Promise<void>;
48
+ /** True when verification has no key at all — the caller must fail CLOSED
49
+ * rather than treat the request as anonymous-but-fine. */
50
+ export declare function projectJwtKeysUnavailable(): boolean;
51
+ /** Test injection. NEVER call from production code. */
52
+ export declare function _setProjectJwtKeysForTest(keys: VerificationKey[] | null): void;
53
+ /**
54
+ * The header carrying the gateway-minted actor token.
55
+ *
56
+ * The runtime FORWARDS this rather than minting its own. Kept here beside the
57
+ * keyset because the two are halves of one contract: the gateway signs both
58
+ * the tokens this runtime verifies and the one it forwards, and the runtime
59
+ * holds nothing that can produce either.
60
+ */
61
+ export declare const DATA_PLANE_ACTOR_TOKEN_HEADER = "x-run402-actor-token";
62
+ /** Read a header from either shape, case-insensitively. */
63
+ export declare function readHeader(headers: unknown, name: string): string | undefined;
64
+ /**
65
+ * The gateway-minted actor bearer for this request, if present.
66
+ *
67
+ * Returns the `Authorization`-ready value. Absent for anonymous requests, and
68
+ * absent on older gateways — callers must fall through to their previous
69
+ * behaviour rather than failing, so a new runtime on an old gateway degrades
70
+ * instead of breaking.
71
+ */
72
+ export declare function forwardedActorAuthorization(headers: unknown): string | undefined;
73
+ //# sourceMappingURL=project-jwt-keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-jwt-keys.d.ts","sourceRoot":"","sources":["../../src/lib/project-jwt-keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAchD;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,IAAI,eAAe,EAAE,CAK9D;AAeD;;;;;;;GAOG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAehE;AAED;2DAC2D;AAC3D,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAsCD,uDAAuD;AACvD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,IAAI,GAAG,IAAI,CAG9E;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,6BAA6B,yBAAyB,CAAC;AAQpE,2DAA2D;AAC3D,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAS7E;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAGhF"}