@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,131 @@
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 { Instant, LocalDate, LocalDateTime, LocalTime, OffsetDateTime, ZonedDateTime } from '@js-joda/core';
15
+ import { z } from 'zod';
16
+ import { defineSchema } from './schema-runtime.js';
17
+ // Generated schemas and their transformations are synchronous. A root invocation owns the
18
+ // untyped-payload cycle check; nested schemas protect only their own recursive entry points.
19
+ let invocationDepth = 0;
20
+ /** Defines a generated synchronous model codec with native Zod cycle diagnostics in both directions. */
21
+ export function defineModelSchema(build, options) {
22
+ return defineSchema((runtime) => {
23
+ const schema = build(runtime);
24
+ const ancestors = new WeakSet();
25
+ function evaluate(value, context, direction) {
26
+ const object = typeof value === 'object' && value !== null ? value : undefined;
27
+ if (object && ancestors.has(object)) {
28
+ context.issues.push(cycleIssue([]));
29
+ return z.NEVER;
30
+ }
31
+ if (object)
32
+ ancestors.add(object);
33
+ const root = invocationDepth++ === 0;
34
+ try {
35
+ const result = direction === 'decode' ? schema.safeParse(value) : schema.safeEncode(value);
36
+ if (!result.success) {
37
+ context.issues.push(...result.error.issues.map(issue => ({ ...issue, input: undefined })));
38
+ return z.NEVER;
39
+ }
40
+ // Native object parsing has already removed non-participating fields. Inspecting its result
41
+ // also covers raw extension payloads without rejecting discarded input or invoking constructors.
42
+ const path = root ? cyclePath(result.data) : undefined;
43
+ if (path) {
44
+ context.issues.push(cycleIssue(path));
45
+ return z.NEVER;
46
+ }
47
+ return result.data;
48
+ }
49
+ finally {
50
+ invocationDepth--;
51
+ if (object)
52
+ ancestors.delete(object);
53
+ }
54
+ }
55
+ return z.codec(z.custom(), z.custom(), {
56
+ decode: (value, context) => evaluate(value, context, 'decode'),
57
+ encode: (value, context) => evaluate(value, context, 'encode'),
58
+ });
59
+ }, options);
60
+ }
61
+ /** Applies common native schema assertions without replacing a reusable union's payload type. */
62
+ export function withModelConstraints(payload, common, discriminator) {
63
+ function evaluate(value, context, direction) {
64
+ let fields = value;
65
+ if (direction === 'encode' && discriminator && typeof value === 'object' && value !== null && discriminator in value) {
66
+ const tag = value[discriminator];
67
+ if (typeof tag === 'object' && tag !== null && 'rawValue' in tag && typeof tag.rawValue === 'string') {
68
+ // Reused payload enums may have another nominal type; common tag rules inspect their wire value.
69
+ fields = { ...value, [discriminator]: tag.rawValue };
70
+ }
71
+ }
72
+ const constraints = direction === 'decode' ? common.safeParse(fields) : common.safeEncode(fields);
73
+ if (!constraints.success) {
74
+ context.issues.push(...constraints.error.issues.map(issue => ({ ...issue, input: undefined })));
75
+ return z.NEVER;
76
+ }
77
+ // Keep the selected payload's native conversion and identity. The common schema is assertion-only.
78
+ const result = direction === 'decode' ? payload.safeParse(value) : payload.safeEncode(value);
79
+ if (!result.success) {
80
+ context.issues.push(...result.error.issues.map(issue => ({ ...issue, input: undefined })));
81
+ return z.NEVER;
82
+ }
83
+ return result.data;
84
+ }
85
+ // A refinement attached directly to a union loses its issues during Zod's reverse union pass.
86
+ return z.codec(z.custom(), z.custom(), {
87
+ decode: (value, context) => evaluate(value, context, 'decode'),
88
+ encode: (value, context) => evaluate(value, context, 'encode'),
89
+ });
90
+ }
91
+ function cycleIssue(path) {
92
+ return { code: 'custom', input: undefined, message: 'Object cycles cannot be serialized', path, params: { reason: 'cycle' } };
93
+ }
94
+ function cyclePath(value) {
95
+ const ancestors = new WeakSet();
96
+ const pending = [{ value, path: [] }];
97
+ while (pending.length) {
98
+ const entry = pending.pop();
99
+ if (typeof entry.value !== 'object' || entry.value === null)
100
+ continue;
101
+ // Temporal codecs serialize these native values as scalars, not their cyclic zone-rule internals.
102
+ if (entry.value instanceof Instant || entry.value instanceof LocalDate ||
103
+ entry.value instanceof LocalDateTime || entry.value instanceof LocalTime ||
104
+ entry.value instanceof OffsetDateTime || entry.value instanceof ZonedDateTime)
105
+ continue;
106
+ if (entry.leave) {
107
+ ancestors.delete(entry.value);
108
+ continue;
109
+ }
110
+ if (ancestors.has(entry.value))
111
+ return entry.path;
112
+ ancestors.add(entry.value);
113
+ pending.push({ ...entry, leave: true });
114
+ const children = modelChildren(entry.value);
115
+ for (let index = children.length - 1; index >= 0; index--) {
116
+ const [key, item] = children[index];
117
+ pending.push({ value: item, path: [...entry.path, key] });
118
+ }
119
+ }
120
+ return undefined;
121
+ }
122
+ function modelChildren(value) {
123
+ if (Array.isArray(value))
124
+ return value.map((item, index) => [index, item]);
125
+ if (value instanceof Map)
126
+ return [...value].flatMap(([key, item], index) => [[`key:${index}`, key], [String(key), item]]);
127
+ if (value instanceof Set)
128
+ return [...value].map((item, index) => [index, item]);
129
+ return Object.entries(value);
130
+ }
131
+ //# sourceMappingURL=model-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-schema.js","sourceRoot":"","sources":["../src/model-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { TokenSet } from './token-provider.js';
2
+ /** Internal wire decoding; client/session policy remains in the provider. */
3
+ export declare class DiscoveryMetadata {
4
+ readonly issuer: string;
5
+ readonly tokenUrl: string | undefined;
6
+ readonly authorizationUrl: string | undefined;
7
+ readonly methods: readonly string[] | undefined;
8
+ private constructor();
9
+ static parse(body: string): DiscoveryMetadata;
10
+ }
11
+ /** Internal token message, validated before conversion to application credentials. */
12
+ export declare class TokenSuccessResponse {
13
+ private readonly accessToken;
14
+ private readonly tokenType;
15
+ private readonly expiresIn;
16
+ private readonly refreshToken;
17
+ private readonly scope;
18
+ private constructor();
19
+ static parse(body: string): Promise<TokenSuccessResponse>;
20
+ tokens(scopes: readonly string[], now: number): TokenSet;
21
+ toString(): string;
22
+ toJSON(): string;
23
+ }
24
+ /** Internal error message; provider diagnostics never use descriptions from the server. */
25
+ export declare class TokenErrorResponse {
26
+ readonly code: string;
27
+ private constructor();
28
+ static parse(body: string): TokenErrorResponse;
29
+ toString(): string;
30
+ toJSON(): string;
31
+ }
32
+ /** Validates a selected or advertised endpoint before application authorization. */
33
+ export declare function endpoint(value: string | undefined): string;
@@ -0,0 +1,143 @@
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 { parse, isLosslessNumber, isSafeNumber } from 'lossless-json';
16
+ import { TokenProviderError } from './token-provider.js';
17
+ /** Internal wire decoding; client/session policy remains in the provider. */
18
+ export class DiscoveryMetadata {
19
+ issuer;
20
+ tokenUrl;
21
+ authorizationUrl;
22
+ methods;
23
+ constructor(issuer, tokenUrl, authorizationUrl, methods) {
24
+ this.issuer = issuer;
25
+ this.tokenUrl = tokenUrl;
26
+ this.authorizationUrl = authorizationUrl;
27
+ this.methods = methods;
28
+ }
29
+ static parse(body) {
30
+ const data = document(body);
31
+ const issuer = string(data, 'issuer', true);
32
+ const tokenUrl = string(data, 'token_endpoint');
33
+ const authorizationUrl = string(data, 'authorization_endpoint');
34
+ if (tokenUrl !== undefined)
35
+ endpoint(tokenUrl);
36
+ if (authorizationUrl !== undefined)
37
+ endpoint(authorizationUrl);
38
+ for (const name of ['jwks_uri', 'registration_endpoint', 'revocation_endpoint', 'introspection_endpoint']) {
39
+ const value = string(data, name);
40
+ if (value !== undefined)
41
+ endpoint(value);
42
+ }
43
+ let methods;
44
+ if ('token_endpoint_auth_methods_supported' in data) {
45
+ const raw = data.token_endpoint_auth_methods_supported;
46
+ if (!Array.isArray(raw) || raw.some(value => typeof value !== 'string'))
47
+ throw new TokenProviderError();
48
+ methods = raw;
49
+ }
50
+ return new DiscoveryMetadata(issuer, tokenUrl, authorizationUrl, methods);
51
+ }
52
+ }
53
+ /** Internal token message, validated before conversion to application credentials. */
54
+ export class TokenSuccessResponse {
55
+ accessToken;
56
+ tokenType;
57
+ expiresIn;
58
+ refreshToken;
59
+ scope;
60
+ constructor(accessToken, tokenType, expiresIn, refreshToken, scope) {
61
+ this.accessToken = accessToken;
62
+ this.tokenType = tokenType;
63
+ this.expiresIn = expiresIn;
64
+ this.refreshToken = refreshToken;
65
+ this.scope = scope;
66
+ }
67
+ static async parse(body) {
68
+ const data = document(body);
69
+ let expiresIn;
70
+ if ('expires_in' in data) {
71
+ const raw = data.expires_in;
72
+ if (!isLosslessNumber(raw) || !isSafeNumber(raw.value) || !Number.isInteger(Number(raw.value)))
73
+ throw new TokenProviderError();
74
+ expiresIn = Number(raw.value);
75
+ data.expires_in = expiresIn;
76
+ }
77
+ const scope = string(data, 'scope');
78
+ if (scope !== undefined && !/^[\x21\x23-\x5b\x5d-\x7e]+(?: [\x21\x23-\x5b\x5d-\x7e]+)*(?![\s\S])/.test(scope))
79
+ throw new TokenProviderError();
80
+ // ID tokens are outside this OAuth-only API. Pass only the fields it consumes;
81
+ // oauth4webapi would otherwise also perform OIDC claim validation.
82
+ const protocolFields = Object.fromEntries(['access_token', 'token_type', 'expires_in', 'refresh_token', 'scope']
83
+ .filter(key => key in data).map(key => [key, data[key]]));
84
+ const parsed = await oauth.processGenericTokenEndpointResponse({ issuer: 'https://oauth.invalid' }, { client_id: 'sunday' }, Response.json(protocolFields));
85
+ return new TokenSuccessResponse(parsed.access_token, parsed.token_type, expiresIn, parsed.refresh_token, scope);
86
+ }
87
+ tokens(scopes, now) {
88
+ if (this.tokenType.toLowerCase() !== 'bearer' || (this.scope !== undefined && !scopes.every(scope => this.scope.split(' ').includes(scope))))
89
+ throw new TokenProviderError();
90
+ let expiresAt;
91
+ if (this.expiresIn !== undefined) {
92
+ expiresAt = Math.floor(now) + this.expiresIn * 1000;
93
+ if (this.expiresIn <= 0 || !Number.isSafeInteger(expiresAt))
94
+ throw new TokenProviderError();
95
+ }
96
+ return { accessToken: this.accessToken, expiresAt, refreshToken: this.refreshToken };
97
+ }
98
+ toString() { return 'OAuthSuccess()'; }
99
+ toJSON() { return this.toString(); }
100
+ }
101
+ /** Internal error message; provider diagnostics never use descriptions from the server. */
102
+ export class TokenErrorResponse {
103
+ code;
104
+ constructor(code) {
105
+ this.code = code;
106
+ }
107
+ static parse(body) {
108
+ const data = document(body);
109
+ string(data, 'error_description', false, true);
110
+ string(data, 'error_uri');
111
+ return new TokenErrorResponse(string(data, 'error', true));
112
+ }
113
+ toString() { return 'OAuthError()'; }
114
+ toJSON() { return this.toString(); }
115
+ }
116
+ /** Validates a selected or advertised endpoint before application authorization. */
117
+ export function endpoint(value) {
118
+ if (!value)
119
+ throw new TokenProviderError();
120
+ const url = new URL(value);
121
+ if (url.username || url.password || url.hash)
122
+ throw new TokenProviderError();
123
+ if (url.protocol !== 'https:' && !(url.protocol === 'http:' && ['localhost', '127.0.0.1', '[::1]'].includes(url.hostname)))
124
+ throw new TokenProviderError();
125
+ return url.toString();
126
+ }
127
+ function document(body) {
128
+ const data = parse(body);
129
+ if (!data || typeof data !== 'object' || Array.isArray(data))
130
+ throw new TokenProviderError();
131
+ return data;
132
+ }
133
+ function string(data, key, required = false, allowEmpty = false) {
134
+ if (!(key in data)) {
135
+ if (required)
136
+ throw new TokenProviderError();
137
+ return undefined;
138
+ }
139
+ if (typeof data[key] !== 'string' || (!allowEmpty && !data[key]))
140
+ throw new TokenProviderError();
141
+ return data[key];
142
+ }
143
+ //# sourceMappingURL=oauth-wire.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-wire.js","sourceRoot":"","sources":["../src/oauth-wire.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,9 @@ import { SchemaLike } from './schema-runtime.js';
4
4
  import { StreamingBody } from './streaming-body.js';
