@animalabs/membrane 0.5.84 → 0.5.85

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 (45) hide show
  1. package/dist/formatters/openai-responses.js +1 -1
  2. package/dist/formatters/openai-responses.js.map +1 -1
  3. package/dist/membrane.d.ts +3 -1
  4. package/dist/membrane.d.ts.map +1 -1
  5. package/dist/membrane.js +6 -2
  6. package/dist/membrane.js.map +1 -1
  7. package/dist/providers/anthropic.d.ts +11 -1
  8. package/dist/providers/anthropic.d.ts.map +1 -1
  9. package/dist/providers/anthropic.js +67 -10
  10. package/dist/providers/anthropic.js.map +1 -1
  11. package/dist/providers/credentials.d.ts +20 -0
  12. package/dist/providers/credentials.d.ts.map +1 -0
  13. package/dist/providers/credentials.js +53 -0
  14. package/dist/providers/credentials.js.map +1 -0
  15. package/dist/providers/index.d.ts +1 -0
  16. package/dist/providers/index.d.ts.map +1 -1
  17. package/dist/providers/openai-responses-api.d.ts +22 -4
  18. package/dist/providers/openai-responses-api.d.ts.map +1 -1
  19. package/dist/providers/openai-responses-api.js +107 -42
  20. package/dist/providers/openai-responses-api.js.map +1 -1
  21. package/dist/providers/openai-responses.d.ts +2 -0
  22. package/dist/providers/openai-responses.d.ts.map +1 -1
  23. package/dist/providers/openai-responses.js +16 -7
  24. package/dist/providers/openai-responses.js.map +1 -1
  25. package/dist/providers/responses-input.d.ts +11 -0
  26. package/dist/providers/responses-input.d.ts.map +1 -0
  27. package/dist/providers/responses-input.js +128 -0
  28. package/dist/providers/responses-input.js.map +1 -0
  29. package/dist/providers/utils.d.ts +7 -3
  30. package/dist/providers/utils.d.ts.map +1 -1
  31. package/dist/providers/utils.js +28 -3
  32. package/dist/providers/utils.js.map +1 -1
  33. package/dist/types/provider.d.ts +4 -0
  34. package/dist/types/provider.d.ts.map +1 -1
  35. package/package.json +1 -1
  36. package/src/formatters/openai-responses.ts +1 -1
  37. package/src/membrane.ts +6 -2
  38. package/src/providers/anthropic.ts +79 -13
  39. package/src/providers/credentials.ts +77 -0
  40. package/src/providers/index.ts +2 -0
  41. package/src/providers/openai-responses-api.ts +118 -43
  42. package/src/providers/openai-responses.ts +15 -6
  43. package/src/providers/responses-input.ts +131 -0
  44. package/src/providers/utils.ts +24 -3
  45. package/src/types/provider.ts +5 -0
