@outfoxx/sunday 2.0.0-beta.2 → 2.0.0-beta.21

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 (141) hide show
  1. package/README.md +346 -4
  2. package/build/authentication-adapter.d.ts +21 -0
  3. package/build/authentication-adapter.js +74 -0
  4. package/build/authentication-adapter.js.map +1 -0
  5. package/build/bearer-token-rejection-adapter.d.ts +6 -0
  6. package/build/bearer-token-rejection-adapter.js +25 -0
  7. package/build/bearer-token-rejection-adapter.js.map +1 -0
  8. package/build/client-settings.d.ts +22 -0
  9. package/build/client-settings.js +180 -0
  10. package/build/client-settings.js.map +1 -0
  11. package/build/credentials.d.ts +58 -0
  12. package/build/credentials.js +51 -0
  13. package/build/credentials.js.map +1 -0
  14. package/build/event-parser.d.ts +23 -8
  15. package/build/event-parser.js +93 -121
  16. package/build/event-parser.js.map +1 -1
  17. package/build/fetch-copy.d.ts +15 -0
  18. package/build/fetch-copy.js +71 -0
  19. package/build/fetch-copy.js.map +1 -0
  20. package/build/fetch-event-source.d.ts +18 -8
  21. package/build/fetch-event-source.js +241 -144
  22. package/build/fetch-event-source.js.map +1 -1
  23. package/build/fetch-oauth-token-provider.d.ts +28 -0
  24. package/build/fetch-oauth-token-provider.js +213 -0
  25. package/build/fetch-oauth-token-provider.js.map +1 -0
  26. package/build/fetch-transport.d.ts +15 -1
  27. package/build/fetch-transport.js +142 -132
  28. package/build/fetch-transport.js.map +1 -1
  29. package/build/fetch.js +24 -10
  30. package/build/fetch.js.map +1 -1
  31. package/build/header-token-adapters.d.ts +28 -0
  32. package/build/header-token-adapters.js +121 -0
  33. package/build/header-token-adapters.js.map +1 -0
  34. package/build/index.d.ts +23 -1
  35. package/build/index.js +22 -1
  36. package/build/index.js.map +1 -1
  37. package/build/media-type-codecs/binary-decoder.d.ts +1 -0
  38. package/build/media-type-codecs/binary-decoder.js +4 -11
  39. package/build/media-type-codecs/binary-decoder.js.map +1 -1
  40. package/build/media-type-codecs/cbor-encoder.d.ts +2 -2
  41. package/build/media-type-codecs/cbor-encoder.js +2 -2
  42. package/build/media-type-codecs/cbor-encoder.js.map +1 -1
  43. package/build/media-type-codecs/json-encoder.d.ts +3 -3
  44. package/build/media-type-codecs/json-encoder.js +4 -4
  45. package/build/media-type-codecs/json-encoder.js.map +1 -1
  46. package/build/media-type-codecs/media-type-encoder.d.ts +3 -3
  47. package/build/media-type-codecs/media-type-encoder.js.map +1 -1
  48. package/build/media-type-codecs/www-form-url-encoder.d.ts +2 -2
  49. package/build/media-type-codecs/www-form-url-encoder.js +2 -2
  50. package/build/media-type-codecs/www-form-url-encoder.js.map +1 -1
  51. package/build/model-construction.d.ts +5 -0
  52. package/build/model-construction.js +40 -0
  53. package/build/model-construction.js.map +1 -0
  54. package/build/model-schema.d.ts +9 -0
  55. package/build/model-schema.js +131 -0
  56. package/build/model-schema.js.map +1 -0
  57. package/build/oauth-wire.d.ts +33 -0
  58. package/build/oauth-wire.js +143 -0
  59. package/build/oauth-wire.js.map +1 -0
  60. package/build/operation.d.ts +3 -1
  61. package/build/problem.d.ts +39 -16
  62. package/build/problem.js +88 -32
  63. package/build/problem.js.map +1 -1
  64. package/build/request-adapter.d.ts +8 -0
  65. package/build/request-adapter.js +15 -0
  66. package/build/request-adapter.js.map +1 -0
  67. package/build/request-adapters-compat.d.ts +6 -0
  68. package/build/request-adapters-compat.js +19 -0
  69. package/build/request-adapters-compat.js.map +1 -0
  70. package/build/request-adapters.d.ts +13 -23
  71. package/build/request-adapters.js +40 -31
  72. package/build/request-adapters.js.map +1 -1
  73. package/build/request-body.d.ts +24 -0
  74. package/build/request-body.js +104 -0
  75. package/build/request-body.js.map +1 -0
  76. package/build/request-cancellation-error.d.ts +13 -0
  77. package/build/request-cancellation-error.js +43 -0
  78. package/build/request-cancellation-error.js.map +1 -0
  79. package/build/request-context.d.ts +4 -0
  80. package/build/request-context.js +29 -0
  81. package/build/request-context.js.map +1 -0
  82. package/build/request-execution.d.ts +13 -0
  83. package/build/request-execution.js +80 -0
  84. package/build/request-execution.js.map +1 -0
  85. package/build/request-security-bindings.d.ts +5 -0
  86. package/build/request-security-bindings.js +30 -0
  87. package/build/request-security-bindings.js.map +1 -0
  88. package/build/request-security.d.ts +20 -0
  89. package/build/request-security.js +223 -0
  90. package/build/request-security.js.map +1 -0
  91. package/build/request-validation-error.d.ts +4 -0
  92. package/build/request-validation-error.js +21 -0
  93. package/build/request-validation-error.js.map +1 -0
  94. package/build/response-adapter.d.ts +10 -0
  95. package/build/response-adapter.js +15 -0
  96. package/build/response-adapter.js.map +1 -0
  97. package/build/response-adapters.d.ts +13 -0
  98. package/build/response-adapters.js +75 -0
  99. package/build/response-adapters.js.map +1 -0
  100. package/build/schema-builtins.js +11 -21
  101. package/build/schema-builtins.js.map +1 -1
  102. package/build/schema-runtime.d.ts +8 -1
  103. package/build/schema-runtime.js +12 -3
  104. package/build/schema-runtime.js.map +1 -1
  105. package/build/security-binding.d.ts +22 -0
  106. package/build/security-binding.js +15 -0
  107. package/build/security-binding.js.map +1 -0
  108. package/build/standard-authentication-adapter.d.ts +18 -0
  109. package/build/standard-authentication-adapter.js +58 -0
  110. package/build/standard-authentication-adapter.js.map +1 -0
  111. package/build/token-manager.d.ts +42 -0
  112. package/build/token-manager.js +276 -0
  113. package/build/token-manager.js.map +1 -0
  114. package/build/token-provider.d.ts +52 -0
  115. package/build/token-provider.js +102 -0
  116. package/build/token-provider.js.map +1 -0
  117. package/build/transport.d.ts +10 -3
  118. package/build/unknown-variant.d.ts +12 -0
  119. package/build/unknown-variant.js +45 -0
  120. package/build/unknown-variant.js.map +1 -0
  121. package/build/url-template.d.ts +3 -0
  122. package/build/url-template.js +30 -2
  123. package/build/url-template.js.map +1 -1
  124. package/build/util/abort.d.ts +3 -0
  125. package/build/util/abort.js +42 -0
  126. package/build/util/abort.js.map +1 -0
  127. package/build/util/base64.d.ts +4 -0
  128. package/build/util/base64.js +46 -0
  129. package/build/util/base64.js.map +1 -0
  130. package/build/util/native-fetch.d.ts +2 -0
  131. package/build/util/native-fetch.js +39 -0
  132. package/build/util/native-fetch.js.map +1 -0
  133. package/build/util/nullify.js +12 -5
  134. package/build/util/nullify.js.map +1 -1
  135. package/build/util/owned-body.d.ts +12 -0
  136. package/build/util/owned-body.js +243 -0
  137. package/build/util/owned-body.js.map +1 -0
  138. package/build/util/status-title.d.ts +2 -0
  139. package/build/util/status-title.js +83 -0
  140. package/build/util/status-title.js.map +1 -0
  141. package/package.json +18 -6