5
5
  import { type ProblemMatcher } from './util/nullify.js';
6
6
  /** Extracts the native request type from a transport. */
7
- export type TransportRequest<Factory> = Factory extends Transport<infer NativeRequest> ? NativeRequest : never;
7
+ export type TransportRequest<Factory> = Factory extends {
8
+ transportRequest(requestSpec: RequestSpec<unknown>): Promise<infer NativeRequest>;
9
+ } ? NativeRequest : never;
8
10
  /** Options used when converting an operation into a native request. */
9
11
  export interface BuildRequestOptions {
10
12
  readonly signal?: AbortSignal;
@@ -1,35 +1,58 @@
1
1
  import { z } from 'zod';
2
2
  import { SchemaLike } from './schema-runtime.js';
3
3
  export interface Problem {
4
- type: URL;
5
- title: string;
6
- status: number;
4
+ type: URL | string;
5
+ title?: string;
6
+ status?: number;
7
7
  detail?: string;
8
- instance?: URL;
8
+ instance?: URL | string;
9
9
  [key: string]: unknown;
10
10
  }
11
+ /** RFC 9457 strings accept only string tokens; null and other categories are absent. */
12
+ export declare const ProblemStringSchema: z.ZodCodec<z.ZodOptional<z.ZodUnknown>, z.ZodOptional<z.ZodString>>;
13
+ /** Exact integral status values, without scalar coercion or numeric truncation. */
14
+ export declare const ProblemStatusSchema: z.ZodCodec<z.ZodOptional<z.ZodUnknown>, z.ZodOptional<z.ZodNumber>>;
15
+ /** Compose string constraints/defaults with Problem URI conversion at a single property. */
16
+ export declare function createProblemReferenceCodec(schema?: z.ZodType<string | undefined, string | undefined>, defaultType?: boolean): z.ZodPrefault<z.ZodPipe<z.ZodCodec<z.ZodOptional<z.ZodUnknown>, z.ZodType<string | undefined, string | undefined, z.core.$ZodTypeInternals<string | undefined, string | undefined>>>, z.ZodCodec<z.ZodOptional<z.ZodString>, z.ZodOptional<z.ZodUnion<readonly [z.ZodCustom<URL, URL>, z.ZodString]>>>>>;
17
+ /** URI references use URLs only when conversion preserves the original string exactly. */
18
+ export declare const ProblemReferenceSchema: z.ZodPrefault<z.ZodPipe<z.ZodCodec<z.ZodOptional<z.ZodUnknown>, z.ZodType<string | undefined, string | undefined, z.core.$ZodTypeInternals<string | undefined, string | undefined>>>, z.ZodCodec<z.ZodOptional<z.ZodString>, z.ZodOptional<z.ZodUnion<readonly [z.ZodCustom<URL, URL>, z.ZodString]>>>>>;
19
+ /** Normalize absence before applying the RFC default, including subtype dispatch. */
20
+ export declare const ProblemTypeSchema: z.ZodPipe<z.ZodPrefault<z.ZodPipe<z.ZodCodec<z.ZodOptional<z.ZodUnknown>, z.ZodType<string | undefined, string | undefined, z.core.$ZodTypeInternals<string | undefined, string | undefined>>>, z.ZodCodec<z.ZodOptional<z.ZodString>, z.ZodOptional<z.ZodUnion<readonly [z.ZodCustom<URL, URL>, z.ZodString]>>>>>, z.ZodUnion<readonly [z.ZodCustom<URL, URL>, z.ZodString]>>;
21
+ /** Category/default interpretation for subtype selection, before branch-specific validation. */
22
+ export declare const ProblemDispatchSchema: z.ZodObject<{
23
+ type: z.ZodPrefault<z.ZodPipe<z.ZodCodec<z.ZodOptional<z.ZodUnknown>, z.ZodOptional<z.ZodString>>, z.ZodPrefault<z.ZodString>>>;
24
+ }, z.core.$loose>;
25
+ /** Normalize the type property before a generated union chooses its branch. */
26
+ export declare function createProblemUnionCodec<T extends z.ZodType>(schema: T): z.ZodCodec<z.ZodRecord<z.ZodString, z.ZodUnknown>, T>;
11
27
  export declare const ProblemWireSchema: z.ZodObject<{
12
- type: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodCustom<URL, URL>]>>;
13
- title: z.ZodString;
14
- status: z.ZodNumber;
15
- detail: z.ZodOptional<z.ZodString>;
16
- instance: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodCustom<URL, URL>]>>;
28
+ type: z.ZodPipe<z.ZodPrefault<z.ZodPipe<z.ZodCodec<z.ZodOptional<z.ZodUnknown>, z.ZodType<string | undefined, string | undefined, z.core.$ZodTypeInternals<string | undefined, string | undefined>>>, z.ZodCodec<z.ZodOptional<z.ZodString>, z.ZodOptional<z.ZodUnion<readonly [z.ZodCustom<URL, URL>, z.ZodString]>>>>>, z.ZodUnion<readonly [z.ZodCustom<URL, URL>, z.ZodString]>>;
29
+ title: z.ZodCodec<z.ZodOptional<z.ZodUnknown>, z.ZodOptional<z.ZodString>>;
30
+ status: z.ZodCodec<z.ZodOptional<z.ZodUnknown>, z.ZodOptional<z.ZodNumber>>;
31
+ detail: z.ZodCodec<z.ZodOptional<z.ZodUnknown>, z.ZodOptional<z.ZodString>>;
32
+ instance: z.ZodPrefault<z.ZodPipe<z.ZodCodec<z.ZodOptional<z.ZodUnknown>, z.ZodType<string | undefined, string | undefined, z.core.$ZodTypeInternals<string | undefined, string | undefined>>>, z.ZodCodec<z.ZodOptional<z.ZodString>, z.ZodOptional<z.ZodUnion<readonly [z.ZodCustom<URL, URL>, z.ZodString]>>>>>;
17
33
  }, z.core.$loose>;
