@outfoxx/sunday 2.0.0-beta.3 → 2.0.0-beta.5

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 (55) hide show
  1. package/README.md +52 -0
  2. package/build/fetch-event-source.d.ts +3 -0
  3. package/build/fetch-event-source.js +11 -4
  4. package/build/fetch-event-source.js.map +1 -1
  5. package/build/fetch-oauth-token-provider.d.ts +43 -0
  6. package/build/fetch-oauth-token-provider.js +193 -0
  7. package/build/fetch-oauth-token-provider.js.map +1 -0
  8. package/build/fetch-transport.d.ts +5 -0
  9. package/build/fetch-transport.js +58 -8
  10. package/build/fetch-transport.js.map +1 -1
  11. package/build/index.d.ts +8 -0
  12. package/build/index.js +8 -0
  13. package/build/index.js.map +1 -1
  14. package/build/media-type-codecs/cbor-encoder.d.ts +2 -2
  15. package/build/media-type-codecs/cbor-encoder.js +2 -2
  16. package/build/media-type-codecs/cbor-encoder.js.map +1 -1
  17. package/build/media-type-codecs/json-encoder.d.ts +3 -3
  18. package/build/media-type-codecs/json-encoder.js +4 -4
  19. package/build/media-type-codecs/json-encoder.js.map +1 -1
  20. package/build/media-type-codecs/media-type-encoder.d.ts +3 -3
  21. package/build/media-type-codecs/media-type-encoder.js.map +1 -1
  22. package/build/media-type-codecs/www-form-url-encoder.d.ts +2 -2
  23. package/build/media-type-codecs/www-form-url-encoder.js +2 -2
  24. package/build/media-type-codecs/www-form-url-encoder.js.map +1 -1
  25. package/build/model-construction.d.ts +5 -0
  26. package/build/model-construction.js +40 -0
  27. package/build/model-construction.js.map +1 -0
  28. package/build/model-schema.d.ts +9 -0
  29. package/build/model-schema.js +131 -0
  30. package/build/model-schema.js.map +1 -0
  31. package/build/problem.js +2 -1
  32. package/build/problem.js.map +1 -1
  33. package/build/request-security.d.ts +16 -0
  34. package/build/request-security.js +167 -0
  35. package/build/request-security.js.map +1 -0
  36. package/build/request-validation-error.d.ts +4 -0
  37. package/build/request-validation-error.js +21 -0
  38. package/build/request-validation-error.js.map +1 -0
  39. package/build/schema-runtime.d.ts +8 -1
  40. package/build/schema-runtime.js +12 -3
  41. package/build/schema-runtime.js.map +1 -1
  42. package/build/security-binding.d.ts +22 -0
  43. package/build/security-binding.js +15 -0
  44. package/build/security-binding.js.map +1 -0
  45. package/build/token-manager.d.ts +33 -0
  46. package/build/token-manager.js +199 -0
  47. package/build/token-manager.js.map +1 -0
  48. package/build/token-provider.d.ts +44 -0
  49. package/build/token-provider.js +31 -0
  50. package/build/token-provider.js.map +1 -0
  51. package/build/transport.d.ts +5 -0
  52. package/build/unknown-variant.d.ts +12 -0
  53. package/build/unknown-variant.js +45 -0
  54. package/build/unknown-variant.js.map +1 -0
  55. package/package.json +1 -1
package/README.md CHANGED
@@ -37,3 +37,55 @@ Package Name:
37
37
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
38
38
  See the License for the specific language governing permissions and
39
39
  limitations under the License.