@@ -102,15 +102,19 @@ export declare function createCombinedSignal(signal?: AbortSignal, timeoutMs?: n
102
102
  * This parser buffers partial lines and only yields complete `data: ...` lines.
103
103
  */
104
104
  export declare class SSELineParser {
105
+ private readonly options;
105
106
  private buffer;
107
+ private data;
108
+ constructor(options?: {
109
+ multiline?: boolean;
110
+ });
106
111
  /**
107
112
  * Feed a raw chunk from the stream reader and get back complete SSE data lines.
108
113
  * Each returned string is the content after `data: ` (e.g. the JSON payload or `[DONE]`).
109
114
  */
110
115
  feed(chunk: string): string[];
111
- /**
112
- * Flush any remaining buffered content (call when stream ends).
113
- */
116
+ private processEventLine;
117
+ /** Flush any remaining event/tail when the stream ends. */
114
118
  flush(): string[];
115
119
  }
116
120
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/providers/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAwD,MAAM,oBAAoB,CAAC;AAwE7G;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,OAAO,EACf,aAAa,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,OAAO,EACpB,SAAS,GAAE,MAAuB,GACjC,IAAI,CAiCN;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CACzC,gBAAgB,EAAE,OAAO,EACzB,aAAa,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,OAAO,GACnB,IAAI,CAON;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAO9E;AAsBD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMvD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAE5F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,CAAC,EAAE,WAAW,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB;IAAE,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,CA2BhD;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAc;IAE5B;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAmB7B;;OAEG;IACH,KAAK,IAAI,MAAM,EAAE;CASlB"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/providers/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAwD,MAAM,oBAAoB,CAAC;AAwE7G;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,OAAO,EACf,aAAa,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,OAAO,EACpB,SAAS,GAAE,MAAuB,GACjC,IAAI,CAiCN;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CACzC,gBAAgB,EAAE,OAAO,EACzB,aAAa,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,OAAO,GACnB,IAAI,CAON;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAO9E;AAsBD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMvD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAE5F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,CAAC,EAAE,WAAW,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB;IAAE,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,CA2BhD;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,aAAa;IAIZ,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,IAAI,CAAgB;gBAEC,OAAO,GAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAO;IAElE;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAuB7B,OAAO,CAAC,gBAAgB;IASxB,2DAA2D;IAC3D,KAAK,IAAI,MAAM,EAAE;CAgBlB"}
@@ -244,7 +244,12 @@ export function createCombinedSignal(signal, timeoutMs) {
244
244
  * This parser buffers partial lines and only yields complete `data: ...` lines.
245
245
  */
246
246
  export class SSELineParser {
247
+ options;
247
248
  buffer = '';
249
+ data = [];
250
+ constructor(options = {}) {
251
+ this.options = options;
252
+ }
248
253
  /**
249
254
  * Feed a raw chunk from the stream reader and get back complete SSE data lines.
250
255
  * Each returned string is the content after `data: ` (e.g. the JSON payload or `[DONE]`).
@@ -256,6 +261,10 @@ export class SSELineParser {
256
261
  const lines = this.buffer.split('\n');
257
262
  this.buffer = lines.pop() || '';
258
263
  for (const line of lines) {
264
+ if (this.options.multiline) {
265
+ this.processEventLine(line.replace(/\r$/, ''), results);
266
+ continue;
267
+ }
259
268
  const trimmed = line.trim();
260
269
  if (trimmed.startsWith('data: ')) {
261
270
  results.push(trimmed.slice(6));
@@ -264,10 +273,26 @@ export class SSELineParser {
264
273
  }
265
274
  return results;
266
275
  }
267
- /**
268
- * Flush any remaining buffered content (call when stream ends).
269
- */
276
+ processEventLine(line, results) {
277
+ if (line === '') {
278
+ if (this.data.length)
279
+ results.push(this.data.join('\n'));
280
+ this.data = [];
281
+ }
282
+ else if (line.startsWith('data:')) {
283
+ this.data.push(line.slice(5).replace(/^ /, ''));
284
+ }
285
+ }
286
+ /** Flush any remaining event/tail when the stream ends. */
270
287
  flush() {
288
+ if (this.options.multiline) {
289
+ const results = [];
290
+ if (this.buffer)
291
+ this.processEventLine(this.buffer.replace(/\r$/, ''), results);
292
+ this.buffer = '';
293
+ this.processEventLine('', results);
294
+ return results;
295
+ }
271
296
  if (!this.buffer.trim())
272
297
  return [];
273
298
  const trimmed = this.buffer.trim();
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/providers/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/providers/utils.ts"],"names":[],"mappings":"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"}
@@ -135,6 +135,10 @@ export interface ProviderAdapter {
135
135
  * resting place.
136
136
  */
137
137
  usageCacheConvention?: UsageCacheConvention;
138
+ /** Whether this transport requires the configured Responses formatter.
139
+ * False permits generic per-request formatter overrides (e.g. named
140
+ * maintenance messages). Wrappers must forward this capability. */
141
+ readonly requiresNativeResponsesInput?: boolean;
138
142
  /** Check if this adapter handles a model */
139
143
  supportsModel(modelId: string): boolean;
140
144
  /** Make a completion request (non-streaming) */
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/types/provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/types/provider.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@animalabs/membrane",
3
- "version": "0.5.84",
3
+ "version": "0.5.85",
4
4
  "description": "LLM middleware - a selective boundary that transforms what passes through",
5
5
  "repository": {
6
6
  "type": "git",
@@ -196,7 +196,7 @@ export class OpenAIResponsesFormatter implements PrefillFormatter {
196
196
  });
197
197
  } else if (block.type === 'redacted_thinking') {
198
198
  flushMessage();
199
- out.push({ type: 'reasoning', encrypted_content: block.data });
199
+ out.push({ type: 'reasoning', encrypted_content: block.data, summary: [] });
200
200
  }
201
201
  }
202
202
  flushMessage();
package/src/membrane.ts CHANGED
@@ -528,7 +528,9 @@ export class Membrane {
528
528
  * item array, and a generic override (for example Context Manager's
529
529
  * NativeFormatter) produces Anthropic-style `{ role, content: [{ type:
530
530
  * 'text' }] }` envelopes the Responses API rejects before inference — so a
531
- * configured Responses formatter stays authoritative there.
531
+ * configured Responses formatter stays authoritative there. Subscription
532
+ * mode accepts normalized envelopes, so its capability allows the override
533
+ * (including participant labels supplied by maintenance formatters).
532
534
  *
533
535
  * The exception is why this selection is a method rather than a `??` at each
534
536
  * call site: while it lived inside transformRequest alone, the BUILD honored
@@ -537,7 +539,9 @@ export class Membrane {
537
539
  * Every entry point selects once, here, and threads the result.
538
540
  */
539
541
  private resolveActiveFormatter(requestFormatter?: PrefillFormatter): PrefillFormatter {
540
- if (this.adapter.name === 'openai-responses-api' && this.formatter.name === 'openai-responses') {
542
+ const requiresNativeInput = this.adapter.requiresNativeResponsesInput
543
+ ?? this.adapter.name === 'openai-responses-api';
544
+ if (requiresNativeInput && this.formatter.name === 'openai-responses') {
541
545
  return this.formatter;
542
546
  }
543
547
  return requestFormatter ?? this.formatter;
@@ -24,6 +24,7 @@ import {
24
24
  } from '../types/index.js';
25
25
  import { flattenRootSchemaUnion } from './anthropic-tool-schema.js';
26
26
  import { assertTerminalEventObserved } from './utils.js';
27
+ import { fetchWithCredentials, validateCredential, type CredentialContext, type CredentialResolver } from './credentials.js';
27
28
  import { CacheKeepalive, type CacheKeepaliveConfig } from '../cache-keepalive.js';
28
29
 
29
30
  // ============================================================================
@@ -151,7 +152,12 @@ export interface AnthropicAdapterConfig {
151
152
  * is allowed to resolve environment auth). If explicitly provided, API-key
152
153
  * auth is disabled so requests do not send both auth schemes.
153
154
  */
154
- authToken?: string | null;
155
+ authToken?: string | null | ((context: CredentialContext) => string | Promise<string>);
156
+
157
+ /** Resolve a bearer token and associated headers per HTTP attempt. Takes
158
+ * precedence over authToken/apiKey; refreshed once after HTTP 401. Applies
159
+ * to complete, stream, and cache-keepalive requests. */
160
+ credentials?: CredentialResolver;
155
161
 
156
162
  /** Base URL override */
157
163
  baseURL?: string;
@@ -199,6 +205,7 @@ export class AnthropicAdapter implements ProviderAdapter {
199
205
  */
200
206
  readonly usageCacheConvention = 'cache-excluded' as const;
201
207
  private client: Anthropic;
208
+ private readonly credentials?: CredentialResolver;
202
209
  private defaultMaxTokens: number;
203
210
  /** Any anthropic-beta value from defaultHeaders (e.g. the oauth beta for
204
211
  * subscription tokens). Per-request headers REPLACE same-key defaults in
@@ -218,8 +225,19 @@ export class AnthropicAdapter implements ProviderAdapter {
218
225
  this.defaultBeta = extractBetaHeader(config.defaultHeaders);
219
226
  this.dynamicHeaders = config.dynamicHeaders;
220
227
 
221
- if (config.authToken !== undefined) {
222
- clientOptions.authToken = config.authToken;
228
+ const authToken = config.authToken;
229
+ const credentials: CredentialResolver | undefined = config.credentials ?? (typeof authToken === 'function'
230
+ ? async (context: CredentialContext) => ({ token: await authToken(context) })
231
+ : undefined);
232
+ this.credentials = credentials;
233
+ if (credentials) {
234
+ // Satisfy SDK auth validation without freezing a real credential. The
235
+ // fetch seam replaces this placeholder before every network attempt,
236
+ // including the SDK's stream and cache-keepalive transports.
237
+ clientOptions.authToken = 'membrane-resolved-at-request-time';
238
+ clientOptions.apiKey = null;
239
+ } else if (authToken !== undefined) {
240
+ clientOptions.authToken = authToken as string | null;
223
241
  clientOptions.apiKey = null;
224
242
  } else {
225
243
  clientOptions.apiKey = config.apiKey;
@@ -234,14 +252,62 @@ export class AnthropicAdapter implements ProviderAdapter {
234
252
  // Replay path. Deliberately bypasses buildRequest(): the payload is
235
253
  // the already-built wire request from a real call, and rebuilding it
236
254
  // risks a byte diff that silently converts a 0.1x read into a 2x write.
237
- async (wire, headers) => await this.client.messages.create(
238
- wire as unknown as Anthropic.MessageCreateParamsNonStreaming,
239
- headers ? { headers } : undefined,
255
+ async (wire, headers) => this.createMessage(
256
+ wire as unknown as Anthropic.MessageCreateParamsNonStreaming, headers,
240
257
  ),
241
258
  config.cacheKeepalive ?? {},
242
259
  );
243
260
  }
244
261
 
262
+ /** One SDK operation owns its failure state: concurrent calls cannot
263
+ * overwrite each other's auth error or cancel each other's requests. */
264
+ private credentialSession(signal?: AbortSignal) {
265
+ const credentials = this.credentials;
266
+ if (!credentials) return { client: this.client, signal, failure: () => undefined };
267
+ const abort = new AbortController();
268
+ const combined = signal ? AbortSignal.any([signal, abort.signal]) : abort.signal;
269
+ let failure: MembraneError | undefined;
270
+ const client = this.client.withOptions({
271
+ fetch: (input, init) => {
272
+ const headers = new Headers(init?.headers);
273
+ headers.delete('x-api-key');
274
+ return fetchWithCredentials(input, { ...init, headers }, async context => {
275
+ try {
276
+ const credential = await credentials(context);
277
+ validateCredential(credential);
278
+ const resolvedHeaders = new Headers(credential.headers);
279
+ resolvedHeaders.delete('x-api-key');
280
+ return { ...credential, headers: Object.fromEntries(resolvedHeaders) };
281
+ } catch (error) {
282
+ if (combined.aborted) throw error;
283
+ failure = error instanceof MembraneError ? error : authError(
284
+ `Credential resolution failed: ${error instanceof Error ? error.message : String(error)}`, error,
285
+ );
286
+ // SDK 0.52 retries thrown fetch errors as connection failures.
287
+ // Abort this operation to bypass that loop, then restore the
288
+ // original error at the complete/stream/keepalive boundary.
289
+ abort.abort(failure);
290
+ throw failure;
291
+ }
292
+ });
293
+ },
294
+ });
295
+ return { client, signal: combined, failure: () => failure };
296
+ }
297
+
298
+ private async createMessage(
299
+ request: Anthropic.MessageCreateParamsNonStreaming,
300
+ headers?: Record<string, string>,
301
+ signal?: AbortSignal,
302
+ ): Promise<Anthropic.Message> {
303
+ const session = this.credentialSession(signal);
304
+ try {
305
+ return await session.client.messages.create(request, { headers, signal: session.signal });
306
+ } catch (error) {
307
+ throw session.failure() ?? error;
308
+ }
309
+ }
310
+
245
311
  supportsModel(modelId: string): boolean {
246
312
  return modelId.startsWith('claude-');
247
313
  }
@@ -260,10 +326,9 @@ export class AnthropicAdapter implements ProviderAdapter {
260
326
  );
261
327
 
262
328
  try {
263
- const response = await this.client.messages.create(fullRequest, {
264
- signal: options?.signal,
265
- headers: this.liveHeaders(headers, 'complete'),
266
- });
329
+ const response = await this.createMessage(
330
+ fullRequest, this.liveHeaders(headers, 'complete'), options?.signal,
331
+ );
267
332
 
268
333
  return this.parseResponse(response, fullRequest);
269
334
  } catch (error) {
@@ -331,10 +396,11 @@ export class AnthropicAdapter implements ProviderAdapter {
331
396
  };
332
397
 
333
398
  resetIdleTimer();
399
+ const session = this.credentialSession(idleAbort.signal);
334
400
 
335
401
  try {
336
- const stream = await this.client.messages.stream(anthropicRequest, {
337
- signal: idleAbort.signal,
402
+ const stream = await session.client.messages.stream(anthropicRequest, {
403
+ signal: session.signal,
338
404
  headers: this.liveHeaders(this.betaHeaders(request), 'stream'),
339
405
  });
340
406
 
@@ -572,7 +638,7 @@ export class AnthropicAdapter implements ProviderAdapter {
572
638
  rawRequest: fullRequest,
573
639
  });
574
640
  }
575
- throw this.handleError(error, fullRequest);
641
+ throw this.handleError(session.failure() ?? error, fullRequest);
576
642
  }
577
643
  }
578
644
 
@@ -0,0 +1,77 @@
1
+ import { authError } from '../types/index.js';
2
+
3
+ /** Credential acquisition stays with the application; transports resolve per attempt. */
4
+ export interface ResolvedCredential {
5
+ token: string;
6
+ /** Headers tied to this token, e.g. ChatGPT-Account-Id. Returned atomically. */
7
+ headers?: Record<string, string>;
8
+ }
9
+
10
+ export interface CredentialContext {
11
+ /** False for the first attempt; true for the single retry after HTTP 401. */
12
+ forceRefresh: boolean;
13
+ /** The request's combined cancellation/deadline signal. */
14
+ signal?: AbortSignal;
15
+ }
16
+
17
+ export type CredentialResolver = (
18
+ context: CredentialContext,
19
+ ) => ResolvedCredential | Promise<ResolvedCredential>;
20
+
21
+ /** Internal shared HTTP seam: refresh only a 401, before a body is consumed.
22
+ * Static credentials retain their single-attempt behavior. SDK-backed callers
23
+ * can use this as their fetch implementation without rebuilding a client. */
24
+ export async function fetchWithCredentials(
25
+ input: string | URL | Request,
26
+ init: RequestInit,
27
+ credentials: CredentialResolver | ResolvedCredential,
28
+ ): Promise<Response> {
29
+ const signal = init.signal ?? undefined;
30
+ for (const forceRefresh of [false, true]) {
31
+ signal?.throwIfAborted();
32
+ const credential = typeof credentials === 'function'
33
+ ? await resolveWithSignal(credentials, forceRefresh, signal)
34
+ : credentials;
35
+ signal?.throwIfAborted();
36
+ validateCredential(credential);
37
+ const headers = new Headers(init.headers);
38
+ for (const [key, value] of Object.entries(credential.headers ?? {})) headers.set(key, value);
39
+ if (typeof credentials === 'function' || !headers.has('Authorization')) {
40
+ headers.set('Authorization', `Bearer ${credential.token}`);
41
+ }
42
+ const response = await fetch(input, { ...init, headers });
43
+ if (response.status !== 401 || typeof credentials !== 'function' || forceRefresh) return response;
44
+ void response.body?.cancel().catch(() => {});
45
+ }
46
+ throw new Error('Unreachable credential retry state');
47
+ }
48
+
49
+ /** Bound credential acquisition by the same cancellation/deadline as HTTP. */
50
+ async function resolveWithSignal(
51
+ resolver: CredentialResolver,
52
+ forceRefresh: boolean,
53
+ signal?: AbortSignal,
54
+ ) {
55
+ if (!signal) return resolver({ forceRefresh });
56
+ signal.throwIfAborted();
57
+ let onAbort: () => void = () => {};
58
+ const aborted = new Promise<never>((_, reject) => {
59
+ onAbort = () => reject(signal.reason);
60
+ signal.addEventListener('abort', onAbort, { once: true });
61
+ });
62
+ try {
63
+ return await Promise.race([Promise.resolve().then(() => {
64
+ signal.throwIfAborted();
65
+ return resolver({ forceRefresh, signal });
66
+ }), aborted]);
67
+ } finally {
68
+ signal.removeEventListener('abort', onAbort);
69
+ }
70
+ }
71
+
72
+ /** Runtime validation also protects JavaScript callers and external resolvers. */
73
+ export function validateCredential(credential: ResolvedCredential): void {
74
+ if (!credential || typeof credential.token !== 'string' || credential.token.trim().length === 0) {
75
+ throw authError('Credential resolver must return a non-empty string token');
76
+ }
77
+ }
@@ -72,3 +72,5 @@ export {
72
72
  type OpenAIResponsesInputItem,
73
73
  type OpenAIResponsesOutputItem,
74
74
  } from './openai-responses-api.js';
75
+
76
+ export type { CredentialContext, CredentialResolver, ResolvedCredential } from './credentials.js';