18
- export type ProblemSpec = z.infer<typeof ProblemWireSchema>;
34
+ /** Constructor input accepts URI strings as well as decoded URL values. */
35
+ export interface ProblemSpec {
36
+ type?: string | URL;
37
+ title?: string;
38
+ status?: number;
39
+ detail?: string;
40
+ instance?: string | URL;
41
+ [key: string]: unknown;
42
+ }
19
43
  export declare class Problem extends Error implements Problem {
20
44
  static readonly BLANK_URL: URL;
21
- type: URL;
22
- title: string;
23
- status: number;
45
+ type: URL | string;
46
+ title?: string;
47
+ status?: number;
24
48
  detail?: string;
25
- instance?: URL;
49
+ instance?: URL | string;
26
50
  private readonly _parameters?;
27
51
  get parameters(): Record<string, unknown> | undefined;
28
52
  constructor(spec: ProblemSpec);
29
53
  toString(): string;
30
54
  static fromStatus(status: number, title: string): Problem;
31
55
  static fromResponse(response: Response): Promise<Problem>;
32
- private static parseURL;
33
56
  }
34
- export declare function createProblemCodec<TProblem extends Problem, TWire extends z.infer<typeof ProblemWireSchema>>(problemType: new (spec: TWire) => TProblem, wireSchema: z.ZodType<TWire>): z.ZodType<TProblem>;
57
+ export declare function createProblemCodec<TProblem extends Problem, TWire extends ProblemSpec>(problemType: new (spec: TWire) => TProblem, wireSchema: z.ZodType<TWire>): z.ZodType<TProblem>;
35
58
  export declare const ProblemSchema: SchemaLike<Problem>;