40
+
41
+ ## Profiled credentials
42
+
43
+ Generated request specifications select `SecurityBinding` entries. Register application providers with
44
+ one shared `TokenManager` and pass it as `new FetchTransport(baseUrl, {tokenManager})`. Client secrets,
45
+ authorization codes, token storage, and interactive login remain application bindings.
46
+
47
+ `FetchOAuthTokenProvider` exchanges `clientCredentials` and application-authorized `authorizationCode`
48
+ grants and rotates refresh tokens. Configure `identity`, `clientId`, and explicit client authentication
49
+ (`client_secret_basic`, `client_secret_post`, or public-client `none`). An interactive application supplies
50
+ a fresh `grantIdentity` and an `authorization(request, signal)` callback returning
51
+ `{code, redirectUri, codeVerifier}` after its S256 PKCE browser flow has verified state, issuer, and redirect
52
+ URI. Codes are consumed once even when exchange fails or is canceled. Discovery requires a separately
53
+ configured `issuer`; acquisition endpoint overrides cannot change it. Other authentication methods use
54
+ an application `TokenProvider`. Token endpoints require HTTPS except for loopback development URLs.
55
+
56
+ External and static providers implement `configure` and `acquire`, optionally `refresh`. A `TokenSet`
57
+ contains `accessToken`, optional `expiresAt` in Unix milliseconds, and optional `refreshToken`. A returned
58
+ refresh token replaces the previous one; omission retains it. Expired interactive sessions without refresh
59
+ capability and invalid interactive refresh grants require fresh application authorization.
60
+
61
+ Cache keys include provider/client identity, grant identity, profile, flow, resolved endpoints, scopes,
62
+ audience, and resource. Change provider identity with credential configuration and grant identity with
63
+ session/grant inputs. The manager defaults to 30 seconds of expiry skew, coalesces concurrent renewal,
64
+ and accepts application-owned `TokenStore` storage. Canceling one waiter preserves others; canceling the
65
+ last signals acquisition cancellation. Once persistence starts, saving a rotated token finishes even if
66
+ callers cancel. A provider result arriving after cancellation cannot start persistence; if an identity
67
+ server already consumed that refresh token despite cancellation, interactive clients must authorize again.
68
+
69
+ The transport attaches complete AND credential sets and checks them on every execution. Bodyless
70
+ GET/HEAD/OPTIONS requests may recover one explicit bearer `invalid_token` challenge; POST, streamed bodies,
71
+ and 403 responses are never automatically replayed. Managed credential requests use manual redirect
72
+ handling, and query credentials are redacted from response diagnostics. Providers never receive secrets
73
+ from generated metadata, and provider failures use safe runtime diagnostics.
74
+
75
+ Credentials are isolated by logical security scheme as well as provider and acquisition inputs.
76
+ Discovery metadata is fetched and verified on each acquisition or renewal. Temporary provider outages
77
+ allow event connections to reconnect; a rejected refresh grant triggers fresh client credentials only
78
+ for the client-credentials flow. Interactive sessions require fresh application authorization.
79
+ Built-in OAuth providers retain at most 1,024 consumed authorization-code hashes per provider instance.
80
+ After this limit, create a provider for a newly authorized application session; old hashes are never
81
+ evicted to allow code reuse. Refresh exchanges do not consume this history.
82
+
83
+ ### Typed request parameters
84
+
85
+ `parameterValidation` is an optional callback on the request specification. The transport invokes it
86
+ before encoding on every request build, including bodyless requests and event streams. Generated
87
+ callbacks validate captured typed parameters in request mode; reusing an operation checks mutable
88
+ values again. Custom transports must invoke the callback at the same boundary before transmission.
89
+
90
+ Parameter failures throw `RequestValidationError` with the native validation error as `cause`.
91
+ Event sources close on this error, and event stream iterators reject instead of reconnecting.
@@ -22,6 +22,7 @@ export declare class FetchEventSource extends EventTarget implements ExtEventSou
22
22
  onopen: ((this: EventSource, ev: Event) => unknown) | null;
23
23
  get retryTime(): number;
24
24
  private readonly adapter;
25
+ private readonly fetchRequest;
25
26
  private readonly signal?;
26
27
  private connectionAbortController?;
27
28
  private connectionReader?;
@@ -42,6 +43,8 @@ export declare class FetchEventSource extends EventTarget implements ExtEventSou
42
43
  private readonly eventParser;
