@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.
- package/README.md +346 -4
- package/build/authentication-adapter.d.ts +21 -0
- package/build/authentication-adapter.js +74 -0
- package/build/authentication-adapter.js.map +1 -0
- package/build/bearer-token-rejection-adapter.d.ts +6 -0
- package/build/bearer-token-rejection-adapter.js +25 -0
- package/build/bearer-token-rejection-adapter.js.map +1 -0
- package/build/client-settings.d.ts +22 -0
- package/build/client-settings.js +180 -0
- package/build/client-settings.js.map +1 -0
- package/build/credentials.d.ts +58 -0
- package/build/credentials.js +51 -0
- package/build/credentials.js.map +1 -0
- package/build/event-parser.d.ts +23 -8
- package/build/event-parser.js +93 -121
- package/build/event-parser.js.map +1 -1
- package/build/fetch-copy.d.ts +15 -0
- package/build/fetch-copy.js +71 -0
- package/build/fetch-copy.js.map +1 -0
- package/build/fetch-event-source.d.ts +18 -8
- package/build/fetch-event-source.js +241 -144
- package/build/fetch-event-source.js.map +1 -1
- package/build/fetch-oauth-token-provider.d.ts +28 -0
- package/build/fetch-oauth-token-provider.js +213 -0
- package/build/fetch-oauth-token-provider.js.map +1 -0
- package/build/fetch-transport.d.ts +15 -1
- package/build/fetch-transport.js +142 -132
- package/build/fetch-transport.js.map +1 -1
- package/build/fetch.js +24 -10
- package/build/fetch.js.map +1 -1
- package/build/header-token-adapters.d.ts +28 -0
- package/build/header-token-adapters.js +121 -0
- package/build/header-token-adapters.js.map +1 -0
- package/build/index.d.ts +23 -1
- package/build/index.js +22 -1
- package/build/index.js.map +1 -1
- package/build/media-type-codecs/binary-decoder.d.ts +1 -0
- package/build/media-type-codecs/binary-decoder.js +4 -11
- package/build/media-type-codecs/binary-decoder.js.map +1 -1
- package/build/media-type-codecs/cbor-encoder.d.ts +2 -2
- package/build/media-type-codecs/cbor-encoder.js +2 -2
- package/build/media-type-codecs/cbor-encoder.js.map +1 -1
- package/build/media-type-codecs/json-encoder.d.ts +3 -3
- package/build/media-type-codecs/json-encoder.js +4 -4
- package/build/media-type-codecs/json-encoder.js.map +1 -1
- package/build/media-type-codecs/media-type-encoder.d.ts +3 -3
- package/build/media-type-codecs/media-type-encoder.js.map +1 -1
- package/build/media-type-codecs/www-form-url-encoder.d.ts +2 -2
- package/build/media-type-codecs/www-form-url-encoder.js +2 -2
- package/build/media-type-codecs/www-form-url-encoder.js.map +1 -1
- package/build/model-construction.d.ts +5 -0
- package/build/model-construction.js +40 -0
- package/build/model-construction.js.map +1 -0
- package/build/model-schema.d.ts +9 -0
- package/build/model-schema.js +131 -0
- package/build/model-schema.js.map +1 -0
- package/build/oauth-wire.d.ts +33 -0
- package/build/oauth-wire.js +143 -0
- package/build/oauth-wire.js.map +1 -0
- package/build/operation.d.ts +3 -1
- package/build/problem.d.ts +39 -16
- package/build/problem.js +88 -32
- package/build/problem.js.map +1 -1
- package/build/request-adapter.d.ts +8 -0
- package/build/request-adapter.js +15 -0
- package/build/request-adapter.js.map +1 -0
- package/build/request-adapters-compat.d.ts +6 -0
- package/build/request-adapters-compat.js +19 -0
- package/build/request-adapters-compat.js.map +1 -0
- package/build/request-adapters.d.ts +13 -23
- package/build/request-adapters.js +40 -31
- package/build/request-adapters.js.map +1 -1
- package/build/request-body.d.ts +24 -0
- package/build/request-body.js +104 -0
- package/build/request-body.js.map +1 -0
- package/build/request-cancellation-error.d.ts +13 -0
- package/build/request-cancellation-error.js +43 -0
- package/build/request-cancellation-error.js.map +1 -0
- package/build/request-context.d.ts +4 -0
- package/build/request-context.js +29 -0
- package/build/request-context.js.map +1 -0
- package/build/request-execution.d.ts +13 -0
- package/build/request-execution.js +80 -0
- package/build/request-execution.js.map +1 -0
- package/build/request-security-bindings.d.ts +5 -0
- package/build/request-security-bindings.js +30 -0
- package/build/request-security-bindings.js.map +1 -0
- package/build/request-security.d.ts +20 -0
- package/build/request-security.js +223 -0
- package/build/request-security.js.map +1 -0
- package/build/request-validation-error.d.ts +4 -0
- package/build/request-validation-error.js +21 -0
- package/build/request-validation-error.js.map +1 -0
- package/build/response-adapter.d.ts +10 -0
- package/build/response-adapter.js +15 -0
- package/build/response-adapter.js.map +1 -0
- package/build/response-adapters.d.ts +13 -0
- package/build/response-adapters.js +75 -0
- package/build/response-adapters.js.map +1 -0
- package/build/schema-builtins.js +11 -21
- package/build/schema-builtins.js.map +1 -1
- package/build/schema-runtime.d.ts +8 -1
- package/build/schema-runtime.js +12 -3
- package/build/schema-runtime.js.map +1 -1
- package/build/security-binding.d.ts +22 -0
- package/build/security-binding.js +15 -0
- package/build/security-binding.js.map +1 -0
- package/build/standard-authentication-adapter.d.ts +18 -0
- package/build/standard-authentication-adapter.js +58 -0
- package/build/standard-authentication-adapter.js.map +1 -0
- package/build/token-manager.d.ts +42 -0
- package/build/token-manager.js +276 -0
- package/build/token-manager.js.map +1 -0
- package/build/token-provider.d.ts +52 -0
- package/build/token-provider.js +102 -0
- package/build/token-provider.js.map +1 -0
- package/build/transport.d.ts +10 -3
- package/build/unknown-variant.d.ts +12 -0
- package/build/unknown-variant.js +45 -0
- package/build/unknown-variant.js.map +1 -0
- package/build/url-template.d.ts +3 -0
- package/build/url-template.js +30 -2
- package/build/url-template.js.map +1 -1
- package/build/util/abort.d.ts +3 -0
- package/build/util/abort.js +42 -0
- package/build/util/abort.js.map +1 -0
- package/build/util/base64.d.ts +4 -0
- package/build/util/base64.js +46 -0
- package/build/util/base64.js.map +1 -0
- package/build/util/native-fetch.d.ts +2 -0
- package/build/util/native-fetch.js +39 -0
- package/build/util/native-fetch.js.map +1 -0
- package/build/util/nullify.js +12 -5
- package/build/util/nullify.js.map +1 -1
- package/build/util/owned-body.d.ts +12 -0
- package/build/util/owned-body.js +243 -0
- package/build/util/owned-body.js.map +1 -0
- package/build/util/status-title.d.ts +2 -0
- package/build/util/status-title.js +83 -0
- package/build/util/status-title.js.map +1 -0
- package/package.json +18 -6
|
@@ -0,0 +1,223 @@
|
|
|
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 { 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';
|
|
19
|
+
/** Adds all credentials atomically after every provider succeeds. */
|
|
20
|
+
export async function authorizeRequest(request, bindings, providers, maxBufferedRequestBytes) {
|
|
21
|
+
const url = new URL(request.url);
|
|
22
|
+
const headers = new Headers(request.headers);
|
|
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
|
+
}
|
|
44
|
+
request.signal.throwIfAborted();
|
|
45
|
+
bindings.forEach((binding, index) => applyCredential(binding, leases[index].tokens.accessToken, url, headers));
|
|
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
|
+
});
|
|
70
|
+
return { request: authorized, bindings, leases };
|
|
71
|
+
}
|
|
72
|
+
/** Recognizes explicit rejection of the bearer credential sent on this request. */
|
|
73
|
+
export function isBearerTokenRejection(request, response) {
|
|
74
|
+
return (response.status === 401 &&
|
|
75
|
+
/^Bearer[ \t]+[^ \t]+$/i.test(request.headers.get('Authorization') ?? '') &&
|
|
76
|
+
hasInvalidBearerChallenge(response.headers.get('WWW-Authenticate') ?? ''));
|
|
77
|
+
}
|
|
78
|
+
/** Returns only bearer receipts rejected by an invalid-token challenge, preserving other conjuncts. */
|
|
79
|
+
export function rejectedBearerLeases(request) {
|
|
80
|
+
const token = /^Bearer[ \t]+([^ \t]+)$/i.exec(request.request.headers.get('Authorization') ?? '')?.[1];
|
|
81
|
+
return request.leases.filter((lease, index) => isBearerBinding(request.bindings[index]) &&
|
|
82
|
+
token === lease.tokens.accessToken);
|
|
83
|
+
}
|
|
84
|
+
function isBearerBinding(binding) {
|
|
85
|
+
return (binding.transport.location === 'header' &&
|
|
86
|
+
binding.transport.name.toLowerCase() === 'authorization' &&
|
|
87
|
+
binding.transport.prefix?.toLowerCase() === 'bearer');
|
|
88
|
+
}
|
|
89
|
+
/** Removes query credentials from responses before error translation or diagnostic rendering. */
|
|
90
|
+
export function redactSecurityResponse(response, bindings) {
|
|
91
|
+
const queryNames = bindings
|
|
92
|
+
.filter((binding) => binding.transport.location === 'query')
|
|
93
|
+
.map((binding) => binding.transport.name);
|
|
94
|
+
if (!queryNames.length || !response.url)
|
|
95
|
+
return response;
|
|
96
|
+
const url = new URL(response.url);
|
|
97
|
+
for (const name of queryNames)
|
|
98
|
+
if (url.searchParams.has(name))
|
|
99
|
+
replaceQueryCredential(url, name, '[redacted]');
|
|
100
|
+
if (url.href === response.url)
|
|
101
|
+
return response;
|
|
102
|
+
// Filtered responses cannot be reconstructed; preserve the native response and its hidden body.
|
|
103
|
+
const result = response.status === 0 ? response : copyResponse(response);
|
|
104
|
+
Object.defineProperty(result, 'url', { value: url.href, configurable: true });
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
export function hasInvalidBearerChallenge(header) {
|
|
108
|
+
const parts = splitChallenges(header);
|
|
109
|
+
if (!parts)
|
|
110
|
+
return false;
|
|
111
|
+
let bearer = false;
|
|
112
|
+
for (let part of parts) {
|
|
113
|
+
const challenge = /^([a-z][a-z0-9_-]*)\s+(?!\s*=)(.*)$/i.exec(part);
|
|
114
|
+
if (challenge) {
|
|
115
|
+
bearer = challenge[1].toLowerCase() === 'bearer';
|
|
116
|
+
part = challenge[2];
|
|
117
|
+
}
|
|
118
|
+
else if (/^[a-z][a-z0-9_-]*$/i.test(part))
|
|
119
|
+
bearer = false;
|
|
120
|
+
const error = /^error\s*=\s*(?:"([^"]*)"|([^"\s]+))$/i.exec(part);
|
|
121
|
+
if (bearer && (error?.[1] ?? error?.[2]) === 'invalid_token')
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
function cookieEntries(headers) {
|
|
127
|
+
return (headers.get('Cookie') ?? '').split(';').flatMap((entry) => {
|
|
128
|
+
const split = entry.indexOf('=');
|
|
129
|
+
return split < 0
|
|
130
|
+
? []
|
|
131
|
+
: [[entry.slice(0, split).trim(), entry.slice(split + 1).trim()]];
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
// URLSearchParams re-encodes unrelated values, which can invalidate application-signed query parameters.
|
|
135
|
+
function replaceQueryCredential(url, name, credential) {
|
|
136
|
+
const fields = (url.search ? url.search.slice(1).split('&') : []).filter((field) => {
|
|
137
|
+
const key = field.split('=', 1)[0];
|
|
138
|
+
try {
|
|
139
|
+
return decodeURIComponent(key.replaceAll('+', ' ')) !== name;
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
fields.push(`${encodeURIComponent(name)}=${encodeURIComponent(credential)}`);
|
|
146
|
+
url.search = fields.join('&');
|
|
147
|
+
}
|
|
148
|
+
function validateTransports(bindings, url, headers) {
|
|
149
|
+
const names = new Set();
|
|
150
|
+
for (const binding of bindings) {
|
|
151
|
+
const transport = binding.transport;
|
|
152
|
+
const name = `${transport.location}:${transport.location === 'header' ? transport.name.toLowerCase() : transport.name}`;
|
|
153
|
+
if (names.has(name))
|
|
154
|
+
throw new TokenProviderError();
|
|
155
|
+
names.add(name);
|
|
156
|
+
if ((transport.location === 'header' && headers.has(transport.name)) ||
|
|
157
|
+
(transport.location === 'query' &&
|
|
158
|
+
url.searchParams.has(transport.name)) ||
|
|
159
|
+
(transport.location === 'cookie' &&
|
|
160
|
+
cookieEntries(headers).some(([name]) => name === transport.name)))
|
|
161
|
+
throw new TokenProviderError();
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
function applyCredential(binding, token, url, headers) {
|
|
165
|
+
const transport = binding.transport;
|
|
166
|
+
const credential = transport.prefix ? `${transport.prefix} ${token}` : token;
|
|
167
|
+
switch (transport.location) {
|
|
168
|
+
case 'header': {
|
|
169
|
+
if ([...credential].some((character) => character.codePointAt(0) < 32 || character.codePointAt(0) === 127))
|
|
170
|
+
throw new TokenProviderError();
|
|
171
|
+
headers.set(transport.name, credential);
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
case 'query':
|
|
175
|
+
replaceQueryCredential(url, transport.name, credential);
|
|
176
|
+
break;
|
|
177
|
+
case 'cookie': {
|
|
178
|
+
const entries = cookieEntries(headers).filter(([name]) => name !== transport.name);
|
|
179
|
+
entries.push([transport.name, encodeURIComponent(credential)]);
|
|
180
|
+
headers.set('Cookie', entries.map(([name, value]) => `${name}=${value}`).join('; '));
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
function splitChallenges(header) {
|
|
186
|
+
const parts = [];
|
|
187
|
+
let start = 0;
|
|
188
|
+
let quoted = false;
|
|
189
|
+
let escaped = false;
|
|
190
|
+
for (let index = 0; index < header.length; index++) {
|
|
191
|
+
const character = header[index];
|
|
192
|
+
if (escaped) {
|
|
193
|
+
escaped = false;
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
if (quoted && character === '\\') {
|
|
197
|
+
escaped = true;
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
if (character === '"')
|
|
201
|
+
quoted = !quoted;
|
|
202
|
+
if (!quoted && character === ',') {
|
|
203
|
+
parts.push(header.slice(start, index).trim());
|
|
204
|
+
start = index + 1;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
if (quoted || escaped)
|
|
208
|
+
return undefined;
|
|
209
|
+
parts.push(header.slice(start).trim());
|
|
210
|
+
return parts;
|
|
211
|
+
}
|
|
212
|
+
/** Reports all matching rejections, including unsafe requests and exhausted recovery budgets. */
|
|
213
|
+
export async function rejectCredentials(request, response) {
|
|
214
|
+
if (response.status !== 401 ||
|
|
215
|
+
!hasInvalidBearerChallenge(response.headers.get('WWW-Authenticate') ?? ''))
|
|
216
|
+
return;
|
|
217
|
+
let recoverable = true;
|
|
218
|
+
for (const lease of rejectedBearerLeases(request))
|
|
219
|
+
recoverable = ((await lease.invalidate?.()) ?? false) && recoverable;
|
|
220
|
+
if (!recoverable)
|
|
221
|
+
throw new RequestCancellationError('The credential owner rejected authentication recovery');
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=request-security.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-security.js","sourceRoot":"","sources":["../src/request-security.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
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
|
+
/** A typed request parameter failed validation before wire encoding. */
|
|
15
|
+
export class RequestValidationError extends Error {
|
|
16
|
+
constructor(cause) {
|
|
17
|
+
super('Request parameter validation failed', { cause });
|
|
18
|
+
this.name = 'RequestValidationError';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=request-validation-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-validation-error.js","sourceRoot":"","sources":["../src/request-validation-error.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;AAEjC,wEAAwE;AACxE,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,KAAc;QACxB,KAAK,CAAC,qCAAqC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF"}
|
|
@@ -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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"}
|
package/build/schema-builtins.js
CHANGED
|
@@ -16,6 +16,7 @@ import { z } from 'zod';
|
|
|
16
16
|
import { base64Tag, base64UrlTag, uriTag } from './media-type-codecs/cbor-tags.js';
|
|
17
17
|
import { ArrayBufferEncoding, } from './schema-policy.js';
|
|
18
18
|
import { defineSchema } from './schema-runtime.js';
|
|
19
|
+
import { decodeBase64, encodeBase64 } from './util/base64.js';
|
|
19
20
|
export const UNKNOWN_SCHEMA = z.unknown();
|
|
20
21
|
export const ANY_SCHEMA = UNKNOWN_SCHEMA;
|
|
21
22
|
export const NULL_SCHEMA = z.null();
|
|
@@ -81,39 +82,32 @@ const URL_CBOR_CODEC = z.codec(z.union([z.string(), z.instanceof(TaggedValue)]),
|
|
|
81
82
|
},
|
|
82
83
|
});
|
|
83
84
|
function base64Decoder(encoding) {
|
|
84
|
-
let
|
|
85
|
+
let alphabet;
|
|
85
86
|
switch (encoding) {
|
|
86
87
|
case ArrayBufferEncoding.BASE64:
|
|
87
|
-
|
|
88
|
+
alphabet = 'base64';
|
|
88
89
|
break;
|
|
89
90
|
case ArrayBufferEncoding.BASE64URL:
|
|
90
|
-
|
|
91
|
+
alphabet = 'base64url';
|
|
91
92
|
break;
|
|
92
93
|
default:
|
|
93
94
|
throw new TypeError(`Invalid ArrayBufferEncoding: ${encoding}`);
|
|
94
95
|
}
|
|
95
|
-
return (value) =>
|
|
96
|
-
const array = Uint8Array.fromBase64(value, options);
|
|
97
|
-
return array
|
|
98
|
-
.buffer
|
|
99
|
-
.slice();
|
|
100
|
-
};
|
|
96
|
+
return (value) => decodeBase64(value, alphabet);
|
|
101
97
|
}
|
|
102
98
|
function base64Encoder(encoding) {
|
|
103
|
-
let
|
|
99
|
+
let alphabet;
|
|
104
100
|
switch (encoding) {
|
|
105
101
|
case ArrayBufferEncoding.BASE64:
|
|
106
|
-
|
|
102
|
+
alphabet = 'base64';
|
|
107
103
|
break;
|
|
108
104
|
case ArrayBufferEncoding.BASE64URL:
|
|
109
|
-
|
|
105
|
+
alphabet = 'base64url';
|
|
110
106
|
break;
|
|
111
107
|
default:
|
|
112
108
|
throw new TypeError(`Invalid ArrayBufferEncoding: ${encoding}`);
|
|
113
109
|
}
|
|
114
|
-
return (value) =>
|
|
115
|
-
return new Uint8Array(value).toBase64(options);
|
|
116
|
-
};
|
|
110
|
+
return (value) => encodeBase64(new Uint8Array(value), alphabet);
|
|
117
111
|
}
|
|
118
112
|
function createArrayBufferSchema(policy) {
|
|
119
113
|
switch (policy.format) {
|
|
@@ -142,13 +136,9 @@ function createArrayBufferSchema(policy) {
|
|
|
142
136
|
const string = z.string().decode(value.value);
|
|
143
137
|
switch (value.tag) {
|
|
144
138
|
case base64Tag:
|
|
145
|
-
return
|
|
146
|
-
.fromBase64(string, { alphabet: 'base64', lastChunkHandling: 'loose' })
|
|
147
|
-
.buffer;
|
|
139
|
+
return decodeBase64(string, 'base64');
|
|
148
140
|
case base64UrlTag:
|
|
149
|
-
return
|
|
150
|
-
.fromBase64(string, { alphabet: 'base64url', lastChunkHandling: 'loose' })
|
|
151
|
-
.buffer;
|
|
141
|
+
return decodeBase64(string, 'base64url');
|
|
152
142
|
default:
|
|
153
143
|
ctx.issues.push({
|
|
154
144
|
code: 'invalid_value',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-builtins.js","sourceRoot":"","sources":["../src/schema-builtins.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;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AACnF,OAAO,EACL,mBAAmB,GAEpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"schema-builtins.js","sourceRoot":"","sources":["../src/schema-builtins.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,8 +29,15 @@ export declare function defineSchema<S extends AnySchema>(builder: (runtime: Sch
|
|
|
29
29
|
id?: symbol;
|
|
30
30
|
debugName?: string;
|
|
31
31
|
}): SchemaDef<S>;
|
|
32
|
+
/** Payload direction, independent of whether this application is a client or server. */
|
|
33
|
+
export type ModelMode = 'request' | 'response';
|
|
34
|
+
/** Resolves the native Zod schema for a payload direction and wire policy. */
|
|
32
35
|
export interface SchemaRuntime {
|
|
33
36
|
readonly policy: SchemaPolicy;
|
|
37
|
+
readonly mode: ModelMode;
|
|
38
|
+
/** Reuses schema definitions in another direction without sharing direction-specific schemas. */
|
|
39
|
+
forMode(mode: ModelMode): SchemaRuntime;
|
|
34
40
|
resolveSchema<S extends SchemaLike>(ref: S): ResolvedSchema<S>;
|
|
35
41
|
}
|
|
36
|
-
|
|
42
|
+
/** Creates a response-mode runtime by default for standalone model codecs. */
|
|
43
|
+
export declare function createSchemaRuntime(policy: SchemaPolicy, mode?: ModelMode): SchemaRuntime;
|
package/build/schema-runtime.js
CHANGED
|
@@ -37,10 +37,18 @@ export function defineSchema(builder, options) {
|
|
|
37
37
|
}
|
|
38
38
|
class DefaultSchemaRuntime {
|
|
39
39
|
policy;
|
|
40
|
+
mode;
|
|
41
|
+
modes;
|
|
40
42
|
schemas = new Map();
|
|
41
43
|
resolving = new Set();
|
|
42
|
-
constructor(policy) {
|
|
44
|
+
constructor(policy, mode, modes = new Map()) {
|
|
43
45
|
this.policy = policy;
|
|
46
|
+
this.mode = mode;
|
|
47
|
+
this.modes = modes;
|
|
48
|
+
modes.set(mode, this);
|
|
49
|
+
}
|
|
50
|
+
forMode(mode) {
|
|
51
|
+
return this.modes.get(mode) ?? new DefaultSchemaRuntime(this.policy, mode, this.modes);
|
|
44
52
|
}
|
|
45
53
|
resolveSchema(ref) {
|
|
46
54
|
if (isSchema(ref)) {
|
|
@@ -71,7 +79,8 @@ class DefaultSchemaRuntime {
|
|
|
71
79
|
}
|
|
72
80
|
}
|
|
73
81
|
}
|
|
74
|
-
|
|
75
|
-
|
|
82
|
+
/** Creates a response-mode runtime by default for standalone model codecs. */
|
|
83
|
+
export function createSchemaRuntime(policy, mode = 'response') {
|
|
84
|
+
return new DefaultSchemaRuntime(policy, mode);
|
|
76
85
|
}
|
|
77
86
|
//# sourceMappingURL=schema-runtime.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-runtime.js","sourceRoot":"","sources":["../src/schema-runtime.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;AAOjC,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAM5B,MAAM,CAAC,MAAM,aAAa,GAAkB,MAAM,CAAC,eAAe,CAAC,CAAC;AA+BpE,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,OAAO,CAAC,CAAC,KAAK;WACT,OAAO,KAAK,KAAK,QAAQ;WACzB,CAAC,OAAO,GAAG,CAAC,SAAS,KAAK,UAAU,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,MAAM,GAAG,GAAG,KAAqC,CAAC;IAClD,OAAO,CAAC,CAAC,KAAK;WACT,OAAO,KAAK,KAAK,QAAQ;WACzB,GAAG,CAAC,aAAa,CAAC,KAAK,IAAI;WAC3B,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ;WAC1B,OAAO,GAAG,CAAC,KAAK,KAAK,UAAU,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,OAAsC,EACtC,OAA6C;IAE7C,OAAO;QACL,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC;QAC7C,KAAK,EAAE,OAAO;QACd,SAAS,EAAE,OAAO,EAAE,SAAS;QAC7B,CAAC,aAAa,CAAC,EAAE,IAAI;KACtB,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"schema-runtime.js","sourceRoot":"","sources":["../src/schema-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** Acquisition endpoints selected by generation; deployment overrides never select another profile. */
|
|
2
|
+
export interface SecurityEndpoints {
|
|
3
|
+
readonly discoveryUrl?: string;
|
|
4
|
+
readonly authorizationUrl?: string;
|
|
5
|
+
readonly tokenUrl?: string;
|
|
6
|
+
readonly refreshUrl?: string;
|
|
7
|
+
}
|
|
8
|
+
/** One logical scheme in the complete alternative selected for an operation. */
|
|
9
|
+
export interface SecurityBinding extends SecurityEndpoints {
|
|
10
|
+
readonly scheme: string;
|
|
11
|
+
readonly provider: string;
|
|
12
|
+
readonly profile?: string;
|
|
13
|
+
readonly flow: 'clientCredentials' | 'authorizationCode' | 'external' | 'static';
|
|
14
|
+
readonly scopes: readonly string[];
|
|
15
|
+
readonly audience?: string;
|
|
16
|
+
readonly resource?: string;
|
|
17
|
+
readonly transport: {
|
|
18
|
+
readonly location: 'header' | 'query' | 'cookie';
|
|
19
|
+
readonly name: string;
|
|
20
|
+
readonly prefix?: string;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
@@ -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=security-binding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-binding.js","sourceRoot":"","sources":["../src/security-binding.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,18 @@
|
|
|
1
|
+
import { AuthenticationAdapter } from './authentication-adapter.js';
|
|
2
|
+
import type { ClientSettings } from './client-settings.js';
|
|
3
|
+
import { FetchTransport } from './fetch-transport.js';
|
|
4
|
+
import type { RequestAdapter } from './request-adapter.js';
|
|
5
|
+
import type { ResponseAdapter } from './response-adapter.js';
|
|
6
|
+
import type { TokenProvider } from './token-provider.js';
|
|
7
|
+
/** Opt-in attachment, rejection feedback, and terminal cancellation. Supplied providers are never cached or wrapped. */
|
|
8
|
+
export declare class StandardAuthenticationAdapter implements RequestAdapter, ResponseAdapter {
|
|
9
|
+
private readonly authentication;
|
|
10
|
+
private readonly responses;
|
|
11
|
+
/** Uses caller-owned providers; supply TokenManager explicitly for Sunday-managed caching and refresh. */
|
|
12
|
+
constructor(providers: Readonly<Record<string, TokenProvider>>, options?: ConstructorParameters<typeof AuthenticationAdapter>[1]);
|
|
13
|
+
/** Attaches selected credentials, or reports rejection before cancellation; never replays. */
|
|
14
|
+
adapt(request: Request): Promise<Request>;
|
|
15
|
+
adapt(response: Response, request: Request): Promise<Response>;
|
|
16
|
+
}
|
|
17
|
+
/** Explicit standard factory for generated clients. Additional adapters run after standard authentication. */
|
|
18
|
+
export declare function standardTransportFromSettings(settings: ClientSettings, options?: ConstructorParameters<typeof FetchTransport>[1]): FetchTransport;
|