@@ -0,0 +1,213 @@
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 * as oauth from 'oauth4webapi';
15
+ import { discardBody } from './util/abort.js';
16
+ import { isRequestStopped } from './request-cancellation-error.js';
17
+ import { AuthorizationRequiredError, TokenProviderError, } from './token-provider.js';
18
+ import { DiscoveryMetadata, TokenSuccessResponse, TokenErrorResponse, endpoint, } from './oauth-wire.js';
19
+ /** Client-credentials, application-authorized PKCE, and refresh exchange without cookies or automatic redirects. */
20
+ export class FetchOAuthTokenProvider {
21
+ identity;
22
+ options;
23
+ authentication;
24
+ consumedCodes = new Set();
25
+ fetch;
26
+ now;
27
+ constructor(options) {
28
+ this.authentication = options.authentication ?? 'none';
29
+ if (!['none', 'client_secret_basic', 'client_secret_post'].includes(this.authentication))
30
+ throw new TypeError('Unsupported OAuth client authentication; use an application TokenProvider');
31
+ if (!options.identity.trim() || !options.clientId.trim())
32
+ throw new TypeError('OAuth provider and client identities must not be blank');
33
+ if ((this.authentication === 'none') !==
34
+ (options.clientSecret === undefined) ||
35
+ options.clientSecret === '') {
36
+ throw new TypeError('Client secrets require an explicit OAuth client authentication method');
37
+ }
38
+ this.identity = options.identity;
39
+ this.options = Object.freeze({
40
+ ...options,
41
+ endpoints: options.endpoints && Object.freeze({ ...options.endpoints }),
42
+ });
43
+ this.fetch = options.fetch ?? globalThis.fetch;
44
+ this.now = options.now ?? Date.now;
45
+ }
46
+ /** Selects the application client and fresh session without changing the generated profile. */
47
+ configure(_binding) {
48
+ return {
49
+ clientIdentity: this.options.clientId,
50
+ grantIdentity: this.options.grantIdentity,
51
+ endpoints: this.options.endpoints,
52
+ };
53
+ }
54
+ /** Acquires a client token or exchanges one application-authorized PKCE grant. */
55
+ async acquire(request, signal) {
56
+ try {
57
+ request = await this.resolveEndpoints(request, signal);
58
+ let form;
59
+ if (request.flow === 'clientCredentials') {
60
+ if (this.authentication === 'none')
61
+ throw new TokenProviderError();
62
+ form = new URLSearchParams({ grant_type: 'client_credentials' });
63
+ }
64
+ else if (request.flow === 'authorizationCode') {
65
+ if (!this.options.authorization || this.consumedCodes.size >= 1024)
66
+ throw new AuthorizationRequiredError();
67
+ const grant = await this.options.authorization(request, signal);
68
+ if (!grant.code ||
69
+ !grant.redirectUri ||
70
+ !/^[A-Za-z0-9._~-]{43,128}$/.test(grant.codeVerifier))
71
+ throw new AuthorizationRequiredError();
72
+ const digest = new Uint8Array(await crypto.subtle.digest('SHA-256', new TextEncoder().encode(grant.code)));
73
+ const codeKey = Array.from(digest, (byte) => byte.toString(16).padStart(2, '0')).join('');
74
+ if (this.consumedCodes.size >= 1024 || this.consumedCodes.has(codeKey))
75
+ throw new AuthorizationRequiredError();
76
+ this.consumedCodes.add(codeKey);
77
+ form = new URLSearchParams({
78
+ grant_type: 'authorization_code',
79
+ code: grant.code,
80
+ redirect_uri: grant.redirectUri,
81
+ code_verifier: grant.codeVerifier,
82
+ });
83
+ }
84
+ else
85
+ throw new TokenProviderError();
86
+ return await this.exchange(request, request.tokenUrl, form, signal);
87
+ }
88
+ catch (error) {
89
+ signal.throwIfAborted();
90
+ if (isRequestStopped(error))
91
+ throw error;
92
+ if (error instanceof AuthorizationRequiredError ||
93
+ error instanceof TokenProviderError)
94
+ throw error;
95
+ throw new TokenProviderError();
96
+ }
97
+ }
98
+ /** Rotates refresh credentials without using an authorization code again. */
99
+ async refresh(request, refreshToken, signal) {
100
+ try {
101
+ request = await this.resolveEndpoints(request, signal);
102
+ return await this.exchange(request, request.refreshUrl ?? request.tokenUrl, new URLSearchParams({
103
+ grant_type: 'refresh_token',
104
+ refresh_token: refreshToken,
105
+ }), signal);
106
+ }
107
+ catch (error) {
108
+ signal.throwIfAborted();
109
+ if (isRequestStopped(error))
110
+ throw error;
111
+ if (error instanceof AuthorizationRequiredError ||
112
+ error instanceof TokenProviderError)
113
+ throw error;
114
+ throw new TokenProviderError();
115
+ }
116
+ }
117
+ async resolveEndpoints(request, signal) {
118
+ if (!request.discoveryUrl)
119
+ return request;
120
+ if (!this.options.issuer)
121
+ throw new TokenProviderError();
122
+ const response = await this.fetchResponse(endpoint(request.discoveryUrl), {
123
+ headers: { Accept: 'application/json' },
124
+ credentials: 'omit',
125
+ redirect: 'manual',
126
+ signal,
127
+ });
128
+ if (response.status !== 200) {
129
+ const error = new TokenProviderError();
130
+ discardBody(response, error);
131
+ throw error;
132
+ }
133
+ const metadata = DiscoveryMetadata.parse(await response.text());
134
+ if (metadata.issuer !== this.options.issuer)
135
+ throw new TokenProviderError();
136
+ const publicCode = this.authentication === 'none' && request.flow === 'authorizationCode';
137
+ if (!publicCode &&
138
+ !(metadata.methods ?? ['client_secret_basic']).includes(this.authentication))
139
+ throw new TokenProviderError();
140
+ const tokenUrl = request.tokenUrl ?? metadata.tokenUrl;
141
+ const authorizationUrl = request.authorizationUrl ?? metadata.authorizationUrl;
142
+ endpoint(tokenUrl);
143
+ if (authorizationUrl !== undefined)
144
+ endpoint(authorizationUrl);
145
+ else if (request.flow === 'authorizationCode')
146
+ throw new TokenProviderError();
147
+ if (request.refreshUrl !== undefined)
148
+ endpoint(request.refreshUrl);
149
+ return { ...request, tokenUrl, authorizationUrl };
150
+ }
151
+ async fetchResponse(url, init) {
152
+ let response;
153
+ try {
154
+ response = await this.fetch(url, init);
155
+ }
156
+ catch (error) {
157
+ init.signal?.throwIfAborted();
158
+ if (isRequestStopped(error))
159
+ throw error;
160
+ throw new TokenProviderError('temporary');
161
+ }
162
+ if (response.status === 408 ||
163
+ response.status === 429 ||
164
+ (response.status >= 500 && response.status <= 599)) {
165
+ const error = new TokenProviderError('temporary');
166
+ discardBody(response, error);
167
+ throw error;
168
+ }
169
+ return response;
170
+ }
171
+ async exchange(request, tokenUrl, form, signal) {
172
+ if (request.scopes.length)
173
+ form.set('scope', request.scopes.join(' '));
174
+ if (request.audience !== undefined)
175
+ form.set('audience', request.audience);
176
+ if (request.resource !== undefined)
177
+ form.set('resource', request.resource);
178
+ const url = endpoint(tokenUrl);
179
+ let authentication = oauth.None();
180
+ if (this.authentication === 'client_secret_basic')
181
+ authentication = oauth.ClientSecretBasic(this.options.clientSecret);
182
+ else if (this.authentication === 'client_secret_post')
183
+ authentication = oauth.ClientSecretPost(this.options.clientSecret);
184
+ const grantType = form.get('grant_type');
185
+ form.delete('grant_type');
186
+ const response = await oauth.genericTokenEndpointRequest({ issuer: new URL(url).origin, token_endpoint: url }, { client_id: this.options.clientId }, authentication, grantType, form, {
187
+ signal,
188
+ // Intentionally deprecated upstream to discourage non-TLS use; endpoint() has already
189
+ // restricted HTTP to loopback. This is required for the supported local-provider policy.
190
+ [oauth.allowInsecureRequests]: new URL(url).protocol === 'http:',
191
+ [oauth.customFetch]: (input, init) => this.fetchResponse(String(input), {
192
+ ...init,
193
+ credentials: 'omit',
194
+ redirect: 'manual',
195
+ signal,
196
+ }),
197
+ });
198
+ const body = await response.text();
199
+ if (response.status !== 200) {
200
+ const code = TokenErrorResponse.parse(body).code;
201
+ if (code === 'invalid_grant') {
202
+ if (request.flow === 'authorizationCode')
203
+ throw new AuthorizationRequiredError();
204
+ throw new TokenProviderError('invalidGrant');
205
+ }
206
+ if (code === 'temporarily_unavailable' || code === 'server_error')
207
+ throw new TokenProviderError('temporary');
208
+ throw new TokenProviderError();
209
+ }
210
+ return (await TokenSuccessResponse.parse(body)).tokens(request.scopes, this.now());
211
+ }
212
+ }
213
+ //# 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 { ResponseAdapter } from './response-adapter.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';
@@ -9,20 +10,33 @@ import { OperationResponse } from './operation-response.js';
9
10
  import { URLTemplate } from './url-template.js';