43
44
  constructor(url: string, eventSourceInit?: EventSourceInit & {
44
45
  adapter?: (url: string, requestInit: RequestInit) => Promise<Request>;
46
+ /** Executes one connection using a subscription-owned authentication recovery budget. */
47
+ fetch?: (request: Request, signal: AbortSignal) => Promise<Response>;
45
48
  signal?: AbortSignal;
46
49
  eventTimeout?: number;
47
50
  eventTimeoutCheckInterval?: number;
@@ -11,6 +11,8 @@
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 { RequestValidationError } from './request-validation-error.js';
15
+ import { AuthorizationRequiredError, TokenProviderError } from './token-provider.js';
14
16
  import { EventParser } from './event-parser.js';
15
17
  import { validate } from './fetch.js';
16
18
  import { levelLogger, LogLevel } from './logger.js';
@@ -36,6 +38,7 @@ export class FetchEventSource extends EventTarget {
36
38
  return this.internalRetryTime;
37
39
  }
38
40
  adapter;
41
+ fetchRequest;
39
42
  signal;
40
43
  connectionAbortController;
41
44
  connectionReader;
@@ -60,6 +63,7 @@ export class FetchEventSource extends EventTarget {
60
63
  this.adapter =
61
64
  eventSourceInit?.adapter ??
62
65
  ((_url, requestInit) => Promise.resolve(new Request(_url, requestInit)));
66
+ this.fetchRequest = eventSourceInit?.fetch ?? ((request, signal) => fetch(request, { signal }));
63
67
  this.signal = eventSourceInit?.signal;
64
68
  this.eventTimeout = eventSourceInit?.eventTimeout;
65
69
  this.eventTimeoutConfigured = eventSourceInit?.eventTimeout !== undefined;
@@ -103,9 +107,7 @@ export class FetchEventSource extends EventTarget {
103
107
  };
104
108
  void this.adapter(this.url, requestInit)
105
109
  .then(async (request) => {
106
- const response = await fetch(request, {
107
- signal: connectionAbortController.signal,
108
- });
110
+ const response = await this.fetchRequest(request, connectionAbortController.signal);
109
111
  let validatedResponse;
110
112
  try {
111
113
  validatedResponse = await validate(response, true, undefined, this.logger);
@@ -132,7 +134,12 @@ export class FetchEventSource extends EventTarget {
132
134
  this.receivedComplete();
133
135
  })
134
136
  .catch((error) => {
135
- this.receivedError(error);
137
+ if (error instanceof RequestValidationError || (error instanceof TokenProviderError && error.reason !== 'temporary') || error instanceof AuthorizationRequiredError) {
138
+ this.receivedFatalError(error);
139
+ }
140
+ else {
141
+ this.receivedError(error);
142
+ }
136
143
  })
137
144
  .finally(() => {
138
145
  if (this.connectionReader) {
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-event-source.js","sourceRoot":"","sources":["../src/fetch-event-source.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetch-event-source.js","sourceRoot":"","sources":["../src/fetch-event-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { SecurityBinding, SecurityEndpoints } from './security-binding.js';
2
+ import { TokenConfiguration, TokenProvider, TokenRequest, TokenSet } from './token-provider.js';
3
+ /** Fresh application-authorized S256 PKCE grant, consumed once even if exchange fails or is canceled. */
4
+ export interface AuthorizationGrant {
5
+ readonly code: string;
6
+ readonly redirectUri: string;
7
+ readonly codeVerifier: string;
8
+ }
9
+ /** Application-owned OAuth configuration; secrets and session grants never appear in generated metadata. */
10
+ export interface OAuthProviderOptions {
11
+ readonly identity: string;
12
+ readonly clientId: string;
13
+ readonly clientSecret?: string;
14
+ readonly authentication?: 'none' | 'client_secret_basic' | 'client_secret_post';
15
+ readonly grantIdentity?: string;
16
+ /** The application verifies state, issuer, and redirect URI before supplying an authorization result. */
17
+ readonly authorization?: (request: TokenRequest, signal: AbortSignal) => Promise<AuthorizationGrant>;
18
+ readonly endpoints?: SecurityEndpoints;
19
+ /** Expected discovery issuer; endpoint overrides never change this separate trust value. */
20
+ readonly issuer?: string;
21
+ readonly fetch?: typeof fetch;
22
+ readonly now?: () => number;
23
+ }
24
+ /** Client-credentials, application-authorized PKCE, and refresh exchange without cookies or automatic redirects. */
25
+ export declare class FetchOAuthTokenProvider implements TokenProvider {
26
+ readonly identity: string;
27
+ private readonly options;
28
+ private readonly authentication;
29
+ private readonly consumedCodes;
30
+ private readonly fetch;
31
+ private readonly now;
32
+ constructor(options: OAuthProviderOptions);
33
+ /** Selects the application client and fresh session without changing the generated profile. */
34
+ configure(_binding: SecurityBinding): TokenConfiguration;
35
+ /** Acquires a client token or exchanges one application-authorized PKCE grant. */
36
+ acquire(request: TokenRequest, signal: AbortSignal): Promise<TokenSet>;
37
+ /** Rotates refresh credentials without using an authorization code again. */
38
+ refresh(request: TokenRequest, refreshToken: string, signal: AbortSignal): Promise<TokenSet>;
39
+ private resolveEndpoints;
40
+ private fetchResponse;
41
+ private exchange;
42
+ private parseTokens;
43
+ }
@@ -0,0 +1,193 @@
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 { AuthorizationRequiredError, TokenProviderError, } from './token-provider.js';
15
+ /** Client-credentials, application-authorized PKCE, and refresh exchange without cookies or automatic redirects. */
16
+ export class FetchOAuthTokenProvider {
17
+ identity;
18
+ options;
19
+ authentication;
20
+ consumedCodes = new Set();
21
+ fetch;
22
+ now;
23
+ constructor(options) {
24
+ this.authentication = options.authentication ?? 'none';
25
+ if (!['none', 'client_secret_basic', 'client_secret_post'].includes(this.authentication))
26
+ throw new TypeError('Unsupported OAuth client authentication; use an application TokenProvider');
27
+ if (!options.identity.trim() || !options.clientId.trim())
28
+ throw new TypeError('OAuth provider and client identities must not be blank');
29
+ if ((this.authentication === 'none') !== (options.clientSecret === undefined) || options.clientSecret === '') {
30
+ throw new TypeError('Client secrets require an explicit OAuth client authentication method');
31
+ }
32
+ this.identity = options.identity;
33
+ this.options = Object.freeze({ ...options, endpoints: options.endpoints && Object.freeze({ ...options.endpoints }) });
34
+ this.fetch = options.fetch ?? globalThis.fetch;
35
+ this.now = options.now ?? Date.now;
36
+ }
37
+ /** Selects the application client and fresh session without changing the generated profile. */
38
+ configure(_binding) {
39
+ return { clientIdentity: this.options.clientId, grantIdentity: this.options.grantIdentity, endpoints: this.options.endpoints };
40
+ }
41
+ /** Acquires a client token or exchanges one application-authorized PKCE grant. */
42
+ async acquire(request, signal) {
43
+ try {
44
+ request = await this.resolveEndpoints(request, signal);
45
+ let form;
46
+ if (request.flow === 'clientCredentials') {
47
+ if (this.authentication === 'none')
48
+ throw new TokenProviderError();
49
+ form = new URLSearchParams({ grant_type: 'client_credentials' });
50
+ }
51
+ else if (request.flow === 'authorizationCode') {
52
+ if (!this.options.authorization || this.consumedCodes.size >= 1024)
53
+ throw new AuthorizationRequiredError();
54
+ const grant = await this.options.authorization(request, signal);
55
+ if (!grant.code || !grant.redirectUri || !/^[A-Za-z0-9._~-]{43,128}$/.test(grant.codeVerifier))
56
+ throw new AuthorizationRequiredError();
57
+ const digest = new Uint8Array(await crypto.subtle.digest('SHA-256', new TextEncoder().encode(grant.code)));
58
+ const codeKey = Array.from(digest, byte => byte.toString(16).padStart(2, '0')).join('');
59
+ if (this.consumedCodes.size >= 1024 || this.consumedCodes.has(codeKey))
60
+ throw new AuthorizationRequiredError();
61
+ this.consumedCodes.add(codeKey);
62
+ form = new URLSearchParams({ grant_type: 'authorization_code', code: grant.code, redirect_uri: grant.redirectUri, code_verifier: grant.codeVerifier });
63
+ }
64
+ else
65
+ throw new TokenProviderError();
66
+ return await this.exchange(request, request.tokenUrl, form, signal);
67
+ }
68
+ catch (error) {
69
+ signal.throwIfAborted();
70
+ if (error instanceof AuthorizationRequiredError || error instanceof TokenProviderError)
71
+ throw error;
72
+ throw new TokenProviderError();
73
+ }
74
+ }
75
+ /** Rotates refresh credentials without using an authorization code again. */
76
+ async refresh(request, refreshToken, signal) {
77
+ try {
78
+ request = await this.resolveEndpoints(request, signal);
79
+ return await this.exchange(request, request.refreshUrl ?? request.tokenUrl, new URLSearchParams({ grant_type: 'refresh_token', refresh_token: refreshToken }), signal);
80
+ }
81
+ catch (error) {
82
+ signal.throwIfAborted();
83
+ if (error instanceof AuthorizationRequiredError || error instanceof TokenProviderError)
84
+ throw error;
85
+ throw new TokenProviderError();
86
+ }
87
+ }
88
+ async resolveEndpoints(request, signal) {
89
+ if (!request.discoveryUrl)
90
+ return request;
91
+ if (!this.options.issuer)
92
+ throw new TokenProviderError();
93
+ const response = await this.fetchResponse(endpoint(request.discoveryUrl), {
94
+ headers: { Accept: 'application/json' }, credentials: 'omit', redirect: 'manual', signal,
95
+ });
96
+ const document = await response.json();
97
+ if (response.status !== 200 || !isObject(document) || document.issuer !== this.options.issuer)
98
+ throw new TokenProviderError();
99
+ const methods = document.token_endpoint_auth_methods_supported ?? ['client_secret_basic'];
100
+ if (!Array.isArray(methods) || !methods.includes(this.authentication))
101
+ throw new TokenProviderError();
102
+ const tokenUrl = request.tokenUrl ?? document.token_endpoint;
103
+ const authorizationUrl = request.authorizationUrl ?? document.authorization_endpoint;
104
+ if (typeof tokenUrl !== 'string' || (authorizationUrl !== undefined && typeof authorizationUrl !== 'string'))
105
+ throw new TokenProviderError();
106
+ return { ...request, tokenUrl, authorizationUrl };
107
+ }
108
+ async fetchResponse(url, init) {
109
+ let response;
110
+ try {
111
+ response = await this.fetch(url, init);
112
+ }
113
+ catch {
114
+ init.signal?.throwIfAborted();
115
+ throw new TokenProviderError('temporary');
116
+ }
117
+ if (response.status === 408 || response.status === 429 || response.status >= 500 && response.status <= 599) {
118
+ await response.body?.cancel();
119
+ throw new TokenProviderError('temporary');
120
+ }
121
+ return response;
122
+ }
123
+ async exchange(request, tokenUrl, form, signal) {
124
+ if (request.scopes.length)
125
+ form.set('scope', request.scopes.join(' '));
126
+ if (request.audience !== undefined)
127
+ form.set('audience', request.audience);
128
+ if (request.resource !== undefined)
129
+ form.set('resource', request.resource);
130
+ const headers = new Headers({ Accept: 'application/json' });
131
+ if (this.authentication === 'client_secret_basic') {
132
+ const credential = `${formEncode(this.options.clientId)}:${formEncode(this.options.clientSecret)}`;
133
+ headers.set('Authorization', `Basic ${btoa(credential)}`);
134
+ }
135
+ else {
136
+ form.set('client_id', this.options.clientId);
137
+ if (this.authentication === 'client_secret_post')
138
+ form.set('client_secret', this.options.clientSecret);
139
+ }
140
+ const response = await this.fetchResponse(endpoint(tokenUrl), { method: 'POST', headers, body: form, credentials: 'omit', redirect: 'manual', signal });
141
+ const data = await response.json();
142
+ if (!isObject(data))
143
+ throw new TokenProviderError();
144
+ checkTokenResponse(response.status, data, request);
145
+ return this.parseTokens(data, request);
146
+ }
147
+ parseTokens(data, request) {
148
+ if (typeof data.access_token !== 'string' || !data.access_token || typeof data.token_type !== 'string' || data.token_type.toLowerCase() !== 'bearer')
149
+ throw new TokenProviderError();
150
+ let expiresAt;
151
+ if (data.expires_in !== undefined) {
152
+ if (typeof data.expires_in !== 'number' || !Number.isFinite(data.expires_in) || data.expires_in <= 0)
153
+ throw new TokenProviderError();
154
+ expiresAt = this.now() + data.expires_in * 1_000;
155
+ if (!Number.isFinite(expiresAt))
156
+ throw new TokenProviderError();
157
+ }
158
+ if (data.refresh_token !== undefined && (typeof data.refresh_token !== 'string' || !data.refresh_token))
159
+ throw new TokenProviderError();
160
+ if (data.scope !== undefined && (typeof data.scope !== 'string' || !request.scopes.every(scope => data.scope.split(' ').includes(scope))))
161
+ throw new TokenProviderError();
162
+ return { accessToken: data.access_token, expiresAt, refreshToken: data.refresh_token };
163
+ }
164
+ }
165
+ function endpoint(value) {
166
+ if (!value)
167
+ throw new TokenProviderError();
168
+ const url = new URL(value);
169
+ if (url.username || url.password || url.hash)
170
+ throw new TokenProviderError();
171
+ if (url.protocol !== 'https:' && !(url.protocol === 'http:' && ['localhost', '127.0.0.1', '[::1]'].includes(url.hostname)))
172
+ throw new TokenProviderError();
173
+ return url.toString();
174
+ }
175
+ function formEncode(value) {
176
+ return new URLSearchParams({ value }).toString().slice('value='.length);
177
+ }
178
+ function isObject(value) {
179
+ return !!value && typeof value === 'object' && !Array.isArray(value);
180
+ }
181
+ function checkTokenResponse(status, data, request) {
182
+ if (status !== 200) {
183
+ if (data.error === 'invalid_grant') {
184
+ if (request.flow === 'authorizationCode')
185
+ throw new AuthorizationRequiredError();
186
+ throw new TokenProviderError('invalidGrant');
187
+ }
188
+ if (data.error === 'temporarily_unavailable' || data.error === 'server_error')
189
+ throw new TokenProviderError('temporary');
190
+ throw new TokenProviderError();
191
+ }
192
+ }
193
+ //# sourceMappingURL=fetch-oauth-token-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-oauth-token-provider.js","sourceRoot":"","sources":["../src/fetch-oauth-token-provider.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { TokenManager } from './token-manager.js';
1
2
  import { SchemaLike } from './schema-runtime.js';
2
3
  import { Logger } from './logger.js';
3
4
  import { TextMediaTypeDecoder } from './media-type-codecs/media-type-decoder.js';
@@ -10,12 +11,15 @@ import { URLTemplate } from './url-template.js';
10
11
  export declare class FetchTransport implements Transport {
11
12
  baseUrl: URLTemplate;
12
13
  adapter?: RequestAdapter;
14
+ tokenManager?: TokenManager;
15
+ private readonly authorizedRequests;
13
16
  mediaTypeEncoders: MediaTypeEncoders;
14
17
  mediaTypeDecoders: MediaTypeDecoders;
15
18
  problemTypes: Map<string, SchemaLike<Problem>>;
16
19
  logger?: Logger;
17
20
  constructor(baseUrl: string | URLTemplate, options?: {
18
21
  adapter?: RequestAdapter;
22
+ tokenManager?: TokenManager;
19
23
  mediaTypeEncoders?: MediaTypeEncoders;
20
24
  mediaTypeDecoders?: MediaTypeDecoders;
21
25
  logger?: Logger;
@@ -23,6 +27,7 @@ export declare class FetchTransport implements Transport {
23
27
  registerProblem(type: URL | string, problemType: SchemaLike<Problem>): void;
24
28
  transportRequest(requestSpec: RequestSpec<unknown>): Promise<Request>;
25
29
  transportResponse(request: Request | RequestSpec<unknown>, dataExpected?: boolean): Promise<Response>;
30
+ private sendAuthorized;
26
31
  response<B, R>(requestSpec: RequestSpec<B>, resultType: SchemaLike<R>): Promise<OperationResponse<R>>;
27
32
  response<B>(requestSpec: RequestSpec<B>): Promise<OperationResponse<void>>;
28
33
  result<B, R>(requestSpec: RequestSpec<B>, resultType: SchemaLike<R>): Promise<R>;
@@ -11,6 +11,9 @@
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 { RequestValidationError } from './request-validation-error.js';
15
+ import { unknownGet } from './util/unknowns.js';
16
+ import { authorizeRequest, canRecoverAuthentication, redactSecurityResponse, rejectedBearerLeases } from './request-security.js';
14
17
  import { ZodError } from 'zod';
15
18
  import { mergeHeaders, validate } from './fetch.js';
16
19
  import { FetchEventSource } from './fetch-event-source.js';
@@ -27,6 +30,8 @@ import { errorToMessage } from './util/errors.js';
27
30
  export class FetchTransport {
28
31
  baseUrl;
29
32
  adapter;
33
+ tokenManager;
34
+ authorizedRequests = new WeakMap();
30
35
  mediaTypeEncoders;
31
36
  mediaTypeDecoders;
32
37
  problemTypes = new Map();
@@ -35,6 +40,7 @@ export class FetchTransport {
35
40
  this.baseUrl =
36
41
  typeof baseUrl === 'string' ? new URLTemplate(baseUrl) : baseUrl;
37
42
  this.adapter = options?.adapter;
43
+ this.tokenManager = options?.tokenManager;
38
44
  this.mediaTypeEncoders =
39
45
  options?.mediaTypeEncoders ?? MediaTypeEncoders.DEFAULT;
40
46
  this.mediaTypeDecoders =
@@ -46,6 +52,12 @@ export class FetchTransport {
46
52
  this.problemTypes.set(typeStr, problemType);
47
53
  }
48
54
  async transportRequest(requestSpec) {
55
+ try {
56
+ requestSpec.parameterValidation?.();
57
+ }
58
+ catch (cause) {
59
+ throw new RequestValidationError(cause);
60
+ }
49
61
  const url = this.baseUrl.complete(requestSpec.pathTemplate, requestSpec.pathParameters ?? {});
50
62
  if (requestSpec.queryParameters) {
51
63
  const encoder = this.mediaTypeEncoders.find(MediaType.WWWFormUrlEncoded);
@@ -86,7 +98,7 @@ export class FetchTransport {
86
98
  }
87
99
  body = this.mediaTypeEncoders
88
100
  .find(contentType)
89
- .encode(requestSpec.body, requestSpec.bodyType);
101
+ .encode(requestSpec.body, requestSpec.bodyType, 'request');
90
102
  }
91
103
  }
92
104
  const init = {
@@ -94,20 +106,43 @@ export class FetchTransport {
94
106
  body,
95
107
  method: requestSpec.method,
96
108
  signal: requestSpec.signal,
109
+ redirect: requestSpec.security?.length ? 'manual' : undefined,
97
110
  };
98
111
  if (body instanceof ReadableStream) {
99
112
  init.duplex = 'half';
100
113
  }
101
114
  const request = new Request(url.toString(), init);
102
- return (await this.adapter?.adapt(this, request)) ?? request;
115
+ const adapted = (await this.adapter?.adapt(this, request)) ?? request;
116
+ if (!requestSpec.security?.length)
117
+ return adapted;
118
+ const authorized = await authorizeRequest(adapted, requestSpec.security, this.tokenManager);
119
+ this.authorizedRequests.set(authorized.request, authorized);
120
+ return authorized.request;
103
121
  }
104
122
  async transportResponse(request, dataExpected) {
105
- const req = request instanceof Request
106
- ? request
107
- : await this.transportRequest(request);
108
- const response = await fetch(req);
123
+ const req = request instanceof Request ? request : await this.transportRequest(request);
124
+ const response = await this.sendAuthorized(req, { recovered: false });
109
125
  return await validate(response, dataExpected ?? false, this.problemTypes, this.logger);
110
126
  }
127
+ async sendAuthorized(request, budget) {
128
+ let req = request;
129
+ let authorized = this.authorizedRequests.get(req);
130
+ if (authorized) {
131
+ authorized = await authorizeRequest(req, authorized.bindings, this.tokenManager, authorized);
132
+ req = authorized.request;
133
+ this.authorizedRequests.set(req, authorized);
134
+ }
135
+ let response = await fetch(req);
136
+ if (authorized && this.tokenManager && !budget.recovered && canRecoverAuthentication(authorized, response)) {
137
+ budget.recovered = true;
138
+ await response.body?.cancel();
139
+ await Promise.all(rejectedBearerLeases(authorized).map(lease => this.tokenManager.invalidate(lease)));
140
+ authorized = await authorizeRequest(req, authorized.bindings, this.tokenManager, authorized);
141
+ this.authorizedRequests.set(authorized.request, authorized);
142
+ response = await fetch(authorized.request);
143
+ }
144
+ return authorized ? redactSecurityResponse(response, authorized.bindings) : response;
145
+ }
111
146
  async response(request, responseType) {
112
147
  const response = await this.transportResponse(request, !!responseType);
113
148
  if (!responseType) {
@@ -138,19 +173,29 @@ export class FetchTransport {
138
173
  }
139
174
  }
140
175
  eventSource(requestSpec) {
176
+ const budget = { recovered: false };
141
177
  //
142
178
  const adapter = async (url, requestInit) => {
143
- const eventSourceSpec = { ...requestSpec, pathTemplate: url };
179
+ const eventSourceSpec = {
180
+ ...requestSpec, pathTemplate: url,
181
+ signal: composeAbortSignals(requestSpec.signal, requestInit.signal ?? undefined),
182
+ };
144
183
  const request = await this.transportRequest(eventSourceSpec);
145
- return new Request(request, {
184
+ const authorized = this.authorizedRequests.get(request);
185
+ const adapted = new Request(request, {
146
186
  ...requestInit,
187
+ redirect: authorized ? 'manual' : requestInit.redirect,
147
188
  headers: mergeHeaders(request.headers, requestInit.headers),
148
189
  signal: composeAbortSignals(eventSourceSpec.signal, requestInit.signal ?? undefined),
149
190
  });
191
+ if (authorized)
192
+ this.authorizedRequests.set(adapted, { ...authorized, request: adapted });
193
+ return adapted;
150
194
  };
151
195
  return new FetchEventSource(requestSpec.pathTemplate, {
152
196
  logger: this.logger,
153
197
  adapter,
198
+ fetch: request => this.sendAuthorized(request, budget),
154
199
  signal: requestSpec.signal,
155
200
  });
156
201
  }
@@ -228,6 +273,11 @@ export class FetchTransport {
228
273
  };
229
274
  eventSource.onerror = (event) => {
230
275
  this.logger?.error?.({ event }, 'event source error');
276
+ const cause = unknownGet(event, 'error');
277
+ if (eventSource.readyState === eventSource.CLOSED) {
278
+ fail(cause ?? new Error('Event source closed with an error'));
279
+ finish();
280
+ }
231
281
  };
232
282
  let abortHandler;
233
283
  if (requestSpec.signal?.aborted) {