package/build/problem.js CHANGED
@@ -11,15 +11,83 @@
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 { constructValidatedModel } from './model-construction.js';
14
15
  import { z } from 'zod';
15
16
  import { ResponseExample } from './fetch.js';
16
- import { defineSchema, } from './schema-runtime.js';
17
+ import { defineSchema } from './schema-runtime.js';
18
+ /** RFC 9457 strings accept only string tokens; null and other categories are absent. */
19
+ export const ProblemStringSchema = z.codec(z.unknown().optional(), z.string().optional(), {
20
+ decode: (value) => (typeof value === 'string' ? value : undefined),
21
+ encode: (value) => value,
22
+ });
23
+ /** Exact integral status values, without scalar coercion or numeric truncation. */
24
+ export const ProblemStatusSchema = z.codec(z.unknown().optional(), z.number().int().optional(), {
25
+ decode: (value) => (typeof value === 'number' ? value : undefined),
26
+ encode: (value) => value,
27
+ });
28
+ const ProblemURI = z.union([
29
+ z.instanceof(URL),
30
+ z
31
+ .string()
32
+ .refine((value) => (!/^[a-z][a-z0-9+.-]*:/i.test(value) || URL.canParse(value)) &&
33
+ ![...value].some((character) => /\s/.test(character) || character.codePointAt(0) < 32) &&
34
+ !/%(?![0-9a-f]{2})/i.test(value), 'Invalid Problem URI reference'),
35
+ ]);
36
+ /** Compose string constraints/defaults with Problem URI conversion at a single property. */
37
+ export function createProblemReferenceCodec(schema = z
38
+ .string()
39
+ .optional(), defaultType = false) {
40
+ const defaults = z
41
+ .string()
42
+ .optional()
43
+ .prefault(defaultType ? 'about:blank' : undefined);
44
+ const constrained = z.codec(z.unknown().optional(), schema, {
45
+ decode: (value) => defaults.parse(ProblemStringSchema.decode(value)),
46
+ encode: (value) => value,
47
+ });
48
+ const reference = constrained.pipe(z.codec(z.string().optional(), ProblemURI.optional(), {
49
+ decode: (value, ctx) => {
50
+ if (value === undefined || !/^[a-z][a-z0-9+.-]*:/i.test(value))
51
+ return value;
52
+ try {
53
+ const url = new URL(value);
54
+ // URL canonicalization must not change a literal, pattern, or enum constraint on the wire value.
55
+ return url.toString() === value ? url : value;
56
+ }
57
+ catch {
58
+ ctx.issues.push({
59
+ code: 'custom',
60
+ input: value,
61
+ message: 'Invalid Problem URI',
62
+ });
63
+ return z.NEVER;
64
+ }
65
+ },
66
+ encode: (value) => value?.toString(),
67
+ }));
68
+ return reference.prefault(defaultType ? 'about:blank' : undefined);
69
+ }
70
+ /** URI references use URLs only when conversion preserves the original string exactly. */
71
+ export const ProblemReferenceSchema = createProblemReferenceCodec();
72
+ /** Normalize absence before applying the RFC default, including subtype dispatch. */
73
+ export const ProblemTypeSchema = createProblemReferenceCodec(z.string(), true).pipe(ProblemURI);
74
+ /** Category/default interpretation for subtype selection, before branch-specific validation. */
75
+ export const ProblemDispatchSchema = z.looseObject({
76
+ type: ProblemStringSchema.pipe(z.string().prefault('about:blank')).prefault('about:blank'),
77
+ });
78
+ /** Normalize the type property before a generated union chooses its branch. */
79
+ export function createProblemUnionCodec(schema) {
80
+ return z.codec(z.record(z.string(), z.unknown()), schema, {
81
+ decode: (value) => ProblemDispatchSchema.decode(value),
82
+ encode: (value) => value,
83
+ });
84
+ }
17
85
  export const ProblemWireSchema = z.looseObject({
18
- type: z.union([z.string(), z.instanceof(URL)]).optional(),
19
- title: z.string(),
20
- status: z.number(),
21
- detail: z.string().optional(),
22
- instance: z.union([z.string(), z.instanceof(URL)]).optional(),
86
+ type: ProblemTypeSchema,
87
+ title: ProblemStringSchema,
88
+ status: ProblemStatusSchema,
89
+ detail: ProblemStringSchema,
90
+ instance: ProblemReferenceSchema,
23
91
  });