10
11
  export declare class FetchTransport implements Transport {
11
12
  baseUrl: URLTemplate;
12
- adapter?: RequestAdapter;
13
+ private readonly execution;
14
+ private readonly maxBufferedRequestBytes?;
13
15
  mediaTypeEncoders: MediaTypeEncoders;
14
16
  mediaTypeDecoders: MediaTypeDecoders;
15
17
  problemTypes: Map<string, SchemaLike<Problem>>;
16
18
  logger?: Logger;
17
19
  constructor(baseUrl: string | URLTemplate, options?: {
20
+ /** @deprecated Use requestAdapter. The adapt method now receives only the native request. */
18
21
  adapter?: RequestAdapter;
22
+ requestAdapter?: RequestAdapter;
23
+ responseAdapter?: ResponseAdapter;
19
24
  mediaTypeEncoders?: MediaTypeEncoders;
20
25
  mediaTypeDecoders?: MediaTypeDecoders;
21
26
  logger?: Logger;
27
+ /** Upload fallback buffer limit in bytes; defaults to 16 MiB. */
28
+ maxBufferedRequestBytes?: number;
22
29
  });
30
+ /** Uses a generated endpoint with only the adapters explicitly supplied by the caller. */
31
+ static fromSettings(settings: {
32
+ baseUrl: string;
33
+ }, options?: ConstructorParameters<typeof FetchTransport>[1]): FetchTransport;
23
34
  registerProblem(type: URL | string, problemType: SchemaLike<Problem>): void;
35
+ /** Materializes an optionally authorized native request; execution belongs to its consumer. */
24
36
  transportRequest(requestSpec: RequestSpec<unknown>): Promise<Request>;
37
+ private prepareRequest;
25
38
  transportResponse(request: Request | RequestSpec<unknown>, dataExpected?: boolean): Promise<Response>;
39
+ private execute;
26
40
  response<B, R>(requestSpec: RequestSpec<B>, resultType: SchemaLike<R>): Promise<OperationResponse<R>>;
27
41
  response<B>(requestSpec: RequestSpec<B>): Promise<OperationResponse<void>>;
28
42
  result<B, R>(requestSpec: RequestSpec<B>, resultType: SchemaLike<R>): Promise<R>;