@superdurable/dex 1.15.0 → 1.16.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.
@@ -6,6 +6,7 @@
6
6
  //
7
7
  // SPDX-License-Identifier: LicenseRef-Sustainable-Use-1.0
8
8
  import { readFileSync, statSync } from "node:fs";
9
+ import { inspect } from "node:util";
9
10
  import { InterceptingCall, Metadata, status, } from "@grpc/grpc-js";
10
11
  /**
11
12
  * Reads a bearer token from a rotating file.
@@ -73,6 +74,270 @@ export class FileCredential {
73
74
  }
74
75
  }
75
76
  }
77
+ const rejectedToken = Symbol("dex.rejectedToken");
78
+ const apiKeyCredentialStates = new WeakMap();
79
+ /**
80
+ * Exchanges an API key for short-lived Dex bearer tokens.
81
+ *
82
+ * Use this instead of FileCredential when the application holds an API key rather than a
83
+ * rotating token file. The first call exchanges the key. Calls after 80% of the token's
84
+ * lifetime start one shared background refresh and continue using the valid token.
85
+ * Failed refreshes are retried no more often than every five seconds while that token
86
+ * remains valid. Expired-token callers await the same exchange, bounded by the exchange
87
+ * timeout. A rejected token is discarded. Unary calls retry once, and pull streams
88
+ * reconnect immediately once before using the Worker's backoff.
89
+ *
90
+ * The token URL must use HTTPS, except loopback HTTP is accepted for local endpoints.
91
+ * Token endpoint redirects are never followed.
92
+ * Credential inspection contains no secrets. Exchange errors redact the API key,
93
+ * cached and two most recently issued access tokens, the failed response's access token,
94
+ * and JWT-shaped substrings before truncating each endpoint error field to 200 characters.
95
+ * A JWT-shaped substring has three or more base64url segments of at least 10 characters each.
96
+ * The rule also applies to the token URL and can redact other text of that shape, such as a
97
+ * long dotted host name. Raw transport causes are omitted.
98
+ * Concurrent calls are safe. The credential owns no persistent HTTP client or timer;
99
+ * an in-flight exchange ends within the configured timeout. An injected fetch is owned
100
+ * by the application. The application owns this credential when sharing it among
101
+ * Clients and Workers; closing either does not close the credential.
102
+ *
103
+ * @example
104
+ * ```ts
105
+ * const credential = new ApiKeyCredential({
106
+ * tokenUrl: "https://auth.example.com/token",
107
+ * serverId: "dex-server-id",
108
+ * apiKey: process.env.DEX_API_KEY!,
109
+ * });
110
+ * const client = new Client(registry, cache, { credential });
111
+ * const worker = new Worker(registry, cache, { credential, pull: {} });
112
+ * try { await worker.start(); await client.searchFlows("", 10); }
113
+ * finally { await client.close(); await worker.close(); }
114
+ * ```
115
+ */
116
+ export class ApiKeyCredential {
117
+ /**
118
+ * Validates the exchange settings without contacting the token endpoint.
119
+ * @param options - Token URL, server ID, API key, optional timeout and fetch implementation.
120
+ * @throws TypeError when a required string, token URL, timeout, or fetch is invalid.
121
+ */
122
+ constructor(options) {
123
+ if (options === null || typeof options !== "object")
124
+ throw new TypeError("dex: API key credential options are required");
125
+ for (const [name, value] of Object.entries({ tokenUrl: options.tokenUrl, serverId: options.serverId, apiKey: options.apiKey })) {
126
+ if (typeof value !== "string" || value.trim() === "")
127
+ throw new TypeError(`dex: ${name} must be a non-empty string`);
128
+ }
129
+ let parsedUrl;
130
+ try {
131
+ parsedUrl = new URL(options.tokenUrl);
132
+ }
133
+ catch {
134
+ throw new TypeError("dex: tokenUrl must be an absolute HTTP or HTTPS URL");
135
+ }
136
+ const hostname = parsedUrl.hostname.toLowerCase();
137
+ const isLoopback = hostname === "localhost" || hostname === "[::1]"
138
+ || /^127\.(?:\d{1,3}\.){2}\d{1,3}$/.test(hostname);
139
+ if (parsedUrl.protocol !== "https:" && !(parsedUrl.protocol === "http:" && isLoopback)) {
140
+ throw new TypeError("dex: tokenUrl must use HTTPS except for loopback HTTP");
141
+ }
142
+ if (parsedUrl.username !== "" || parsedUrl.password !== "") {
143
+ throw new TypeError("dex: tokenUrl must not contain user information");
144
+ }
145
+ const exchangeTimeoutMs = options.exchangeTimeoutMs ?? 10_000;
146
+ if (!Number.isFinite(exchangeTimeoutMs) || exchangeTimeoutMs <= 0 || exchangeTimeoutMs > 2_147_483_647) {
147
+ throw new TypeError("dex: exchangeTimeoutMs must be positive and at most 2,147,483,647");
148
+ }
149
+ if (options.fetch !== undefined && typeof options.fetch !== "function") {
150
+ throw new TypeError("dex: fetch must be a function");
151
+ }
152
+ apiKeyCredentialStates.set(this, {
153
+ tokenUrl: options.tokenUrl,
154
+ serverId: options.serverId,
155
+ apiKey: options.apiKey,
156
+ exchangeTimeoutMs,
157
+ fetch: options.fetch ?? globalThis.fetch,
158
+ cachedToken: undefined,
159
+ lastAccessToken: undefined,
160
+ previousAccessToken: undefined,
161
+ expiresAtMs: 0,
162
+ refreshAtMs: 0,
163
+ nextRefreshAtMs: 0,
164
+ pendingExchange: undefined,
165
+ });
166
+ }
167
+ /**
168
+ * Returns a valid access token, exchanging the API key when needed.
169
+ * Concurrent callers share one exchange. A valid token is returned immediately during
170
+ * refresh. When no valid token exists, this waits up to the exchange timeout.
171
+ * @returns The current bearer access token.
172
+ * @throws Error when the token endpoint rejects the request, returns invalid data, or cannot be reached in time.
173
+ */
174
+ token() {
175
+ const now = performance.now();
176
+ if (this.apiKeyState.cachedToken !== undefined && now < this.apiKeyState.expiresAtMs) {
177
+ if (now >= this.apiKeyState.refreshAtMs && now >= this.apiKeyState.nextRefreshAtMs && this.apiKeyState.pendingExchange === undefined) {
178
+ void this.startExchange().catch(() => { });
179
+ }
180
+ return Promise.resolve(this.apiKeyState.cachedToken);
181
+ }
182
+ return this.apiKeyState.pendingExchange ?? this.startExchange();
183
+ }
184
+ /**
185
+ * Hides API key and access token values from Node inspection.
186
+ * @returns A redacted credential description.
187
+ */
188
+ [inspect.custom]() {
189
+ return "ApiKeyCredential {}";
190
+ }
191
+ /**
192
+ * Hides API key and access token values from JSON serialization.
193
+ * @returns An empty object without credential secrets.
194
+ */
195
+ toJSON() {
196
+ return {};
197
+ }
198
+ [rejectedToken](token) {
199
+ if (this.apiKeyState.cachedToken === token) {
200
+ this.apiKeyState.cachedToken = undefined;
201
+ this.apiKeyState.nextRefreshAtMs = 0;
202
+ }
203
+ }
204
+ startExchange() {
205
+ const exchange = this.exchange().then(({ token, startedAtMs, lifetimeMs }) => {
206
+ this.apiKeyState.cachedToken = token;
207
+ this.apiKeyState.previousAccessToken = this.apiKeyState.lastAccessToken;
208
+ this.apiKeyState.lastAccessToken = token;
209
+ this.apiKeyState.expiresAtMs = startedAtMs + lifetimeMs;
210
+ this.apiKeyState.refreshAtMs = startedAtMs + lifetimeMs * 0.8;
211
+ this.apiKeyState.nextRefreshAtMs = 0;
212
+ return token;
213
+ }, (failure) => {
214
+ if (this.apiKeyState.cachedToken !== undefined && performance.now() < this.apiKeyState.expiresAtMs) {
215
+ this.apiKeyState.nextRefreshAtMs = performance.now() + 5_000;
216
+ }
217
+ throw failure;
218
+ });
219
+ this.apiKeyState.pendingExchange = exchange;
220
+ void exchange.finally(() => {
221
+ if (this.apiKeyState.pendingExchange === exchange)
222
+ this.apiKeyState.pendingExchange = undefined;
223
+ }).catch(() => { });
224
+ return exchange;
225
+ }
226
+ async exchange() {
227
+ const startedAtMs = performance.now();
228
+ const deadline = new ApiKeyExchangeDeadline(this.apiKeyState.exchangeTimeoutMs, (statusCode) => this.exchangeError(statusCode, "exchange timed out"));
229
+ try {
230
+ const fetchExchange = this.apiKeyState.fetch;
231
+ const response = await Promise.race([fetchExchange(this.apiKeyState.tokenUrl, {
232
+ method: "POST",
233
+ redirect: "manual",
234
+ headers: { "content-type": "application/json", accept: "application/json" },
235
+ body: JSON.stringify({ server_id: this.apiKeyState.serverId, api_key: this.apiKeyState.apiKey }),
236
+ signal: deadline.signal,
237
+ }), deadline.timeout]);
238
+ deadline.statusCode = response.status;
239
+ if (response.status >= 300 && response.status < 400) {
240
+ throw this.exchangeError(response.status, "redirect refused");
241
+ }
242
+ const body = await Promise.race([response.text(), deadline.timeout]);
243
+ let payload;
244
+ try {
245
+ payload = JSON.parse(body);
246
+ }
247
+ catch {
248
+ throw this.exchangeError(deadline.statusCode, "invalid JSON response");
249
+ }
250
+ if (response.status !== 200) {
251
+ throw this.exchangeError(deadline.statusCode, this.responseErrorDetails(payload));
252
+ }
253
+ if (payload === null || typeof payload !== "object" || Array.isArray(payload)) {
254
+ throw this.exchangeError(deadline.statusCode, "invalid response object");
255
+ }
256
+ const fields = payload;
257
+ if (typeof fields.access_token !== "string" || fields.access_token === "") {
258
+ throw this.exchangeError(deadline.statusCode, "invalid access_token");
259
+ }
260
+ if (typeof fields.token_type !== "string" || fields.token_type.toLowerCase() !== "bearer") {
261
+ throw this.exchangeError(deadline.statusCode, "invalid token_type");
262
+ }
263
+ if (typeof fields.expires_in !== "number" || !Number.isSafeInteger(fields.expires_in) || fields.expires_in <= 0) {
264
+ throw this.exchangeError(deadline.statusCode, "invalid expires_in");
265
+ }
266
+ const lifetimeMs = fields.expires_in * 1_000;
267
+ if (performance.now() >= startedAtMs + lifetimeMs) {
268
+ throw this.exchangeError(200, "access token expired before exchange completed");
269
+ }
270
+ return { token: fields.access_token, startedAtMs, lifetimeMs };
271
+ }
272
+ catch (failure) {
273
+ if (failure instanceof ApiKeyExchangeError)
274
+ throw failure;
275
+ throw this.exchangeError(deadline.statusCode, deadline.didTimeout ? "exchange timed out" : "transport failure");
276
+ }
277
+ finally {
278
+ deadline.close();
279
+ }
280
+ }
281
+ responseErrorDetails(payload) {
282
+ if (payload === null || typeof payload !== "object" || Array.isArray(payload))
283
+ return "exchange rejected";
284
+ const fields = payload;
285
+ const responseToken = typeof fields.access_token === "string" ? fields.access_token : undefined;
286
+ const details = [fields.error, fields.error_description]
287
+ .filter((value) => typeof value === "string")
288
+ .map((value) => this.redact(value, responseToken).slice(0, 200));
289
+ return details.length === 0 ? "exchange rejected" : details.join(": ");
290
+ }
291
+ redact(value, responseToken) {
292
+ const secrets = [this.apiKeyState.apiKey, this.apiKeyState.cachedToken, this.apiKeyState.lastAccessToken,
293
+ this.apiKeyState.previousAccessToken, responseToken]
294
+ .filter((secret) => secret !== undefined && secret !== "")
295
+ .sort((first, second) => second.length - first.length);
296
+ let redacted = value;
297
+ for (const secret of secrets)
298
+ redacted = redacted.replaceAll(secret, "[REDACTED]");
299
+ return redacted.replace(/(?<![A-Za-z0-9_-])[A-Za-z0-9_-]{10,}(?:\.[A-Za-z0-9_-]{10,}){2,}(?![A-Za-z0-9_-])/g, "[REDACTED]");
300
+ }
301
+ exchangeError(statusCode, detail) {
302
+ return new ApiKeyExchangeError(`dex: token exchange ${this.redact(this.apiKeyState.tokenUrl)} HTTP status ${statusCode ?? "unavailable"}: ${this.redact(detail)}`);
303
+ }
304
+ get apiKeyState() {
305
+ const state = apiKeyCredentialStates.get(this);
306
+ if (state === undefined)
307
+ throw new Error("dex: API key credential was not initialized");
308
+ return state;
309
+ }
310
+ }
311
+ class ApiKeyExchangeError extends Error {
312
+ constructor(message) {
313
+ super(message);
314
+ this.name = "ApiKeyExchangeError";
315
+ }
316
+ }
317
+ class ApiKeyExchangeDeadline {
318
+ timeoutError;
319
+ signal;
320
+ timeout;
321
+ statusCode;
322
+ didTimeout = false;
323
+ controller = new AbortController();
324
+ timer;
325
+ rejectTimeout;
326
+ constructor(timeoutMs, timeoutError) {
327
+ this.timeoutError = timeoutError;
328
+ this.signal = this.controller.signal;
329
+ this.timeout = new Promise((_resolve, reject) => { this.rejectTimeout = reject; });
330
+ this.timer = setTimeout(this.onTimeout.bind(this), timeoutMs);
331
+ }
332
+ close() {
333
+ clearTimeout(this.timer);
334
+ }
335
+ onTimeout() {
336
+ this.didTimeout = true;
337
+ this.controller.abort();
338
+ this.rejectTimeout(this.timeoutError(this.statusCode));
339
+ }
340
+ }
76
341
  export function credentialInterceptors(credential) {
77
342
  if (credential === undefined)
78
343
  return [];
@@ -86,9 +351,11 @@ class CredentialInterceptor {
86
351
  }
87
352
  intercept(options, nextCall) {
88
353
  const downstream = nextCall(options);
89
- const requester = new CredentialRequester(this.credential, options, downstream);
354
+ const requester = new CredentialRequester(this.credential, options, nextCall, downstream);
90
355
  return new InterceptingCall(downstream, {
91
356
  start: requester.start.bind(requester),
357
+ sendMessage: requester.sendMessage.bind(requester),
358
+ halfClose: requester.halfClose.bind(requester),
92
359
  cancel: requester.cancel.bind(requester),
93
360
  });
94
361
  }
@@ -96,6 +363,7 @@ class CredentialInterceptor {
96
363
  class CredentialRequester {
97
364
  credential;
98
365
  options;
366
+ nextCall;
99
367
  downstream;
100
368
  isSettled = false;
101
369
  listener;
@@ -103,9 +371,17 @@ class CredentialRequester {
103
371
  next;
104
372
  deadlineAtMs;
105
373
  deadlineTimer;
106
- constructor(credential, options, downstream) {
374
+ tokenUsed;
375
+ requestMessage;
376
+ hasHalfClosed = false;
377
+ hasRetried = false;
378
+ isCancelled = false;
379
+ isRetryPending = false;
380
+ retryCall;
381
+ constructor(credential, options, nextCall, downstream) {
107
382
  this.credential = credential;
108
383
  this.options = options;
384
+ this.nextCall = nextCall;
109
385
  this.downstream = downstream;
110
386
  }
111
387
  start(metadata, listener, next) {
@@ -118,6 +394,15 @@ class CredentialRequester {
118
394
  void Promise.resolve().then(this.readToken.bind(this)).then(this.onToken.bind(this), this.onCredentialFailure.bind(this));
119
395
  }
120
396
  cancel(next) {
397
+ this.isCancelled = true;
398
+ if (this.isRetryPending) {
399
+ this.finishPendingRetry(status.CANCELLED, "Cancelled on client");
400
+ return;
401
+ }
402
+ if (this.retryCall !== undefined) {
403
+ this.retryCall.cancelWithStatus(status.CANCELLED, "Cancelled on client");
404
+ return;
405
+ }
121
406
  if (this.isSettled) {
122
407
  next();
123
408
  return;
@@ -138,6 +423,15 @@ class CredentialRequester {
138
423
  readToken() {
139
424
  return this.credential.token();
140
425
  }
426
+ sendMessage(message, next) {
427
+ if (this.isUnary())
428
+ this.requestMessage = message;
429
+ next(message);
430
+ }
431
+ halfClose(next) {
432
+ this.hasHalfClosed = true;
433
+ next();
434
+ }
141
435
  onToken(token) {
142
436
  if (this.isSettled)
143
437
  return;
@@ -148,14 +442,15 @@ class CredentialRequester {
148
442
  try {
149
443
  this.metadata.set("authorization", `Bearer ${token}`);
150
444
  }
151
- catch (failure) {
152
- this.fail(status.UNAUTHENTICATED, failure instanceof Error ? failure.message : String(failure), failure);
445
+ catch {
446
+ this.fail(status.UNAUTHENTICATED, "invalid bearer token");
153
447
  return;
154
448
  }
155
449
  this.isSettled = true;
450
+ this.tokenUsed = token;
156
451
  this.clearDeadline();
157
452
  try {
158
- this.next(this.metadata, this.listener);
453
+ this.next(this.metadata, this.responseListener());
159
454
  }
160
455
  catch (failure) {
161
456
  const details = failure instanceof Error ? failure.message : String(failure);
@@ -170,6 +465,63 @@ class CredentialRequester {
170
465
  onCredentialFailure(failure) {
171
466
  this.fail(status.UNAUTHENTICATED, failure instanceof Error ? failure.message : String(failure), failure);
172
467
  }
468
+ responseListener() {
469
+ return {
470
+ onReceiveMetadata: (metadata) => this.listener?.onReceiveMetadata(metadata),
471
+ onReceiveMessage: (message) => this.listener?.onReceiveMessage(message),
472
+ onReceiveStatus: (receivedStatus) => this.onResponseStatus(receivedStatus),
473
+ };
474
+ }
475
+ onResponseStatus(receivedStatus) {
476
+ if (receivedStatus.code !== status.UNAUTHENTICATED || this.tokenUsed === undefined
477
+ || !(rejectedToken in this.credential)) {
478
+ this.listener?.onReceiveStatus(receivedStatus);
479
+ return;
480
+ }
481
+ const rejectedCredential = this.credential;
482
+ rejectedCredential[rejectedToken](this.tokenUsed);
483
+ if (!this.isUnary() || this.hasRetried || !this.hasHalfClosed || this.isCancelled) {
484
+ this.listener?.onReceiveStatus(receivedStatus);
485
+ return;
486
+ }
487
+ this.hasRetried = true;
488
+ this.isRetryPending = true;
489
+ this.checkDeadline();
490
+ if (!this.isRetryPending)
491
+ return;
492
+ void Promise.resolve().then(this.readToken.bind(this)).then((token) => this.retryWithToken(token), (failure) => {
493
+ this.finishPendingRetry(status.UNAUTHENTICATED, failure instanceof Error ? failure.message : String(failure), failure);
494
+ });
495
+ }
496
+ retryWithToken(token) {
497
+ if (!this.isRetryPending)
498
+ return;
499
+ if (this.deadlineAtMs !== undefined && Date.now() >= this.deadlineAtMs) {
500
+ this.finishPendingRetry(status.DEADLINE_EXCEEDED, "Deadline exceeded");
501
+ return;
502
+ }
503
+ this.isRetryPending = false;
504
+ this.clearDeadline();
505
+ try {
506
+ this.tokenUsed = token;
507
+ const retryMetadata = this.metadata.clone();
508
+ retryMetadata.set("authorization", `Bearer ${token}`);
509
+ this.retryCall = this.nextCall(this.options);
510
+ this.retryCall.start(retryMetadata, this.responseListener());
511
+ this.retryCall.sendMessage(this.requestMessage);
512
+ this.retryCall.halfClose();
513
+ }
514
+ catch {
515
+ this.listener?.onReceiveStatus({
516
+ code: status.UNAUTHENTICATED,
517
+ details: "could not start credential retry",
518
+ metadata: new Metadata(),
519
+ });
520
+ }
521
+ }
522
+ isUnary() {
523
+ return !this.options.method_definition.requestStream && !this.options.method_definition.responseStream;
524
+ }
173
525
  startDeadline() {
174
526
  const deadline = this.options.deadline;
175
527
  if (deadline === undefined)
@@ -181,11 +533,14 @@ class CredentialRequester {
181
533
  this.checkDeadline();
182
534
  }
183
535
  checkDeadline() {
184
- if (this.isSettled || this.deadlineAtMs === undefined)
536
+ if ((this.isSettled && !this.isRetryPending) || this.deadlineAtMs === undefined)
185
537
  return;
186
538
  const remainingMs = this.deadlineAtMs - Date.now();
187
539
  if (remainingMs <= 0) {
188
- this.fail(status.DEADLINE_EXCEEDED, "Deadline exceeded");
540
+ if (this.isRetryPending)
541
+ this.finishPendingRetry(status.DEADLINE_EXCEEDED, "Deadline exceeded");
542
+ else
543
+ this.fail(status.DEADLINE_EXCEEDED, "Deadline exceeded");
189
544
  return;
190
545
  }
191
546
  this.deadlineTimer = setTimeout(this.checkDeadline.bind(this), Math.min(remainingMs, 2_147_483_647));
@@ -202,6 +557,17 @@ class CredentialRequester {
202
557
  metadata: new Metadata(),
203
558
  }, cause === undefined ? {} : { cause }));
204
559
  }
560
+ finishPendingRetry(code, details, cause) {
561
+ if (!this.isRetryPending)
562
+ return;
563
+ this.isRetryPending = false;
564
+ this.clearDeadline();
565
+ this.listener?.onReceiveStatus(Object.assign({
566
+ code,
567
+ details,
568
+ metadata: new Metadata(),
569
+ }, cause === undefined ? {} : { cause }));
570
+ }
205
571
  clearDeadline() {
206
572
  if (this.deadlineTimer !== undefined)
207
573
  clearTimeout(this.deadlineTimer);
@@ -1 +1 @@
1
- {"version":3,"file":"credential.js","sourceRoot":"","sources":["../../src/credential.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"credential.js","sourceRoot":"","sources":["../../src/credential.ts"],"names":[],"mappings":"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"}