24
92
  export class Problem extends Error {
25
93
  static BLANK_URL = new URL('about:blank');
@@ -33,14 +101,16 @@ export class Problem extends Error {
33
101
  return this._parameters;
34
102
  }
35
103
  constructor(spec) {
36
- super(`${spec.status.toString()} ${spec.type} - ${spec.title}`);
104
+ super(`${spec.status ?? ''} ${spec.type} - ${spec.title}`);
37
105
  const { type, title, status, detail, instance, ...parameters } = spec;
38
- delete parameters.stack; // Fix for browsers that add stack to Error objects
39
- this.type = Problem.parseURL(type) ?? Problem.BLANK_URL;
106
+ this.type = type instanceof URL ? type : ProblemTypeSchema.decode(type);
40
107
  this.status = status;
41
108
  this.title = title;
42
109
  this.detail = detail;
43
- this.instance = Problem.parseURL(instance);
110
+ this.instance =
111
+ instance instanceof URL
112
+ ? instance
113
+ : ProblemReferenceSchema.decode(instance);
44
114
  this._parameters = Object.keys(parameters).length ? parameters : undefined;
45
115
  }
46
116
  toString() {
@@ -84,34 +154,20 @@ export class Problem extends Error {
84
154
  },
85
155
  });
86
156
  }
