@outfoxx/sunday 2.0.0-beta.17 → 2.0.0-beta.19

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 (66) hide show
  1. package/README.md +191 -30
  2. package/build/client-settings.d.ts +6 -7
  3. package/build/client-settings.js +58 -28
  4. package/build/client-settings.js.map +1 -1
  5. package/build/event-parser.d.ts +21 -8
  6. package/build/event-parser.js +93 -121
  7. package/build/event-parser.js.map +1 -1
  8. package/build/fetch-copy.d.ts +15 -0
  9. package/build/fetch-copy.js +70 -0
  10. package/build/fetch-copy.js.map +1 -0
  11. package/build/fetch-event-source.d.ts +6 -5
  12. package/build/fetch-event-source.js +168 -137
  13. package/build/fetch-event-source.js.map +1 -1
  14. package/build/fetch-oauth-token-provider.js +61 -19
  15. package/build/fetch-oauth-token-provider.js.map +1 -1
  16. package/build/fetch-transport.d.ts +14 -6
  17. package/build/fetch-transport.js +126 -168
  18. package/build/fetch-transport.js.map +1 -1
  19. package/build/fetch.js +5 -0
  20. package/build/fetch.js.map +1 -1
  21. package/build/index.d.ts +7 -2
  22. package/build/index.js +6 -2
  23. package/build/index.js.map +1 -1
  24. package/build/request-adapter.d.ts +8 -0
  25. package/build/{token-manager-factory.js → request-adapter.js} +1 -1
  26. package/build/request-adapter.js.map +1 -0
  27. package/build/request-adapters.d.ts +25 -8
  28. package/build/request-adapters.js +126 -14
  29. package/build/request-adapters.js.map +1 -1
  30. package/build/request-body.d.ts +24 -0
  31. package/build/request-body.js +104 -0
  32. package/build/request-body.js.map +1 -0
  33. package/build/request-cancellation-error.d.ts +13 -0
  34. package/build/request-cancellation-error.js +43 -0
  35. package/build/request-cancellation-error.js.map +1 -0
  36. package/build/request-execution.d.ts +18 -0
  37. package/build/request-execution.js +108 -0
  38. package/build/request-execution.js.map +1 -0
  39. package/build/request-security.d.ts +9 -3
  40. package/build/request-security.js +101 -36
  41. package/build/request-security.js.map +1 -1
  42. package/build/response-adapter.d.ts +10 -0
  43. package/build/response-adapter.js +15 -0
  44. package/build/response-adapter.js.map +1 -0
  45. package/build/response-adapters.d.ts +13 -0
  46. package/build/response-adapters.js +75 -0
  47. package/build/response-adapters.js.map +1 -0
  48. package/build/token-manager.d.ts +13 -4
  49. package/build/token-manager.js +110 -33
  50. package/build/token-manager.js.map +1 -1
  51. package/build/token-provider.d.ts +8 -1
  52. package/build/token-provider.js +71 -0
  53. package/build/token-provider.js.map +1 -1
  54. package/build/transport.d.ts +3 -3
  55. package/build/util/abort.d.ts +3 -0
  56. package/build/util/abort.js +42 -0
  57. package/build/util/abort.js.map +1 -0
  58. package/build/util/native-fetch.d.ts +2 -0
  59. package/build/util/native-fetch.js +39 -0
  60. package/build/util/native-fetch.js.map +1 -0
  61. package/build/util/owned-body.d.ts +12 -0
  62. package/build/util/owned-body.js +243 -0
  63. package/build/util/owned-body.js.map +1 -0
  64. package/package.json +9 -6
  65. package/build/token-manager-factory.d.ts +0 -9
  66. package/build/token-manager-factory.js.map +0 -1
@@ -11,59 +11,109 @@
11
11
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
- import { TokenProviderError } from './token-provider.js';
14
+ import { withAbort } from './util/abort.js';
15
+ import { prepareRequestBody } from './request-body.js';
16
+ import { copyRequest, copyResponse } from './fetch-copy.js';
17
+ import { RequestCancellationError } from './request-cancellation-error.js';
18
+ import { TokenProviderError, providerCredentials, } from './token-provider.js';
15
19
  /** Adds all credentials atomically after every provider succeeds. */