87
- static parseURL(value) {
88
- if (value == null) {
89
- return undefined;
90
- }
91
- if (value instanceof URL) {
92
- return value;
93
- }
94
- if (typeof value === 'string') {
95
- try {
96
- return new URL(value);
97
- }
98
- catch {
99
- return undefined;
100
- }
101
- }
102
- return undefined;
103
- }
104
157
  }
105
158
  export function createProblemCodec(problemType, wireSchema) {
106
- return z.codec(wireSchema, z.instanceof(problemType), {
107
- decode: (value) => new problemType(value),
159
+ return z.codec(z.codec(z.record(z.string(), z.unknown()), wireSchema, {
160
+ decode: (value) => value,
161
+ encode: (value) => Object.fromEntries(Object.entries(value).filter(([, member]) => member !== undefined)),
162
+ }), z.instanceof(problemType), {
163
+ decode: (value) => constructValidatedModel(problemType, value),
108
164
  encode: (value) => ({
109
- type: value.type?.toString() ?? Problem.BLANK_URL.toString(),
165
+ ...value.parameters,
166
+ type: value.type,
110
167
  title: value.title,
111
168
  status: value.status,
112
169
  detail: value.detail,
113
- instance: value.instance?.toString(),
114
- ...value.parameters,
170
+ instance: value.instance,
115
171
  }),
116
172
  });
117
173
  }
@@ -1 +1 @@
1
- {"version":3,"file":"problem.js","sourceRoot":"","sources":["../src/problem.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"problem.js","sourceRoot":"","sources":["../src/problem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Adapts once per Sunday-managed Fetch call or request export. Native redirects/recovery can
3
+ * retransmit without another invocation. Consumed resources must be replaced before returning.
4
+ */
5
+ export interface RequestAdapter {
6
+ /** Returns the adapted value; throwing stops the remaining adapters. */
7
+ adapt(request: Request): Request | Promise<Request>;
8
+ }
@@ -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=request-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-adapter.js","sourceRoot":"","sources":["../src/request-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"}