16
- export async function authorizeRequest(request, bindings, manager, previous) {
17
- if (!manager)
18
- throw new TokenProviderError();
20
+ export async function authorizeRequest(request, bindings, providers, maxBufferedRequestBytes) {
19
21
  const url = new URL(request.url);
20
22
  const headers = new Headers(request.headers);
21
- validateTransports(bindings, url, headers, !previous);
22
- const leases = await Promise.all(bindings.map(binding => manager.credentials(binding, request.signal)));
23
+ validateTransports(bindings, url, headers);
24
+ // Resolve every binding before starting work, so setup failure cannot strand earlier promises.
25
+ const selected = bindings.map((binding) => {
26
+ const provider = Object.hasOwn(providers, binding.provider)
27
+ ? providers[binding.provider]
28
+ : undefined;
29
+ if (!provider)
30
+ throw new TokenProviderError();
31
+ return { binding, provider };
32
+ });
33
+ const acquisition = new AbortController();
34
+ const signal = AbortSignal.any([request.signal, acquisition.signal]);
35
+ let leases;
36
+ try {
37
+ leases = await withAbort(() => Promise.all(selected.map(({ binding, provider }) => providerCredentials(provider, binding, signal))), signal);
38
+ }
39
+ catch (error) {
40
+ // Promise.all is fail-fast, but siblings still need a cooperative stop signal.
41
+ acquisition.abort(error);
42
+ throw error;
43
+ }
23
44
  request.signal.throwIfAborted();
24
45
  bindings.forEach((binding, index) => applyCredential(binding, leases[index].tokens.accessToken, url, headers));
25
- // Passing the body explicitly avoids Request's internal stream proxy, which can stall uploads in Bun.
26
- // Manual redirects also protect custom API-key headers and cookies from crossing origins.
27
- const authorized = url.toString() === request.url && request.redirect === 'manual' ? request :
28
- new Request(url, {
29
- method: request.method, headers, body: request.body, signal: request.signal,
30
- cache: request.cache, credentials: request.credentials, integrity: request.integrity,
31
- keepalive: request.keepalive, mode: request.mode, redirect: 'manual',
32
- referrer: request.referrer, referrerPolicy: request.referrerPolicy,
33
- ...(request.body ? { duplex: 'half' } : {}),
34
- });
35
- for (const [name, value] of headers)
36
- authorized.headers.set(name, value);
46
+ // Changing URL reconstructs Request from settings. Firefox does not expose Request.body,
47
+ // so retain its already-buffered native body through blob() instead of silently dropping it.
48
+ let body;
49
+ if (url.href !== request.url) {
50
+ if (request.body) {
51
+ body = await prepareRequestBody(request.body, {
52
+ signal: request.signal,
53
+ maxBytes: maxBufferedRequestBytes,
54
+ });
55
+ }
56
+ else if (request.body === undefined &&
57
+ !['GET', 'HEAD'].includes(request.method)) {
58
+ const buffered = await request.blob();
59
+ if (buffered.size)
60
+ body = buffered;
61
+ }
62
+ }
63
+ const authorized = copyRequest(request, {
64
+ ...(body !== undefined ? { body } : {}),
65
+ url,
66
+ headers,
67
+ redirect: 'manual',
68
+ credentials: 'omit',
69
+ });
37
70
  return { request: authorized, bindings, leases };
38
71
  }
72
+ /** Proves body absence without treating an unavailable Request.body property as an empty body. */
73
+ export function isBodylessRequest(request) {
74
+ // Fetch forbids bodies on GET/HEAD. Other methods require an inspectable null body.
75
+ return (request.method === 'GET' ||
76
+ request.method === 'HEAD' ||
77
+ request.body === null);
78
+ }
39
79
  /** Requires a safe, replayable request and an explicit bearer invalid-token challenge. */
40
80
  export function canRecoverAuthentication(request, response) {
41
- return response.status === 401 && ['GET', 'HEAD', 'OPTIONS'].includes(request.request.method) &&
42
- request.request.body === null && request.bindings.some(isBearerBinding) &&
43
- hasInvalidBearerChallenge(response.headers.get('WWW-Authenticate') ?? '');
81
+ return (response.status === 401 &&
82
+ ['GET', 'HEAD', 'OPTIONS'].includes(request.method) &&
83
+ isBodylessRequest(request) &&
84
+ /^Bearer[ \t]+[^ \t]+$/i.test(request.headers.get('Authorization') ?? '') &&
85
+ hasInvalidBearerChallenge(response.headers.get('WWW-Authenticate') ?? ''));
44
86
  }
45
87
  /** Returns only bearer receipts rejected by an invalid-token challenge, preserving other conjuncts. */
46
88
  export function rejectedBearerLeases(request) {
47
- return request.leases.filter((_, index) => isBearerBinding(request.bindings[index]));
89
+ const token = /^Bearer[ \t]+([^ \t]+)$/i.exec(request.request.headers.get('Authorization') ?? '')?.[1];
90
+ return request.leases.filter((lease, index) => isBearerBinding(request.bindings[index]) &&
91
+ token === lease.tokens.accessToken);
48
92
  }
49
93
  function isBearerBinding(binding) {
50
- return binding.transport.location === 'header' && binding.transport.name.toLowerCase() === 'authorization' &&
51
- binding.transport.prefix?.toLowerCase() === 'bearer';
94
+ return (binding.transport.location === 'header' &&
95
+ binding.transport.name.toLowerCase() === 'authorization' &&
96
+ binding.transport.prefix?.toLowerCase() === 'bearer');
52
97
  }
53
98
  /** Removes query credentials from responses before error translation or diagnostic rendering. */
54
99
  export function redactSecurityResponse(response, bindings) {
55
- const queryNames = bindings.filter(binding => binding.transport.location === 'query').map(binding => binding.transport.name);
100
+ const queryNames = bindings
101
+ .filter((binding) => binding.transport.location === 'query')
102
+ .map((binding) => binding.transport.name);
56
103
  if (!queryNames.length || !response.url)
57
104
  return response;
58
105
  const url = new URL(response.url);
59
106
  for (const name of queryNames)
60
107
  if (url.searchParams.has(name))
61
108
  replaceQueryCredential(url, name, '[redacted]');
62
- const result = new Response(response.body, { status: response.status, statusText: response.statusText, headers: response.headers });
63
- Object.defineProperty(result, 'url', { value: url.toString() });
109
+ if (url.href === response.url)
110
+ return response;
111
+ // Filtered responses cannot be reconstructed; preserve the native response and its hidden body.
112
+ const result = response.status === 0 ? response : copyResponse(response);
113
+ Object.defineProperty(result, 'url', { value: url.href, configurable: true });
64
114
  return result;
65
115
  }
66
- function hasInvalidBearerChallenge(header) {
116
+ export function hasInvalidBearerChallenge(header) {
67
117
  const parts = splitChallenges(header);
68
118
  if (!parts)
69
119
  return false;
@@ -83,14 +133,16 @@ function hasInvalidBearerChallenge(header) {
83
133
  return false;
84
134
  }
85
135
  function cookieEntries(headers) {
86
- return (headers.get('Cookie') ?? '').split(';').flatMap(entry => {
136
+ return (headers.get('Cookie') ?? '').split(';').flatMap((entry) => {
87
137
  const split = entry.indexOf('=');
88
- return split < 0 ? [] : [[entry.slice(0, split).trim(), entry.slice(split + 1).trim()]];
138
+ return split < 0
139
+ ? []
140
+ : [[entry.slice(0, split).trim(), entry.slice(split + 1).trim()]];
89
141
  });
90
142
  }
91
143
  // URLSearchParams re-encodes unrelated values, which can invalidate application-signed query parameters.
92
144
  function replaceQueryCredential(url, name, credential) {
93
- const fields = (url.search ? url.search.slice(1).split('&') : []).filter(field => {
145
+ const fields = (url.search ? url.search.slice(1).split('&') : []).filter((field) => {
94
146
  const key = field.split('=', 1)[0];
95
147
  try {
96
148
  return decodeURIComponent(key.replaceAll('+', ' ')) !== name;
@@ -102,7 +154,7 @@ function replaceQueryCredential(url, name, credential) {
102
154
  fields.push(`${encodeURIComponent(name)}=${encodeURIComponent(credential)}`);
103
155
  url.search = fields.join('&');
104
156
  }
105
- function validateTransports(bindings, url, headers, checkExisting) {
157
+ function validateTransports(bindings, url, headers) {
106
158
  const names = new Set();
107
159
  for (const binding of bindings) {
108
160
  const transport = binding.transport;
@@ -110,9 +162,11 @@ function validateTransports(bindings, url, headers, checkExisting) {
110
162
  if (names.has(name))
111
163
  throw new TokenProviderError();
112
164
  names.add(name);
113
- if (checkExisting && ((transport.location === 'header' && headers.has(transport.name)) ||
114
- (transport.location === 'query' && url.searchParams.has(transport.name)) ||
115
- (transport.location === 'cookie' && cookieEntries(headers).some(([name]) => name === transport.name))))
165
+ if ((transport.location === 'header' && headers.has(transport.name)) ||
166
+ (transport.location === 'query' &&
167
+ url.searchParams.has(transport.name)) ||
168
+ (transport.location === 'cookie' &&
169
+ cookieEntries(headers).some(([name]) => name === transport.name)))
116
170
  throw new TokenProviderError();
117
171
  }
118
172
  }
@@ -121,7 +175,7 @@ function applyCredential(binding, token, url, headers) {
121
175
  const credential = transport.prefix ? `${transport.prefix} ${token}` : token;
122
176
  switch (transport.location) {
123
177
  case 'header': {
124
- if ([...credential].some(character => character.codePointAt(0) < 32 || character.codePointAt(0) === 127))
178
+ if ([...credential].some((character) => character.codePointAt(0) < 32 || character.codePointAt(0) === 127))
125
179
  throw new TokenProviderError();
126
180
  headers.set(transport.name, credential);
127
181
  break;
@@ -164,4 +218,15 @@ function splitChallenges(header) {
164
218
  parts.push(header.slice(start).trim());
165
219
  return parts;
166
220
  }
221
+ /** Reports all matching rejections, including unsafe requests and exhausted recovery budgets. */
222
+ export async function rejectCredentials(request, response) {
223
+ if (response.status !== 401 ||
224
+ !hasInvalidBearerChallenge(response.headers.get('WWW-Authenticate') ?? ''))
225
+ return;
226
+ let recoverable = true;
227
+ for (const lease of rejectedBearerLeases(request))
228
+ recoverable = ((await lease.invalidate?.()) ?? false) && recoverable;
229
+ if (!recoverable)
230
+ throw new RequestCancellationError('The credential owner rejected authentication recovery');
231
+ }
167
232
  //# sourceMappingURL=request-security.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"request-security.js","sourceRoot":"","sources":["../src/request-security.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"request-security.js","sourceRoot":"","sources":["../src/request-security.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Adapts the response returned by Fetch before Sunday handling. Hidden native intermediate
3
+ * responses are unavailable. The request is the one submitted to Fetch, not a wire-level trace.
4
+ * Consumed resources must be replaced before returning; use request.signal for cancellation.
5
+ * Sunday cancels returned bodies on abort, including while decoding or validation owns their reader.
6
+ */
7
+ export interface ResponseAdapter {
8
+ /** Returns the adapted value; throwing stops the remaining adapters. */
9
+ adapt(response: Response, request: Request): Response | Promise<Response>;
10
+ }
@@ -0,0 +1,15 @@
1
+ // Copyright 2020 Outfox, Inc.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ export {};
15
+ //# sourceMappingURL=response-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-adapter.js","sourceRoot":"","sources":["../src/response-adapter.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC"}
@@ -0,0 +1,13 @@
1
+ import { ResponseAdapter } from './response-adapter.js';
2
+ /** Explicit, flat, ordered composition of response adapters. No request capability is inferred. */
3
+ export declare class ResponseAdapters implements ResponseAdapter {
4
+ readonly adapters: readonly ResponseAdapter[];
5
+ constructor(...adapters: readonly ResponseAdapter[]);
6
+ /** Appends adapters without nesting execution pipelines. */
7
+ chainTo(...next: readonly ResponseAdapter[]): ResponseAdapters;
8
+ adapt(response: Response, request: Request): Promise<Response>;
9
+ }
10
+ /** Composes plain object adapters without inferring response capabilities from request adapters. */
11
+ export declare function chainResponseAdapters(...adapters: readonly ResponseAdapter[]): ResponseAdapters;
12
+ /** @internal Native Fetch bodies already own cancellation and must retain their byte-stream capabilities. */
13
+ export declare function adaptResponse(adapters: readonly ResponseAdapter[], response: Response, request: Request, native?: boolean): Promise<Response>;
@@ -0,0 +1,75 @@
1
+ // Copyright 2020 Outfox, Inc.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ import { ownBody, bodyReads, sameBody } from './util/owned-body.js';
15
+ import { copyResponse } from './fetch-copy.js';
16
+ import { discardBody, withAbort } from './util/abort.js';
17
+ /** Explicit, flat, ordered composition of response adapters. No request capability is inferred. */
18
+ export class ResponseAdapters {
19
+ adapters;
20
+ constructor(...adapters) {
21
+ this.adapters = Object.freeze(adapters.flatMap((adapter) => adapter instanceof ResponseAdapters ? adapter.adapters : [adapter]));
22
+ }
23
+ /** Appends adapters without nesting execution pipelines. */
24
+ chainTo(...next) {
25
+ return new ResponseAdapters(this, ...next);
26
+ }
27
+ async adapt(response, request) {
28
+ return adaptResponse(this.adapters, response, request);
29
+ }
30
+ }
31
+ /** Composes plain object adapters without inferring response capabilities from request adapters. */
32
+ export function chainResponseAdapters(...adapters) {
33
+ return new ResponseAdapters(...adapters);
34
+ }
35
+ /** @internal Native Fetch bodies already own cancellation and must retain their byte-stream capabilities. */
36
+ export async function adaptResponse(adapters, response, request, native = false) {
37
+ if (!adapters.length) {
38
+ request.signal.throwIfAborted();
39
+ return response;
40
+ }
41
+ const cancellation = new AbortController();
42
+ const signal = AbortSignal.any([request.signal, cancellation.signal]);
43
+ let current = response;
44
+ const owned = (value) => {
45
+ if (!value.body || value.status === 0)
46
+ return value;
47
+ const body = ownBody(value.body, signal);
48
+ if (body !== value.body)
49
+ return copyResponse(value, { body });
50
+ bodyReads(value);
51
+ return value;
52
+ };
53
+ try {
54
+ signal.throwIfAborted();
55
+ if (!native)
56
+ current = owned(current);
57
+ for (const adapter of adapters) {
58
+ const adapted = await withAbort(() => adapter.adapt(current, request), signal, discardBody);
59
+ if (sameBody(adapted.body, current.body)) {
60
+ current = adapted;
61
+ bodyReads(current);
62
+ }
63
+ else
64
+ current = owned(adapted);
65
+ }
66
+ signal.throwIfAborted();
67
+ return current;
68
+ }
69
+ catch (error) {
70
+ cancellation.abort(error);
71
+ discardBody(current, error);
72
+ throw error;
73
+ }
74
+ }
75
+ //# sourceMappingURL=response-adapters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-adapters.js","sourceRoot":"","sources":["../src/response-adapters.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,20 @@
1
1
  import { SecurityBinding } from './security-binding.js';
2
- import { TokenProvider, TokenSet, TokenStore } from './token-provider.js';
2
+ import { TokenConfiguration, TokenProvider, TokenRequest, TokenSet, TokenStore } from './token-provider.js';
3
3
  /** A credential receipt used for conditional invalidation after an invalid-token response. */
4
4
  export interface TokenLease {
5
5
  readonly key: string;
6
6
  readonly tokens: TokenSet;
7
+ /** Rejects the original credential without invalidating a concurrent replacement. */
8
+ readonly invalidate?: () => Promise<boolean>;
7
9
  }
8
10
  /**
9
11
  * Shared token lifecycle with one renewal per cache key. Canceling one caller leaves other waiters
10
- * running; canceling the last waiter signals the provider. A failed renewal is never cached.
12
+ * running; canceling the last waiter stops waiting for the provider without abandoning storage commits.
13
+ * A failed or cancelled acquisition is never cached.
11
14
  */
12
- export declare class TokenManager {
15
+ export declare class TokenManager implements TokenProvider {
16
+ readonly identity: string;
17
+ private readonly provider?;
13
18
  private readonly providers;
14
19
  private readonly store;
15
20
  private readonly renewals;
@@ -17,11 +22,15 @@ export declare class TokenManager {
17
22
  private readonly locks;
18
23
  private readonly now;
19
24
  private readonly skew;
20
- constructor(providers: Readonly<Record<string, TokenProvider>>, options?: {
25
+ constructor(providers: TokenProvider | Readonly<Record<string, TokenProvider>>, options?: {
21
26
  store?: TokenStore;
22
27
  expirySkewMs?: number;
23
28
  now?: () => number;
24
29
  });
30
+ /** Forwards application configuration to the explicitly managed provider. */
31
+ configure(binding: SecurityBinding): TokenConfiguration;
32
+ /** Obtains managed credentials; receipt acquisition preserves rejection context. */
33
+ acquire(request: TokenRequest, signal: AbortSignal): Promise<TokenSet>;
25
34
  /** Acquires current credentials without invoking authorization twice for an expired interactive session. */
26
35
  credentials(binding: SecurityBinding, signal?: AbortSignal): Promise<TokenLease>;
27
36
  /** Invalidates only the credential that failed, preserving a token already renewed by another caller. */